mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2025-12-07 00:22:27 +00:00
109 lines
No EOL
3.2 KiB
C
109 lines
No EOL
3.2 KiB
C
#include "controller_keyboard_debug.h"
|
|
#include "game/level_update.h"
|
|
#include "game/camera.h"
|
|
#include "pc/network/network.h"
|
|
|
|
#ifdef DEBUG
|
|
|
|
static u8 warpToLevel = LEVEL_SSL;
|
|
|
|
#define SCANCODE_0 0x0B
|
|
#define SCANCODE_3 0x04
|
|
#define SCANCODE_6 0x07
|
|
#define SCANCODE_7 0x08
|
|
|
|
static void debug_breakpoint_here(void) {
|
|
// create easy breakpoint position for debugging
|
|
}
|
|
|
|
static void debug_warp_level(u8 level) {
|
|
if (sCurrPlayMode == PLAY_MODE_CHANGE_LEVEL) { return; }
|
|
if (sCurrPlayMode == PLAY_MODE_SYNC_LEVEL) { return; }
|
|
|
|
// find level from painting
|
|
for (int i = 0; i < 45; i++) {
|
|
struct WarpNode* node = &gCurrentArea->paintingWarpNodes[i];
|
|
if (node == NULL) { break; }
|
|
if (node->destLevel == level) {
|
|
sWarpDest.type = WARP_TYPE_CHANGE_LEVEL;
|
|
sWarpDest.levelNum = node->destLevel;
|
|
sWarpDest.areaIdx = node->destArea;
|
|
sWarpDest.nodeId = node->destNode;
|
|
sWarpDest.arg = 0;
|
|
|
|
sCurrPlayMode = PLAY_MODE_SYNC_LEVEL;
|
|
network_send_level_warp_begin();
|
|
return;
|
|
}
|
|
}
|
|
|
|
struct ObjectWarpNode* objectNode = gCurrentArea->warpNodes;
|
|
while (objectNode != NULL) {
|
|
struct WarpNode* node = &objectNode->node;
|
|
if (node->destLevel == level) {
|
|
sWarpDest.type = WARP_TYPE_CHANGE_LEVEL;
|
|
sWarpDest.levelNum = node->destLevel;
|
|
sWarpDest.areaIdx = node->destArea;
|
|
sWarpDest.nodeId = node->destNode;
|
|
sWarpDest.arg = 0;
|
|
|
|
sCurrPlayMode = PLAY_MODE_SYNC_LEVEL;
|
|
network_send_level_warp_begin();
|
|
return;
|
|
}
|
|
objectNode = objectNode->next;
|
|
}
|
|
|
|
// failed, go to main castle area
|
|
sWarpDest.type = WARP_TYPE_CHANGE_LEVEL;
|
|
sWarpDest.levelNum = LEVEL_CASTLE;
|
|
sWarpDest.areaIdx = 1;
|
|
sWarpDest.nodeId = 0x1F;
|
|
sWarpDest.arg = 0;
|
|
sCurrPlayMode = PLAY_MODE_SYNC_LEVEL;
|
|
D_80339ECA = 0;
|
|
D_80339EE0 = 0;
|
|
extern s16 gSavedCourseNum;
|
|
gSavedCourseNum = 0;
|
|
network_send_level_warp_begin();
|
|
}
|
|
|
|
static void debug_warp_area() {
|
|
if (sCurrPlayMode == PLAY_MODE_CHANGE_LEVEL) { return; }
|
|
if (sCurrPlayMode == PLAY_MODE_SYNC_LEVEL) { return; }
|
|
|
|
struct ObjectWarpNode* objectNode = gCurrentArea->warpNodes;
|
|
while (objectNode != NULL) {
|
|
struct WarpNode* node = &objectNode->node;
|
|
if (node->destLevel == gCurrLevelNum && node->destArea != gCurrAreaIndex) {
|
|
sWarpDest.type = WARP_TYPE_CHANGE_AREA;
|
|
sWarpDest.levelNum = node->destLevel;
|
|
sWarpDest.areaIdx = node->destArea;
|
|
sWarpDest.nodeId = node->destNode;
|
|
sWarpDest.arg = 0;
|
|
|
|
sCurrPlayMode = PLAY_MODE_SYNC_LEVEL;
|
|
network_send_level_warp_begin();
|
|
return;
|
|
}
|
|
objectNode = objectNode->next;
|
|
}
|
|
}
|
|
|
|
static void debug_suicide(void) {
|
|
gMarioStates[0].hurtCounter = 31;
|
|
}
|
|
|
|
void debug_keyboard_on_key_down(int scancode) {
|
|
scancode = scancode;
|
|
switch (scancode) {
|
|
case SCANCODE_3: debug_breakpoint_here(); break;
|
|
#ifdef DEVELOPMENT
|
|
case SCANCODE_6: debug_warp_level(warpToLevel); break;
|
|
case SCANCODE_7: debug_warp_area(); break;
|
|
case SCANCODE_0: debug_suicide(); break;
|
|
#endif
|
|
}
|
|
}
|
|
|
|
#endif |