Grapple Dog/Debug Features
This is a sub-page of Grapple Dog.
This article is a work in progress. ...Well, all the articles here are, in a way. But this one moreso, and the article may contain incomplete information and editor's notes. |
To do: 13 out of currently 28 known debug features fully documented. debugInputs needs rewrite/resort of info displayed. 3-11-2022, some new notes from 3.2.0:
And some other things:
|
From basic position indicators hidden away in object creation code to a button that deletes your save file instantly; you name it. This game has it all! Tucked away in the game files are a bunch of features used for debugging features or enemies for the game. Even as the game was receiving updates, some new debug features were created or outright disabled without further modding.
Contents
- 1 Main Debug Features (global.debugInputs)
- 2 Solid Object Visibility (global.solidVisible)
- 3 FMOD Effects Info (global.audioDebug)
- 4 Debug Textures (global.debugTextures)
- 5 Quality Assurance Info (QADebug)
- 6 Placeholder Player (animDebug)
- 7 Grapple Readout (hookDebug)
- 8 Storybook Intro (mouseDebug)
- 9 Bonus Island Info (bisland_drawdebug)
- 10 Camera (debug)
- 11 Grapple Path Door (debugPath)
- 12 Snake Chaser (debugDraw)
- 13 Snake (debugDraw)
- 14 Zipline (debug)
- 15 "Debug" HUD
- 16 Nap Time Achievement Countdown (acAlarm)
- 17 Bosses
- 18 Leftovers
Main Debug Features (global.debugInputs)
Setting global.debugInputs in oControl_Create to 1 will enable the game's general debug features. This gives you access to various keyboard and mouse shortcuts, as well as putting variables and other debug information on the screen in specific rooms.
General
- E - Return to the title screen.
- R - Restart current room. If you're in a level and haven't hit a checkpoint yet, the game will automatically send you to the first checkpoint.
- G - Set FPS / room speed to 5.
- H - Set FPS / room speed to 60.
- M - Show game debug readouts & enable the built-in Game Maker FPS counter. Pressing 1 or 2 lets you scroll through different readouts. You can also press C to finish a level, in which you're given all the gems and 200 fruits by default.
- Readout 0: Active "Control" objects & Save file progression flags.
- Readout 1: Instances / Objects in current room.
- Readout 2: Language. (Control object doesn't exist, goes unused.)
- Readout 3: Mushroom platform locations and activity time.
- Readout 4: Lantern platform visibility. (Platforms show up, but nothing changes when activated.)
- Readout 5: Windmill. (All windmill activity goes into Readout 3, goes unused.)
- Readout 6: Moving Grapple point locations (can only show a max of 3, only shows the points that are on-screen.).
- 8 - Save game data.
- 9 - Reload game data.
- 0 - Erase all game data.
Title Screen
Pressing T opens a level select. Pressing T a few times lets you scroll through different selected rooms, levels, bonus levels and boss battles.
Tutorial
Pressing the up arrow key will reset Pablo's position and restart the dropdown cutscene.
Overworld
Added by the v2.0.0 update, the overworld has by default a few lines written on the screen showing the game's FPS, how far the camera has moved from the center of Pablo and how many player objects exist on screen. A few button commands are here as well:
- T - Show stage progress, though it's broken as it always shows 0's. Extra prompts are accessed from this menu:
- L - Enter the level you last visited.
- 1 - Toggles the next world as not unlocked. Setting World 1 as not unlocked crashes the game.
- 2 - Toggles the next world as unlocked. The barrier separating the world doesn't break however.
- 3 - Remove 10 gems.
- 4 - Add 10 gems.
- Left Click - Teleport the boat to wherever your mouse cursor is in the window.
Gameplay
The same debug information from the overworld is displayed here. You can also left click to teleport Pablo to wherever your mouse cursor is.
Solid Object Visibility (global.solidVisible)
Setting global.solidVisible in oControl_Create to 1 will make oSolid visible, which helps for navigating through levels or areas that aren't tiled.
Some rooms are whitelisted to always keep the object's visibility off, regardless of changing the variable number. This list can be found in oSolid_Create and has visibility set to false for the following rooms:
- test_room_objects
- level_11_OutsetMountain
- boat_interior_room
- tutorial_room
- level_41_ColdRush
- level_moveplat1
FMOD Effects Info (global.audioDebug)
audio debug
Debug Textures (global.debugTextures)
Setting global.debugTextures in oControl_Create to 1 draws text across the screen for the entire game, indicating whether specific texture pages have sprites loaded from that page. All 10 pages are vaguely named to somewhat represents what the texture pages contain, though they seem to be out of order.
Quality Assurance Info (QADebug)
Setting QADebug in oUI_inlevel_Create to 1 will enable a simple readout meant for QA testers. This will show the game's FPS and which gems exist in a level.
Placeholder Player (animDebug)
Setting animDebug in oPlr_Create to 1 turns you into a red placeholder square with very basic animations.
Grapple Readout (hookDebug)
Setting hookDebug in oPlr_Create to 1 will put info on the screen when you grapple onto an object.
Storybook Intro (mouseDebug)
Setting mouseDebug in the script draw_page() will disable regular page flipping and instead map the page's top side to wherever your mouse cursor is. A line and circle will also be drawn around the top of the page.
Bonus Island Info (bisland_drawdebug)
bonus island drawout
Camera (debug)
camera debug
Grapple Path Door (debugPath)
the doors do a thing
Snake Chaser (debugDraw)
Setting debugDraw in oSnake_chase_Draw to 1 will draw variables and circles around the snake. The circles represents the body of the snake, and the two variables drawn above his head indicate the head depth and last depth values, both of which seem to be stuck at 90.
There's some additional text that should be drawn on screen, but this either no longer functions properly or isn't set to activate anymore.
Snake (debugDraw)
not to be confused with snake chase, this enemy is unused
Zipline (debug)
present in both oZipline and oZipline_old
"Debug" HUD
A variable titled debugHUDVisible exists in oUI_inlevel_Create, which doesn't really have any debug info, and seems to have just been an easy way to disable the paw HUD during gameplay, as its also linked to another variable titled HUDVisible.
Nap Time Achievement Countdown (acAlarm)
To do: Image. |
Present in oBoat_interior_bed_Draw is a small command that draws the frames you'll need to wait before you'll unlock the "Nap Time" achievement on Steam, and you can see it by dragging your mouse on the game's window. This was left enabled by accident in v1.0.1, and all remaining code was removed entirely in the next update.
Bosses
DRILL Boss Readout (debugDraw)
Not even unused bosses are safe from debug strings.
Setting debugDraw in oDrill_boss_create to 1 will draw some variables on the screen that change depending on the phase or attacks the boss does. There's no text to clearly indicate what variable does what, but it goes in order as follows:
- The current boss' phase.
- The frames before the boss emerges from the dirt.
- Indicates if ground drill 1 has emerged.
- Indicates if ground drill 2 has emerged.
- Indicates if ground drill 3 has emerged.
- The frames before the ground drills emerge from the dirt.
TANK Boss Readouts (drawDebug)
Setting drawDebug in oTank_boss_Create to 1 shows a lot of info, so much so that some text has transparency effects applied to them.
In the background is a row of values that's partially covered up by the HUD. These numbers indicate the boss' location, with 0 being the left side, 1 the middle and 2 the right side. The full list is as follows:
Seq 1 | Seq 2 | Seq 3 | Seq 4 | Seq 5 |
---|---|---|---|---|
0 | 0 | 0 | 2 | 0 |
1 | 1 | 1 | 0 | 1 |
0 | 2 | 2 | 1 | 2 |
1 | 1 | 0 | 2 | 1 |
2 | 2 | 0 | 0 | |
2 |
Below that is a list of sequences the boss will take, highlighted by increased transparency and an off-center circle. Once the boss takes damage, it'll move to the right where it'll play its next sequence. The full list is as follows:
Seq 1 | Seq 2 | Seq 3 | Seq 4 | Seq 5 |
---|---|---|---|---|
shoot | shoot | shoot | shoot | laser |
shoot | jump | jump | laser | jump |
shoot_open | shoot | shoot | jump | shoot |
shoot | jump | shoot | shoot | jump |
shoot_open | laser_open | laser_open | shoot | |
laser_open |
Lastly, the boss has some text drawn on screen of its own. This text is directly attached to the tank object itself, so you'll need to stand close to read any of it. The list shows in order:
- intro: Indicates if the boss' intro is active, which goes to 0 for the remainder of the fight.
- introAlarm: The amount of frames before the intro ends and the boss starts its first sequence, which starts at 120.
- markernum: The location value the boss will (or has) traveled to.
- seqAct: The phase the boss is currently at after taking damage. Starts at 0.
- seqNum: The sequence the boss is currently at. Starts at 0.
- attackAlarm: The last frames before the boss starts its attack, which only counts down from the last 40 frames.
- attackDone: When the boss rounds off its attack.
- attackEnd: The last frames before the boss ends its sequence, which only counts down for the last 25 frames.
FACE Boss Readouts (debugMode)
Setting debugMode in oBomber_boss_control_Create to 1 reveals detailed info for every phase of the boss. Some info is unfortuantely covered up by the HUD, but can be seen in full by disabling it.
The first phase (patrol) shows in order:
- index: The game's object index (at what number the game appears in the object list), which is in this case 531.
- slowRatio: The boss' horizontal move speed.
- travelTimes: When the boss starts its bullet shooting phase.
The second phase (player) shows the object index again, in this case 332.
The third phase (points) draws circles around the closest floor you're standing at, and it shows in order:
- index: The game's object index, in this case 61.
- change: The time before the boss finishes its attack and moves to another floor.
- speed: The boss' horizontal move speed.
- slamactive: When the boss prepares to slam the floor.
- slamfloor: The amount of left frames the boss has before it leaves the floor.
- slamease: The distance the boss has between his object and the floor, stays at 1 once the floor has been slammed.
- shootammo: The amount of remaining bullets (such as fireballs and bombs) the boss can shoot at you.
- start: The amount of frames the boss delays this phase, which can be a maximum of 20 frames.
The fourth phase (hurt) only shows hurtAlarm, which starts going down for the last 30 frames before the boss returns to its first phase.
DRAGON Boss Phase Display (drawDebug)
This boss' drawing script (as oDragon_boss_control_Draw) is a bit confusing, as it has two drawDebug functions on lines 10 and 17, line 10 of which has its value set to 1 by default. Setting the variable on line 17 to 1 will enable some basic boss phase info on the left side of the screen.
The boss can bring up the following active phases:
- intro
- fly
- shoot
- swing
MECHA Boss Hand Readout (debugMode)
Setting debugMode in oMecha_hand_behaviour to 1 will draw hand object info on the left side of the screen. This info shows in order:
- Which hand object this info is targeted towards (left or right).
- The active hand behaviour object.
- "Clamps", which is set to 0 once the boss formed a fist.
Additionally, a leftover debug string is present in oMecha_hand_behaviour_shoot_follow_Draw which would've set info on screen whenever the chasing bullet attack played. It's lacking any and all draw_text() functions.
Leftovers
Screenshot
One partially removed debug feature is present in oControl_Draw_74, where you could've taken a screenshot by pressing Q when global.debugInputs was set to 1. The script for this feature still exists, but no keyboard shortcut or variable is assigned.
DRAGON Boss
A variable titled debugMode is present in oDragon_boss_control_Create, though setting it to 1 does nothing.
MECHA Boss
A variable titled debugMode is present in oMecha_boss_control_Create and oMecha_boss_puppet_Create, and is even set to 1 by default, but it does absolutely nothing.