You've already forked Microtransactions64
mirror of
https://github.com/Print-and-Panic/Microtransactions64.git
synced 2026-01-21 10:17:19 -08:00
Bugfix: Change instant warps to use ints instead of shorts (#500)
Additionally clean up some inconsistencies surrounding instant warps
This commit is contained in:
@@ -377,9 +377,10 @@ enum GoddardScene {
|
||||
CMD_BBBB(destArea, destNode, flags, 0x00)
|
||||
|
||||
#define INSTANT_WARP(index, destArea, displaceX, displaceY, displaceZ) \
|
||||
CMD_BBBB(LEVEL_CMD_CREATE_INSTANT_WARP, 0x0C, index, destArea), \
|
||||
CMD_HH(displaceX, displaceY), \
|
||||
CMD_HH(displaceZ, 0x0000)
|
||||
CMD_BBBB(LEVEL_CMD_CREATE_INSTANT_WARP, 0x10, index, destArea), \
|
||||
CMD_W(displaceX), \
|
||||
CMD_W(displaceY), \
|
||||
CMD_W(displaceZ)
|
||||
|
||||
#define LOAD_AREA(area) \
|
||||
CMD_BBBB(LEVEL_CMD_LOAD_AREA, 0x04, area, 0x00)
|
||||
|
||||
@@ -227,6 +227,10 @@ enum SurfaceTypes {
|
||||
SURFACE_TRAPDOOR, // 0x00FF // Bowser Left trapdoor, has no action defined
|
||||
};
|
||||
|
||||
// From Surface 0x1B to 0x1E
|
||||
#define INSTANT_WARP_INDEX_START 0x00 // Equal and greater than Surface 0x1B
|
||||
#define INSTANT_WARP_INDEX_STOP 0x04 // Less than Surface 0x1F
|
||||
|
||||
#define SURFACE_IS_NEW_WATER(cmd) (((cmd) == SURFACE_NEW_WATER) || ((cmd) == SURFACE_NEW_WATER_BOTTOM))
|
||||
#define SURFACE_IS_QUICKSAND(cmd) ((((cmd) >= SURFACE_SHALLOW_QUICKSAND) && ((cmd) <= SURFACE_MOVING_QUICKSAND)) || ((cmd) == SURFACE_INSTANT_MOVING_QUICKSAND))
|
||||
#define SURFACE_IS_NOT_HARD(cmd) (((cmd) != SURFACE_HARD) && !((cmd) >= SURFACE_HARD_SLIPPERY && ((cmd) <= SURFACE_HARD_NOT_SLIPPERY)))
|
||||
@@ -238,7 +242,7 @@ enum SurfaceTypes {
|
||||
#define SURFACE_IS_PAINTING_WARP_LEFT(cmd) ((((cmd) - SURFACE_PAINTING_WARP_D3 ) % 3) == 0)
|
||||
#define SURFACE_IS_PAINTING_WARP_MIDDLE(cmd) ((((cmd) - SURFACE_PAINTING_WARP_D4 ) % 3) == 0)
|
||||
#define SURFACE_IS_PAINTING_WARP_RIGHT(cmd) ((((cmd) - SURFACE_PAINTING_WARP_D5 ) % 3) == 0)
|
||||
#define SURFACE_IS_INSTANT_WARP(cmd) (((cmd) >= SURFACE_INSTANT_WARP_1B) && ((cmd) <= SURFACE_INSTANT_WARP_1E))
|
||||
#define SURFACE_IS_INSTANT_WARP(cmd) (((cmd) >= SURFACE_INSTANT_WARP_1B) && ((cmd) < SURFACE_INSTANT_WARP_1B + INSTANT_WARP_INDEX_STOP))
|
||||
#define SURFACE_IS_WARP(cmd) (((cmd) == SURFACE_LOOK_UP_WARP) || ((cmd) == SURFACE_WOBBLING_WARP) || SURFACE_IS_PAINTING_WARP(cmd) || SURFACE_IS_INSTANT_WARP(cmd))
|
||||
#define SURFACE_IS_UNSAFE(cmd) (((cmd) == SURFACE_BURNING) || SURFACE_IS_QUICKSAND(cmd) || SURFACE_IS_WARP(cmd))
|
||||
|
||||
|
||||
@@ -540,12 +540,12 @@ static void level_cmd_create_instant_warp(void) {
|
||||
|
||||
warp = gAreas[sCurrAreaIndex].instantWarps + CMD_GET(u8, 2);
|
||||
|
||||
warp[0].id = 1;
|
||||
warp[0].id = SURFACE_INSTANT_WARP_1B + CMD_GET(u8, 2);
|
||||
warp[0].area = CMD_GET(u8, 3);
|
||||
|
||||
vec3s_set(warp[0].displacement, CMD_GET(s16, 4),
|
||||
CMD_GET(s16, 6),
|
||||
CMD_GET(s16, 8));
|
||||
warp[0].displacement[0] = CMD_GET(s32, 4);
|
||||
warp[0].displacement[1] = CMD_GET(s32, 8);
|
||||
warp[0].displacement[2] = CMD_GET(s32, 12);
|
||||
}
|
||||
|
||||
sCurrentCmd = CMD_NEXT;
|
||||
|
||||
@@ -20,14 +20,10 @@ struct ObjectWarpNode {
|
||||
/*0x08*/ struct ObjectWarpNode *next;
|
||||
};
|
||||
|
||||
// From Surface 0x1B to 0x1E
|
||||
#define INSTANT_WARP_INDEX_START 0x00 // Equal and greater than Surface 0x1B
|
||||
#define INSTANT_WARP_INDEX_STOP 0x04 // Less than Surface 0x1F
|
||||
|
||||
struct InstantWarp {
|
||||
/*0x00*/ u8 id; // 0 = 0x1B / 1 = 0x1C / 2 = 0x1D / 3 = 0x1E
|
||||
/*0x01*/ u8 area;
|
||||
/*0x02*/ Vec3s displacement;
|
||||
/*0x04*/ Vec3f displacement;
|
||||
};
|
||||
|
||||
struct SpawnInfo {
|
||||
|
||||
Reference in New Issue
Block a user