aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sky/compact.cpp34
-rw-r--r--sky/compact.h9
-rw-r--r--sky/struc.h10
3 files changed, 31 insertions, 22 deletions
diff --git a/sky/compact.cpp b/sky/compact.cpp
index 5d21b288ac..0ba548cc7d 100644
--- a/sky/compact.cpp
+++ b/sky/compact.cpp
@@ -40,10 +40,13 @@
#define COMPACT_SIZE (sizeof(compactOffsets)/sizeof(uint32))
#define EXTCOMPACT_SIZE (sizeof(extCompactOffsets)/sizeof(uint32))
#define MEGASET_SIZE (sizeof(megaSetOffsets)/sizeof(uint32))
+#define TURNTABLE_SIZE (sizeof(turnTableOffsets)/sizeof(uint32))
#define OFFS(type,item) (((uint32)(&((type*)0)->item)))
#define MK32(type,item) OFFS(type, item),0,0,0
#define MK16(type,item) OFFS(type, item),0
+#define MK32_A5(type, item) MK32(type, item[0]), MK32(type, item[1]), \
+ MK32(type, item[2]), MK32(type, item[3]), MK32(type, item[4])
namespace SkyCompact {
@@ -122,6 +125,13 @@ static const uint32 megaSetOffsets[] = {
MK32(MegaSet, standTalk),
};
+static const uint32 turnTableOffsets[] = {
+ MK32_A5(TurnTable, turnTableUp),
+ MK32_A5(TurnTable, turnTableDown),
+ MK32_A5(TurnTable, turnTableLeft),
+ MK32_A5(TurnTable, turnTableRight),
+ MK32_A5(TurnTable, turnTableTalk),
+};
void *getCompactElem(Compact *cpt, uint32 off) {
if (off < COMPACT_SIZE)
@@ -136,33 +146,33 @@ void *getCompactElem(Compact *cpt, uint32 off) {
return((uint8 *)(cpt->extCompact->megaSet0) + megaSetOffsets[off]);
off -= MEGASET_SIZE;
- if (off < 5*5*4)
- return ((void **)(cpt->extCompact->megaSet0->turnTable))[off/4];
+ if (off < TURNTABLE_SIZE)
+ return ((uint8 *)(cpt->extCompact->megaSet0->turnTable) + turnTableOffsets[off]);
- off -= 5*5*4;
+ off -= TURNTABLE_SIZE;
if (off < MEGASET_SIZE)
return((uint8 *)(cpt->extCompact->megaSet1) + megaSetOffsets[off]);
off -= MEGASET_SIZE;
- if (off < 5*5*4)
- return ((void **)(cpt->extCompact->megaSet1->turnTable))[off/4];
+ if (off < TURNTABLE_SIZE)
+ return ((uint8 *)(cpt->extCompact->megaSet0->turnTable) + turnTableOffsets[off]);
- off -= 5*5*4;
+ off -= TURNTABLE_SIZE;
if (off < MEGASET_SIZE)
return((uint8 *)(cpt->extCompact->megaSet2) + megaSetOffsets[off]);
off -= MEGASET_SIZE;
- if (off < 5*5*4)
- return ((void **)(cpt->extCompact->megaSet2->turnTable))[off/4];
+ if (off < TURNTABLE_SIZE)
+ return ((uint8 *)(cpt->extCompact->megaSet0->turnTable) + turnTableOffsets[off]);
- off -= 5*5*4;
+ off -= TURNTABLE_SIZE;
if (off < MEGASET_SIZE)
return((uint8 *)(cpt->extCompact->megaSet3) + megaSetOffsets[off]);
off -= MEGASET_SIZE;
- if (off < 5*5*4)
- return ((void **)(cpt->extCompact->megaSet3->turnTable))[off/4];
- off -= 5*5*4;
+ if (off < TURNTABLE_SIZE)
+ return ((uint8 *)(cpt->extCompact->megaSet0->turnTable) + turnTableOffsets[off]);
+ off -= TURNTABLE_SIZE;
error("Offset %X out of bounds of compact", off + COMPACT_SIZE + EXTCOMPACT_SIZE + 4 * MEGASET_SIZE + 4 * 5*5*4);
}
diff --git a/sky/compact.h b/sky/compact.h
index d1572f305a..02a5911652 100644
--- a/sky/compact.h
+++ b/sky/compact.h
@@ -912,7 +912,6 @@ namespace SkyCompact {
extern uint16 burke_st_down[];
extern uint16 burke_u_to_r[];
extern uint16 burke_d_to_r[];
- extern uint16 *burke_turnTable[5][5];
extern ExtCompact burke_ext;
extern Compact burke;
extern uint16 shake_seq[];
@@ -1318,7 +1317,6 @@ namespace SkyCompact {
extern uint16 babs_t_to_d[];
extern uint16 babs_t_to_l[];
extern uint16 babs_t_to_r[];
- extern uint16 *sc36_babs_turnTable[5][5];
extern ExtCompact sc36_babs_ext;
extern Compact sc36_babs;
extern uint16 sc36_col_down4[];
@@ -1536,7 +1534,6 @@ namespace SkyCompact {
extern uint16 spu_d_to_r[];
extern uint16 spu_down[];
extern uint16 spu_st_up[];
- extern uint16 *spunky_turnTable[5][5];
extern ExtCompact spunky_ext;
extern Compact spunky;
extern uint16 sc38_video_anim[];
@@ -1601,7 +1598,6 @@ namespace SkyCompact {
extern uint16 shades_l_to_d[];
extern uint16 shades_r_to_u[];
extern uint16 shades_r_to_l[];
- extern uint16 *shades_turnTable[5][5];
extern ExtCompact shades_ext;
extern Compact shades;
extern uint16 liftc2_down[];
@@ -2123,7 +2119,6 @@ namespace SkyCompact {
extern uint16 medi_r_to_u[];
extern uint16 medi_r_to_d[];
extern uint16 medi_r_to_l[];
- extern uint16 *medi_turnTable[5][5];
extern ExtCompact medi_ext;
extern Compact medi;
extern uint16 sc71_mouse_list[];
@@ -2215,7 +2210,6 @@ namespace SkyCompact {
extern uint16 wit_u_to_r[];
extern uint16 wit_r_to_u[];
extern uint16 wit_t_to_l[];
- extern uint16 *witness_turnTable[5][5];
extern ExtCompact witness_ext;
extern Compact witness;
extern uint16 sc72_logic_list[];
@@ -2246,7 +2240,6 @@ namespace SkyCompact {
extern uint16 gal_r_to_u[];
extern uint16 gal_r_to_d[];
extern uint16 gal_r_to_l[];
- extern uint16 *gallagher_turnTable[5][5];
extern ExtCompact gallagher_ext;
extern Compact gallagher;
extern uint16 sc73_joey_fight1[];
@@ -2386,7 +2379,6 @@ namespace SkyCompact {
extern uint16 ken_r_to_u[];
extern uint16 ken_r_to_d[];
extern uint16 ken_r_to_l[];
- extern uint16 *ken_turnTable[5][5];
extern ExtCompact ken_ext;
extern Compact ken;
extern uint16 sc76_floor_table[];
@@ -2992,7 +2984,6 @@ namespace SkyCompact {
extern uint16 lamb_r_to_u[];
extern uint16 lamb_r_to_d[];
extern uint16 lamb_r_to_l[];
- extern uint16 *lamb_turnTable[5][5];
extern ExtCompact lamb_ext;
extern Compact lamb;
extern uint16 bfoster_left[];
diff --git a/sky/struc.h b/sky/struc.h
index 90f1cfc090..367c2d2700 100644
--- a/sky/struc.h
+++ b/sky/struc.h
@@ -48,6 +48,14 @@ struct dataFileHeader {
uint16 s_compressed_size;
};
+struct TurnTable {
+ uint16 *turnTableUp[5];
+ uint16 *turnTableDown[5];
+ uint16 *turnTableLeft[5];
+ uint16 *turnTableRight[5];
+ uint16 *turnTableTalk[5];
+};
+
struct MegaSet {
uint16 gridWidth;
uint16 colOffset;
@@ -64,7 +72,7 @@ struct MegaSet {
uint16 *standLeft;
uint16 *standRight;
uint16 *standTalk;
- void *turnTable;
+ TurnTable *turnTable;
};
struct ExtCompact {