Pokered Save Editor 2
Pokemon Red & Blue save file editor - Qt 6 C++/QML
Toggle main menu visibility
Loading...
Searching...
No Matches
areasprites.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 "
./areasprites.h
"
23
#include "
../../qmlownership.h
"
24
#include "
../fragments/spritedata.h
"
25
#include "
../../savefile.h
"
26
#include "
../../savefiletoolset.h
"
27
#include "
../../savefileiterator.h
"
28
#include <
pse-db/mapsdb.h
>
29
#include <
pse-db/sprites.h
>
30
#include <
pse-db/entries/mapdbentry.h
>
31
32
#include <QRandomGenerator>
33
34
AreaSprites::AreaSprites
(
SaveFile
* saveFile)
35
{
36
// By default add player sprite
37
sprites
.append(
new
SpriteData
(
false
));
38
load
(saveFile);
39
}
40
41
AreaSprites::~AreaSprites
()
42
{
43
for
(
auto
entry :
sprites
)
44
entry->deleteLater();
45
}
46
47
int
AreaSprites::spriteCount
()
48
{
49
return
sprites
.size();
50
}
51
52
int
AreaSprites::spriteMax
()
53
{
54
return
maxSprites
;
55
}
56
57
SpriteData
*
AreaSprites::spriteAt
(
int
ind)
58
{
59
return
qmlCppOwned
(
sprites
.at(ind));
60
}
61
62
void
AreaSprites::spriteSwap
(
int
from,
int
to)
63
{
64
auto
eFrom =
sprites
.at(from);
65
auto
eTo =
sprites
.at(to);
66
67
sprites
.replace(from, eTo);
68
sprites
.replace(to, eFrom);
69
70
spritesChanged
();
71
}
72
73
void
AreaSprites::spriteRemove
(
int
ind)
74
{
75
// A sprite has to always have a player sprite in the first position
76
if
(
sprites
.size() <= 1)
77
return
;
78
79
sprites
.at(ind)->deleteLater();
80
sprites
.removeAt(ind);
81
spritesChanged
();
82
}
83
84
void
AreaSprites::spriteNew
()
85
{
86
if
(
sprites
.size() >=
maxSprites
)
87
return
;
88
89
sprites
.append(
new
SpriteData
);
90
spritesChanged
();
91
}
92
93
void
AreaSprites::load
(
SaveFile
* saveFile)
94
{
95
reset
();
96
97
if
(saveFile ==
nullptr
)
98
return
;
99
100
auto
toolset = saveFile->
toolset
;
101
102
// Total sprite count including player
103
var8
spriteCount
= toolset->getByte(0x278D) + 1;
104
105
for
(
var8
i = 0; i <
spriteCount
&& i < 16; i++) {
106
sprites
.append(
new
SpriteData
(
false
, saveFile, i));
107
}
108
109
spritesChanged
();
110
}
111
112
void
AreaSprites::save
(
SaveFile
* saveFile)
113
{
114
auto
toolset = saveFile->
toolset
;
115
116
// Save sprite count minus player
117
toolset->
setByte
(0x278D,
sprites
.size() - 1);
118
for
(
var8
i = 0; i <
sprites
.size() && i < 16; i++) {
119
sprites
.at(i)->save(saveFile, i);
120
}
121
122
SpriteData::saveMissables
(saveFile,
sprites
);
123
}
124
125
void
AreaSprites::reset
()
126
{
127
for
(
auto
entry :
sprites
)
128
entry->deleteLater();
129
130
sprites
.clear();
131
spritesChanged
();
132
}
133
134
void
AreaSprites::randomize
(QVector<MapDBEntrySprite*> spriteData)
135
{
136
reset
();
137
sprites
=
SpriteData::randomizeAll
(spriteData);
138
spritesChanged
();
139
}
140
141
void
AreaSprites::setTo
(
MapDBEntry
* map)
142
{
143
reset
();
144
145
if
(map ==
nullptr
)
146
return
;
147
148
sprites
=
SpriteData::setToAll
(map->
getSprites
());
149
spritesChanged
();
150
}
areasprites.h
maxSprites
constexpr var8 maxSprites
Maximum sprites/NPCs on a map.
Definition
areasprites.h:27
AreaSprites::AreaSprites
AreaSprites(SaveFile *saveFile=nullptr)
Definition
areasprites.cpp:34
AreaSprites::spriteNew
void spriteNew()
Add a fresh sprite.
Definition
areasprites.cpp:84
AreaSprites::load
void load(SaveFile *saveFile=nullptr)
Expand the sprite list from the save.
Definition
areasprites.cpp:93
AreaSprites::setTo
void setTo(MapDBEntry *map)
Rebuild the list from map's sprites.
Definition
areasprites.cpp:141
AreaSprites::reset
void reset()
Empty the sprite list.
Definition
areasprites.cpp:125
AreaSprites::spriteSwap
void spriteSwap(int from, int to)
Reorder sprites.
Definition
areasprites.cpp:62
AreaSprites::spritesChanged
protected::void spritesChanged()
AreaSprites::sprites
QVector< SpriteData * > sprites
The map's sprites/NPCs.
Definition
areasprites.h:65
AreaSprites::~AreaSprites
virtual ~AreaSprites()
Definition
areasprites.cpp:41
AreaSprites::spriteMax
int spriteMax()
Capacity (maxSprites).
Definition
areasprites.cpp:52
AreaSprites::save
void save(SaveFile *saveFile)
Flatten the sprite list to the save.
Definition
areasprites.cpp:112
AreaSprites::randomize
void randomize(QVector< MapDBEntrySprite * > spriteData)
Randomize sprites from spriteData.
Definition
areasprites.cpp:134
AreaSprites::spriteCount
int spriteCount()
Number of sprites.
Definition
areasprites.cpp:47
AreaSprites::spriteRemove
void spriteRemove(int ind)
Remove sprite ind.
Definition
areasprites.cpp:73
AreaSprites::spriteAt
SpriteData * spriteAt(int ind)
Sprite ind (GC-protected return).
Definition
areasprites.cpp:57
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
SpriteData
One on-map sprite/NPC – the most byte-level object in the area.
Definition
spritedata.h:139
SpriteData::setToAll
static QVector< SpriteData * > setToAll(QVector< MapDBEntrySprite * > spriteSigns)
Build sprites from a map's sprite list.
Definition
spritedata.cpp:723
SpriteData::saveMissables
static void saveMissables(SaveFile *saveFile, QVector< SpriteData * > spriteData)
Definition
spritedata.cpp:383
SpriteData::randomizeAll
static QVector< SpriteData * > randomizeAll(QVector< MapDBEntrySprite * > mapSprites)
Randomize a whole map's sprites.
Definition
spritedata.cpp:625
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
savefile.h
savefileiterator.h
savefiletoolset.h
spritedata.h
sprites.h
MapDBEntry
One map's complete static definition – the root of the MapDBEntry family.
Definition
mapdbentry.h:56
MapDBEntry::getSprites
const QVector< MapDBEntrySprite * > getSprites() const
Sprites on the map.
Definition
mapdbentry.cpp:500
projects
savefile
src
pse-savefile
expanded
area
areasprites.cpp
Generated by
1.17.0