summaryrefslogtreecommitdiff
path: root/src/koopatlas/mapdata.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/koopatlas/mapdata.h')
-rw-r--r--src/koopatlas/mapdata.h29
1 files changed, 23 insertions, 6 deletions
diff --git a/src/koopatlas/mapdata.h b/src/koopatlas/mapdata.h
index 48a1720..40e1a43 100644
--- a/src/koopatlas/mapdata.h
+++ b/src/koopatlas/mapdata.h
@@ -70,6 +70,8 @@ struct dKPNode_s {
NodeTypes type;
+ bool isNew;
+
dKPNodeExtra_c *extra;
// The union is placed at the very end so we can leave out padding in the
@@ -89,24 +91,37 @@ struct dKPNode_s {
bool isUnlocked();
void setupNodeExtra();
- dKPPath_s *getOppositeExitTo(dKPPath_s *path);
+ dKPPath_s *getOppositeExitTo(dKPPath_s *path, bool mustBeAvailable=false);
+ dKPPath_s *getOppositeAvailableExitTo(dKPPath_s *path) {
+ return getOppositeExitTo(path, true);
+ }
+
+ int getExitCount(bool mustBeAvailable=false);
+ int getAvailableExitCount() {
+ return getExitCount(true);
+ }
+
+ void setLayerAlpha(u8 alpha);
};
struct dKPPath_s {
enum Availability {
NOT_AVAILABLE = 0,
AVAILABLE = 1,
- NEWLY_AVAILABLE = 2
+ NEWLY_AVAILABLE = 2,
+ ALWAYS_AVAILABLE = 3
};
dKPNode_s *start, *end;
dKPLayer_s *tileLayer, *doodadLayer;
- u8 isAvailable; // computed on-the-fly - default from Koopatlas is 1
- u8 hasSecret;
+ u8 isAvailable; // computed on-the-fly - default from Koopatlas is NOT or ALWAYS
+ u8 isSecret;
u8 _padding[2];
float speed;
int animation;
+
+ void setLayerAlpha(u8 alpha);
};
/******************************************************************************
@@ -118,6 +133,8 @@ struct dKPLayer_s {
};
LayerTypes type;
+ u8 alpha;
+ u8 _padding[3];
typedef u16 sector_s[16][16];
@@ -180,7 +197,7 @@ class dKPMapData_c {
template <typename T>
inline T* fixRef(T*& indexAsPtr) {
unsigned int index = (unsigned int)indexAsPtr;
- if (index == 0xFFFFFFFF)
+ if (index == 0xFFFFFFFF || index == 0)
indexAsPtr = 0;
else
indexAsPtr = (T*)(((char*)data) + index);
@@ -190,7 +207,7 @@ class dKPMapData_c {
template <typename T>
inline T* fixRefSafe(T*& indexAsPtr) {
unsigned int index = (unsigned int)indexAsPtr;
- if (index == 0xFFFFFFFF)
+ if (index == 0xFFFFFFFF || index == 0)
indexAsPtr = 0;
else if (index < 0x80000000)
indexAsPtr = (T*)(((char*)data) + index);