Pokered Save Editor 2
Pokemon Red & Blue save file editor - Qt 6 C++/QML
Loading...
Searching...
No Matches
arealoadedsprites.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 "arealoadedsprites.h"
23#include "../../savefile.h"
26#include <pse-db/mapsdb.h>
28#include <pse-db/spriteSet.h>
29#include <pse-db/sprites.h>
30#include <pse-common/random.h>
31
33{
34 memset(loadedSprites, 0, maxLoadedSprites * sizeof(var8));
35 load(saveFile);
36}
37
39
44
46{
47 return loadedSprites[ind];
48}
49
50void AreaLoadedSprites::lSpriteSwap(int from, int to)
51{
52 auto eFrom = loadedSprites[from];
53 auto eTo = loadedSprites[to];
54
55 loadedSprites[to] = eFrom;
56 loadedSprites[from] = eTo;
57
59}
60
62{
63 reset();
64
65 if(saveFile == nullptr)
66 return;
67
68 auto toolset = saveFile->toolset;
69
70 auto rng = toolset->getRange(0x2649, 0xB);
71 for(var8 i = 0; i < maxLoadedSprites; i++)
72 {
73 loadedSprites[i] = rng.at(i);
74 }
75
77
78 loadedSetId = toolset->getByte(0x2654);
80}
81
83{
84 auto toolset = saveFile->toolset;
85
86 QVector<var8> rng;
87 for(var8 i = 0; i < maxLoadedSprites; i++)
88 {
89 rng.append(loadedSprites[i]);
90 }
91
92
93 toolset->copyRange(0x2649, 0xB, rng);
94 toolset->setByte(0x2654, loadedSetId);
95}
96
98{
99 memset(loadedSprites, 0, maxLoadedSprites * sizeof(var8));
101
102 loadedSetId = 0;
104}
105
107{
108 reset();
109
110 // First check to see if the chosen map already has a sprite set
111 if(map->getToSpriteSet() == nullptr) {
112 // It does not
113 // Pick a random sprite set and load it
114 auto spriteSet = SpriteSetDB::inst()->getStore().at(
115 Random::inst()->rangeExclusive(0, SpriteSetDB::inst()->getStoreSize())
116 );
117
118 loadSpriteSet(spriteSet, x, y);
119 }
120 else
121 // It does, use that sprite set
122 loadSpriteSet(map->getToSpriteSet(), x, y);
123}
124
125void AreaLoadedSprites::setTo(MapDBEntry* map, int x, int y)
126{
127 reset();
128
129 if(map == nullptr || map->getToSpriteSet() == nullptr)
130 return;
131
132 loadSpriteSet(map->getToSpriteSet(), x, y);
133}
134
136{
137 auto set = entry->getSprites(x, y);
138 auto id = entry->ind;
139
140 for(var8 i = 0; i < set.size(); i++)
141 {
142 loadedSprites[i] = set.at(i)->ind;
143 }
144
146
147 loadedSetId = id;
149}
constexpr var8 maxLoadedSprites
Fixed number of sprite slots the game keeps loaded.
void load(SaveFile *saveFile=nullptr)
Expand the loaded-sprite slots from the save.
protected::void loadedSpritesChanged()
void save(SaveFile *saveFile)
Flatten the loaded-sprite slots to the save.
AreaLoadedSprites(SaveFile *saveFile=nullptr)
< Which sprite set is loaded.
void lSpriteSwap(int from, int to)
Swap two loaded-sprite slots.
void loadedSetIdChanged()
void reset()
Blank the loaded-sprite slots.
int lSpriteCount()
Number of loaded-sprite slots (fixed).
var8 loadedSprites[maxLoadedSprites]
The fixed loaded-sprite picture-ids.
void setTo(MapDBEntry *map, int x, int y)
Set to map's sprite set at (x,y).
int lSpriteAt(int ind)
Picture-id in slot ind.
void loadSpriteSet(SpriteSetDBEntry *entry, int x, int y)
Populate from a sprite-set definition.
void randomize(MapDBEntry *map, int x, int y)
Randomize for map at (x,y).
static Random * inst()
< Convenience 50% coin flip (integer path), readable from QML.
Definition random.cpp:31
void copyRange(var16 addr, var16 size, QVector< var8 > data, bool reverse=false)
Copies data into the save at a particular place, going no further than the maximum size desired and/o...
QVector< var8 > getRange(var16 from, var16 size, bool reverse=false)
Copies a range of bytes to a buffer of size and returns them.
One loaded save: the raw 32 KB bytes, their expanded object tree, and the tools that move between the...
Definition savefile.h:46
SaveFileToolset * toolset
Tools to operate directly on the raw sav file data.
Definition savefile.h:117
static SpriteSetDB * inst()
< Number of sprite-sets.
Definition spriteSet.cpp:89
const QVector< SpriteSetDBEntry * > getStore() const
All sprite-sets.
Definition spriteSet.cpp:95
var8e var8
Everyday 8-bit alias. Exact (not "fastest") to dodge the pointer-width bug noted above.
Definition types.h:124
One map's complete static definition – the root of the MapDBEntry family.
Definition mapdbentry.h:56
SpriteSetDBEntry * getToSpriteSet() const
One sprite-set: the pre-loaded sprite group for an outdoor area.
Definition spriteSet.h:47
QVector< SpriteDBEntry * > getSprites(var8 x, var8 y) const
Sprites active at (x,y).
Definition spriteSet.cpp:81
var8 ind
Set index.
Definition spriteSet.h:55