debug.ts
1 import { MOD_ID } from "$mod"; 2 import noita from "@noita-ts/base"; 3 import { Ptr } from "@noita-ts/ffi"; 4 import GLOBAL_STATS from "@noita-ts/ffi/global_stats"; 5 6 export default (sessionRender: Ptr<number>, prevBestRender: Ptr<number>) => { 7 // just init our memory so render doesn't show garbage 8 noita.on("PlayerSpawned", () => { 9 let streak = (ModSettingGet(MOD_ID + ".streak") || 0) as number; 10 const worst = (ModSettingGet(MOD_ID + ".worst") || 0) as number; 11 sessionRender[0] = -streak; 12 prevBestRender[0] = -worst; 13 }); 14 15 let debugGui: GuiID | undefined; 16 17 const renderDebug = (shade: number) => { 18 if (!debugGui) { 19 debugGui = GuiCreate(); 20 } 21 22 GuiStartFrame(debugGui); 23 24 const text = string.format( 25 "game: %d/%d | render: %d/%d | wins/deaths: (%d+%d)/%d", 26 GLOBAL_STATS.session.streak, 27 GLOBAL_STATS.highest.streak, 28 sessionRender[0], 29 prevBestRender[0], 30 GLOBAL_STATS.KEY_VALUE_STATS.get("progress_ending0") ?? 0, 31 GLOBAL_STATS.KEY_VALUE_STATS.get("progress_ending1") ?? 0, 32 GLOBAL_STATS.global.death_count, 33 ); 34 GuiColorSetForNextWidget(debugGui, shade, shade, shade, 1); 35 GuiText(debugGui, 65, 0, text); 36 37 GuiColorSetForNextWidget(debugGui, shade, shade, shade, 1); 38 const [left, right] = GuiButton(debugGui, 1, 65, 8, "[reset]"); 39 40 if (left) { 41 ModSettingSet(MOD_ID + ".streak", 0); 42 sessionRender[0] = 0; 43 } 44 45 if (right) { 46 ModSettingSet(MOD_ID + ".worst", 0); 47 prevBestRender[0] = 0; 48 } 49 50 GuiColorSetForNextWidget(debugGui, shade, shade, shade, 1); 51 const [left2, right2] = GuiButton(debugGui, 2, 100, 8, "[die/win]"); 52 53 if (left2) { 54 const [player] = EntityGetWithTag("player_unit"); 55 if (player !== null) { 56 EntityInflictDamage( 57 player, 58 999999, 59 "DAMAGE_PHYSICS_HIT", 60 "suicide", 61 "NORMAL", 62 0, 63 0, 64 ); 65 } 66 } 67 68 if (right2) { 69 GameAddFlagRun("ending_game_completed"); 70 AddFlagPersistent( 71 InputIsKeyDown(225) || InputIsKeyDown(229) // lshift/rshift 72 ? "progress_ending1" 73 : "progress_ending0", 74 ); 75 GameOnCompleted(); 76 const [player] = EntityGetWithTag("player_unit"); 77 if (player !== null) { 78 EntityInflictDamage( 79 player, 80 999999, 81 "DAMAGE_PHYSICS_HIT", 82 "he won", 83 "NORMAL", 84 0, 85 0, 86 ); 87 } 88 } 89 }; 90 91 noita.on("WorldPreUpdate", () => renderDebug(1)); 92 noita.on("PausePreUpdate", () => renderDebug(0.5)); 93 };