summary refs log tree commit diff stats
path: root/src/game.cpp
Commit message (Collapse)AuthorAgeFilesLines
* lotta performance improvementsStar Rauchenberger2022-03-171-90/+105
| | | | | | | the two main things: 1) When ticking three times after a lighting change, we no longer iterate over the entire map. Instead, we keep a list of the tiles that have changed and the ones adjacent to them, and we iterate over that list. 2) The map tile type is now stored in a separate array from the rest of the tile data. This is because the tile type is the only thing needed for the cellular automata tick, and thus the only thing that we need to actually copy.
* signs are more common and also quieterStar Rauchenberger2022-03-161-2/+2
|
* signs can be read now!Star Rauchenberger2022-03-161-5/+28
|
* added signs (which can't be read yet)Star Rauchenberger2022-03-161-3/+67
|
* instead of ticking the entire screen every lighting update we only tick a ↵Star Rauchenberger2022-03-151-2/+6
| | | | | | chunk size around the player is this helping?
* lit tiles in unloaded chunk should count toward total lit tiles for zoomingStar Rauchenberger2022-03-151-5/+2
|
* maybe made the slowdown when zoomed out much betterStar Rauchenberger2022-03-151-6/+6
|
* started adding zooming anim, looks weird esp when movingStar Rauchenberger2022-03-151-3/+11
|
* fixed flickering while walkingStar Rauchenberger2022-03-141-1/+1
| | | | sort of. the (intentional) dust flicker is still there. might want to remove the player trailing dust as they walk.
* a lot faster now thanks to only ticking on-screen every loopStar Rauchenberger2022-03-141-3/+8
| | | | flickering while moving now though
* map is now "infinite" using chunks that dynamically load like in diamond&pearlStar Rauchenberger2022-03-141-86/+37
| | | | game is also slow as shit now
* fmod splash screenStar Rauchenberger2022-03-141-0/+1
|
* refactored game code into the game class (for titles / multiple games)Star Rauchenberger2022-03-131-0/+885
hor Star Rauchenberger <fefferburbia@gmail.com> 2023-05-02 00:24:09 -0400 committer Star Rauchenberger <fefferburbia@gmail.com> 2023-05-02 00:24:09 -0400 Started reading in game data yaml' href='/lingo-ap-tracker/commit/game_data.h?h=v1.0.0&id=704c08bb439b9a90f7be2d26a0c8b01777e2cf2c'>704c08b ^
b6628ef ^
bb12ecd ^
085531b ^
c9a21a3 ^
8e89e19 ^
4adfe42 ^
004fb71 ^
dacbe8e ^
704c08b ^

08ffb40 ^

8e89e19 ^
08ffb40 ^


704c08b ^
ea16cff ^
704c08b ^





1ec2738 ^
baf43ed ^
704c08b ^

08ffb40 ^
8e89e19 ^


2c2d9e9 ^
704c08b ^

004fb71 ^
1cb943a ^
004fb71 ^


900355a ^
004fb71 ^

704c08b ^
52bc9fd ^
704c08b ^

efa0587 ^
dc4a143 ^


67a2efe ^


c3849f0 ^
dc4a143 ^
21883d1 ^
4fa8f5b ^
704c08b ^




67a2efe ^
e07e031 ^
c9a21a3 ^
704c08b ^



09d67fb ^
8e89e19 ^
704c08b ^

9bf6a50 ^
4adfe42 ^
e750333 ^
704c08b ^


9f25878 ^
704c08b ^

67a2efe ^
704c08b ^

9bf6a50 ^
3b49bdc ^
e750333 ^
704c08b ^

ea16cff ^








7f4b6b4 ^

ea16cff ^





009cfbe ^
ea16cff ^
8ad881f ^
738d970 ^


ea16cff ^

738d970 ^

ea16cff ^

d7212d7 ^





efa0587 ^
d7212d7 ^
dacbe8e ^
004fb71 ^
5fe5bec ^
67a2efe ^

d7212d7 ^
8e89e19 ^
2c2d9e9 ^
e07e031 ^
ea16cff ^

3b3c3ca ^
7f4b6b4 ^
900355a ^
704c08b ^
f494573 ^

704c08b ^
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198



                            
                   















                       


                                     
                                             
 





                         






                        

  
              
         

                   
                       


                                  
                                   

                              
                           
                               
                            
                            
                          
                    
                      
                       

  

                               
                      


                   
             
         





                             
                         
                        

                             
                                                   


                            
                                    

  
                  
           


                                                   
                        

  
             
                  

                          
                                            


                     


                          
                           
                          
                        
               




                          
                             
                            
                          



                   
                               
                          

                          
                         
                    
                                  


                
         

                                  
                             

            
                         
                    
                                

  








                              

                                                 





                   
                      
                          
                                      


                                                           

                                       

                        

  





                                              
                                              
                                       
                                             
                                                    
                                                   

                                                        
                                                  
                                           
                                             
                                    

                                                   
                                                                               
                                                             
                                   
 

                                                          
                                                       
#ifndef GAME_DATA_H_9C42AC51
#define GAME_DATA_H_9C42AC51

#include <map>
#include <optional>
#include <string>
#include <vector>

enum class LingoColor {
  kNone,
  kBlack,
  kRed,
  kBlue,
  kYellow,
  kGreen,
  kOrange,
  kPurple,
  kBrown,
  kGray
};

constexpr int kLOCATION_NORMAL = 1;
constexpr int kLOCATION_REDUCED = 2;
constexpr int kLOCATION_INSANITY = 4;
constexpr int kLOCATION_SMALL_SPHERE_ONE = 8;

enum class EntranceType {
  kNormal,
  kPainting,
  kSunwarp,
  kWarp,
  kPilgrimage,
  kCrossroadsRoofAccess,
};

enum class DoorType {
  kNormal,
  kSunwarp,
  kSunPainting,
};

struct Panel {
  int id;
  int room;
  std::string name;
  std::string nodepath;
  std::vector<LingoColor> colors;
  std::vector<int> required_rooms;
  std::vector<int> required_doors;
  std::vector<int> required_panels;
  bool check = false;
  bool exclude_reduce = false;
  bool achievement = false;
  std::string achievement_name;
  std::string location_name;
  bool non_counting = false;
  int ap_location_id = -1;
  bool hunt = false;
  int panel_door = -1;
  int solve_index = -1;
};

struct ProgressiveRequirement {
  std::string item_name;
  int ap_item_id = -1;
  int quantity = 0;
};

struct Door {
  int id;
  int room;
  std::string name;
  std::string location_name;
  std::string item_name;
  std::string group_name;
  bool skip_location = false;
  bool skip_item = false;
  bool is_event = false;
  std::vector<int> panels;
  bool exclude_reduce = true;
  std::vector<ProgressiveRequirement> progressives;
  int ap_item_id = -1;
  int group_ap_item_id = -1;
  int ap_location_id = -1;
  DoorType type = DoorType::kNormal;
};

struct PanelDoor {
  int room;
  int ap_item_id = -1;
  int group_ap_item_id = -1;
  std::vector<ProgressiveRequirement> progressives;
  std::string item_name;
};

struct Exit {
  int source_room;
  int destination_room;
  std::optional<int> door;
  EntranceType type = EntranceType::kNormal;
};

struct PaintingExit {
  int id;
  int room;
  std::string internal_id;
  std::string display_name;
  std::optional<int> door;
  bool entrance = false;
  int map_area;
};

struct Room {
  std::string name;
  std::vector<Exit> exits;
  std::vector<int> paintings;
  std::vector<int> sunwarps;
  std::vector<int> panels;
};

struct Location {
  std::string name;
  std::string ap_location_name;
  int ap_location_id = -1;
  int room;
  std::vector<int> panels;
  int classification = 0;
  bool hunt = false;
  std::optional<int> single_panel;
};

struct MapArea {
  int id;
  std::string name;
  std::vector<Location> locations;
  std::vector<int> paintings;
  int map_x;
  int map_y;
  int classification = 0;
  bool hunt = false;
  bool has_single_panel = false;
};

enum class SubwaySunwarpType {
  kEnter,
  kExit,
  kFinal
};

struct SubwaySunwarp {
  int dots;
  SubwaySunwarpType type;

  bool operator<(const SubwaySunwarp& rhs) const;
};

struct SubwayItem {
  int id;
  int x;
  int y;
  bool tilted = false;
  std::optional<int> door;
  std::optional<std::string> painting;
  std::vector<std::string> tags; // 2-way teleports
  std::vector<std::string> entrances; // teleport entrances
  std::vector<std::string> exits; // teleport exits
  std::optional<SubwaySunwarp> sunwarp;
  std::optional<std::string> special;

  bool HasWarps() const;
};

const std::vector<MapArea>& GD_GetMapAreas();
const MapArea& GD_GetMapArea(int id);
int GD_GetRoomByName(const std::string& name);
const Room& GD_GetRoom(int room_id);
const std::vector<Door>& GD_GetDoors();
const Door& GD_GetDoor(int door_id);
int GD_GetDoorByName(const std::string& name);
const Panel& GD_GetPanel(int panel_id);
int GD_GetPanelBySolveIndex(int solve_index);
const PanelDoor& GD_GetPanelDoor(int panel_door_id);
const std::vector<PaintingExit>& GD_GetPaintings();
const PaintingExit& GD_GetPaintingExit(int painting_id);
int GD_GetPaintingByName(const std::string& name);
const std::vector<int>& GD_GetAchievementPanels();
int GD_GetItemIdForColor(LingoColor color);
const std::vector<int>& GD_GetSunwarpDoors();
int GD_GetRoomForSunwarp(int index);
const std::vector<SubwayItem>& GD_GetSubwayItems();
const SubwayItem& GD_GetSubwayItem(int id);
std::optional<int> GD_GetSubwayItemForPainting(const std::string& painting_id);
int GD_GetSubwayItemForSunwarp(const SubwaySunwarp& sunwarp);
std::string GD_GetItemName(int id);

LingoColor GetLingoColorForString(const std::string& str);

#endif /* end of include guard: GAME_DATA_H_9C42AC51 */