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.h39
1 files changed, 31 insertions, 8 deletions
diff --git a/src/koopatlas/mapdata.h b/src/koopatlas/mapdata.h
index 18dd9ee..40e1a43 100644
--- a/src/koopatlas/mapdata.h
+++ b/src/koopatlas/mapdata.h
@@ -70,13 +70,13 @@ 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
// kpbin
union {
- // struct { u8 levelNumber[2]; };
- // FORWARDS COMPATIBILITY:
struct { u8 levelNumber[2]; bool hasSecret; };
struct { const char *destMap; u8 thisID, foreignID, transition, _; };
};
@@ -91,18 +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,
+ ALWAYS_AVAILABLE = 3
+ };
+
dKPNode_s *start, *end;
dKPLayer_s *tileLayer, *doodadLayer;
- u8 unlockType; // 0 = always, 1 = normal, 2 = secret
- u8 unlockLevelNumber[2];
- bool isAvailable; // computed on-the-fly - default from Koopatlas is true
+ 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);
};
/******************************************************************************
@@ -114,6 +133,8 @@ struct dKPLayer_s {
};
LayerTypes type;
+ u8 alpha;
+ u8 _padding[3];
typedef u16 sector_s[16][16];
@@ -164,6 +185,8 @@ struct dKPMapFile_s {
int tilesetCount;
GXTexObj *tilesets;
+ u8 *unlockData;
+
dKPLayer_s::sector_s sectors[1]; // variable size
};
@@ -174,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);
@@ -184,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);