Pokered Save Editor 2
Pokemon Red & Blue save file editor - Qt 6 C++/QML
Toggle main menu visibility
Loading...
Searching...
No Matches
worldmissables.cpp
Go to the documentation of this file.
1
/*
2
* Copyright 2020 Twilight
3
*
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
7
*
8
* http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*/
16
22
23
#include <string.h>
24
#include <QVector>
25
26
#include "
./worldmissables.h
"
27
#include "
../../savefile.h
"
28
#include "
../../savefiletoolset.h
"
29
#include "
../../savefileiterator.h
"
30
#include <
pse-db/missablesdb.h
>
31
#include <
pse-db/entries/missabledbentry.h
>
32
33
WorldMissables::WorldMissables
(
SaveFile
* saveFile)
34
{
35
load
(saveFile);
36
}
37
38
WorldMissables::~WorldMissables
() {}
39
40
void
WorldMissables::load
(
SaveFile
* saveFile)
41
{
42
reset
();
43
44
if
(saveFile ==
nullptr
)
45
return
;
46
47
auto
toolset = saveFile->
toolset
;
48
49
// Load missables
50
auto
bits = toolset->
getBitField
(0x2852,
missableByteCount
);
51
52
for
(
var8
i = 0; i < bits.size() && i <
missableCount
; i++)
53
missables
[i] = bits.at(i);
54
55
missablesChanged
();
56
}
57
58
void
WorldMissables::save
(
SaveFile
* saveFile)
59
{
60
auto
toolset = saveFile->
toolset
;
61
62
QVector<bool> bits;
63
64
// Save Missables
65
for
(
var8
i = 0; i <
missableCount
; i++)
66
bits.append(
missables
[i]);
67
68
toolset->
setBitField
(0x2852,
missableByteCount
, bits);
69
}
70
71
int
WorldMissables::missablesCount
()
72
{
73
return
missableCount
;
74
}
75
76
bool
WorldMissables::missablesAt
(
int
ind)
77
{
78
return
missables
[ind];
79
}
80
81
void
WorldMissables::missablesSet
(
int
ind,
bool
val)
82
{
83
missables
[ind] = val;
84
missablesChanged
();
85
}
86
87
void
WorldMissables::reset
()
88
{
89
// Missables can't be zeroed out whimsically, reset back to game start
90
// defaults. Missables can crash the game if mis-handled
91
// 1 = Hide, 0 = Show, ensure it's marked one if it's hidden
92
for
(
auto
missable :
MissablesDB::inst
()->getStore())
93
missables
[missable->getInd()] = !missable->getDefShow();
94
95
missablesChanged
();
96
}
97
98
// Missables is not something you can blantly randomize, the game will likely
99
// crash. Also we want the player to progress through the game normaly.
100
void
WorldMissables::randomize
() {
101
reset
();
102
}
MissablesDB::inst
static MissablesDB * inst()
< Number of missable definitions.
Definition
missablesdb.cpp:30
SaveFileToolset::setBitField
void setBitField(var16 addr, var16 size, QVector< bool > src)
Sets an entire bitfield from a vector of bools.
Definition
savefiletoolset.cpp:265
SaveFileToolset::getBitField
QVector< bool > getBitField(var16 addr, var16 size)
Gets an entire bitfield as a vector of bools.
Definition
savefiletoolset.cpp:242
SaveFile
One loaded save: the raw 32 KB bytes, their expanded object tree, and the tools that move between the...
Definition
savefile.h:46
SaveFile::toolset
SaveFileToolset * toolset
Tools to operate directly on the raw sav file data.
Definition
savefile.h:117
WorldMissables::reset
void reset()
Clear all missable flags.
Definition
worldmissables.cpp:87
WorldMissables::missablesSet
void missablesSet(int ind, bool val)
Set/clear missable ind.
Definition
worldmissables.cpp:81
WorldMissables::WorldMissables
WorldMissables(SaveFile *saveFile=nullptr)
Definition
worldmissables.cpp:33
WorldMissables::missablesChanged
protected::void missablesChanged()
WorldMissables::missablesCount
int missablesCount()
Number of missable flags.
Definition
worldmissables.cpp:71
WorldMissables::missablesAt
bool missablesAt(int ind)
Is missable ind set (shown/hidden)?
Definition
worldmissables.cpp:76
WorldMissables::missables
bool missables[missableCount]
Per-missable visibility flags.
Definition
worldmissables.h:62
WorldMissables::save
void save(SaveFile *saveFile)
Flatten the missable flags to the save.
Definition
worldmissables.cpp:58
WorldMissables::load
void load(SaveFile *saveFile=nullptr)
Expand the missable flags from the save.
Definition
worldmissables.cpp:40
WorldMissables::~WorldMissables
virtual ~WorldMissables()
Definition
worldmissables.cpp:38
WorldMissables::randomize
void randomize()
Randomize the missable flags.
Definition
worldmissables.cpp:100
var8
var8e var8
Everyday 8-bit alias. Exact (not "fastest") to dodge the pointer-width bug noted above.
Definition
types.h:124
missabledbentry.h
missablesdb.h
savefile.h
savefileiterator.h
savefiletoolset.h
worldmissables.h
missableCount
constexpr var8 missableCount
Missable-sprite flags actually used.
Definition
worldmissables.h:26
missableByteCount
constexpr var8 missableByteCount
4 bits unused of 232
Definition
worldmissables.h:27
projects
savefile
src
pse-savefile
expanded
world
worldmissables.cpp
Generated by
1.17.0