sm64coopdx/src/pc/controller/controller_keyboard_debug.c
2020-09-22 23:35:05 -07:00

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