Pokered Save Editor 2
Pokemon Red & Blue save file editor - Qt 6 C++/QML
Toggle main menu visibility
Loading...
Searching...
No Matches
areasign.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
#include "
areasign.h
"
23
#include "
../../qmlownership.h
"
24
#include "
../fragments/signdata.h
"
25
#include "
../../savefile.h
"
26
#include "
../../savefiletoolset.h
"
27
#include "
../../savefileiterator.h
"
28
#include <
pse-db/mapsdb.h
>
29
#include <
pse-common/random.h
>
30
#include <
pse-db/entries/mapdbentry.h
>
31
32
AreaSign::AreaSign
(
SaveFile
* saveFile)
33
{
34
load
(saveFile);
35
}
36
37
AreaSign::~AreaSign
()
38
{
39
for
(
auto
sign :
signs
)
40
sign->deleteLater();
41
}
42
43
int
AreaSign::signCount
()
44
{
45
return
signs
.size();
46
}
47
48
int
AreaSign::signMax
()
49
{
50
return
maxSigns
;
51
}
52
53
SignData
*
AreaSign::signAt
(
int
ind)
54
{
55
return
qmlCppOwned
(
signs
.at(ind));
56
}
57
58
void
AreaSign::signSwap
(
int
from,
int
to)
59
{
60
auto
eFrom =
signs
.at(from);
61
auto
eTo =
signs
.at(to);
62
63
signs
.replace(from, eTo);
64
signs
.replace(to, eFrom);
65
66
signsChanged
();
67
}
68
69
void
AreaSign::signRemove
(
int
ind)
70
{
71
if
(
signs
.size() <= 0)
72
return
;
73
74
signs
.at(ind)->deleteLater();
75
signs
.removeAt(ind);
76
signsChanged
();
77
}
78
79
void
AreaSign::signNew
()
80
{
81
if
(
signs
.size() >=
maxSigns
)
82
return
;
83
84
signs
.append(
new
SignData
);
85
signsChanged
();
86
}
87
88
void
AreaSign::load
(
SaveFile
* saveFile)
89
{
90
reset
();
91
92
if
(saveFile ==
nullptr
)
93
return
;
94
95
auto
toolset = saveFile->
toolset
;
96
97
for
(
var8
i = 0; i < toolset->getByte(0x275C) && i < 16; i++) {
98
signs
.append(
new
SignData
(saveFile, i));
99
}
100
101
signsChanged
();
102
}
103
104
void
AreaSign::save
(
SaveFile
* saveFile)
105
{
106
auto
toolset = saveFile->
toolset
;
107
108
toolset->
setByte
(0x275C,
signs
.size());
109
for
(
var8
i = 0; i <
signs
.size() && i < 16; i++) {
110
signs
.at(i)->save(saveFile, i);
111
}
112
}
113
114
void
AreaSign::reset
()
115
{
116
for
(
auto
sign :
signs
)
117
sign->deleteLater();
118
119
signs
.clear();
120
121
signsChanged
();
122
}
123
124
void
AreaSign::randomize
(
MapDBEntry
* mapData)
125
{
126
// Clear all signs
127
reset
();
128
129
// Grab Map Signs
130
auto
signData = mapData->
getSigns
();
131
132
// Randomize them all if present
133
signs
=
SignData::randomizeAll
(signData);
134
signsChanged
();
135
}
136
137
void
AreaSign::setTo
(
MapDBEntry
* mapData)
138
{
139
// Clear all signs
140
reset
();
141
142
// Stop here if map is null
143
if
(mapData ==
nullptr
)
144
return
;
145
146
// Grab Map Signs
147
auto
signData = mapData->
getSigns
();
148
149
// Set them all if present
150
signs
=
SignData::setToAll
(signData);
151
signsChanged
();
152
}
areasign.h
maxSigns
constexpr var8 maxSigns
Maximum signs on a map.
Definition
areasign.h:26
AreaSign::signSwap
void signSwap(int from, int to)
Reorder signs.
Definition
areasign.cpp:58
AreaSign::save
void save(SaveFile *saveFile)
Flatten the sign list to the save.
Definition
areasign.cpp:104
AreaSign::AreaSign
AreaSign(SaveFile *saveFile=nullptr)
Definition
areasign.cpp:32
AreaSign::signNew
void signNew()
Add a fresh sign.
Definition
areasign.cpp:79
AreaSign::signRemove
void signRemove(int ind)
Remove sign ind.
Definition
areasign.cpp:69
AreaSign::load
void load(SaveFile *saveFile=nullptr)
Expand the sign list from the save.
Definition
areasign.cpp:88
AreaSign::randomize
void randomize(MapDBEntry *mapData)
Randomize signs for mapData.
Definition
areasign.cpp:124
AreaSign::signMax
int signMax()
Capacity (maxSigns).
Definition
areasign.cpp:48
AreaSign::signs
QVector< SignData * > signs
The map's signs.
Definition
areasign.h:64
AreaSign::signAt
SignData * signAt(int ind)
Sign ind (GC-protected return).
Definition
areasign.cpp:53
AreaSign::setTo
void setTo(MapDBEntry *mapData)
Rebuild the list from mapData's signs.
Definition
areasign.cpp:137
AreaSign::signCount
int signCount()
Number of signs.
Definition
areasign.cpp:43
AreaSign::signsChanged
protected::void signsChanged()
AreaSign::~AreaSign
virtual ~AreaSign()
Definition
areasign.cpp:37
AreaSign::reset
void reset()
Empty the sign list.
Definition
areasign.cpp:114
SaveFileToolset::setByte
void setByte(var16 addr, var8 val)
Simply sets a byte.
Definition
savefiletoolset.cpp:237
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
SignData
One sign on the current map: its tile position and text id.
Definition
signdata.h:37
SignData::randomizeAll
static QVector< SignData * > randomizeAll(QVector< MapDBEntrySign * > mapSigns)
Randomize a whole map's signs.
Definition
signdata.cpp:87
SignData::setToAll
static QVector< SignData * > setToAll(QVector< MapDBEntrySign * > mapSigns)
Build signs from a map's sign list.
Definition
signdata.cpp:135
var8
var8e var8
Everyday 8-bit alias. Exact (not "fastest") to dodge the pointer-width bug noted above.
Definition
types.h:124
mapdbentry.h
mapsdb.h
qmlownership.h
qmlCppOwned() – protect Q_INVOKABLE QObject returns from QML's GC.
qmlCppOwned
static T * qmlCppOwned(T *obj)
Hand QML CppOwnership of a C++-owned QObject returned from a Q_INVOKABLE.
Definition
qmlownership.h:43
random.h
savefile.h
savefileiterator.h
savefiletoolset.h
signdata.h
MapDBEntry
One map's complete static definition – the root of the MapDBEntry family.
Definition
mapdbentry.h:56
MapDBEntry::getSigns
const QVector< MapDBEntrySign * > getSigns() const
Signs on the map.
Definition
mapdbentry.cpp:518
projects
savefile
src
pse-savefile
expanded
area
areasign.cpp
Generated by
1.17.0