Pokebot
Pokemon FireRed bot
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
Data.hh
Go to the documentation of this file.
1 #ifndef __DATA_HH__
2 #define __DATA_HH__
3 
4 #include <vector>
5 #include "../vbam/gba/Globals.h"
6 #include "PokemonUtils.hh"
7 #include "World.hh"
8 #include "Team.hpp"
9 #include "BattleGroup.hpp"
10 #include "Player.hh"
11 #include "Move.hh"
12 #include "Species.hh"
13 #include "BagMenu.hh"
14 #include "BattleMenu.hh"
15 #include "OverWorld.hh"
16 #include "MultiChoice.hh"
17 #include "IPokeData.hh"
18 
19 struct Range
20 {
21  Range(float a = 0, float b = 0) : min(a), max(b) {}
22 
23  int min;
24  int max;
25 };
26 
27 class Data
28 {
29 public:
30  Data();
31  ~Data();
32 
33 public:
34  void update();
35 
36 public:
37  const std::vector<char *> &speciesNames() const { return (_speciesNames); }
38  char *speciesName(uint16_t i) const { return (i < _speciesNames.size() ? _speciesNames[i] : NULL); }
39 
40  const std::vector<Move> &moves() const { return (_moves); }
41  const Move &move(uint8_t i) const { return (_moves[(i < _moves.size()) * i]); }
42 
43  const std::vector<char *> &types() const { return (_types); }
44  const char *type(uint8_t i) const { return (_types[(i < _types.size()) * i]); }
45  bool isSpecial(uint8_t type) const { return (type > 9); };
46 
47  const std::vector<Species> &species() const { return (_species); }
48  const Species &species(uint16_t i) const { return (_species[(i < _species.size()) * i]); }
49 
50  const std::vector<char *> &abilityNames() const { return (_abilityNames); }
51  char *abilityName(uint8_t i) const { return (i < _abilityNames.size() ? _abilityNames[i] : NULL); }
52 
53  const OverWorld *overWorlds() const { return (_ows); }
54  const OverWorld &overWorld(uint8_t i) const { return (_ows[(i < 16) * i]); }
55  const MultiChoice *multiChoices() const { return (_mchoice); }
56  const MultiChoice &multiChoice(uint8_t i) const { return (_mchoice[(i <= 0x40) * i]); }
57 
58  float typeEffectiveness(uint8_t atk, uint8_t def) const { return (_typeChart[atk][def]); }
59  float typeEffectiveness(const Move &m, const Species &s) const;
60  float sameTypeAttackBonus(const Move &m, const Species &s) const;
61  Range potentialDamage(const IPokeData &attacker, const IPokeData &target, const Move &m) const;
62  float chanceToHit(const IPokeData &attacker, const IPokeData &target, const Move &m) const;
63 
64  Team &playerTeam() { return (_pteam); }
65  Team &enemyTeam() { return (_eteam); }
66  BattleGroup &battlers() { return (_battlers); }
67  World &world() { return (_world); }
68  Player &player() { return (_player); }
69  BagMenu &bagMenu() { return (_bagMenu); }
70  BattleMenu &battleMenu() { return (_battleMenu); }
71  bool inBattle() { return (*((uint32_t *) gbaMem(0x030030F0)) == 0x80123e5); }
72 
73 private:
74  void _loadStrings(std::vector<char *> &dest, uint32_t addr, uint8_t len, const char* delim, uint8_t delimsz);
75  void _loadMoves();
76  void _loadSpecies();
77  void _loadTypeEffectiveness();
78 
79 private:
80  // Static
81  std::vector<char*> _speciesNames;
82  std::vector<char*> _moveNames;
83  std::vector<char*> _abilityNames;
84  std::vector<char*> _types;
85  std::vector<Move> _moves;
86  std::vector<Species> _species;
87  float _typeChart[18][18];
88  World _world;
89  // Dynamic
90  BagMenu _bagMenu;
91  BattleMenu _battleMenu;
92  OverWorld *_ows;
93  MultiChoice *_mchoice;
94  // Manual
95  Player _player;
96  Team _pteam;
97  Team _eteam;
98  BattleGroup _battlers;
99 };
100 
101 #endif
const std::vector< Species > & species() const
Definition: Data.hh:47
const OverWorld & overWorld(uint8_t i) const
Definition: Data.hh:54
const Move & move(uint8_t i) const
Definition: Data.hh:41
Data()
Definition: Data.cpp:3
Definition: World.hh:12
Definition: Team.hpp:6
void update()
Definition: Data.cpp:29
bool isSpecial(uint8_t type) const
Definition: Data.hh:45
float typeEffectiveness(uint8_t atk, uint8_t def) const
Definition: Data.hh:58
bool inBattle()
Definition: Data.hh:71
Definition: IPokeData.hh:4
const MultiChoice * multiChoices() const
Definition: Data.hh:55
Range potentialDamage(const IPokeData &attacker, const IPokeData &target, const Move &m) const
Definition: Data.cpp:54
const MultiChoice & multiChoice(uint8_t i) const
Definition: Data.hh:56
const std::vector< char * > & types() const
Definition: Data.hh:43
const Species & species(uint16_t i) const
Definition: Data.hh:48
Definition: MultiChoice.hh:6
float sameTypeAttackBonus(const Move &m, const Species &s) const
Definition: Data.cpp:46
const std::vector< char * > & speciesNames() const
Definition: Data.hh:37
Definition: BattleGroup.hpp:6
void * gbaMem(uint32_t ptr)
Definition: PokemonUtils.cpp:57
Team & enemyTeam()
Definition: Data.hh:65
char * abilityName(uint8_t i) const
Definition: Data.hh:51
Definition: Move.hh:6
Definition: BagMenu.hh:6
~Data()
Definition: Data.cpp:19
int min
Definition: Data.hh:23
World & world()
Definition: Data.hh:67
char * speciesName(uint16_t i) const
Definition: Data.hh:38
Definition: Data.hh:19
float chanceToHit(const IPokeData &attacker, const IPokeData &target, const Move &m) const
Definition: Data.cpp:75
BattleMenu & battleMenu()
Definition: Data.hh:70
Definition: BattleMenu.hh:6
Team & playerTeam()
Definition: Data.hh:64
BattleGroup & battlers()
Definition: Data.hh:66
Definition: Species.hh:6
Player & player()
Definition: Data.hh:68
Definition: Data.hh:27
const std::vector< Move > & moves() const
Definition: Data.hh:40
Range(float a=0, float b=0)
Definition: Data.hh:21
int max
Definition: Data.hh:24
const char * type(uint8_t i) const
Definition: Data.hh:44
BagMenu & bagMenu()
Definition: Data.hh:69
Definition: Player.hh:7
const std::vector< char * > & abilityNames() const
Definition: Data.hh:50
const OverWorld * overWorlds() const
Definition: Data.hh:53
Definition: OverWorld.hh:6