Pokebot
Pokemon FireRed bot
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
World.hh
Go to the documentation of this file.
1 #ifndef __WORLD_HH__
2 #define __WORLD_HH__
3 
4 #include <cmath>
5 #include <cstdio>
6 #include <stdint.h>
7 #include <vector>
8 #include <algorithm>
9 #include "../vbam/gba/Globals.h"
10 #include "PokemonUtils.hh"
11 
12 class World
13 {
14 private:
15  struct Header
16  {
17  uint32_t mapPtr;
18  uint32_t evtPtr;
19  uint32_t scriptPtr;
20  uint32_t connectPtr;
21  uint16_t musicId;
22  uint16_t mapId;
23  uint8_t labelId;
24  uint8_t flash;
25  uint8_t weather;
26  uint8_t type;
27  uint16_t unknown;
28  uint8_t showLabel;
29  uint8_t battleType;
30  };
31 
32  struct DataHeader
33  {
34  uint32_t width;
35  uint32_t height;
36  uint32_t border;
37  uint32_t data;
38  uint32_t globalTileset;
39  uint32_t localTileset;
40  uint8_t borderW;
41  uint8_t borderH;
42  };
43 
44  struct TilesetHeader
45  {
46  uint8_t compressed;
47  uint8_t primary;
48  uint16_t unknown;
49  uint32_t imgPtr;
50  uint32_t palettePtr;
51  uint32_t blocksPtr;
52  uint32_t animPtr;
53  uint32_t behaviorPtr;
54  };
55 
56  struct Event
57  {
58  uint8_t nbPersons;
59  uint8_t nbWarps;
60  uint8_t nbScripts;
61  uint8_t nbSigns;
62  uint32_t personsPtr;
63  uint32_t warpsPtr;
64  uint32_t scriptsPtr;
65  uint32_t signsPtr;
66  };
67 
68  struct SignEvt
69  {
70  uint16_t x;
71  uint16_t y;
72  uint8_t level;
73  uint8_t type;
74  uint32_t scriptPtr;
75  };
76 
77  struct WarpEvt
78  {
79  uint16_t x;
80  uint16_t y;
81  uint8_t level;
82  uint8_t destWarp;
83  uint8_t destMap;
84  uint8_t destBank;
85  };
86 
87  struct PersonEvt
88  {
89  uint8_t evtNb;
90  uint8_t pictureNb;
91  uint16_t unknown;
92  uint16_t x;
93  uint16_t y;
94  uint8_t level;
95  uint8_t mvtType;
96  uint8_t mvt;
97  uint8_t unknown2;
98  uint8_t trainer;
99  uint8_t unknown3;
100  uint16_t view;
101  uint32_t scriptPtr;
102  uint16_t id;
103  uint16_t unknown4;
104 
105  bool isVisible() const
106  {
107  if (!id)
108  return (true);
109  return (!getFlag(id));
110  }
111  };
112 
113  struct ScriptEvt
114  {
115  uint16_t x;
116  uint16_t y;
117  uint8_t level;
118  uint8_t unknown;
119  uint16_t varNb;
120  uint16_t varVal;
121  uint16_t unknown2;
122  uint32_t scriptPtr;
123  };
124 
125  struct Connection
126  {
127  uint32_t type;
128  uint32_t offset;
129  uint8_t bank;
130  uint8_t map;
131  uint16_t padding;
132  };
133 
134  struct WildHeader
135  {
136  uint8_t bank;
137  uint8_t map;
138  uint16_t padding;
139  uint32_t entryPtr[4];
140  };
141 
142  struct WildEntry
143  {
144  uint8_t minLvl;
145  uint8_t maxLvl;
146  uint16_t species;
147  };
148 
149 public:
150  struct Map
151  {
152  struct TileAttr
153  {
154  uint16_t behavior;
155  uint16_t bg;
156  };
157 
158  struct Node
159  {
160  uint8_t status;
161  uint16_t tile;
164  uint32_t g;
165  uint32_t f;
166  uint32_t x;
167  uint32_t y;
168 
169  Node(uint32_t px = 0, uint32_t py = 0) : status(0), from(NULL), g(0), f(0), x(px), y(py) {}
170  void setG(uint32_t pg) { g = pg; }
171  void setF(uint32_t xe, uint32_t ye) { f = g + 10 * sqrt(POW(xe - x) + POW(ye - y)); }
172  };
173 
174  struct WildBattle
175  {
176  uint8_t ratio;
177  WildEntry *entries;
178  uint8_t nbEntries;
179  };
180 
181  enum
182  {
183  ROCK = 35,
184  HILL = 35,
185  LADDER = 34,
186  WATER = 36,
187  ROAD = 32,
188  WALL = 30,
189  PLAYER = 31
190  };
191 
192  uint64_t width;
193  uint64_t height;
195  uint8_t nbPersons;
196  uint8_t nbWarps;
197  uint8_t nbScripts;
198  uint8_t nbSigns;
199  PersonEvt *persons;
200  WarpEvt *warps;
201  ScriptEvt *scripts;
202  SignEvt *signs;
203  uint32_t nbConnects;
204  Connection *connects;
205  uint32_t scriptPtr;
207  uint8_t labelId;
208  std::string name;
209 
210  public:
211  void loadName(uint8_t id);
212  Node *operator[](uint8_t y) { return (data[y]); }
213  inline uint8_t getMatterColor(uint8_t matter, bool pos) {
214  return (pos ? PLAYER:
215  !matter ? LADDER :
216  matter == 1 ? WALL :
217  matter == 4 ? WATER :
218  matter == 12 ? ROAD :
219  matter == 13 ? HILL :
220  matter == 16 ? LADDER : 0);
221  }
222  };
223  typedef std::vector<Map::Node*> Path;
224 
225 public:
226  World();
227  ~World();
228 
229 private:
230  void _initWorld();
231  void _initWildBattles();
232 
233 public:
234  std::vector<Map> &operator[](uint8_t bank) { return (_banks[(bank < _banks.size()) * bank]); }
235  Map &getMap(uint8_t bank, uint8_t map) { return ((*this)[bank][(map < (*this)[bank].size()) * map]); }
236 
237 public:
238  std::vector<std::vector<Map> > _banks;
239 };
240 
241 #endif
Definition: World.hh:150
uint64_t height
Definition: World.hh:193
TileAttr * attr
Definition: World.hh:162
uint8_t ratio
Definition: World.hh:176
std::vector< Map > & operator[](uint8_t bank)
Definition: World.hh:234
uint8_t nbScripts
Definition: World.hh:197
Connection * connects
Definition: World.hh:204
Definition: World.hh:12
Map & getMap(uint8_t bank, uint8_t map)
Definition: World.hh:235
WildEntry * entries
Definition: World.hh:177
std::string name
Definition: World.hh:208
void setF(uint32_t xe, uint32_t ye)
Definition: World.hh:171
uint8_t nbWarps
Definition: World.hh:196
uint32_t scriptPtr
Definition: World.hh:205
World()
Definition: World.cpp:3
~World()
Definition: World.cpp:9
Definition: World.hh:152
uint16_t bg
Definition: World.hh:155
uint8_t labelId
Definition: World.hh:207
uint8_t nbPersons
Definition: World.hh:195
Node * from
Definition: World.hh:163
WarpEvt * warps
Definition: World.hh:200
void loadName(uint8_t id)
Definition: World.cpp:99
uint8_t nbSigns
Definition: World.hh:198
Definition: World.hh:184
uint32_t nbConnects
Definition: World.hh:203
void setG(uint32_t pg)
Definition: World.hh:170
uint8_t nbEntries
Definition: World.hh:178
uint32_t g
Definition: World.hh:164
uint8_t getMatterColor(uint8_t matter, bool pos)
Definition: World.hh:213
Definition: World.hh:189
Definition: World.hh:158
Definition: World.hh:186
Definition: World.hh:174
Node(uint32_t px=0, uint32_t py=0)
Definition: World.hh:169
SignEvt * signs
Definition: World.hh:202
Definition: World.hh:183
uint16_t behavior
Definition: World.hh:154
Node * operator[](uint8_t y)
Definition: World.hh:212
uint32_t y
Definition: World.hh:167
Definition: World.hh:185
WildBattle wildBattles[4]
Definition: World.hh:206
#define POW(x)
Definition: PokemonUtils.hh:19
uint64_t width
Definition: World.hh:192
uint8_t status
Definition: World.hh:160
uint32_t x
Definition: World.hh:166
Node ** data
Definition: World.hh:194
PersonEvt * persons
Definition: World.hh:199
std::vector< Map::Node * > Path
Definition: World.hh:223
Definition: World.hh:187
std::vector< std::vector< Map > > _banks
Definition: World.hh:238
ScriptEvt * scripts
Definition: World.hh:201
Data * data
Definition: main.cpp:19
uint32_t f
Definition: World.hh:165
uint16_t tile
Definition: World.hh:161
bool getFlag(uint16_t flag)
Definition: PokemonUtils.cpp:39
Definition: World.hh:188