From 5e090551e0905376316d7f27c6d066b14cb5b9bb Mon Sep 17 00:00:00 2001 From: <> Date: Sat, 4 May 2024 17:09:38 +0000 Subject: [PATCH] Deployed 9e2b823c with MkDocs version: 1.5.3 --- .../rangers/levels/ids/index.html | 77 +++++++- search/search_index.json | 2 +- sitemap.xml | 168 +++++++++--------- sitemap.xml.gz | Bin 877 -> 878 bytes 4 files changed, 161 insertions(+), 86 deletions(-) diff --git a/docs/hedgehog-engine/rangers/levels/ids/index.html b/docs/hedgehog-engine/rangers/levels/ids/index.html index d3511850..39d4d22d 100644 --- a/docs/hedgehog-engine/rangers/levels/ids/index.html +++ b/docs/hedgehog-engine/rangers/levels/ids/index.html @@ -5235,6 +5235,15 @@ + + +
Stage Name | +Gedit ID | +Terrain ID | +
---|---|---|
4-A | +w6d21 | +w6d02 | +
4-B | +w6d22 | +w6d04 | +
4-C | +w6d23 | +w6d10 | +
4-D | +w7d21 | +w7d01 | +
4-E | +w7d22 | +w7d04 | +
4-F | +w7d23 | +w7d06 | +
4-G | +w9d21 | +w9d02 | +
4-H | +w9d22 | +w9d03 | +
4-I | +w9d23 | +w9d06 | +
Due to Ouranos and Rhea actually being part of Kronos, their map files are stored in w1:
There's an unused gauge that was supposed to be used in the Time Eater boss battle. The gauge is present in bb.cpk/SonicActionCommonHud/ui_gameplay.xncp
, in the blb_gauge
XNCP scene. Unfortunately, this gauge isn't functional in-game, and its usage also remains unknown.
Visually, this element appears to be finished, and it even features animations. Below you can see the available animations for this element. Some were recorded in-game, but others were recorded using a WIP build of Shuriken, which may not be 100% accurate.
"},{"location":"discoveries/blueblur/hud/blb_gauge/#intro_anim","title":"Intro_Anim","text":"Following the naming scheme of almost every XNCP animation made for Generations, this was supposed to be played whenever the HUD element showed up on screen. Simple slide-in animation.
"},{"location":"discoveries/blueblur/hud/blb_gauge/#change_c2g-change_g2c","title":"change_c2g / change_g2c","text":"These animations are played whenever you switch between Classic Sonic to Modern Sonic and vice versa. The video below shows a recording of the animation in-game.
"},{"location":"discoveries/blueblur/hud/blb_gauge/#change_c2w-change_g2w","title":"change_c2w / change_g2w","text":"Seems like these were supposed to be animations for changing to an intermediate state between Classic and Modern Sonic, like in the final part of the boss battle. The \"w\" means \"double\" in japanese.
"},{"location":"discoveries/blueblur/hud/blb_gauge/#cl_gauge_size_1","title":"cl_gauge_size_1","text":"Animation for Classic Sonic's gauge.
"},{"location":"discoveries/blueblur/hud/blb_gauge/#gn_gauge_size_1","title":"gn_gauge_size_1","text":"Animation for Modern Sonic's gauge.
"},{"location":"discoveries/sonic2010/objects/unused/","title":"Unused Objects","text":""},{"location":"discoveries/sonic2010/objects/unused/#objects","title":"Objects","text":""},{"location":"discoveries/sonic2010/objects/unused/#appearthornball","title":"AppearThornBall","text":"Important
This section is missing some information. Help us fill it in!
"},{"location":"discoveries/sonic2010/objects/unused/#shadow","title":"Shadow","text":"Important
This section is missing some information. Help us fill it in!
"},{"location":"discoveries/sonic2010/objects/unused/#spinlaserstraightmove","title":"SpinLaserStraightMove","text":"An unused, moving variant of the spinning laser object seen in various levels of Sweet Mountain and Asteroid Coaster.
Important
This section is missing some information. Help us fill it in!
"},{"location":"discoveries/sonic2010/objects/unused/#spinlaserpathmove","title":"SpinLaserPathMove","text":"An unused, variant of the spinning laser object seen in various levels of Sweet Mountain and Asteroid Coaster, which moves along a path.
Important
This section is missing some information. Help us fill it in!
"},{"location":"discoveries/sonic2010/objects/unused/#rotationglobe","title":"RotationGlobe","text":"An unused object meant to be used by the spike wisp in gameplay. When using a spike wisp the player will be constantly rotated in spin direction of the object whilst in contact with it. The object has 3 different sizes that it can appear at. A new variant of this object was made for Sonic Generations Planet Wisp Act 1 called plaGearFloor
.
An unused, golden variant of the normal enmSpanner (Thunder Spinner) enemy. Much like the metal variant of enmSpinner (Spinner), this variant of the Thunder Spinner is also indestructable.
"},{"location":"discoveries/sonic2010/objects/unused/#enmsparva-thunder-larva","title":"enmSparva (Thunder Larva)","text":"An unused, electric variant of the normal enmLarva (Larva) enemy.
"},{"location":"discoveries/sonic2010/objects/unused/#chaserbomb","title":"ChaserBomb","text":"Important
This section is missing some information. Help us fill it in!
"},{"location":"discoveries/sonic2010/objects/unused/#cameras","title":"Cameras","text":""},{"location":"discoveries/sonic2010/objects/unused/#objectlookcamera","title":"ObjectLookCamera","text":"Important
This section is missing some information. Help us fill it in!
"},{"location":"discoveries/sonic2010/objects/unused/#colliders","title":"Colliders","text":""},{"location":"discoveries/sonic2010/objects/unused/#chagemode_3dtodash-event-dimension-change-3d-to-dash","title":"ChageMode_3DtoDash (Event Dimension Change 3D to Dash)","text":"Important
This section is missing some information. Help us fill it in!
"},{"location":"discoveries/sonic2010/objects/unused/#rollercoastercollision","title":"RollerCoasterCollision","text":"Important
This section is missing some information. Help us fill it in!
"},{"location":"discoveries/sonic2010/objects/unused/#motoraeventcollision","title":"MotoraEventCollision","text":"Important
This section is missing some information. Help us fill it in!
"},{"location":"discoveries/sonic2010/objects/unused/#test-objects","title":"Test Objects","text":""},{"location":"discoveries/sonic2010/objects/unused/#testobj","title":"TestObj","text":"Important
This section is missing some information. Help us fill it in!
"},{"location":"discoveries/sonic2010/objects/unused/#ccttestobj","title":"CCTTestObj","text":"Important
This section is missing some information. Help us fill it in!
"},{"location":"discoveries/sonic2013/cutscenes/levels/","title":"Real-Time Cutscene Levels","text":"Empty folders can be found for the real-time cutscene levels in the raw folder found within the Wii U release of the game. These folders are listed below.
raw\n\u251c\u2500\u2500 event\n| |\u2500\u2500 scene\n\u2502 | \u251c\u2500\u2500 ev000\n\u2502 \u2502 \u251c\u2500\u2500 ev120\n\u2502 \u2502 \u251c\u2500\u2500 ev125\n\u2502 \u2502 \u251c\u2500\u2500 ev130\n\u2502 \u2502 \u251c\u2500\u2500 ev140\n\u2502 \u2502 \u251c\u2500\u2500 ev150\n\u2502 \u2502 \u251c\u2500\u2500 ev210\n\u2502 \u2502 \u251c\u2500\u2500 ev220\n\u2502 \u2502 \u251c\u2500\u2500 ev230\n\u2502 \u2502 \u251c\u2500\u2500 ev240\n\u2502 \u2502 \u251c\u2500\u2500 ev250\n\u2502 \u2502 \u251c\u2500\u2500 ev310\n\u2502 \u2502 \u251c\u2500\u2500 ev320\n\u2502 \u2502 \u251c\u2500\u2500 ev330\n\u2502 \u2502 \u251c\u2500\u2500 ev345\n\u2502 \u2502 \u251c\u2500\u2500 ev350\n\u2502 \u2502 \u251c\u2500\u2500 ev360\n\u2502 \u2502 \u251c\u2500\u2500 ev410\n\u2502 \u2502 \u251c\u2500\u2500 ev420\n\u2502 \u2502 \u251c\u2500\u2500 ev430\n\u2502 \u2502 \u251c\u2500\u2500 ev435\n\u2502 \u2502 \u251c\u2500\u2500 ev440\n\u2502 \u2502 \u251c\u2500\u2500 ev450\n\u2502 \u2502 \u251c\u2500\u2500 ev510\n\u2502 \u2502 \u251c\u2500\u2500 ev520\n\u2502 \u2502 \u251c\u2500\u2500 ev530\n\u2502 \u2502 \u251c\u2500\u2500 ev540\n\u2502 \u2502 \u251c\u2500\u2500 ev550\n\u2502 \u2502 \u251c\u2500\u2500 ev610\n\u2502 \u2502 \u251c\u2500\u2500 ev620\n\u2502 \u2502 \u251c\u2500\u2500 ev630\n\u2502 \u2502 \u251c\u2500\u2500 ev642\n\u2502 \u2502 \u251c\u2500\u2500 ev645\n\u2502 \u2502 \u251c\u2500\u2500 ev650\n\u2502 \u2502 \u251c\u2500\u2500 ev720\n\u2502 \u2502 \u251c\u2500\u2500 ev730\n\u2502 \u2502 \u251c\u2500\u2500 ev740\n\u2502 \u2502 \u251c\u2500\u2500 ev750\n\u2502 \u2502 \u251c\u2500\u2500 ev755\n\u2502 \u2502 \u251c\u2500\u2500 ev757\n\u2502 \u2502 \u251c\u2500\u2500 ev760\n\u2502 \u2502 \u251c\u2500\u2500 ev764\n\u2502 \u2502 \u251c\u2500\u2500 ev770\n| |\u2500\u2500 stage\n\u2502 | \u251c\u2500\u2500 ev000\n\u2502 \u2502 \u251c\u2500\u2500 ev120\n\u2502 \u2502 \u251c\u2500\u2500 ev130\n\u2502 \u2502 \u251c\u2500\u2500 ev140\n\u2502 \u2502 \u251c\u2500\u2500 ev150\n\u2502 \u2502 \u251c\u2500\u2500 ev210\n\u2502 \u2502 \u251c\u2500\u2500 ev220\n\u2502 \u2502 \u251c\u2500\u2500 ev250\n\u2502 \u2502 \u251c\u2500\u2500 ev342\n\u2502 \u2502 \u251c\u2500\u2500 ev350\n\u2502 \u2502 \u251c\u2500\u2500 ev430\n\u2502 \u2502 \u251c\u2500\u2500 ev440\n\u2502 \u2502 \u251c\u2500\u2500 ev520\n\u2502 \u2502 \u251c\u2500\u2500 ev530\n\u2502 \u2502 \u251c\u2500\u2500 ev620\n\u2502 \u2502 \u251c\u2500\u2500 ev642\n\u2502 \u2502 \u251c\u2500\u2500 ev645\n\u2502 \u2502 \u251c\u2500\u2500 ev710\n\u2502 \u2502 \u251c\u2500\u2500 ev720\n\u2502 \u2502 \u251c\u2500\u2500 ev750\n
"},{"location":"discoveries/sonic2013/levels/colors/","title":"Colors Leftovers","text":""},{"location":"discoveries/sonic2013/levels/colors/#tropical-resort-act-1","title":"Tropical Resort Act 1","text":"There\u2019s an unused Tropical Resort Act 1 entry in Sonic Lost World\u2019s actstgmission.lua
file.
mission_all = {\n -- RSO(\u30ea\u30be\u30fc\u30c8\u9762)\n {\n missions = {\n -- \uff21\uff23\uff34\uff11\uff08\u65e7\uff21\uff23\uff34\uff11\u306e\u524d\u534a\u90e8\u5206\uff09\n {\n name = \"stg110\",\n data = \"stg110\",\n player_pos = { -11942.84, 1575.931, 16972.49 },\n player_dir = { 0.0, -159.2, 0.0 },\n start_event = 1,\n bgm = \"bgm_stg110_rso\",\n phantoms = { \"laser\", \"drill\" },\n result_bg = \"result_01_rso_act1\",\n\n --\u3010\u30b9\u30b3\u30a2\u8a2d\u5b9a\u9818\u57df\u3011\n score = {\n rank = {\n 60, -- S rank (\u30b4\u30fc\u30eb\u79d2\u6570)\n 120, -- A rank\n 180, -- B rank\n 240, -- C rank\n 320, -- D rank\n },\n time_basis = 320000,\n time_down = 1100,\n\n no_miss = {\n 280000,\n 210000,\n 182000,\n 56000,\n 28000,\n },\n\n },\n },\n },\n },\n}\n
Only thing changed in this entry from the Sonic Colors version is that player_dir
takes in a 3D value, just like every other Sonic Lost World entry.
The entire score
block, start_event
and result_bg
are leftovers from Colors as well, as those values are not read by Sonic Lost World's lua parser function.
This file is responsible for serving information to the game regarding stages, such as where the player should start at or what folder to read the assets for the stage from.
"},{"location":"discoveries/sonic2013/levels/colors/#test-levels","title":"Test Levels","text":"Due to the release of Sonic Colors Ultimate we can identify a few test levels from Sonic Colors that were reused in Sonic Lost World.
actstgmission.luatest_mission_all = {\n -- \u30d7\u30ed\u30b0\u30e9\u30de\u30c6\u30b9\u30c8.\n {\n missions = {\n -- mission test(stg901)\n {\n name = \"stg901\",\n dir = \"test/stg901\",\n player_pos = { 0, 0, 0 },\n player_dir = { 0.0, 0.0, 0.0 },\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\", \"asteroid\" },\n --\u3010\u30b9\u30b3\u30a2\u8a2d\u5b9a\u9818\u57df\u3011\n score = {\n rank = {\n 800000, -- S rank\n 700000, -- A rank\n 450000, -- B rank\n 200000, -- C rank\n },\n time_basis = 10000,\n time_down = 500,\n\n no_miss = {\n 100000,\n 50000,\n 25000,\n 10000,\n 0,\n },\n },\n },\n -- mission test(stg902)\n {\n name = \"stg902\",\n dir = \"test/stg902\",\n player_pos = { 0, 0, 0 },\n player_dir = { 0.0, -180.0, 0.0 },\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\", \"asteroid\" },\n },\n },\n },\n}\n
The only difference here when compared to the Colors version is that the entries used take a 3D value for the player_dir
tag and the inclusion of the asteroid
wisp in the phantoms
tag.
stage_all = {\n -- \u30c6\u30b9\u30c8\u30b9\u30c6\u30fc\u30b8\n {\n title = \"\u30c6\u30b9\u30c8\u30b9\u30c6\u30fc\u30b8\",\n\n stages = {\n -- \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30c6\u30b9\u30c8\u7528\n {\n name = \"stg901\",\n title = \"\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30c6\u30b9\u30c8\u30de\u30c3\u30d7\",\n },\n -- \u897f\u6751\u30c6\u30b9\u30c8\u30de\u30c3\u30d7\n {\n name = \"stg902\",\n title = \"\u897f\u6751\u30c6\u30b9\u30c8\u30de\u30c3\u30d7\",\n },\n -- Multi\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30c6\u30b9\u30c8\u7528\n {\n name = \"stg905\",\n title = \"Multi\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30c6\u30b9\u30c8\u30de\u30c3\u30d7\",\n },\n },\n },\n}\n
The Japanese titles translate to the same values in Sonic Colors Ultimate's files.
"},{"location":"discoveries/sonic2013/levels/colors/#actstgdatalua","title":"actstgdata.lua","text":"This file was only meant to be used by the game's debug menu, which does not exist in the final release, thus making the file a leftover.
"},{"location":"discoveries/sonic2013/levels/deleted/","title":"Deleted Levels","text":"There are several levels that have been removed from the game, but their entries can still be found in actstgmission.lua
.
mission_all = {\n {\n missions = {\n --old stage\n -- w2-a03 \u53e4\u4ee3\u90fd\u5e02\n {\n name = \"w2a03\",\n data = \"w2a03\",\n player_pos = { 0.00, 0.00, 51.00 },\n player_dir = { 0.0, 180.0, 0.0 },\n },\n -- w2-a04 \u30bf\u30ab\u30a2\u30b7\u30ac\u30cb\n {\n name = \"w2a04\",\n data = \"w2a04\",\n player_pos = { 2.19, 0.47, 0.49 },\n player_dir = { 0.0, 90.0, 0.0 },\n player_mode = \"2D\",\n },\n -- w2-a05 \u30b5\u30f3\u30c9\u30ef\u30fc\u30e0\u4f53\u5185\n {\n name = \"w2a05\",\n data = \"w2a05\",\n player_pos = { -1000.29, 540.33, -7.00 },\n player_dir = { 0.0, 180.0, 0.0 },\n player_mode = \"2D\",\n },\n -- w3-a07 \u5357\u56fd\u30d3\u30fc\u30c12\n {\n name = \"w3a07\",\n data = \"w3a07\",\n player_pos = { -0.54, 0.44, 105.00 },\n player_dir = { 0.0, 180.0, 0.0 },\n },\n\n -- w1-a02 \u30a4\u30f3\u30c7\u30a3\u6d1e\u7a9f\n {\n name = \"w1a02\",\n data = \"w1a02\",\n player_pos = { 50.1, -10.55, -188.27 },\n player_dir = { 0.0, 180.0, 0.0 },\n },\n -- w1-a05 \u30e2\u30a2\u30a4\n {\n name = \"w1a05\",\n data = \"w1a05\",\n player_pos = { 80, 10067.96, 0 },\n player_dir = { 0.0, 90.0, 0.0 },\n player_mode = \"2D\",\n },\n -- w1-c01 \u30ad\u30f3\u6597\u96f2\n {\n name = \"w1c01\",\n data = \"w1c01\",\n player_pos = { 0.00, -95.00, 30.00 },\n player_dir = { 0.0, 180.0, 0.0 },\n },\n -- w2-a02 \u30b9\u30ab\u30a4\u30c1\u30a7\u30a4\u30b9\n {\n name = \"w2a02\",\n data = \"w2a02\",\n player_pos = { 2401.1, 63.06, 3125.81 },\n player_dir = { 0.0, 180.0, 0.0 },\n player_mode = \"SKYCHASE\"\n },\n -- w4-a02 \u30a4\u30f3\u30c7\u30a3\u6d1e\u7a9f2\n {\n name = \"w4a02\",\n data = \"w4a02\",\n player_pos = { -0.18, -52.03, -73.52 },\n player_dir = { 0.0, 180.0, 0.0 },\n },\n -- w4-a03 ilomilo\u304a\u83d3\u5b50\n {\n name = \"w4a03\",\n data = \"w4a03\",\n player_pos = { -1.08, 3.02, -3.30 },\n player_dir = { 0.0, 90.0, 0.0 },\n player_mode = \"2D\",\n },\n },\n },\n}\n
"},{"location":"discoveries/sonic2013/levels/original-order/","title":"Original Level Order","text":""},{"location":"discoveries/sonic2013/levels/original-order/#partial-original-order","title":"Partial Original Order","text":"Up to a point the game's original level order can be revealed to us by investigating the game's leftover actstgdata.lua
file.
old_stage_all = {\n -- w1\n {\n title = \"w1\u8349\u539f\",\n\n stages = {\n {\n name = \"w1a01\",\n title = \"w1-1:\u30b0\u30e9\u30b9\u30d2\u30eb\",\n },\n {\n name = \"w1a02\",\n title = \"w1-2:\u30a4\u30f3\u30c7\u30a3\u6d1e\u7a9f\",\n },\n {\n name = \"w1a03\",\n title = \"w1-3:\u6708\u5149\",\n },\n {\n name = \"w1a04\",\n title = \"w1-4:\u5927\u30ca\u30fc\u30eb\u8ecd\",\n },\n {\n name = \"w1a05\",\n title = \"w1-5:\u30e2\u30a2\u30a4\",\n },\n {\n name = \"w1c01\",\n title = \"w1-A:\u30ad\u30f3\u6597\u96f2\",\n },\n },\n },\n -- w2\n {\n title = \"w2\u7802\u6f20\",\n\n stages = {\n {\n name = \"w2a01\",\n title = \"w2-1:\u30b5\u30f3\u30c9\u30ef\u30fc\u30e0\u8ecd\",\n },\n {\n name = \"w2a02\",\n title = \"w2-2:\u30b9\u30ab\u30a4\u30c1\u30a7\u30a4\u30b9\",\n },\n {\n name = \"w2a03\",\n title = \"w2-3:\u53e4\u4ee3\u90fd\u5e02\",\n },\n {\n name = \"w2a04\",\n title = \"w2-4:\u30bf\u30ab\u30a2\u30b7\u30ac\u30cb\",\n },\n {\n name = \"w2a05\",\n title = \"w2-5:\u30b5\u30f3\u30c9\u30ef\u30fc\u30e0\u4f53\u5185\",\n },\n {\n name = \"w2a06\",\n title = \"w2-6:\u7adc\u5dfb\",\n },\n {\n name = \"w2c01\",\n title = \"w2-A:\u9ec4\u8272\u4e09\u9023\u30d0\u30cd\",\n },\n },\n },\n -- w3\n {\n title = \"w3\u5357\u56fd\",\n\n stages = {\n {\n name = \"w3a01\",\n title = \"w3-1:\u5357\u56fd\u30d3\u30fc\u30c1\",\n },\n {\n name = \"w3a03\",\n title = \"w3-3:\u30d5\u30eb\u30fc\u30c4\u8fb2\u5712\",\n },\n {\n name = \"w3a07\",\n title = \"w3-7:\u5357\u56fd\u30d3\u30fc\u30c12\",\n },\n },\n },\n -- w4\n {\n title = \"w4\u96ea\",\n\n stages = {\n {\n name = \"w4a01\",\n title = \"w4-1:\u8ecd\u4e8b\u5de5\u5834\",\n },\n {\n name = \"w4a02\",\n title = \"w4-2:\u30a4\u30f3\u30c7\u30a3\u6d1e\u7a9f2\",\n },\n {\n name = \"w4a03\",\n title = \"w4-3:ilomilo\u304a\u83d3\u5b50\",\n },\n },\n },\n -- w5\n {\n title = \"w5\u30b8\u30e3\u30f3\u30b0\u30eb\",\n\n stages = {\n {\n name = \"w5a01\",\n title = \"w5-1:\u30b8\u30e3\u30f3\u30b0\u30eb\u8ecc\u9053\u65bd\u8a2d\",\n },\n },\n },\n}\n
Many of these levels have been deleted. However, there's plenty of changes we can dissect in this list.
"},{"location":"discoveries/sonic2013/levels/original-order/#windy-hill","title":"Windy Hill","text":"Final Original w1a01 w1a01 w1a03 w1a02 xind01 w1a03 w1a06 w1a04 w1a05 w1c01"},{"location":"discoveries/sonic2013/levels/original-order/#w1a02","title":"w1a02","text":"Starting off just like the final, it swiftly changes gears by heading into w1a02
instead of w1a03
. However, checking the description of the level (\u30a4\u30f3\u30c7\u30a3\u6d1e\u7a9f), it matches up with the final game's xind01
suggesting the two stages are one and the same, however the starting positions don't line up.
The following level is w1a03
, meaning Act 3 and Act 2 were likely swapped around early into development.
The order then continues with w1a04
, which is originally used as Sky Road Act 1. This suggests that this level was meant to be used in Windy Hill, which is supported by the fact that the level shares a very similar look with that area of the game.
w1a05
shares its description (\u30e2\u30a2\u30a4) with the level xmoa01 (Silent Forest Act 4)
suggesting, just like the previous stage, it was to come much sooner into the game, however once again the starting positions don't line up.
Looking at xmoa01
's set data reveals a few leftover objects in the sky around w1a05
's spawn position. This list includes: 4x - ObjPointSoundSource 1x - ObjGiantMoaiOut 1x - ObjGFieldConstant 1x - EventVolumeCameraChange 1x - GPathCamera 1x - GoalRing 1x - SetRigidBody
The spawn position being so close to the GoalRing means the level was more than likely supposed to start close to its end, though not meaning it was a short level as the Moai objects function as warp objects.
"},{"location":"discoveries/sonic2013/levels/original-order/#w1c01","title":"w1c01","text":"Finally for Windy Hill there's w1c01
. Taking note of the change from a
to a c
, it seems this level wasn't meant to be a normal act but a challenge level. Looking at the description (\u30ad\u30f3\u6597\u96f2) once again, it reveals to us that this level is non-other than xnim01 (Hidden World Act 1)
from the final game, however once again there's a small difference in starting locations.
Interestingly enough this leaves the final game's second encounter with Zazz in w1a06
nowhere to be seen.
Starting off just like the final, it swiftly changes gears by heading into w2a02
instead of xbee01
. However, checking the description of the level (\u30b9\u30ab\u30a4\u30c1\u30a7\u30a4\u30b9), it matches up with the final game's xsky01
, suggesting the two stages are one and the same, however the starting positions don't line up. Interestingly enough this level also has the SKYCHASE
tag, meaning it was a level where you controlled the Tornado just like the final iteration of the stage.
Test level stg823
has the following comment, which is about this level: w2-2\uff1a\u76f4\u5f8420\uff4d\u30c6\u30b9\u30c8
. This comment roughly translates to World 2-2: 20m Diameter Test
.
This level sadly does not have a final counterpart in the release of the game. Its description roughly translates to Ancient City
.
This level sadly does not have a final counterpart in the release of the game. Its description roughly translates to Japanese Spider Crab
.
This level sadly does not have a final counterpart in the release of the game. Its description roughly translates to Sandworm Body
.
w2c01
is the final level of the original order for Desert Ruins, but it's actually used as Sky Road Act 4 in the final game. The aesthetics of the area does match up with the look of Desert Ruins, so it's quite likely that this level was supposed to be there originally. The description for this level roughly translates to \"Yellow Triple Spring\", meaning it was very likely going to function like the Yellow Spring levels from Sonic Colors. This is supported by the fact that the Moving Springs in the level behave very similarly to the Yellow Springs in Sonic Colors.
From here on out the original level order becomes very segmented with barely any trace left of it.
Final Original w3a01 w3a01 w3a03 xsea01 w3a03 w3a06 w6a03 w3a07"},{"location":"discoveries/sonic2013/levels/original-order/#w3a07","title":"w3a07","text":"This level sadly does not have a final counterpart in the release of the game. Its description is the same as w3a01
's with but it has a 2
at the end.
The second level instead of being w4a04
is w4a02
. However, checking the description of the level (\u30a4\u30f3\u30c7\u30a3\u6d1e\u7a9f2), it matches up with the final game's xind02 (Silent Forest Act 3)
suggesting the two stages are one and the same, however the starting positions don't line up.
The third level instead of being xcas01
is w4a03
. However, checking the description of the level (ilomilo\u304a\u83d3\u5b50), it matches up with the final game's xswe01 (Desert Ruins Act 3)
suggesting the two stages are one and the same, however the starting positions don't line up.
Inside the configuration file for the level xswe01
, the file is still called w4a03_config.lua
, however the brief
section states it's a configuration file for w2a05
.
---------------------------------------------------------------\n-- @file w4a03_config.lua\n-- @author Jibiki_Hisae\n-- @brief w2-5 \u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\n-- @data 2012/7/20\n---------------------------------------------------------------\n
"},{"location":"discoveries/sonic2013/levels/original-order/#silent-forest","title":"Silent Forest","text":"Final Original w5a01 w5a01 w5a02 xind02 xmoa01"},{"location":"discoveries/sonic2013/levels/original-order/#sky-road","title":"Sky Road","text":""},{"location":"discoveries/sonic2013/levels/original-order/#w6a03","title":"w6a03","text":"The secret level of Tropical Coast in the final game. As most of Sky Roads levels seem to come from elsewhere, it's hard to make a proper judgement on whether the stage would aesthetically belong in Sky Road or not, it does however play very similarly to w6a05
, Sky Road's Act 3. The configuration file for the level does state that it belongs to Sky Road as well.
---------------------------------------------------------------\n-- @file w6a03_config.lua\n-- @author Yoshitaka Miura\n-- @brief w6-3 \u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\n-- @data 2012/10/30\n---------------------------------------------------------------\n
"},{"location":"discoveries/sonic2013/levels/original-order/#w6a05","title":"w6a05","text":"Inside the configuration file for the level xnim02
the brief
section states it's a configuration file for w6a05
. xnim02_config.lua
---------------------------------------------------------------\n-- @file xnim02_config.lua\n-- @author Yoshitaka_Miura\n-- @brief w6-5 \u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\n-- @data 2013/5/4\n---------------------------------------------------------------\n
"},{"location":"discoveries/sonic2013/levels/original-order/#speculative-additions","title":"Speculative Additions","text":"This section includes educated guesses due to lack of leftover data from the game.
"},{"location":"discoveries/sonic2013/levels/original-order/#tropical-coast_1","title":"Tropical Coast","text":"w3a02
, w3a04
, and w3c01
are nowhere to be seen. It's possible that these levels turned into one of the levels that don't start with the world number, or that they didn't exist to begin with. As the stage originally had a 7th act it's possible that is what would have been the equivalent of w3c01
in this zone.
Test level w0a04
has the following comment, which is about this level: w3-5\uff1aSV\u30ab\u30b8\u30ce\u30c6\u30b9\u30c8\uff08w0a04\uff09
. This comment roughly translates to World 3-5: Sideview Casino Test (w0a04)
. This could mean that w3a05
turned into xcas01
later on into development, which is housed in Frozen Factory in the final game.
w4a05
and w4c01
are nowhere to be seen. It's possible that these levels turned into one of the levels that don't start with the world number, or that they didn't exist to begin with.
w5a04
, w5a05
, w5a06
and w5c01
are nowhere to be seen.It's possible that these levels turned into one of the levels that don't start with the world number, or that they didn't exist to begin with.
The second level of Sky Road in the original game. The overall aesthetic of the level does match up with Silent Forest, which suggests it really did belong to Silent Forest at some point.
"},{"location":"discoveries/sonic2013/levels/original-order/#sky-road_1","title":"Sky Road","text":"w6a01
, w6a02
, w6a06
and w6c01
are nowhere to be seen. It's possible that these levels turned into one of the levels that don't start with the world number, or that they didn't exist to begin with.
w7a04
, w7a05
and w7c01
are nowhere to be seen. It's possible that these levels turned into one of the levels that don't start with the world number, or that they didn't exist to begin with.
There are several entries for test levels leftover in Sonic Lost World's testmission.lua
file.
Some of these entries are using the naming scheme from Sonic Colors for stage names, that being stgXYY
. Another chunk of the entries are named according to the scheme standardized in Sonic Lost World, w0xYY
.
---------------------------------------------------------------\n-- @file testmission.lua\n-- @author Kawabata Yoshitaka\n-- @brief \u30c6\u30b9\u30c8\u7528\u30df\u30c3\u30b7\u30e7\u30f3\u3092\u5b9a\u7fa9\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u3067\u3059\n---------------------------------------------------------------\n\ntest_mission_all = {\n\n -- \u30d7\u30ed\u30b0\u30e9\u30de\u30c6\u30b9\u30c8.\n {\n missions = {\n -- mission test(w0a01)\n {\n name = \"w0a01\",\n dir = \"test/w0a01\",\n player_pos = { -1111.71, 49.99, -594.29 },\n player_mode = \"3D\",\n player_dir = { 0.0, 270.0, 0.0 },\n dead_line = -50000,\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\" },\n },\n -- mission test(w0c99)\u30c7\u30b6\u30a4\u30f3\u30c6\u30b9\u30c8\u30de\u30c3\u30d7\n {\n name = \"w0c99\",\n dir = \"test/w0c99\",\n player_pos = { 0, 0, 0 },\n player_dir = { 0.0, -180.0, 0.0 },\n dead_line = -500,\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\", \"asteroid\" },\n },\n -- mission test(w0c99)\u64ae\u5f71\u6240\n {\n name = \"w0c99_2\",\n dir = \"test/w0c99\",\n player_pos = { -1200, 0, -1200 },\n player_dir = { 0.0, -180.0, 0.0 },\n dead_line = -500,\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\", \"asteroid\" },\n },\n -- mission test(w0c98)\u30b7\u30a7\u30fc\u30c0\u30fc\u30c6\u30b9\u30c8\u30de\u30c3\u30d7\n {\n name = \"w0c98\",\n dir = \"test/w0c98\",\n player_pos = { 0, 0, 0 },\n player_dir = { 0.0, -180.0, 0.0 },\n dead_line = -500,\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\", \"asteroid\" },\n },\n -- mission test(w0c97)\u30c7\u30b6\u30a4\u30f3\u30c6\u30b9\u30c8\u30de\u30c3\u30d72(\u6697\u3044\u9762)\n {\n name = \"w0c97\",\n dir = \"test/w0c97\",\n player_pos = { 0, 0, 0 },\n player_dir = { 0.0, -180.0, 0.0 },\n dead_line = -500,\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\", \"asteroid\" },\n },\n -- mission test(w0c96)\u30b3\u30ea\u30b8\u30e7\u30f3\u30c6\u30b9\u30c8\u30de\u30c3\u30d7\n {\n name = \"w0c96\",\n dir = \"test/w0c96\",\n player_pos = { 0, 0, 0 },\n player_dir = { 0.0, -180.0, 0.0 },\n dead_line = -500,\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\", \"asteroid\" },\n },\n -- mission test(stg901)\n {\n name = \"stg901\",\n dir = \"test/stg901\",\n player_pos = { 0, 0, 0 },\n player_dir = { 0.0, 0.0, 0.0 },\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\", \"asteroid\" },\n --\u3010\u30b9\u30b3\u30a2\u8a2d\u5b9a\u9818\u57df\u3011\n score = {\n rank = {\n 800000, -- S rank\n 700000, -- A rank\n 450000, -- B rank\n 200000, -- C rank\n },\n time_basis = 10000,\n time_down = 500,\n\n no_miss = {\n 100000,\n 50000,\n 25000,\n 10000,\n 0,\n },\n },\n },\n -- mission test(stg811)\n {\n name = \"stg811\",\n dir = \"test/stg811\",\n player_pos = { -0.65, 0.09, 50.8 },\n player_dir = { 0.0, 180.0, 0.0 },\n },\n -- mission test(stg812)\n {\n name = \"stg812\",\n dir = \"test/stg812\",\n player_pos = { 0, -50, -60 },\n player_dir = { 0.0, 180.0, 0.0 },\n },\n -- mission test(stg813)\n {\n name = \"stg813\",\n dir = \"test/stg813\",\n player_pos = { 4000.0, -2500.0, 7050.0 },\n player_dir = { 0.0, 180.0, 0.0 },\n },\n -- mission test(stg814)\n {\n name = \"stg814\",\n dir = \"test/stg814\",\n player_pos = { 0,0.5, 55 },\n player_dir = { 0.0, 180.0, 0.0 },\n },\n -- mission test(stg815)\n {\n name = \"stg815\",\n dir = \"test/stg815\",\n player_pos = { -7677.16, 841.78, 50.83 },\n player_dir = { 0.0, 180.0, 0.0 },\n },\n -- mission test(stg816)\n {\n name = \"stg816\",\n dir = \"test/stg816\",\n player_pos = { 1.92, -32.61, 237.17 },\n player_mode = \"2D\",\n player_dir = { 0.0, 90.0, 0.0 },\n dead_line = -50000,\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\" },\n },\n -- mission test(stg817)\n {\n name = \"stg817\",\n dir = \"test/stg817\",\n player_pos = { 0.04, 466.24, -6.63 },\n player_mode = \"3D\",\n player_dir = { 0.0, 180.0, 0.0 },\n dead_line = -50000,\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\" },\n },\n -- mission test(stg818)\n {\n name = \"stg818\",\n dir = \"test/stg818\",\n player_pos = { 3.47, 320.30, -1.62 },\n player_mode = \"3D\",\n player_dir = { 0.0, 180.0, 0.0 },\n dead_line = -50000,\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\" },\n },\n -- mission test(stg819)\n {\n name = \"stg819\",\n dir = \"test/stg819\",\n player_pos = { 1240.18, 1923.53, -15.45 },\n player_mode = \"3D\",\n player_dir = { 0.0, 180.0, 0.0 },\n dead_line = -50000,\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\" },\n },\n -- mission test(stg820)\n {\n name = \"stg820\",\n dir = \"test/stg820\",\n player_pos = { 0, 0, 0 },\n player_dir = { 0.0, 0.0, 0.0 },\n player_mode = \"2D\",\n },\n -- mission test(stg821)\n {\n name = \"stg821\",\n dir = \"test/stg821\",\n player_pos = { 80, 72, 0 },\n player_dir = { 0.0, 90.0, 0.0 },\n player_mode = \"2D\",\n },\n -- mission test(stg822)\n {\n name = \"stg822\",\n dir = \"test/stg822\",\n player_pos = { 0, 0, 0 },\n player_dir = { 0.0, 180.0, 0.0 },\n player_mode = \"2D\",\n },\n -- mission test(stg823)\n {\n name = \"stg823\",\n dir = \"test/stg823\",\n player_pos = { 1393.38, 42.29, 774.04 },\n player_dir = { 0.0, 180.0, 0.0 },\n player_mode = \"SKYCHASE\",\n },\n -- mission test(w0a03)\n {\n name = \"w0a03\",\n dir = \"test/w0a03\",\n player_pos = { -267.95, 905.79, -2215.56 },\n player_dir = { 0.0, 0.0, 0.0 },\n player_mode = \"3D\",\n },\n -- mission test(w0a04)\n {\n name = \"w0a04\",\n dir = \"test/w0a04\",\n player_pos = { 0.0, 0.0, 0.0 },\n player_dir = { 0.0, 0.0, 0.0 },\n player_mode = \"2D\",\n },\n -- mission test(w0a05)\n {\n name = \"w0a05\",\n dir = \"test/w0a05\",\n player_pos = { -1.21, -87.9, 24.48 },\n player_dir = { 0.0, 180.0, 0.0 },\n player_mode = \"3D\",\n },\n -- mission test(w0a06)\n {\n name = \"w0a06\",\n dir = \"test/w0a06\",\n player_pos = { 721.07, 994.32, -6.55 },\n player_dir = { 0.0, 180.0, 0.0 },\n player_mode = \"2D\",\n },\n -- mission test(w0a07)\n {\n name = \"w0a07\",\n dir = \"test/w0a07\",\n player_pos = { 51.82, 40.93, -74.29 },\n player_dir = { 0.0, 0.0, 0.0 },\n player_mode = \"2D\",\n },\n -- mission test(w0a08)\n {\n name = \"w0a08\",\n dir = \"test/w0a08\",\n player_pos = { 514.80, 648.50, 4219.32 },\n player_dir = { 0.0, 180.0, 0.0 },\n player_mode = \"3D\",\n },\n -- mission test(w0a09)\n {\n name = \"w0a09\",\n dir = \"test/w0a09\",\n player_pos = { -5694.29, 672.14, -295.32 },\n player_dir = { 0.0, 0.0, 0.0 },\n player_mode = \"2D\",\n },\n -- mission test(w0a10)\n {\n name = \"w0a10\",\n dir = \"test/w0a10\",\n player_pos = { -0.0, 50.0, 450.00 },\n player_dir = { 0.0, 180.0, 0.0 },\n player_mode = \"3D\",\n },\n -- mission test(w0a11)\n {\n name = \"w0a11\",\n dir = \"test/w0a11\",\n player_pos = { 0.0, -32.86, 41.54 },\n player_dir = { 0.0, 0.0, 0.0 },\n player_mode = \"2D\",\n },\n -- mission test(w0a12)\n {\n name = \"w0a12\",\n dir = \"test/w0a12\",\n player_pos = { 0.0, 510.0, 151.0 },\n player_mode = \"TOP\",\n player_dir = { 0.0, 0.0, 0.0 },\n },\n -- mission test(w0a13)\n {\n name = \"w0a13\",\n dir = \"test/w0a13\",\n player_pos = { -331.97, 600.15, -260.02 },\n player_dir = { 0.0, 180.0, 0.0 },\n player_mode = \"2D\",\n },\n -- mission test(w0a14)\n {\n name = \"w0a14\",\n dir = \"test/w0a14\",\n player_pos = { -2624.82, -1925.34, 7370.24 },\n player_dir = { 0.0, 180.0, 0.0 },\n player_mode = \"3D\",\n },\n -- mission test(w0a15)\n {\n name = \"w0a15\",\n dir = \"test/w0a15\",\n player_pos = { 500, -47, -15 },\n player_dir = { 0.0, 180.0, 0.0 },\n player_mode = \"3D\",\n },\n -- mission test(w0a16)\n {\n name = \"w0a16\",\n dir = \"test/w0a16\",\n player_pos = { 218.12, -501.53, -613.49 },\n player_dir = { 0.0, 0.0, 0.0 },\n player_mode = \"2D\",\n },\n -- mission test(stg902)\n {\n name = \"stg902\",\n dir = \"test/stg902\",\n player_pos = { 0, 0, 0 },\n player_dir = { 0.0, -180.0, 0.0 },\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\", \"asteroid\" },\n },\n -- mission test(w0a90)\n {\n name = \"w0a90\",\n dir = \"test/w0a90\",\n player_pos = { 0, 0, 0 },\n player_dir = { 0.0, 90.0, 0.0 },\n player_mode = \"2D\",\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\", \"asteroid\" },\n },\n -- mission test(stg978)\n {\n name = \"stg978\",\n dir = \"test/stg978\",\n player_pos = { 8147, -360, -18974 },\n player_mode = \"3D\",\n player_dir = { 0.0, 180.0, 0.0 },\n dead_line = -50000,\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\" },\n },\n -- mission test(stg981)\n {\n name = \"stg981\",\n dir = \"test/stg981\",\n player_pos = { 0, 5.00, -37.43 },\n player_mode = \"2D\",\n player_dir = { 0.0, 180.0, 0.0 },\n dead_line = -50000,\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\", \"asteroid\" },\n },\n -- mission test(stg985)\n {\n name = \"stg985\",\n dir = \"test/stg985\",\n player_pos = { 1065.00, 49.91, -594.88 },\n player_mode = \"3D\",\n player_dir = { 0.0, 270.0, 0.0 },\n dead_line = -50000,\n },\n -- mission test(stg988)\n {\n name = \"stg988\",\n dir = \"test/stg988\",\n player_pos = { -1111.71, 49.99, -594.29 },\n player_mode = \"3D\",\n player_dir = { 0.0, 270.0, 0.0 },\n dead_line = -50000,\n },\n -- mission test(stg989)\n {\n name = \"stg989\",\n dir = \"test/stg989\",\n player_pos = { 0, -138.52, -301.15 },\n player_mode = \"2D\",\n player_dir = { 0.0, 180.0, 0.0 },\n dead_line = -50000,\n },\n },\n },\n}\n
Empty folders can be found for some of the test levels in the raw folder found within the Wii U release of the game. These folders are listed below.
raw\n\u251c\u2500\u2500 test\n\u2502 \u251c\u2500\u2500 stg811\n\u2502 \u251c\u2500\u2500 stg812\n\u2502 \u251c\u2500\u2500 stg813\n\u2502 \u251c\u2500\u2500 stg814\n\u2502 \u251c\u2500\u2500 stg815\n\u2502 \u251c\u2500\u2500 stg817\n\u2502 \u251c\u2500\u2500 stg818\n\u2502 \u251c\u2500\u2500 stg819\n\u2502 \u251c\u2500\u2500 stg820\n\u2502 \u251c\u2500\u2500 stg821\n\u2502 \u251c\u2500\u2500 stg822\n\u2502 \u251c\u2500\u2500 stg823\n\u2502 \u251c\u2500\u2500 stg901\n\u2502 \u251c\u2500\u2500 stg902\n\u2502 \u251c\u2500\u2500 stg978\n\u2502 \u251c\u2500\u2500 stg981\n\u2502 \u251c\u2500\u2500 stg985\n\u2502 \u251c\u2500\u2500 stg988\n\u2502 \u251c\u2500\u2500 stg989\n\u2502 \u251c\u2500\u2500 w0a01\n\u2502 \u251c\u2500\u2500 w0a02\n\u2502 \u251c\u2500\u2500 w0a03\n\u2502 \u251c\u2500\u2500 w0a04\n\u2502 \u251c\u2500\u2500 w0a05\n\u2502 \u251c\u2500\u2500 w0a06\n\u2502 \u251c\u2500\u2500 w0a07\n\u2502 \u251c\u2500\u2500 w0a08\n\u2502 \u251c\u2500\u2500 w0a09\n\u2502 \u251c\u2500\u2500 w0a10\n\u2502 \u251c\u2500\u2500 w0a11\n\u2502 \u251c\u2500\u2500 w0a12\n\u2502 \u251c\u2500\u2500 w0a13\n\u2502 \u251c\u2500\u2500 w0a14\n\u2502 \u251c\u2500\u2500 w0a15\n\u2502 \u251c\u2500\u2500 w0a16\n\u2502 \u251c\u2500\u2500 w0a90\n\u2502 \u251c\u2500\u2500 w0a96\n\u2502 \u251c\u2500\u2500 w0a97\n\u2502 \u251c\u2500\u2500 w0a98\n\u2502 \u251c\u2500\u2500 w0a99\n
"},{"location":"discoveries/swa/ps3/install/","title":"Leftover Install Assets","text":"There are assets leftover from an installation process. The files and folder related to it are listed below.
USRDIR\n\u251c\u2500\u2500 Install\n\u2502 \u251c\u2500\u2500 install_001.dds\n\u2502 \u251c\u2500\u2500 install_002.dds\n\u2502 \u251c\u2500\u2500 install_003.dds\n\u2502 \u251c\u2500\u2500 install_004.dds\n\u2502 \u251c\u2500\u2500 install_005.dds\n\u2502 \u251c\u2500\u2500 install_006.dds\n\u2502 \u251c\u2500\u2500 install_007.dds\n\u2502 \u2514\u2500\u2500 install_008.dds\n\u251c\u2500\u2500 Install.ar.00\n\u251c\u2500\u2500 Install.arl\n\u251c\u2500\u2500 install.files.xml\n\u2514\u2500\u2500 install.mounts.xml\n
"},{"location":"discoveries/swa/ps3/install/#install-folder","title":"Install Folder","text":"Within the disk contains a folder named Install, which contains 8 images of several characters in Sonic Unleashed. This folder is also present in the PC port of Sonic Generations, inside bb2.cpk
.
"},{"location":"discoveries/swa/ps3/install/#install-archive","title":"Install Archive","text":"
There is also UI (ui_install.yncp
) that would have shown during the install process. Despite only being in the PlayStation 3 version of the game, it uses the controller prompts texture from the Xbox 360 version of the game.
Please note that this was recorded using a WIP build of Shuriken, so the preview may not be 100% accurate to how it would look in-game.
"},{"location":"discoveries/swa/ps3/install/#playstation-3s-icon0-and-pic1","title":"PlayStation 3's ICON0 and PIC1","text":"In install.files.xml
there's information for the game to take icons/hdd_icon0.png
and icons/hdd_pic1.png
, and rename them to ICON0.png
and PIC1.png
respectively.
<System Name=\"icons/hdd_icon0.png\" To=\"ICON0.PNG\"/><System Name=\"icons/hdd_pic1.png\" To=\"PIC1.PNG\"/>\n
"},{"location":"docs/general/hson/","title":"HSON Format","text":"The Hedgehog Set Object Notation Format (\"HSON\") is a custom JSON-based file format designed collaboratively by Dar\u00edo, Radfordhound, \u0110e\u00e4Th, Skyth, and Sajid to represent object placement in a \"universal\" (non-game/editor-specific) way.
It was designed with the following principles in-mind:
The official JSON Schema for the HSON Format can be found at the hson-schema GitHub repository.
It's useful (but not necessary) to validate .hson files against this schema in editors which support this feature, as doing so allows you to have autocompletion, descriptions of each property, and data validation.
To validate all .hson files against the schema in your editor of choice, refer to the instructions in the README from the above repository.
To manually validate against the schema on a per-file basis, include the following line at the top-level of your HSON file(s), before the HSON file format version parameter.
\"$schema\": \"https://raw.githubusercontent.com/hedge-dev/hson-schema/main/hson.schema.json\",\n
If writing tooling that generates HSON, consider having your tooling write this line to generated files.
"},{"location":"docs/general/hson/#implementations","title":"Implementations","text":"As of the time of writing, the following known implementations exist:
"},{"location":"docs/general/hson/#csharp","title":"C#","text":"The following is an example file in the HSON Format, which represents a \"project\" called \"Sample Project\" that contains 5 objects.
This example file will be referenced periodically throughout the format specification.
{\n \"$schema\": \"https://raw.githubusercontent.com/hedge-dev/hson-schema/main/hson.schema.json\",\n \"version\": 1,\n \"metadata\": {\n \"name\": \"Sample Project\",\n \"author\": \"Takashi Iizuka, Morio Kishimoto\",\n \"date\": \"2023-02-09T22:38:42Z\",\n \"version\": \"1.0.0\",\n \"description\": \"green hill is looking a lot more like sand hill rn\",\n \"myCustomEditor\": {\n \"viewportTabIndex\": 0\n }\n },\n \"objects\": [\n {\n \"id\": \"{fd3e6bc9-5d2d-4da8-a22d-f88e709b3e48}\",\n \"name\": \"Spring #1\",\n \"type\": \"Spring\",\n \"position\": [ 100.0, 0.0, 0.0 ],\n \"rotation\": [ 0.0, 0.0, 0.0, 1.0 ],\n \"scale\": [ 1.0, 1.0, 1.0 ],\n \"isEditorVisible\": true,\n \"isExcluded\": false,\n \"parameters\": {\n \"tags\": {\n \"RangeSpawning\": {\n \"rangeIn\": 100.0,\n \"rangeOut\": 20.0\n }\n },\n \"visual\": \"Normal\",\n \"firstSpeed\": 420,\n \"outOfControl\": 2.5,\n \"isHorming\": true,\n \"actions\": [\n {\n \"action\": \"On\",\n \"objectIds\": [\n \"{2737e92f-4842-46cb-a590-e074f7b882f0}\",\n \"{38285a58-9969-4c5f-a649-b91440962a71}\"\n ],\n \"delayTime\": 0.5\n },\n {\n \"action\": \"Off\",\n \"objectIds\": [],\n \"delayTime\": 0.0\n },\n {\n \"action\": \"Off\",\n \"objectIds\": [],\n \"delayTime\": 0.0\n }\n ],\n }\n },\n {\n \"type\": \"Ring\"\n },\n {\n \"id\": \"{2737e92f-4842-46cb-a590-e074f7b882f0}\",\n \"parentId\": \"{fd3e6bc9-5d2d-4da8-a22d-f88e709b3e48}\",\n \"type\": \"Ring\",\n \"position\": [ 0.0, 1.0, 0.0 ],\n \"parameters\": {\n \"visibility\": \"Visible\",\n \"respawnTime\": 0.0\n },\n \"myCustomValue\": 893.5,\n \"myCustomEditor\": {\n \"presetPlacementType\": \"LINE\",\n \"presetPlacementDistance\": 1.0\n }\n },\n {\n \"id\": \"{38285a58-9969-4c5f-a649-b91440962a71}\",\n \"instanceOf\": \"{2737e92f-4842-46cb-a590-e074f7b882f0}\",\n \"position\": [ 0.0, 2.0, 0.0 ],\n \"parameters\": {\n \"respawnTime\": 0.5\n }\n },\n {\n \"id\": \"{81fdcaff-aa37-4c47-a665-5b6265a6b780}\",\n \"parentId\": \"{00000000-0000-0000-0000-000000000000}\",\n \"type\": \"DashPanel\"\n }\n ]\n}\n
"},{"location":"docs/general/hson/#format-specification","title":"Format Specification","text":"What follows is a specification of all standard properties supported by the HSON Format.
Important
All of the following properties are OPTIONAL, unless otherwise specified.
"},{"location":"docs/general/hson/#1-version","title":"1. version","text":"Info
number
This value is REQUIRED to be present in all HSON files.
The version of the HSON format being used by this file. It is represented as a number that is restricted in the following ways:
1.5
would not be allowed, but 1.0
or 1
are).Because of these restrictions, it is valid for tooling to parse this value into an unsigned int
.
Currently, version 1 is the latest version.
"},{"location":"docs/general/hson/#2-metadata","title":"2. metadata","text":"Info
object
Metadata for the project represented by this file.
It is intended to be used purely for tooling display purposes.
metadata is represented as a JSON object
consisting of the following properties:
Info
string
The name of the project represented by this file.
"},{"location":"docs/general/hson/#22-author","title":"2.2. author","text":"Info
string
The author(s) of the project represented by this file.
If the project has multiple authors, we recommend writing each author's name with a comma and space separating them, like so:
Example
\"author\": \"Me, Myself, I\"\n
With that said, this is a recommendation and by no means a requirement.
Tooling should treat this as an arbitrary string in no particular format.
"},{"location":"docs/general/hson/#23-date","title":"2.3. date","text":"Info
string
The date/time the project was created at, represented as a string in the RFC 3339 format (a similar standard to ISO 8601).
It is invalid to represent the date using any other format.
This limitation makes parsing dates in tooling a lot easier.
Getting the current DateTime in RFC 3339 format programmatically
Feel free to copy-paste any of these code snippets and do what you want with them.
C#:
public static string GetRFC3339Time()\n{\n return DateTime.UtcNow.ToString(\"yyyy-MM-ddTHH:mm:ssK\",\n CultureInfo.InvariantCulture);\n}\n
C++11:
#include <string>\n#include <stdexcept>\n#include <ctime>\n\nstd::string getRFC3339Time()\n{\n char buf[32]; // This is a few extra characters than should be necessary, just to be safe.\n const auto time = std::time(nullptr);\n const auto len = std::strftime(buf, sizeof(buf), \"%FT%TZ\", std::gmtime(&time));\n\n if (!len)\n {\n throw std::runtime_error(\"Failed to get RFC 3339 format time\");\n }\n\n return std::string(buf, len);\n}\n
C:
#include <time.h>\n\n/*\n Returns 0 on failure, or the number of bytes written\n into buf (not including the null terminator) on success.\n*/\nint getRFC3339Time(size_t bufSize, char* buf)\n{\n const time_t time = time(NULL);\n return strftime(buf, bufSize, \"%FT%TZ\", gmtime(&time));\n}\n
"},{"location":"docs/general/hson/#24-version","title":"2.4. version","text":"Info
string
The version number of the project, represented as a string.
How you want to version your project is up to you; these are all valid:
Examples
\"version\": \"1.0.0\"\n
\"version\": \"1\"\n
\"version\": \"beta release\"\n
Tooling should treat this as an arbitrary string in no particular format.
"},{"location":"docs/general/hson/#25-description","title":"2.5. description","text":"Info
string
The description of the project represented by this file.
"},{"location":"docs/general/hson/#3-objects","title":"3. objects","text":"Info
array
An array containing all of the objects contained within the project.
Each object is represented as a JSON object
consisting of the following properties:
Info
string
The UUID (aka GUID) of the object, represented as a case-insensitive string formatted like this: {11111111-2222-3333-4444-555555555555}
.
Note that it is enclosed in curly brackets; this is to make it clear that it is supposed to be parsed as a UUID, and NOT as a number.
The object's UUID is used to reference the object throughout the project.
It must be unique throughout the project; that is, no two objects within the same project are allowed to have the same UUID. That's what makes them UUIDs.
It also cannot be set to the following value: {00000000-0000-0000-0000-000000000000}
, as this value is reserved for \"null\" object references.
This property can be omitted (leaving the object without a specified UUID) if the object never needs to be referenced. This helps to save some space.
Tools are free to generate their own UUIDs for objects without a specified UUID, or to just think of the object as not having a UUID. Whichever is more convenient.
Examples
Valid UUID (lowercase):
\"id\": \"{fd3e6bc9-5d2d-4da8-a22d-f88e709b3e48}\"\n
Valid UUID (uppercase):
\"id\": \"{FD3E6BC9-5D2D-4DA8-A22D-F88E709B3E48}\"\n
Invalid UUID (no enclosing curly brackets):
\"id\": \"fd3e6bc9-5d2d-4da8-a22d-f88e709b3e48\"\n
Invalid UUID (not a UUID):
\"id\": \"{2}\"\n
Invalid UUID (the special \"null\" UUID value is not valid to use as the object's id):
\"id\": \"{00000000-0000-0000-0000-000000000000}\"\n
Valid object references (the special \"null\" UUID value is valid to use in object references):
\"parentId\": \"{00000000-0000-0000-0000-000000000000}\",\n\"instanceOf\": \"{00000000-0000-0000-0000-000000000000}\"\n
"},{"location":"docs/general/hson/#32-name","title":"3.2. name","text":"Info
string
The name of the object. This is an arbitrary string that can be anything you want.
It is intended to be used purely for tooling display purposes.
"},{"location":"docs/general/hson/#33-parentid","title":"3.3. parentId","text":"Info
string
The id of this object's parent object, or a null UUID.
If specified as a valid, non-null UUID, this object is a child of the object with the given UUID, meaning that the object's transform (represented via position
, rotation
, and scale
) is relative to the parent's transform (which is relative to its parent's transform, and so on).
Otherwise, if it is not specified, or is specified as a null UUID, this object has no parent object, and the transform is global.
Parenting Example
{\n \"id\": \"{2737e92f-4842-46cb-a590-e074f7b882f0}\",\n \"parentId\": \"{fd3e6bc9-5d2d-4da8-a22d-f88e709b3e48}\",\n \"type\": \"Ring\",\n \"position\": [ 0.0, 1.0, 0.0 ],\n \"parameters\": {\n \"visibility\": \"Visible\",\n \"respawnTime\": 0.0\n },\n \"myCustomValue\": 893.5,\n \"myCustomEditor\": {\n \"presetPlacementType\": \"LINE\",\n \"presetPlacementDistance\": 1.0\n }\n}\n
In this snippet from the example file, the object has specified a position of [ 0.0, 1.0, 0.0 ]
, and a parentId of {fd3e6bc9-5d2d-4da8-a22d-f88e709b3e48}
, which means that its transform is local to the transform of the object which uses that UUID (not included in this snippet).
This parent object has a position of [ 100.0, 0.0, 0.0 ]
.
So, the above object's global position is [ 100.0, 1.0, 0.0 ]
.
Null Reference Example
{\n \"id\": \"{81fdcaff-aa37-4c47-a665-5b6265a6b780}\",\n \"parentId\": \"{00000000-0000-0000-0000-000000000000}\",\n \"type\": \"DashPanel\"\n}\n
In this snippet from the example file, the object has specified a parentId of {00000000-0000-0000-0000-000000000000}
(the special UUID null value), which is equivalent to not specifying a parentId. This means that this object has no parent.
Info
string
The id of the object to be instanced, or a null UUID.
If specified as a valid, non-null UUID, this object is an instance of the object with the given UUID, meaning that it will inherit ALL unspecified properties from the instanced object, with the notable exception of the id
property, instead of falling back to the usual defaults.
Note that it will NOT affect the object's specified properties; these will effectively \"override\" any properties taken from the instanced object.
Otherwise, if it is not specified, or is specified as a null UUID, this object is not an instance.
Example
{\n \"id\": \"{2737e92f-4842-46cb-a590-e074f7b882f0}\",\n \"parentId\": \"{fd3e6bc9-5d2d-4da8-a22d-f88e709b3e48}\",\n \"type\": \"Ring\",\n \"position\": [ 0.0, 1.0, 0.0 ],\n \"parameters\": {\n \"visibility\": \"Visible\",\n \"respawnTime\": 0.0\n },\n \"myCustomValue\": 893.5,\n \"myCustomEditor\": {\n \"presetPlacementType\": \"LINE\",\n \"presetPlacementDistance\": 1.0\n }\n},\n{\n \"id\": \"{38285a58-9969-4c5f-a649-b91440962a71}\",\n \"instanceOf\": \"{2737e92f-4842-46cb-a590-e074f7b882f0}\",\n \"position\": [ 0.0, 2.0, 0.0 ],\n \"parameters\": {\n \"respawnTime\": 0.5\n }\n}\n
In this snippet from the example file, the second listed object (UUID: 38285a58-9969-4c5f-a649-b91440962a71
) is an instance of the first listed object (UUID: 2737e92f-4842-46cb-a590-e074f7b882f0
).
As such, it will inherit all of the unspecified properties from the first object, including the parentId
, type
, myCustomValue
, and myCustomEditor
properties, as well as the visibility
parameter.
It will NOT, however, inherit the specified properties, including the id
, instanceOf
, and position
properties, as well as the respawnTime
parameter.
This means that the second object in the above snippet will be equivalent to the following object:
{\n \"id\": \"{38285a58-9969-4c5f-a649-b91440962a71}\",\n \"parentId\": \"{fd3e6bc9-5d2d-4da8-a22d-f88e709b3e48}\",\n \"type\": \"Ring\",\n \"instanceOf\": \"{2737e92f-4842-46cb-a590-e074f7b882f0}\",\n \"position\": [ 0.0, 2.0, 0.0 ],\n \"parameters\": {\n \"visibility\": \"Visible\",\n \"respawnTime\": 0.5\n },\n \"myCustomValue\": 893.5,\n \"myCustomEditor\": {\n \"presetPlacementType\": \"LINE\",\n \"presetPlacementDistance\": 1.0\n }\n}\n
As you can see, this is a simple, yet powerful system that allows for many possibilities.
Note
UUIDs have a special exception; they never get inherited from the instanced object.
For example:
{\n \"id\": \"{AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA}\",\n \"type\": \"Ring\"\n},\n{\n \"instanceOf\": \"{AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA}\"\n}\n
The second object listed in the above example will inherit all properties from the first object, except for the id
.
This is due to the fact that every valid object must have its own unique UUID.
"},{"location":"docs/general/hson/#35-type","title":"3.5. type","text":"Info
string
This value is REQUIRED to be present, unless this object is an instance of another object, in which case, it is optional, as the type will just be taken from the instanced object.
The type of the object (e.g. \"Spring\", \"Ring\", etc.).
Note that this value is not game-specific and can be set to anything, with one exception: it is not valid for type to be an empty string.
"},{"location":"docs/general/hson/#36-position","title":"3.6. position","text":"Info
array
[ 0.0, 0.0, 0.0 ]
The position of the object within 3D space. Represented as a three-dimensional array of number
s, representing a vector3 using Y-Up right-handed coordinates (X-right, Y-up, and Z-backwards), and meters as its units.
If this object is a child of another object, this position value is local to the transform of the parent object (which is local to the transform of its parent, and so on).
Otherwise, this position value is global.
If this property is not specified, the value [ 0.0, 0.0, 0.0 ]
will be used as a fallback.
Info
array
[ 0.0, 0.0, 0.0, 1.0 ]
The rotation of the object within 3D space. Represented as a four-dimensional array of number
s, representing a quaternion using Y-up right-handed coordinates.
If this object is a child of another object, this rotation value is local to the transform of the parent object (which is local to the transform of its parent, and so on).
Otherwise, this rotation value is global.
If this property is not specified, the value [ 0.0, 0.0, 0.0, 1.0 ]
will be used as a fallback.
Note
Rotation values must be represented as a four-dimensional array representing a quaternion.
It is not valid to represent rotation values using other methods, such as by using three-dimensional arrays representing euler angles or binary angle measurement (BAMS).
When dealing with formats that utilize these (or other) methods, tooling must convert to/from quaternions as necessary.
"},{"location":"docs/general/hson/#38-scale","title":"3.8. scale","text":"Info
array
[ 1.0, 1.0, 1.0 ]
The scale of the object within 3D space. Represented as a three-dimensional array of number
s, representing a vector3 using Y-up right-handed coordinates (X-right, Y-up, and Z-backwards), and meters as its units.
If this object is a child of another object, this scale value is local to the transform of the parent object (which is local to the transform of its parent, and so on).
Otherwise, this scale value is global.
If this property is not specified, the value [ 1.0, 1.0, 1.0 ]
will be used as a fallback.
Info
boolean
true
Whether the object should be visible in the editor's 3D display (as applicable). Note that this is purely for editors, and has no effect on whether the object is visible in-game.
When converting from HSON to game-specific file(s), tooling should ignore this value.
If this property is not specified, the value true
will be used as a fallback.
Info
boolean
false
Whether the object should be excluded from game data.
If specified as true
, editors should (as applicable) hide the object from 3D display, but still show it in the object hierarchy as a disabled object, and provide a mechanism for users to un-exclude it.
When converting from HSON to a game format, tooling should treat excluded objects as if they do not exist, by simply not writing them to the resulting game-specific file(s).
If this property is not specified, the value false
will be used as a fallback.
Info
object
All named parameters specific to this object type and/or game. For example, the firstSpeed
parameter for objects of the Spring
type in Sonic Frontiers, which specifies the speed the object will launch the player off with.
This is the place to put all parameters that are specific to objects of the specified type
. It's also a great place to put game-specific parameters, such as object visibility ranges.
Any number of properties of any JSON type are allowed here, all of which are always entirely optional.
Tooling should treat this as an arbitrary list of key-value pairs, and provide some mechanism that allows the user to modify ALL of them as they please. It does not, however, have to provide a mechanism to add, remove, or edit the type of these parameters, as this may be undesirable depending on your use-case.
Tooling should not require any of these parameters to be present. When converting, tooling should, instead, lookup each parameter by its name as needed, and either error-out or fallback to a default value if a required parameter is not present.
Important
Note that the following are not allowed to be used as parameter names:
Info
The \"no forward slash\" rule allows tooling to access parameters by \"path\", like so:
\"parameters\": {\n \"tags\": {\n \"RangeSpawning\": {\n \"rangeIn\": 100.0,\n \"rangeOut\": 20.0\n }\n }\n}\n
tags/RangeSpawning/rangeIn
\": 100.0
tags/RangeSpawning/rangeIn
\": 20.0
In addition to all of the standard properties listed in the above specification, it is also completely valid to have your own custom properties which are not part of the specification, as demonstrated with the myCustomEditor
and myCustomValue
properties shown in the example file.
If you use custom properties, it's highly recommended to place them in a property named after your tooling, as demonstrated with the myCustomEditor
properties in the example.
\"myCustomEditor\": {\n \"presetPlacementType\": \"LINE\",\n \"presetPlacementDistance\": 1.0\n}\n
Doing this helps to reduce potential name collisions with custom properties from other tools, which might end up sharing the same name(s).
If your custom property is intended to be used across multiple tools (e.g. an unofficial \"extension\" to the HSON format), then it's recommended to ignore the above advice and just use the custom property directly instead, as demonstrated with the myCustomValue
property in the example.
\"myCustomValue\": 893.5,\n
Important
Note that the following are not allowed to be used as custom property names:
Info
The \"no forward slash\" rule allows tooling to access custom properties by \"path\", like so:
\"myCustomEditor\": {\n \"presetPlacementType\": \"LINE\",\n \"presetPlacementDistance\": 1.0\n}\n
myCustomEditor/presetPlacementType
\": \"LINE\"
myCustomEditor/presetPlacementDistance
\": 1.0
* Sonic Colors: Ultimate also makes use of a forked version of Godot 3.
"},{"location":"docs/hedgehog-engine/gamelist/#hedgehog-engine-2","title":"Hedgehog Engine 2","text":"Game Name Internal Name Mario & Sonic at the Rio 2016 Olympic Games unison Sonic Forces wars Olympic Games Tokyo 2020 - The Official Video Game musashi Mario & Sonic at the Tokyo 2020 Olympic Games rings (New) Sakura Wars arukas Puyo Puyo Tetris 2 tenpex Sonic Origins* hite Sonic Frontiers rangers Sonic Frontiers: Digital Art Book with Mini Digital Soundtrack rangers_artbook Sonic Origins Plus* hiteplus Sonic Superstars - Digital Artbook and mini-OST orion_artbook SONIC X SHADOW GENERATIONS** miller* Sonic Origins (Plus) also makes use of Retro Engine v5U.
** SONIC X SHADOW GENERATIONS also makes use of the Hedgehog Engine.
"},{"location":"docs/hedgehog-engine/blueblur/cameras/","title":"Camera Type List","text":""},{"location":"docs/hedgehog-engine/blueblur/cameras/#objcamera","title":"ObjCamera","text":"Camera Type Description ObjCameraFix Stays in its place while pointing at the coordinates defined in TargetPosition ObjCameraNormal The regular camera ObjCameraPan Has a different behaviour depending onCameraPositionMode
: 0
- Stays in its place while pointing at Sonic; 1
- ??? ObjCameraPoint Follows Sonic, while pointing at the camera object's location"},{"location":"docs/hedgehog-engine/blueblur/cameras/#camera-collisions","title":"Camera Collisions","text":"Collision Type Description ChangeVolumeCamera Changes the camera used to the one defined in Target
"},{"location":"docs/hedgehog-engine/blueblur/events/","title":"Event List","text":"Event ID Description 0 None 1 Open 2 Close 3 Kill 4 Generate 5 Get Off - (as in \"to get off from something\") 6 ON 7 OFF 8 Attack 9 Enable Attack Mode 10 Disable Attack Mode 11 Return to Position 12 Destroy 13 Start Moving 14 Reset 15 Ascend 16 Descend 17 Start 18 Invert 19 Clear 20 Play Audio 01 21 Play Audio 02"},{"location":"docs/hedgehog-engine/blueblur/levels/ids/","title":"Level ID Map","text":""},{"location":"docs/hedgehog-engine/blueblur/levels/ids/#mapping","title":"Mapping","text":"Stage IDs are defined like this:
{stage_short_name}{stage_type}\n
Example
cte200 -> City Escape Modern
cte100 -> City Escape Classic
cte101 -> City Escape Classic Mission 1
"},{"location":"docs/hedgehog-engine/blueblur/levels/ids/#levels","title":"Levels","text":"Level Short Name Level Name Location ghz Green Hilldisk/bb
cpz Chemical Plant disk/bb
ssz Sky Sanctuary disk/bb
sph Speed Highway disk/bb
cte City Escape disk/bb
ssh Seaside Hill disk/bb2
csc Crisis City disk/bb2
euc Rooftop Run disk/bb2
pla Planet Wisp disk/bb2
cnz Casino Night Zone disk/bb2
Level Type ID Level Type 100 Classic Sonic Stage 200 Modern Sonic Stage 10x
Classic Sonic Mission 20x
Modern Sonic Mission Note
There's some missions which have their own terrain, and missions which are using original level's terrain.
So, for first type of missions, you have mission's own terrain and #
file in the root of the CPK. For the second type of missions, you have original level's terrain and #
file in the root of the CPK.
Example: mission ghz103
has its own terrain, ghz101
and ghz102
doesn't have it, so they're using terrain from ghz100
.
disk/bb2
bde Death Egg Robot disk/bb
bsd Shadow disk/bb2
bpc Perfect Chaos disk/bb
bsl Silver disk/bb2
bne Egg Dragoon disk/bb
blb Time Eater disk/bb
"},{"location":"docs/hedgehog-engine/blueblur/levels/ids/#hub-worlds","title":"HUB Worlds","text":"HUB ID HUB Name Location fig000 Statue Room disk/bb2
pam000 Full White World disk/bb2
pam001 White World before completing Green Hill disk/bb2
"},{"location":"docs/hedgehog-engine/rangers/dlc/ids/","title":"DLC ID Map","text":"DLC Name Internal Name ID Steam App ID Adventurer's Treasure Box dlcrsv 0 2079300 Explorer's Treasure Box dlcddx 1 2079301 Monster Hunter Collaboration Pack dlcmhr 2 2089730 Sonic Emote (Koco) dlcslr 3 N/A Inugami Korone Collaboration DLC \"Gloves & Shoes\" dlcholoA 4 N/A Inugami Korone Collaboration DLC \"SE: Inugami Korone\" dlcholoB 5 N/A Inugami Korone Collaboration DLC \"Koronesuki\" dlcholoC 6 N/A Sonic Adventure 2 Shoes dlccrm 7 2089840 Holiday Cheer Suit dlcxmas 8 2089733"},{"location":"docs/hedgehog-engine/rangers/enemies/guardians/names/","title":"Guardian Internal Names","text":"This list identifies what each of the guardians are referred to within the game executable and its filesystem.
Name Internal Name Asura Ashura Caterpillar Charger Fortress Warship Ghost Tracker Ninja Blade Shark Skier Spider Spider Squid Flyer Strider Strider Sumo Sumo Tank Tyrant Tower Daruma"},{"location":"docs/hedgehog-engine/rangers/events/ids/","title":"Event ID Map","text":"Warning
This mapping is still a work in progress! Any additions and updates are greatly appreciated!
Event ID Event Description bo1120 sonic turns super against giganto bo1140 giganto second phase start bo1160 sonic murders giganto bo1180 sonic dies in giganto fight (run out of rings) chl1060 open zone timer mission chl1090 open zone timer mission chl1090 open zone timer mission chl1130 open zone timer mission chl1170 open zone timer mission chl1200 open zone timer mission ev0020 Prerecorded opening scene (Sonic and friends arrive to the Starfall Islands). Needs the level \"ui_gamemodeopening\" to be loaded to not crash. ga1010 sonic entering cyberspace for the first time ga1011 sonic returns from cyberspace ga1012 different version of ga1010 ga1013 different version of ga1011 ga1014 sonic re-enters cyberspace ga1016 sonic activates a fishing portal ga1017 sonic returns from a fishing portal ga1020 blue emerald vault now unlocked ga1021 cyan emerald vault now unlocked ga1022 green emerald vault now unlocked ga1023 purple emerald vault now unlocked ga1024 red emerald vault now unlocked ga1025 white emerald vault now unlocked ga1026 yellow emerald vault now unlocked ga1030 different version of ga1020 ga1031 different version of ga1021 ga1032 different version of ga1022 ga1033 different version of ga1023 ga1034 different version of ga1024 ga1035 different version of ga1025 ga1036 different version of ga1026 ga1040 vault key get ga1050 sonic opens blue emerald vault ga1051 sonic opens cyan emerald vault ga1052 sonic opens green emerald vault ga1053 sonic opens purple emerald vault ga1054 sonic opens red emerald vault ga1055 sonic opens white emerald vault ga1056 sonic opens yellow emerald vault ga1111 different version of ga1011 ga1113 different version of ga1011 ga1120 sonic takes the blue emerald ga1121 sonic takes the cyan emerald ga1122 sonic takes the green emerald ga1123 sonic takes the purple emerald ga1124 sonic takes the red emerald ga1125 sonic takes the white emerald ga1126 sonic takes the yellow emerald ga1130 faster version of ga1120 ga1131 faster version of ga1121 ga1132 faster version of ga1122 ga1133 faster version of ga1123 ga1134 faster version of ga1124 ga1135 faster version of ga1125 ga1136 faster version of ga1126 ga1205 tutorial bridge ga1210 bridge opens in ouranos (part of old kronos) ga1220 open the waterfall ga1225 pre-giganto ga1410 tutorial island enemies spawn in house ga1620 starfall event but on ouranos/rhea?"},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/","title":"RFL Binary Template Map","text":"Warning
This list is still a work in progress! Any additions and updates are greatly appreciated!
This list defines which binary templates to use specific RFL files, as well as what that file contains.
"},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#ambsoundparameter","title":"AmbSoundParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#arcadedata","title":"ArcadeData","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_1","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_1","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bakeboxparameter","title":"BakeBoxParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_2","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_2","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bakecameraparameter","title":"BakeCameraParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_3","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_3","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bakecameraparameterdata","title":"BakeCameraParameterData","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_4","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_4","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bgminfoparameter","title":"BGMInfoParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_5","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_5","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bossbitconfig","title":"BossBitConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_6","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_6","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bosscommonparameters","title":"BossCommonParameters","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_7","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_7","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bossdragonconfig","title":"BossDragonConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_8","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_8","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bossgiantconfig","title":"BossGiantConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_9","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_9","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bossknightconfig","title":"BossKnightConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_10","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_10","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bossrifleconfig","title":"BossRifleConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_11","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_11","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bossriflethresholdringsupplyparam","title":"BossRifleThresholdRingSupplyParam","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_12","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_12","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bossstatusparameterbase","title":"BossStatusParameterBase","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_13","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_13","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bosstheendconfig","title":"BossTheEndConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_14","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_14","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bulletpatternsetparameters","title":"BulletPatternSetParameters","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_15","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_15","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#camerashaketable","title":"CameraShakeTable","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_16","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_16","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#captionparameter","title":"CaptionParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_17","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_17","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#contentparameter","title":"ContentParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_18","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_18","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#decoconfigparam","title":"DecoConfigParam","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_19","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_19","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#decotechparams","title":"DecoTechParams","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_20","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_20","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#devconfigparameters","title":"DevConfigParameters","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_21","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_21","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#dlcmhrbarbecueparameter","title":"DLCMhrBarbecueParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_22","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_22","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#dlcparameter","title":"DLCParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_23","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_23","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#effectrecordbasetable","title":"EffectRecordBaseTable","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_24","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_24","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#effectrecordtable","title":"EffectRecordTable","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_25","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_25","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#electriclineparameter","title":"ElectricLineParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_26","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_26","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemyaquaballconfig","title":"EnemyAquaballConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_27","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_27","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemyattackrecordbasetable","title":"EnemyAttackRecordBaseTable","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_28","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_28","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemyattackrecordtable","title":"EnemyAttackRecordTable","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_29","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_29","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemybirdconfig","title":"EnemyBirdConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_30","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_30","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemybommerconfig","title":"EnemyBommerConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_31","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_31","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemybubbleconfig","title":"EnemyBubbleConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_32","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_32","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemydefencerecordbasetable","title":"EnemyDefenceRecordBaseTable","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_33","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_33","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemydefencerecordtable","title":"EnemyDefenceRecordTable","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_34","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_34","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemydefenderconfig","title":"EnemyDefenderConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_35","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_35","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemyeggroboconfig","title":"EnemyEggRoboConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_36","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_36","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemyhelicopterconfig","title":"EnemyHelicopterConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_37","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_37","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemyjellymanconfig","title":"EnemyJellymanConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_38","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_38","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemyjumperconfig","title":"EnemyJumperConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_39","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_39","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemyjumpersubconfig","title":"EnemyJumperSubConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_40","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_40","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemylaserconfig","title":"EnemyLaserConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_41","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_41","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemyrobberconfig","title":"EnemyRobberConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_42","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_42","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemysniperconfig","title":"EnemySniperConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_43","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_43","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemytwisterconfig","title":"EnemyTwisterConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_44","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_44","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemyumbrellaconfig","title":"EnemyUmbrellaConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_45","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_45","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemywolfconfig","title":"EnemyWolfConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_46","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_46","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#extremeconfig","title":"ExtremeConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_47","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_47","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#fishingparameter","title":"FishingParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_48","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_48","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#fxcloudshadowparameter","title":"FxCloudShadowParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_49","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_49","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#fxdensitywindparameter","title":"FxDensityWindParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_50","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_50","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#fxdirectionalradialblurparameter","title":"FxDirectionalRadialBlurParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_51","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_51","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#fxfogparameter","title":"FxFogParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_52","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_52","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#fxfxaaparameter","title":"FxFXAAParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_53","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_53","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#fxheightmapparameter","title":"FxHeightMapParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_54","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_54","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#fxplanarprojectionshadowparameter","title":"FxPlanarProjectionShadowParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_55","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_55","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#fxsmaaparameter","title":"FxSMAAParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_56","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_56","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#gamedata","title":"GameData","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_57","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_57","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#gameexpparameter","title":"GameExpParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_58","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_58","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#gamegrassinteractionparameter","title":"GameGrassInteractionParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_59","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_59","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#gamegrindlodparameter","title":"GameGrindLodParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_60","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_60","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#gamehitstopparameter","title":"GameHitStopParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_61","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_61","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#gameskillparameter","title":"GameSkillParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_62","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_62","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#gimmickcamerasimpleparam","title":"GimmickCameraSimpleParam","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_63","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_63","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#gismoconfigdesigndata","title":"GismoConfigDesignData","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_64","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_64","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#gismoconfigplandata","title":"GismoConfigPlanData","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_65","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_65","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#graphicsparameters","title":"GraphicsParameters","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_66","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_66","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#hackingenemyparameters","title":"HackingEnemyParameters","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_67","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_67","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#heightfieldconfig","title":"HeightFieldConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_68","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_68","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#islandparameter","title":"IslandParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_69","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_69","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#meteorshowerparameter","title":"MeteorShowerParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_70","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_70","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibossashuraconfig","title":"MiniBossAshuraConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_71","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_71","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibossbladeconfig","title":"MiniBossBladeConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_72","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_72","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibosschargerattackparam","title":"MiniBossChargerAttackParam","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_73","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_73","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibosschargercamerashake","title":"MiniBossChargerCameraShake","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_74","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_74","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibosschargerconfig","title":"MiniBossChargerConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_75","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_75","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibossdarumaconfig","title":"MiniBossDarumaConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_76","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_76","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibossflyerconfig","title":"MiniBossFlyerConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_77","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_77","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibossskierconfig","title":"MiniBossSkierConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_78","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_78","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibossspiderconfig","title":"MiniBossSpiderConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_79","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_79","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibossstriderconfig","title":"MiniBossStriderConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_80","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_80","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibosssumoconfig","title":"MiniBossSumoConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_81","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_81","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibosstrackerconfig","title":"MiniBossTrackerConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_82","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_82","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibosstyrantconfig","title":"MiniBossTyrantConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_83","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_83","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibosswarshipconfig","title":"MiniBossWarshipConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_84","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_84","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#monologueparameters","title":"MonologueParameters","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_85","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_85","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#navmeshparameter","title":"NavMeshParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_86","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_86","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#needlefxscenedata","title":"NeedleFxSceneData","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_87","title":"Filename Format","text":"{stagename}.rfl
Examplew1r03.rfl
"},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_87","title":"Usage","text":"Controls the stage's scene data
"},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#noisepresetparameters","title":"NoisePresetParameters","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_88","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_88","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#obj3dpuzzleblockconfig","title":"Obj3DPuzzleBlockConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_89","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_89","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objbattingmachineconfig","title":"ObjBattingMachineConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_90","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_90","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objbirdlaserconfig","title":"ObjBirdLaserConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_91","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_91","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objbossringsupplyconfig","title":"ObjBossRingSupplyConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_92","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_92","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objcggconfig","title":"ObjCGGConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_93","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_93","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objeffectdebrisparameters","title":"ObjEffectDebrisParameters","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_94","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_94","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objhackingplayermachineconfig","title":"ObjHackingPlayerMachineConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_95","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_95","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objhoverstoneconfig","title":"ObjHoverStoneConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_96","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_96","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objkodamaescortparameter","title":"ObjKodamaEscortParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_97","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_97","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objkodamaquestparameter","title":"ObjKodamaQuestParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_98","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_98","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objlasermirrorconfig","title":"ObjLaserMirrorConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_99","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_99","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objmowingparameter","title":"ObjMowingParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_100","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_100","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objnormalfloorconfig","title":"ObjNormalFloorConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_101","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_101","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objquestboxparameter","title":"ObjQuestBoxParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_102","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_102","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objrotatablestatueconfig","title":"ObjRotatableStatueConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_103","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_103","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objrotatabletombstoneconfig","title":"ObjRotatableTombStoneConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_104","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_104","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objshotguntouchparam","title":"ObjShotGunTouchParam","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_105","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_105","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objskiermissileconfig","title":"ObjSkierMissileConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_106","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_106","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objstriderbulletconfig","title":"ObjStriderBulletConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_107","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_107","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objstridergrindrailconfig","title":"ObjStriderGrindRailConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_108","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_108","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objstriderlaserconfig","title":"ObjStriderLaserConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_109","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_109","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objsumopoleconfig","title":"ObjSumoPoleConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_110","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_110","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objsumopuckconfig","title":"ObjSumoPuckConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_111","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_111","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objtheendplayermachineconfig","title":"ObjTheEndPlayerMachineConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_112","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_112","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objtimeballconfig","title":"ObjTimeBallConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_113","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_113","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objwarshipdashringconfig","title":"ObjWarshipDashRingConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_114","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_114","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objwolfmanagerconfig","title":"ObjWolfManagerConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_115","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_115","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#occlusioncapsulelist","title":"OcclusionCapsuleList","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_116","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_116","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#offmeshlinkparameter","title":"OffMeshLinkParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_117","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_117","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#optiondata","title":"OptionData","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_118","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_118","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#playercamerasetparameters","title":"PlayerCameraSetParameters","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_119","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_119","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#playerparamaerialfinish","title":"PlayerParamAerialFinish","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_120","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_120","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#playerparambehindfinish","title":"PlayerParamBehindFinish","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_121","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_121","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#playerparameters","title":"PlayerParameters","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_122","title":"Filename Format","text":"player_common.rfl
"},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_122","title":"Usage","text":"Controls Sonic's physics and other player parameters, including the cyloop colour for example.
"},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#playerparamlowaltitudejump","title":"PlayerParamLowAltitudeJump","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_123","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_123","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#playerparampursuitfinish","title":"PlayerParamPursuitFinish","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_124","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_124","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#playerparamstompingfinish","title":"PlayerParamStompingFinish","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_125","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_125","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#playstats","title":"PlayStats","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_126","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_126","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#practiceparameters","title":"PracticeParameters","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_127","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_127","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#questcollectitemparameter","title":"QuestCollectItemParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_128","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_128","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#questdarumabattleparameter","title":"QuestDarumaBattleParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_129","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_129","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#questdrawbridgeparameter","title":"QuestDrawBridgeParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_130","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_130","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#questmowingparameter","title":"QuestMowingParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_131","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_131","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#recorddata","title":"RecordData","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_132","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_132","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#reflexespanelparam","title":"ReflexesPanelParam","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_133","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_133","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#scriptparameter","title":"ScriptParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_134","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_134","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#seedparameter","title":"SeedParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_135","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_135","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#sequenceparameter","title":"SequenceParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_136","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_136","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#soundcommonparameter","title":"SoundCommonParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_137","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_137","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#standardcameraconfig","title":"StandardCameraConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_138","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_138","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#statsdatacontainer","title":"StatsDataContainer","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_139","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_139","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#swayparamindivisual","title":"SwayParamIndivisual","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_140","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_140","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#talkeventcamerapresetparameters","title":"TalkEventCameraPresetParameters","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_141","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_141","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#timeserviceparam","title":"TimeServiceParam","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_142","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_142","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#tornadoringparameter","title":"TornadoRingParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_143","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_143","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#uicreditparameter","title":"UICreditParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_144","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_144","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#uifishiguideconfig","title":"UIFishiGuideConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_145","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_145","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#uimapparameter","title":"UIMapParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_146","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_146","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#uiwireframeparameter","title":"UIWireframeParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_147","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_147","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#viewspaceoffsetrflparam","title":"ViewSpaceOffsetRflParam","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_148","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_148","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#volumesize","title":"VolumeSize","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_149","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_149","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#wolfvolumesize","title":"WolfVolumeSize","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_150","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_150","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/levels/ids/","title":"Level ID Map","text":""},{"location":"docs/hedgehog-engine/rangers/levels/ids/#mapping","title":"Mapping","text":"Stage IDs are defined like this:
{world_id}{stage_type}{stage_number}\n
Example
w2r01 -> Ares Open Zone 1
"},{"location":"docs/hedgehog-engine/rangers/levels/ids/#worlds-zones","title":"Worlds (Zones)","text":"World ID World Name w1 Kronos w2 Ares w3 Chaos w5 The End w6 Green Hill w7 Chemical Plant w8 Sky Sanctuary w9 Highway"},{"location":"docs/hedgehog-engine/rangers/levels/ids/#stage-type","title":"Stage Type","text":"Stage Type ID Stage Type r Open Zone d Cyber Space f Fishing (always w1) h Hacking (always w1)"},{"location":"docs/hedgehog-engine/rangers/levels/ids/#stages-cyberspace","title":"Stages (Cyberspace)","text":"Stage Name Level ID 1-1 w6d01 1-2 w8d01 1-3 w9d04 1-4 w6d02 1-5 w7d04 1-6 w6d06 1-7 w9d06 2-1 w6d05 2-2 w8d03 2-3 w7d02 2-4 w7d06 2-5 w8d04 2-6 w6d03 2-7 w8d05 3-1 w6d04 3-2 w6d08 3-3 w8d02 3-4 w6d09 3-5 w6d07 3-6 w8d06 3-7 w7d03 4-1 w7d08 4-2 w9d02 4-3 w7d01 4-4 w9d03 4-5 w6d10 4-6 w7d07 4-7 w9d05 4-8 w7d05 4-9 w9d07"},{"location":"docs/hedgehog-engine/rangers/levels/ids/#oddities","title":"Oddities","text":"Due to Ouranos and Rhea actually being part of Kronos, their map files are stored in w1:
There are also various versions of Kronos in the game files (not present in the PC release), those being:
Warning
This list is still a work in progress! Any additions and updates are greatly appreciated!
Functions are listed below in the following format:
Function(arguments, ...) : returnType\n
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#achivementunlockstring-number","title":"\ud83d\uddd2\ufe0f AchivementUnlock(string, number)","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description","title":"Description","text":"Unlocks an achievement.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters","title":"Parameters","text":"This function has no callback function.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_1","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#activitystartnumber-unknown","title":"\ud83d\uddd2\ufe0f ActivityStart(number) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_2","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_2","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_1","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#activitytaskcompletenumber-number-unknown","title":"\ud83d\uddd2\ufe0f ActivityTaskComplete(number, number) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_3","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_3","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_2","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#activitytaskend-unknown","title":"\ud83d\uddd2\ufe0f ActivityTaskEnd() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_4","title":"Description","text":"This function is unused and has no callback function.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_4","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_3","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#activitytaskstartnumber-number-unknown","title":"\ud83d\uddd2\ufe0f ActivityTaskStart(number, number) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_5","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_5","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_4","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#addpracticenotifierpermissiondenystring-unknown","title":"\ud83d\uddd2\ufe0f AddPracticeNotifierPermissionDeny(string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_6","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_6","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_5","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#autosavestring","title":"\ud83d\uddd2\ufe0f AutoSave(string)","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_7","title":"Description","text":"Saves the current game data into the autosave slot.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_7","title":"Parameters","text":"Change to an event camera.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_9","title":"Parameters","text":"Changes animations for dialogue events.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_10","title":"Parameters","text":"Plays an animation from an *.asm
file using the friendly (upper-case) name when the player is frozen using HoldPlayer().
Plays an animation from an *.asm
file using the friendly (upper-case) name where available.
Toggles whether the player has permission to save.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_13","title":"Parameters","text":"Changes the current weather.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_14","title":"Parameters","text":"Sets the cleared state of the current island and proceeds to the next.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#clearobjecttarget-unknown","title":"\ud83d\uddd2\ufe0f ClearObjectTarget() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_16","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_15","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_7","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#clearpracticenotifier-yield","title":"\ud83d\uddd2\ufe0f ClearPracticeNotifier() : yield","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_17","title":"Description","text":"Clears the Training Simulator notification on the top-right of the heads-up display.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#clearquesttarget-unknown","title":"\ud83d\uddd2\ufe0f ClearQuestTarget() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_18","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_16","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_8","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#cleartutorialuiboolean-unknown","title":"\ud83d\uddd2\ufe0f ClearTutorialUI(boolean) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_19","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_17","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_9","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#clearuserguidui-yield","title":"\ud83d\uddd2\ufe0f ClearUserGuidUI() : yield","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_20","title":"Description","text":"Clears an input guide.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#debugprint-number","title":"\ud83d\uddd2\ufe0f DebugPrint() : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_21","title":"Description","text":"This function is unused and has a stripped callback function.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_18","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_10","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#deletepracticenotifierpermissiondenystring-unknown","title":"\ud83d\uddd2\ufe0f DeletePracticeNotifierPermissionDeny(string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_22","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_19","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_11","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#endletterboxui-unknown","title":"\ud83d\uddd2\ufe0f EndLetterBoxUI() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_23","title":"Description","text":"This function is unused.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_20","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_12","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#endtalkmode-unknown","title":"\ud83d\uddd2\ufe0f EndTalkMode() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_24","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_21","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_13","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#endtimegimmick-unknown","title":"\ud83d\uddd2\ufe0f EndTimeGimmick() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_25","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_22","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_14","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#exit","title":"\ud83d\uddd2\ufe0f Exit()","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_26","title":"Description","text":"Ends the current script sequence.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#fadeinnumber","title":"\ud83d\uddd2\ufe0f FadeIn(number)","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_27","title":"Description","text":"Fades the screen into gameplay from black within the specified duration.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_23","title":"Parameters","text":"Fades the screen out within the specified duration.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_24","title":"Parameters","text":"Gets the current internal block ID for Lua conditions within update functions.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_15","title":"Return Value","text":"The current block ID.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getchaosemeraldstring-unknown","title":"\ud83d\uddd2\ufe0f GetChaosEmerald(string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_30","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_25","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_16","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getchaosemeraldnum-number","title":"\ud83d\uddd2\ufe0f GetChaosEmeraldNum() : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_31","title":"Description","text":"Gets the total number of Chaos Emeralds.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_17","title":"Return Value","text":"The total number of Chaos Emeralds.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getcleartowernum-unknown","title":"\ud83d\uddd2\ufe0f GetClearTowerNum() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_32","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_26","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_18","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getdebugflagstring-number","title":"\ud83d\uddd2\ufe0f GetDebugFlag(string) : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_33","title":"Description","text":"Gets the value of any flag Sonic Team wants to check within Lua scripts.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_27","title":"Parameters","text":"The value of the requested flag.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getguardlevelnumber-number","title":"\ud83d\uddd2\ufe0f GetGuardLevel(number) : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_34","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_28","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_20","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#gethackingaliveenemynum-unknown","title":"\ud83d\uddd2\ufe0f GetHackingAliveEnemyNum() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_35","title":"Description","text":"This function is unused.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_29","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_21","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#gethackingcurrentwaveid-unknown","title":"\ud83d\uddd2\ufe0f GetHackingCurrentWaveId() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_36","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_30","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_22","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#gethaschaosemeraldnum-number","title":"\ud83d\uddd2\ufe0f GetHasChaosEmeraldNum() : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_37","title":"Description","text":"Gets the total number of currently obtained Chaos Emeralds.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_23","title":"Return Value","text":"The total number of currently obtained Chaos Emeralds.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getmaxguardlevel-number","title":"\ud83d\uddd2\ufe0f GetMaxGuardLevel() : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_38","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_31","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_24","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getmaxpowerlevelnumber-number","title":"\ud83d\uddd2\ufe0f GetMaxPowerLevel(number) : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_39","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_32","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_25","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getmaxringlevel-number","title":"\ud83d\uddd2\ufe0f GetMaxRingLevel() : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_40","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_33","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_26","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getmaxspeedlevel-number","title":"\ud83d\uddd2\ufe0f GetMaxSpeedLevel() : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_41","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_34","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_27","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getminigamequestprogressstring-unknown","title":"\ud83d\uddd2\ufe0f GetMinigameQuestProgress(string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_42","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_35","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_28","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getobjstatusstring-number-number-boolean","title":"\ud83d\uddd2\ufe0f GetObjStatus(string, number, number) : boolean","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_43","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_36","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_29","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getpinballstatusstring-unknown","title":"\ud83d\uddd2\ufe0f GetPinballStatus(string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_44","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_37","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_30","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getplayeriteminfostring-number","title":"\ud83d\uddd2\ufe0f GetPlayerItemInfo(string) : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_45","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_38","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_31","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getplayerstatusstring-number","title":"\ud83d\uddd2\ufe0f GetPlayerStatus(string) : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_46","title":"Description","text":"Returns the value of status flags for the player.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_39","title":"Parameters","text":"A 0/1 number representing the requested state.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getpowerlevelnumber-number","title":"\ud83d\uddd2\ufe0f GetPowerLevel(number) : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_47","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_40","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_33","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getpoweruprequiredkodamanum-unknown","title":"\ud83d\uddd2\ufe0f GetPowerupRequiredKodamaNum() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_48","title":"Description","text":"This function is unused.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_41","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_34","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getringlevelnumber-number","title":"\ud83d\uddd2\ufe0f GetRingLevel(number) : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_49","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_42","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_35","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getselectresultnumber-number","title":"\ud83d\uddd2\ufe0f GetSelectResult(number) : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_50","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_43","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_36","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getspeedlevelnumber-number","title":"\ud83d\uddd2\ufe0f GetSpeedLevel(number) : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_51","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_44","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_37","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getvaluestring-number-number","title":"\ud83d\uddd2\ufe0f GetValue(string, number) : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_52","title":"Description","text":"Get the value of a flag based on the flag name and flag number.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_45","title":"Parameters","text":"The value of the requested flag.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#giantorbreleasetemporarilyreset-unknown","title":"\ud83d\uddd2\ufe0f GiantOrbReleaseTemporarilyReset() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_53","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_46","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_39","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#giantorbtemporarilyreset-unknown","title":"\ud83d\uddd2\ufe0f GiantOrbTemporarilyReset() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_54","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_47","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_40","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#gotocyberstagestring-yield","title":"\ud83d\uddd2\ufe0f GoToCyberStage(string) : yield","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_55","title":"Description","text":"This function is unused.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_48","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#hideobjectineventstring","title":"\ud83d\uddd2\ufe0f HideObjectInEvent(string)","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_56","title":"Description","text":"Hides the specified object during an event.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_49","title":"Parameters","text":"Disables player movement.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#isavailablekodamaelderlvup-boolean","title":"\ud83d\uddd2\ufe0f IsAvailableKodamaElderLvUp() : boolean","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_58","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_50","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_41","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#ishackingcurrentwaveidinrangenumber-number-unknown","title":"\ud83d\uddd2\ufe0f IsHackingCurrentWaveIdInRange(number, number) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_59","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_51","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_42","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#isinscreenviewstring-number-number-boolean","title":"\ud83d\uddd2\ufe0f IsInScreenView(string, number, number) : boolean","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_60","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_52","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_43","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#isloadinglevel-number","title":"\ud83d\uddd2\ufe0f IsLoadingLevel() : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_61","title":"Description","text":"Returns whether a level is actively being loaded via the LoadLevel() function for pausing the script until it's finished.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_44","title":"Return Value","text":"A 0/1 number representing if a level is being loaded.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#isplayingdieventstring-number","title":"\ud83d\uddd2\ufe0f IsPlayingDiEvent(string) : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_62","title":"Description","text":"Returns whether the specified event is currently playing.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_53","title":"Parameters","text":"A 0/1 number representing if the specified event is currently playing.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#isplayingdieventall-number","title":"\ud83d\uddd2\ufe0f IsPlayingDiEventAll() : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_63","title":"Description","text":"Returns whether any event is playing.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_46","title":"Return Value","text":"A 0/1 number representing if any event is playing.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#isplayingquest-unknown","title":"\ud83d\uddd2\ufe0f IsPlayingQuest() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_64","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_54","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_47","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#killpinballobjects-unknown","title":"\ud83d\uddd2\ufe0f KillPinballObjects() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_65","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_55","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_48","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#loaddieventstring-unknown","title":"\ud83d\uddd2\ufe0f LoadDiEvent(string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_66","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_56","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_49","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#loaddieventfrozenstring-unknown","title":"\ud83d\uddd2\ufe0f LoadDiEventFrozen(string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_67","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_57","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_50","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#loadlevelstring-unknown","title":"\ud83d\uddd2\ufe0f LoadLevel(string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_68","title":"Description","text":"Loads an archive (*.pac
) using its respective *.level
file.
Exits the current script sequence and loads the next one via the input ID.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_62","title":"Parameters","text":"Sends a message to the specified object in the *.gedit
files. Typically used to turn camera volumes on or off.
Gives the player a specific number of specific items.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_66","title":"Parameters","text":"Disables player movement.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#playvoicestring-unknown","title":"\ud83d\uddd2\ufe0f PlayVoice(string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_78","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_67","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_56","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#quitminigamequest-unknown","title":"\ud83d\uddd2\ufe0f QuitMinigameQuest() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_79","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_68","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_57","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#releaseholdplayer","title":"\ud83d\uddd2\ufe0f ReleaseHoldPlayer()","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_80","title":"Description","text":"Enables player movement.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#releasepresentskillstring-unknown","title":"\ud83d\uddd2\ufe0f ReleasePresentSkill(string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_81","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_69","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_58","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#resetcamera","title":"\ud83d\uddd2\ufe0f ResetCamera()","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_82","title":"Description","text":"Restores the player-operated camera.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#resetmenudisabledminigamequest-unknown","title":"\ud83d\uddd2\ufe0f ResetMenuDisabledMinigameQuest() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_83","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_70","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_59","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#resetpinball-unknown","title":"\ud83d\uddd2\ufe0f ResetPinball() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_84","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_71","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_60","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#resetweathernumber-unknown","title":"\ud83d\uddd2\ufe0f ResetWeather(number) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_85","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_72","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_61","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#save-yield","title":"\ud83d\uddd2\ufe0f Save() : yield","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_86","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_73","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#setbossknightlayerenabledboolean-unknown","title":"\ud83d\uddd2\ufe0f SetBossKnightLayerEnabled(boolean) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_87","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_74","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_62","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#sethackingbulletpatternglobalveltimesnumber-unknown","title":"\ud83d\uddd2\ufe0f SetHackingBulletPatternGlobalVelTimes(number) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_88","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_75","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_63","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#sethackingbulletpatternvelrangenumber-number-unknown","title":"\ud83d\uddd2\ufe0f SetHackingBulletPatternVelRange(number, number) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_89","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_76","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_64","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#sethudenabledstring-boolean","title":"\ud83d\uddd2\ufe0f SetHUDEnabled(string, boolean)","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_90","title":"Description","text":"Toggles whether certain menus are available to the player.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_77","title":"Parameters","text":"Toggles whether an object layout layer is visible.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_78","title":"Parameters","text":"Toggles whether an object layout layer is visible during an event.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_79","title":"Parameters","text":"Forces the camera to always look towards the specified position.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_80","title":"Parameters","text":"Toggles whether the specified ability can be used by the player.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_83","title":"Parameters","text":"Sets the current time.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_84","title":"Parameters","text":"Toggles the passage of time.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_85","title":"Parameters","text":"Sets a value for the specified flag.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_86","title":"Parameters","text":"This function does not work.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_87","title":"Parameters","text":"Shoots a pre-defined pattern of bullets for the Hacking minigame.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_88","title":"Parameters","text":"Displays a dialog using a caption and body entry from a *.cnvrs-text
file.
Displays a menu depending on the current sequence.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_96","title":"Parameters","text":"This function is unused.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_98","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_73","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#showtoastuistring-unknown","title":"\ud83d\uddd2\ufe0f ShowToastUI(string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_112","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_99","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_74","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#showtutorialuistring-string-unknown","title":"\ud83d\uddd2\ufe0f ShowTutorialUI(string, string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_113","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_100","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_75","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#showuserguiduistring","title":"\ud83d\uddd2\ufe0f ShowUserGuidUI(string)","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_114","title":"Description","text":"Displays an input guide for the specified control method.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_101","title":"Parameters","text":"Notice
Only three of these are actually used, as Sonic Team moved to using internal methods for displaying these guides, rather than using Lua.
Some names are unknown as they use string hashes that have no source yet.
Name Internal ID Description CameraControl 0 Displays a graphic for the right stick with the text \"Camera\". Unknown... 1 Displays a quad direction graphic with no text. Jump (unused) 2 Displays a graphic for the A button with no text. Boost (unused) 3 Displays a graphic for the right trigger with no text. HomingAttack 4 Displays a graphic for the X button with the text \"Homing Attack\". Lockon (unused) 5 Displays a graphic for the right stick button with the text \"Lock On\". Cyloop (unused) 6 Displays a graphic for the Y button with the text \"Cyloop (while moving)\". CyloopBattle 7 Displays a graphic for the Y button with the text \"Cyloop (while moving)\". Unknown... 8 Displays a graphic for the left bumper with no text. WallRun (unused) 9 Displays two graphics, one with a quad direction graphic with the text \"Climb\", and another with a graphic for the right trigger with the text \"Wall Run (while climbing)\". Boarding (unused) 10 Displays two graphics, one with a quad direction graphic with the text \"Climb\", and another with a graphic for the A button with no text. Unknown... 11 Displays two graphics, one with a left/right direction graphic with no text, and another with a graphic for the left trigger with no text. Diving (unused) 12 Displays a graphic for the right trigger with no text. Unknown... 13 Displays two graphics, one with a quad direction graphic with the text \"Move the target\", and another with a graphic for the A button with the text \"Cast the line\". Unknown... 14 Displays a graphic for the B button with the text \"Quit\". Unknown... 15 Displays a graphic for the A button with the text \"Reel it in\". Unknown... 16 Displays a graphic for the A button with the text \"Hook the fish\". Unknown... 17 Displays a graphic for the A button with no text. Unknown... 18 Displays a graphic for the A button with no text. Unknown... 19 Displays a graphic for the X button with the text \"Place cannonball\". Unknown... 20 Displays a graphic for the X button with the text \"Load cannon\"."},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#showyesnowindowuistring-string-yield","title":"\ud83d\uddd2\ufe0f ShowYesNoWindowUI(string, string) : yield","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_115","title":"Description","text":"Displays a Yes/No dialog using a caption and body entry from a *.cnvrs-text
file.
This function is unused.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_107","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_80","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#startminigamequeststring-unknown","title":"\ud83d\uddd2\ufe0f StartMinigameQuest(string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_121","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_108","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_81","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#startpinball-unknown","title":"\ud83d\uddd2\ufe0f StartPinball() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_122","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_109","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_82","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#starttimegimmick-unknown","title":"\ud83d\uddd2\ufe0f StartTimeGimmick() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_123","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_110","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_83","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#startupgimmickinfo-unknown","title":"\ud83d\uddd2\ufe0f StartupGimmickInfo() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_124","title":"Description","text":"This function is unused.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_111","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_84","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#startwaitminigamequest-unknown","title":"\ud83d\uddd2\ufe0f StartWaitMinigameQuest() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_125","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_112","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_85","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#unloaddievent-unknown","title":"\ud83d\uddd2\ufe0f UnloadDiEvent() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_126","title":"Description","text":"This function is unused.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_113","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_86","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#unloadlevel-unknown","title":"\ud83d\uddd2\ufe0f UnloadLevel() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_127","title":"Description","text":"This function is unused.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_114","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_87","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#waitfromchaosemeraldnum-unknown","title":"\ud83d\uddd2\ufe0f WaitFromChaosEmeraldNum() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_128","title":"Description","text":"This function is unused.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_115","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_88","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#waitfromflag-unknown","title":"\ud83d\uddd2\ufe0f WaitFromFlag() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_129","title":"Description","text":"This function is unused.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_116","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_89","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#waittimenumber","title":"\ud83d\uddd2\ufe0f WaitTime(number)","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_130","title":"Description","text":"Waits for a specified amount of time (in seconds).
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_117","title":"Parameters","text":"Light fields are invisible pieces of geometry utilized by Sonic Colors to tint the color of Sonic, and the world around him, as he runs through the stage. Sadly this mechanic is mostly broken in Sonic Colors: Ultimate, but the files still remain.
"},{"location":"docs/hedgehog-engine/sonic2010/files/lightfield/#light-field-format","title":"Light Field Format","text":"Light field data is stored in \"stgxxx_lfield.orc\" BINA containers, which can be found in \"stgxxx_obj.arc\" archives for a given stage. In the original Wii release, the data is stored in big-endian format.
The format for these files is as follows:
class LightFieldData {\n uint signature = 1380730451; // \"RLFS\" ASCII in big-endian.\n uint version = 1; // Always \"1\".\n uint lfArrayHierarchyDepth; // The depth count of the Light Field object array hierarchy.\n uint lfArrayCount; // The number of entries in the Light Field object array.\n uint lfArrayOffset; // The non-absolute offset to the Light Field object array.\n uint lfAabbTreeCount; // The number of entries in the Light Field AABB (Axis Aligned Bounding Box) tree.\n uint lfAabbTreeOffset; // The non-absolute offset to the Light Field AABB tree.\n LightFieldObject[lfArrayCount] lfObjectArray;\n LightFieldAABBTreeNode[lfAabbTreeCount] lfAabbTree;\n}\n\nenum LightFieldObjectType : uint8 {\n SPHERE = 0,\n CAPSULE = 1,\n BOX = 2,\n OMNIBOX = 3\n}\n\nclass LightFieldObject {\n uint nameOffset; // The non-absolute offset to the object name in the BINA string table.\n int index; // The index of the Light Field object, to be referenced in \"stgxxx_config.lua\" files.\n LightFieldObjectType type; // The type of the Light Field object.\n uint8 padding1; // Padding to pad out the type field to 2 bytes.\n uint16 childrenAABBTreeEntryIndex; // The index to the bounding box of this node's children in the Light Field AABB tree. 0 if the object node has no children.\n float[5] scale; // The scale of the Light Field object. Data format varies depending on the LightFieldObjectType (see below for more information).\n float[3] position; // The position of the Light Field object in 3D space.\n float[4] rotation; // The rotation of the Light Field object in 3D space.\n}\n\nclass LightFieldAABBTreeNode {\n int leftNodeIndex; // Index to the left node in the Light Field AABB tree.\n int rightNodeIndex; // Index to the right node in the Light Field AABB tree. If leftNodeIndex is 0, this field serves as an index back into the Light Field object array.\n float[3] bBoxMin; // The minimum bounding box vertex position in 3D space.\n float[3] bBoxMax; // The maximum bounding box vertex position in 3D space.\n}\n
"},{"location":"docs/hedgehog-engine/sonic2010/files/lightfield/#light-field-object-scale","title":"Light Field Object Scale","text":"The contents of the \"scale\" float array in a LightFieldObject varies depending on the type specified in the LightFieldObjectType field.
Type Layout Sphere radius, margin, 0.0, 0.0, 0.0 Capsule radius, height, margin, 0.0, 0.0 Box length, width, height, margin1, margin2 Omnibox length, width, height, margin, 0.0"},{"location":"docs/hedgehog-engine/sonic2010/files/lightfield/#lightfieldconv-xml-layout","title":"LightFieldConv XML Layout","text":"LightFieldConv was a tool used by Sonic Team to convert light field XML data into \"binarc\" .src files, in preparation for packing the data into a BINA container. The following example XML data can be used to generate an .src file, similar to that which would have been used to create \"stg901_lfield.orc\" for the test level discovered in Sonic Colors: Ultimate:
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Sonic2010LField version=\"1.0.0\">\n <scene>\n <lfield_array> \n <node id=\"LFieldBox_01\">\n <lfield type=\"box\">\n <index>2</index>\n <box>\n <length>80.0</length>\n <width>80.0</width>\n <height>80.0</height>\n <margin1>10.0</margin1>\n <margin2>10.0</margin2>\n </box>\n <bbox>\n <min>-40.0 -20.0 -40.0</min>\n <max>40.0 60.0 40.0</max>\n </bbox>\n </lfield>\n <translate>0.0 20.0 -40.0</translate>\n <rotate>0.707107 0.0 0.0 0.707107</rotate>\n </node>\n\n <node id=\"LFieldCapsule_01\">\n <lfield type=\"capsule\">\n <index>3</index>\n <capsule>\n <radius>30.0</radius>\n <height>100.0</height>\n <margin>5.0</margin>\n </capsule>\n <bbox>\n <min>25.550200 -30.0 -139.162003</min>\n <max>156.261002 30.0 -8.451360</max>\n </bbox>\n </lfield>\n <translate>90.905502 79.9999 -73.806702</translate>\n <rotate>0.923880 0.0 -0.382683 -0.000001</rotate>\n </node>\n\n <node id=\"LFieldSphere_01\">\n <lfield type=\"sphere\">\n <index>4</index>\n <sphere>\n <radius>40.0</radius>\n <margin>10.0</margin>\n </sphere>\n <bbox>\n <min>-126.564003 -40.0 42.505001</min>\n <max>-46.564201 40.0 122.504997</max>\n </bbox>\n </lfield>\n <translate>-86.564201 0.0 82.504997</translate>\n <rotate>0.0 0.0 0.0 1.0</rotate>\n </node>\n\n <node id=\"LFieldOmniBox_01\">\n <lfield type=\"omnibox\">\n <index>5</index>\n <omnibox>\n <length>40.0</length>\n <width>40.0</width>\n <height>40.0</height>\n <margin1>10.0</margin1>\n <margin2>0.0</margin2>\n </omnibox>\n <bbox>\n <min>60.0 -40.0 40.0</min>\n <max>140.0 40.0 120.0</max>\n </bbox>\n </lfield>\n <translate>100.0 0.0 80.0</translate>\n <rotate>0.0 0.0 0.0 1.0</rotate>\n </node>\n </lfield_array>\n </scene>\n</Sonic2010LField>\n
"},{"location":"docs/hedgehog-engine/sonic2010/files/setobject/","title":"Set Object","text":"The Set Object file format is used in Sonic Colors in order to define stage object layout, serving the same purpose as \"Set\" and \"setdata\" XML files in Sonic Unleashed and Sonic Generations respectively. However, unlike in those games, this data is actually stored in binary format for greater efficiency, with the same practice being carried forward in all future titles by Sonic Team.
"},{"location":"docs/hedgehog-engine/sonic2010/files/setobject/#set-object-format","title":"Set Object Format","text":"Set object data is stored in \"stgxxx_obj_xx.orc\" BINA containers, which can be found in \"set\" folder in \"sonic2010_0.cpk\". The objects themselves are arranged into 8 \"layers\" for each stage, separated into files with suffixes from 00 to 07 in the \"set\" folder. In the original Wii release, the data is stored in big-endian format.
class SetObjectData {\n uint signature = 1397703242; // \"SOBJ\" ASCII in big-endian.\n uint version = 1; // Always \"1\".\n uint objectDictCount; // The number of unique object types.\n uint objectDictOffset; // The non-absolute offset to the object dictionary array.\n uint bvhTreeOffset; // The non-absolute offset to the bounding volume hierarchy tree. This is unused in Colors.\n uint objectOffsetArrayOffset; // The non-absolute offset to the array of offsets to all the objects stored in the file.\n uint objectCount; // The number of objects stored in the file.\n uint bvhTreeNodeCount; // The number of nodes in the bounding volume hierarchy tree.\n uint objectInstanceCount; // The total number of object instances in the object instance array.\n\n SetObjectDictNode[objectDictCount] objectDictArray; // The dictionary of object types;\n SetObjectIndicesArrayNode[objectDictCount] objectIndicesArray; // An array of nodes, that each store indices to objects in the object array, grouped by object type.\n uint[objectCount] objectOffsetArray; // An array of offsets to all of the objects stored in the file, indexed into by SetObjectIndicesArrayNode entries.\n SetObject[objectCount] objectArray; // The \"array\" of objects. The term \"array\" is used loosely here as the objects are not fixed size, due to the custom parameters that can be defined for them.\n SetObjectInstance[objectInstanceCount] objectInstanceArray; // The array of object instances.\n}\n\n// One node for every object type in the SOBJ file.\nclass SetObjectDictNode {\n uint objectTypeNameOffset; // The non-absolute offset to the object type name in the BINA string table.\n uint objectIndicesCount; // The number of indices in the object indices array that are of the corresponding type.\n uint objectIndicesOffset; // The non-absolute offset to the array of object indices for the corresponding type.\n}\n\n// One node for every object type in the SOBJ file.\nclass SetObjectIndicesArrayNode {\n uint[objectIndicesCount] objectIndices; // An array of indices of all the objects of the corresponding type in the object indices array.\n}\n\nenum ReplicationAlignment : uint8 {\n NONE = 0,\n GROUND = 1,\n GUIDE = 2,\n GRIND = 3,\n SV = 4, // Side View\n CIRCLE = 5\n}\n\n// setcvtr actually treats these enum values as 4 bit uints, with each padded out with a second 4 bit uint to the length of a uint8. For clarity this is documented as a uint8.\nenum ReplicationLayout : uint8 {\n FRONT = 0x00,\n SIDE = 0x10,\n UP = 0x20\n}\n\n// Set objects can be thought of as templates for object instances. Here common parameters can be defined for later use by multiple instances of the same object.\n\nclass SetObject {\n uint replicationObjectIDComposite; // Composite field of object replication parameters (ReplicationAlignment + ReplicationLayout) and the object ID (uint16), stored as a single uint.\n uint classId; // The unique ID assigned to the object class in the SetEdClass XML file.\n uint unknownOffset1 = 0; // Unknown offset, hardcoded to null in setcvtr. Likely intended to be an offset to a node in the unused bvh tree.\n float interval; // The interval between replicated objects.\n float rangeIn; // The distance from Sonic where the object should become visible.\n float rangeOut; // The distance from Sonic where the object should disappear.\n uint objectInstanceArrayOffset; // The non-absolute offset to the object instance array.\n uint objectInstanceArrayCount; // The number of instances in the instance array.\n uint unknownInt = 0; // Unknown uint, hardcoded to 0 in setcvtr.\n\n // ... Object-specific parameters, defined in SetEdClass XML \"<class>\" entries.\n\n}\n\n// Object instances, or \"units\" as they are referred to in Sonic Team's \"setcvtr\" development tool, are instances of SetObject templates that are described above. By using this system of separating object units from objects themselves, clusters of objects can be defined in a level with the same parameters, with minimal repitition.\n\nclass SetObjectInstance {\n float[3] position; // The position of the object instance in 3D space.\n float[3] rotation; // The rotation of the object instance in 3D space.\n}\n
"},{"location":"docs/hedgehog-engine/sonic2010/files/setobject/#setcvtr-xml-layouts","title":"setcvtr XML Layouts","text":"\"setcvtr\" was a tool used by Sonic Team with the purpose of converting set data XML files into binarc \".src\" files, in preparation for packing data into BINA containers. This allowed the team to define objects in XML format to make development and testing easier. The tool takes two XML files as input, which are explained below.
"},{"location":"docs/hedgehog-engine/sonic2010/files/setobject/#setedclass-xml-layout","title":"SetEdClass XML Layout","text":"The \"SetEdClass\" XML layout is used to define the various types of objects, and their respective parameters, that can be utilized within stages. The following XML demonstrates how a SetEdClass XML can be defined, alongside object classes and parameters:
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<SetEdClass>\n <class name=\"DummyObjectClass1\" crc=\"1\">\n <param_desc_array>\n <param_desc name=\"boolParam\" type=\"bool\" />\n\n <param_desc name=\"sint8Param\" type=\"sint8\" default=\"1\" />\n <param_desc name=\"sint16Param\" type=\"sint16\" />\n <param_desc name=\"sint32Param\" type=\"sint32\" />\n\n <param_desc name=\"uint8Param\" type=\"uint8\" />\n <param_desc name=\"uint16Param\" type=\"uint16\" />\n <param_desc name=\"uint32Param\" type=\"uint32\" />\n\n <!--\n Accepts normal integers, but doesn't appear to take hex input correctly.\n -->\n <param_desc name=\"uint32HexParam\" type=\"uint32_hex\" />\n\n <param_desc name=\"floatParam\" type=\"float\" />\n\n <!--\n Arrays are not fixed size at the class level, count is declared when the parameter is used in the SetObject XML.\n -->\n <param_desc name=\"sint32ArrayParam\" type=\"array_sint32\" />\n <param_desc name=\"floatArrayParam\" type=\"array_float\" />\n </param_desc_array>\n </class>\n\n <class name=\"DummyObjectClass2\" crc=\"2\">\n <param_desc_array>\n <param_desc name=\"enumParam\" type=\"enum\" default=\"test2\">\n <!--\n When used in the SetObject XML, numbers can be also used in place of item names.\n -->\n <item name=\"enum1\" caption=\"Enum 1 Description\" />\n <item name=\"enum2\" caption=\"Enum 2 Description\" />\n <item name=\"enum3\" caption=\"Enum 3 Description\" />\n </param_desc>\n\n <param_desc name=\"bitsetParam\" type=\"bitset\">\n <field name=\"bit1\" pos=\"0\" />\n <field name=\"bit2\" pos=\"1\" />\n <field name=\"bit3\" pos=\"2\" />\n <field name=\"bit4\" pos=\"3\" />\n </param_desc>\n\n <!--\n Valid parameter type, but doesn't appear to function correctly - causes setcvtr to fail on declaration.\n -->\n <!-- <param_desc name=\"stringParam\" type=\"string\" /> -->\n\n <param_desc name=\"positionParam\" type=\"position\" />\n\n <param_desc name=\"targetParam\" type=\"target\" />\n\n </param_desc_array>\n </class>\n</SetEdClass>\n
"},{"location":"docs/hedgehog-engine/sonic2010/files/setobject/#setobject-xml-layout","title":"SetObject XML Layout","text":"The \"SetObject\" XML layout is used to define objects, and their respective \"units\", that should be placed within a stage. The following XML demonstrates how a SetObject XML can be defined, utilizing objects from the SetEdClass in the previous example and defining the parameters:
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<SetObject>\n <object id=\"1\" class=\"DummyObjectClass1\" range_in=\"100\" range_out=\"120\">\n <param_array>\n <param name=\"boolParam\">true</param>\n\n <param name=\"sint8Param\">5</param>\n <param name=\"sint16Param\">10</param>\n <param name=\"sint32Param\">15</param>\n\n <param name=\"uint8Param\">20</param>\n <param name=\"uint16Param\">25</param>\n <param name=\"uint32Param\">30</param>\n\n <param name=\"uint32HexParam\">100</param>\n\n <param name=\"floatParam\">1.5</param>\n\n <param name=\"sint32ArrayParam\" count=\"5\">1 2 3 4 5</param>\n <param name=\"floatArrayParam\" count=\"3\">1 2 3</param>\n </param_array>\n\n <unit_array interval=\"0\" alignment=\"none\" layout=\"front\">\n <unit position=\"10 10 10\" rotation=\"0.0 0.0 0.0\"/>\n <unit position=\"30 30 30\" rotation=\"0.0 0.0 0.0\"/>\n <unit position=\"50 50 50\" rotation=\"0.0 0.0 0.0\"/>\n </unit_array>\n </object>\n\n <object id=\"2\" class=\"DummyObjectClass2\" range_in=\"110\" range_out=\"130\">\n <param_array>\n <!--\n Bits are set to true by defining them in the parameter. If a bit is omitted, it's set to false.\n -->\n <param name=\"bitsetParam\">\n <bit name=\"bit1\" />\n <bit name=\"bit2\" />\n <bit name=\"bit4\" />\n </param>\n\n <param name=\"enumParam\">enum2</param>\n\n <!-- <param name=\"stringParam\">demostring</param> -->\n\n <param name=\"positionParam\">10 20 30</param>\n\n <param name=\"targetParam\">1</param>\n </param_array>\n <unit_array interval=\"1\" alignment=\"circle\" layout=\"side\">\n <unit position=\"5 5 5\" rotation=\"0.707107 0.0 0.0\"/>\n <unit position=\"25 25 25\" rotation=\"0.923880 0.0 -0.382683\"/>\n </unit_array>\n </object>\n</SetObject>\n
"},{"location":"docs/hedgehog-engine/swa/cutscenes/ids/","title":"Cutscene IDs for Sonic Unleashed","text":"Info
Thanks to Archxe and Hedgeturdd for writing these documents!
Here's a list with all the cutscenes and their respective archive names in Sonic Unleashed.
Cutscene Name Cutscene ID Opening M0_01_05 A New Journey M0_06 Special Sundae M1_01 The First Night M1_02 Tails in Trouble! M1_03_1 To Spagonia! M1_03_2 Kidnapped M2_01 Same As Ever M2_02 Gaia Manuscripts M2_03 Eggman Again M3_01 The Egg Beetle M3_02 Temple Activated! M3_03 Planet Pieces M3_04 Tails' Report M3_05 Eggman's Idea M4_01 Guiding Pulse M5_01 The Dark Gaia Project M5_02 Chip's Change M6_01 Chip's Memories M6_02 No Reason M6_03 Eggmanland M7_01 The Final Temple M7_02 The 7th Continent M7_03 Congratulations M7_04 Pickle's Message M8_01 The Egg Dragoon M8_02 Planet's End M8_03 Dark Gaia Appears M8_04 Shrines in Flight M8_05 Hour of Awakening M8_06_1 Let's Finish This! M8_06_2 Speading Darkness M8_07 Dark World M8_08 Hope and Despair M8_09 The Final Form M8_10 Darkness and Light M8_11_1 Annihilation M8_11_2 A Score Settled M8_11_3 Rekindled Light M8_12 Begin Anew M8_13 Save the Speech M8_14 To the Surface M8_15 Always M8_16 The Divine Beast S1_03 The Key S1_04 Chun-Nan Temple S1_05 Back to Normal S1_06 Amy's Mistake S2_01 Midnight Dance S2_03 Rescuing Amy S2_04 A Monster on Ice S3_03 Holoskan Temple S3_04 Spagonian Temple T0_01 Shamaran Temple T0_02 Charge! T0_03 Temple Entrance T0_04 Sonic and Chip (in Chun-nan) CHN Sonic and Chip (in Adabat) SEA Sonic and Chip (in Holoska) SNW_gooON"},{"location":"docs/hedgehog-engine/swa/levels/ids/","title":"Level IDs for Sonic Unleashed","text":"Info
Thanks to Archxe and Hedgeturdd for writing these documents!
"},{"location":"docs/hedgehog-engine/swa/levels/ids/#mapping","title":"Mapping","text":"Level IDs are defined like this:
Act{Day/Night}_{region}Act{stage_number}\nor\nAct{Day/Night}_{sub}{region}_{substage_number}\n
Note
Not all stages follow this format, exceptions include:
ActD_EU -> Rooftop Run Day 1
ActD_SubMykonos_01 -> Windmill Isle Day Act 3
Here's a list with all the levels and their respective archive names in Sonic Unleashed.
"},{"location":"docs/hedgehog-engine/swa/levels/ids/#region-names","title":"Region Names","text":"Region Internal Name Apotos/Windmill Isle Mykonos Mazuri/Savannah Citadel Africa Spagonia/Rooftop Run EU Chun-Nan/Dragon Road China Holoska/Cool Edge Snow Shamar/Arid Sands Petra Empire City/Skyscraper Scamper NY Adabat/Jungle Joyride Beach EggmanLand EggManLand"},{"location":"docs/hedgehog-engine/swa/levels/ids/#stages-day","title":"Stages (Day)","text":"Stage Name Level ID Windmill Isle Day Act 1 ActD_MykonosAct1 Windmill Isle Day Act 1-2 ActD_SubMykonos_04 Windmill Isle Day Act 2 ActD_MykonosAct2 Windmill Isle Day Act 2-2 ActD_SubMykonos_05 Windmill Isle Day Act 3 ActD_SubMykonos_01 Windmill Isle Day Act 4 ActD_SubMykonos_02 Savannah Citadel Day Act 1 ActD_Africa Savannah Citadel Day Act 1-2 ActD_SubAfrica_05 Savannah Citadel Day Act 2 ActD_SubAfrica_01 Savannah Citadel Day Act 3 ActD_SubAfrica_03 Savannah Citadel Day Act 3-2 ActD_SubAfrica_06 Savannah Citadel Day Act 4 ActD_SubAfrica_02 Savannah Citadel Day Act 5 ActD_SubAfrica_04 Rooftop Run Day 1 ActD_EU Rooftop Run Day Act 1-2 ActD_SubEU_05 Rooftop Run Day Act 2 ActD_SubEU_01 Rooftop Run Day Act 2-2 ActD_SubEU_06 Rooftop Run Day Act 3 ActD_SubEU_02 Rooftop Run Day Act 4 ActD_SubEU_03 Rooftop Run Day Act 5 ActD_SubEU_04 Tornado Defence Act 1 ExStageTails1 Dragon Road Day Act 1 ActD_China Dragon Road Day Act 1-2 ActD_SubChina_05 Dragon Road Day Act 2 ActD_SubChina_03 Dragon Road Day Act 2-2 ActD_SubChina_06 Dragon Road Day Act 3 ActD_SubChina_04 Dragon Road Day Act 4 ActD_SubChina_01 Dragon Road Day Act 5 ActD_SubChina_02 Cool Edge Day Act 1 ActD_Snow Cool Edge Day Act 1-2 ActD_SubSnow_04 Cool Edge Day Act 2 ActD_SubSnow_01 Cool Edge Day Act 2-2 ActD_SubSnow_05 Cool Edge Day Act 3 ActD_SubSnow_02 Cool Edge Day Act 4 ActD_SubSnow_03 Arid Sands Day Act 1 ActD_Petra Arid Sands Day Act 1-2 ActD_SubPetra_04 Arid Sands Day Act 2 ActD_SubPetra_03 Skyscraper Scamper Day Act 1 ActD_NY Skyscraper Scamper Day Act 1-2 ActD_SubNY_03 Skyscraper Scamper Day Act 2 ActD_SubNY_01 Skyscraper Scamper Day Act 3 ActD_SubNY_02 Jungle Joyride Day Act 1 ActD_Beach Jungle Joyride Day Act 1-2 ActD_SubBeach_05 Jungle Joyride Day Act 2 ActD_SubBeach_02 Jungle Joyride Day Act 3 ActD_SubBeach_04 Jungle Joyride Day Act 4 ActD_SubBeach_01 Jungle Joyride Day Act 5 ActD_SubBeach_03 EggmanLand Act_EggmanLand Tornado Defense Act 2 ExStageTails2"},{"location":"docs/hedgehog-engine/swa/levels/ids/#stages-night","title":"Stages (Night)","text":"Stage Name Level ID Windmill Isle Night Act 1 ActN_MykonosEvil Windmill Isle Night Act 1-2 ActN_SubMykonos_03 Windmill Isle Night Act 1-3 ActN_SubMykonos_04 Windmill Isle Night Act 2 ActN_SubMykonos_01 Savannah Citadel Night Act 1 ActN_AfricaEvil Savannah Citadel Night Act 2 ActN_SubAfrica_01 Savannah Citadel Night Act 3 ActN_SubAfrica_02 Savannah Citadel Night Act 4 ActN_SubAfrica_03 Rooftop Run Night Act 1 ActN_EUEvil Rooftop Run Night Act 1-2 ActN_SubEU_02 Rooftop Run Night Act 2 ActN_SubEU_01 Dragon Road Night Act 1 ActN_ChinaEvil Dragon Road Night Act 1-2 ActN_SubChina_03 Dragon Road Night Act 2 ActN_SubChina_01 Dragon Road Night Act 3 ActN_SubChina_02 Arid Sands Night Act 1 ActN_PetraEvil Arid Sands Night Act 2 ActN_SubPetra_03 Arid Sands Night Act 3 ActN_SubPetra_02 Cool Edge Night Act 1 ActN_SnowEvil Cool Edge Night Act 2 ActN_SubSnow_01 Cool Edge Night Act 3 ActN_SubSnow_02 Skyscraper Scamper Night Act 1 ActN_NYEvil Skyscraper Scamper Night Act 2 ActN_SubNY_02 Skyscraper Scamper Night Act 3 ActN_SubNY_01 Jungle Joyride Night Act 1 ActN_BeachEvil Jungle Joyride Night Act 1-2 ActN_SubBeach_03 Jungle Joyride Night Act 2 ActN_SubBeach_01 Jungle Joyride Night Act 3 ActN_SubBeach_02"},{"location":"docs/hedgehog-engine/swa/levels/ids/#bosses","title":"Bosses","text":"Boss Name Level ID Egg Beetle BossEggBeetle Egg Devil Ray BossEggRayBird Dark Gaia Phoenix BossPhoenix Dark Gaia Moray BossDarkGaiaMoray Dark Guardian BossPetra Egg Lancer BossEggLancer Egg Dragoon BossEggDragoon Dark Gaia - Gaia Colossus Sections BossDarkGaia1_1Air Dark Gaia - Sonic Section 1 BossDarkGaia1_1Run Dark Gaia - Sonic Section 2 BossDarkGaia1_2Run Dark Gaia - Sonic Section 3 BossDarkGaia1_3Run Perfect Dark Gaia BossFinalDarkGaia"},{"location":"docs/hedgehog-engine/swa/towns/ids/","title":"Town IDs for Sonic Unleashed","text":"Info
Thanks to Archxe and Hedgeturdd for writing these documents!
Here's a list with all the towns and their respective archive names in Sonic Unleashed.
"},{"location":"docs/hedgehog-engine/swa/towns/ids/#towns-day","title":"Towns (Day)","text":"Town Name Level ID Apotos Day Town Town_Mykonos Apotos Day Entrance Field Town_MykonosETF Mazuri Day Town Town_Africa Mazuri Day Entrance Field Town_AfricaETF Spagonia Day Town Town_EuropeanCity Spagonia Day Entrance Field Town_EuropeanCityETF Spagonia Day Lab Town_EULabo Chun-Nan Day Town Town_China Chun-Nan Day Entrance Field Town_ChinaETF Holoska Day Town Town_Snow Holoska Day Entrance Field Town_SnowETF Shamar Day Town Town_PetraCapital Shamar Day Entrance Field Town_PetraCapitalETF Shamar Day Lab Town_PetraLabo Empire City Day Town Town_NYCity Empire City Day Entrance Field Town_NYCityETF Adabat Day Town Town_SouthEastAsia Adabat Day Entrance Field Town_SouthEastAsiaETF EggmanLand Town Town_EggManBase"},{"location":"docs/hedgehog-engine/swa/towns/ids/#towns-night","title":"Towns (Night)","text":"Town Name Level ID Apotos Night Town Town_Mykonos_Night Apotos Night Entrance Field Town_MykonosETF_Night Mazuri Night Town Town_Africa_Night Mazuri Night Entrance Field Town_AfricaETF_Night Spagonia Night Town Town_EuropeanCity_Night Spagonia Night Entrance Field Town_EuropeanCityETF_Night Spagonia Night Lab Town_EULabo_Night Chun-Nan Night Town Town_China_Night Chun-Nan Night Entrance Field Town_ChinaETF_Night Holoska Night Town Town_Snow_Night Holoska Night Entrance Field Town_SnowETF_Night Shamar Night Town Town_PetraCapital_Night Shamar Night Entrance Field Town_PetraCapitalETF_Night Shamar Night Lab Town_PetraLabo_Night Empire City Night Town Town_NYCity_Night Empire City Night Entrance Field Town_NYCityETF_Night Adabat Night Town Town_SouthEastAsia_Night Adabat Night Entrance Field Town_SouthEastAsiaETF_Night"},{"location":"docs/hedgehog-engine/wars/levels/ids/","title":"Level ID Map","text":""},{"location":"docs/hedgehog-engine/wars/levels/ids/#mapping","title":"Mapping","text":"Stage IDs are defined like this:
{world_id}{stage_type}{character_index}\n
Example
w5a01 -> Lost Valley
"},{"location":"docs/hedgehog-engine/wars/levels/ids/#worlds-zones","title":"Worlds (Zones)","text":"World ID World Name w1 Death Egg w2 Chemical Plant w3 City w4 Mystic Jungle w5 Green Hill w6 Metropolis w7 Eggman Empire Fortress"},{"location":"docs/hedgehog-engine/wars/levels/ids/#stage-type","title":"Stage Type","text":"Stage Type ID Stage Type a Act b Boss d DLC s Credits t Title x Extra"},{"location":"docs/hedgehog-engine/wars/levels/ids/#character-index","title":"Character Index","text":"Character Index Character 01 Modern Sonic 02 Avatar 03 Tag Team 04 Classic SonicNote
Bosses don't use this value to indicate character, rather as a boss index for the current world (which only comes up in World 7).
Note
The Secret and Extra stages don't use this value to indicate character.
"},{"location":"docs/hedgehog-engine/wars/levels/ids/#main-stages","title":"Main Stages","text":"Stage Name Level ID Lost Valley w5a01 Space Port w2a02 Ghost Town w3a04 Prison Hall w1a02 VS. Zavok w1b01 Egg Gate w1a01 Arsenal Pyramid w5a03 Luminous Forest w4a01 VS. Infinite w4b01 Green Hill w5a04 VS. Eggman w5b01 Park Avenue w3a02 Casino Forest w4a04 Aqua Road w4a02 Sunset Heights w3a01 Capital City w6a02 VS. Infinite w6b01 Chemical Plant w2a04 Red Gate Bridge w3a03 Guardian Rock w5a02 Network Terminal w2a01 Death Egg w1a04 Metropolitan Highway w6a01 Null Space w6a03 Imperial Tower w7a02 Mortar Canyon w7a01 VS. Infinite w7b01 Iron Fortress w7a04 Final Judgement w7a03 VS. Death Egg Robot w7b02"},{"location":"docs/hedgehog-engine/wars/levels/ids/#secret-stages","title":"Secret Stages","text":"Stage Name Level ID Fire Cannon 1 w4x02 Vanish Panel 1 w3x02 Bomb Block 1 w5x03 Plasma Cannon 1 w2x02 Laser Cannon 1 w1x02 Reverse Block 1 w6x02"},{"location":"docs/hedgehog-engine/wars/levels/ids/#extra-stages","title":"Extra Stages","text":"Stage Name Level ID Flying Pod w5x02 Bomb Block 2 w2x01 Laser Cannon 2 w6x01 Reverse Block 2 w5x01 Vanish Panel 2 w4x01 Fire Cannon 2 w3x01 Plasma Cannon 2 w1x01"},{"location":"docs/hedgehog-engine/wars/levels/ids/#episode-shadow-stages","title":"Episode Shadow Stages","text":"Stage Name Level ID Enemy Territory w3d01 Eggman's Facility w4d01 Virtual Reality w5d01"},{"location":"docs/nn/common/chunk-format/","title":"NN Chunk Format","text":"Warning
This page is still a work in progress! Any additions and updates are greatly appreciated!
Info
HedgeDocs' initial Sega NN documentation was written by: Radfordhound.
Thanks to:
ItsEasyActually: For sharing his Sega NN findings with me, which helped immensely in getting me started on my journey to reverse-engineer and document all of Sega NN across all of its many crazy iterations and platforms.
ArMM1998: For sharing his documentation on some more obscure NN file types with me (specifically Puyo Puyo stuff, including DS games that used NN which I didn't know was a thing); I never would've known about these otherwise!
TGE and WamWooWam: For decompiling SEGA's unholy port of Sonic 4 Episode I to Windows Phone 7, which used the Sega NN library, and just-so-happened to include complete symbols for everything (even enum values)! I can't understate how much this information has helped me!
SEGA: For making these games, and for letting us freely mod them. Seriously, not many companies let us do this stuff openly, and I think it's awesome. (Also, for releasing that awful version of Sonic 4 Episode I on Windows Phone 7 which had all the symbols in it. Thanks guys, you're the best!! <3)
The Sega NN Chunk Format is a generic \"container\" format developed by Sega somewhere around 2002-2004. It originally appeared in 2004's \"Sega Superstars\" (to our knowledge), and has been heavily utilized in many Sega games released since.
The format is heavily based on the older \"Sega Ninja Chunk Model\" format, which was originally developed for the Sega Dreamcast and was utilized in many Dreamcast games (it was even included as part of the Dreamcast's \"Katana\" SDK).
While the exact meaning of the \"NN\" in \"Sega NN\" is still currently unknown, given that it is so heavily based off of the older Ninja format, it's almost certainly an acronym for something like \"New Ninja\" or \"Ninja Next\".
"},{"location":"docs/nn/common/chunk-format/#platforms","title":"Platforms","text":"The NN Chunk Format, much like the older Ninja format it's based on, is designed heavily around the specific hardware/software requirements of whatever platform it is intended to be used on.
Unlike the older Ninja format, however (which only supports one platform: the Sega Dreamcast), the NN Chunk Format is \"multi-platform\", and therefore comes in many different platform-specific variants.
All known supported platforms are listed in the following chart:
ID Meaning CC NN Library Version Endianness Alignment Description NX Ninja Xbox x DirectX G1.1 Little 16 Xbox/Xbox 360 NS Ninja Sony s PlayStation 2 Little 16 ? PlayStation 2 NG Ninja Gamecube g GAMECUBE Big 32 Gamecube/Wii NC Ninja Cell c ? PS3 Little ? 16 ? PlayStation 3 NU Ninja Umd ? u/s PSP Little 16 ? PlayStation Portable DS DS ? ? Little 16 ? Nintendo DS/3DS NI Ninja Ios i ? OpenGL ES 1.1 Little 16 ? iOS/Android/Windows Phone NE ? ? DirectX G2.0 on XBOX360 Little ? 16 ? Xbox 360 NY ? ? ? Big 16 ? Xbox 360/PlayStation 3 NZ Ninja [Other] z DirectX G2.0 Little 16 Other platforms, such as PC"},{"location":"docs/nn/common/chunk-format/#data-chunks","title":"Data Chunks","text":"As the name implies, files in the NN Chunk Format are comprised of a series of one or more \"data chunks\", one after another.
A \"data chunk\" is simply a block of data (structs, arrays, strings, etc.) that represents a single resource of a specific type.
All known data chunk types are listed in the following chart:
ID CC Type Description TL t TEXLIST A list of textures. EF ? EFFECTLIST A list of effects (shaders). NN a NODENAMELIST A list of names for the nodes (bones) within an object (a model). OB o OBJECT A model. CA ? CAMERA Camera parameters. MO m MOTION (node) A node (bone) animation. MC d MOTION (camera) A camera animation. ML ? MOTION (light) A light animation. MM f MOTION (morph) A morph animation. MA v MOTION (material) A material animation. LI l LIGHT A light.Todo
Add the rest of the data chunk types.
For more specific information on the format of these data chunk types, please refer to the linked pages in the above chart.
"},{"location":"docs/nn/common/chunk-format/#file-types","title":"File Types","text":"Just like with the older Ninja format, NN chunk files come in two forms:
Info
The vast majority of NN chunk files in released games are in binary-form.
To our knowledge, all released games using NN don't support loading text-form files, meaning that all NN text-form files found in the games are unused developer leftovers!
File extensions for NN chunk files typically consist of three characters:
n
for Binary-Form files, or t
for Text-Form files.Examples
Extension Meaning .xno Xbox | Binary-Form | OBJECT .gno Gamecube | Binary-Form | OBJECT .xtv Xbox | Text-Form | MOTION (material) .snt Sony | Binary-Form | TEXLIST"},{"location":"docs/nn/common/chunk-format/#binary-form-file-format","title":"Binary-Form File Format","text":"Binary-Form NN chunk files are just a series of consecutive \"binary chunks\", each of which begins with the following struct:
Important
All instances of this struct (and ONLY this struct) are represented in little-endian, regardless of the endianness specified by the platform. Everything else in Binary-Form NN chunk files is represented in the endianness specified by the platform.
/*\n NOTE: A struct type with this name does not actually exist\n (to my knowledge) in real Sega NN implementations; instead,\n these fields are just embedded directly within every binary\n chunk's header struct. This is just an easier way to think\n about it for our purposes.\n*/\nstruct NNS_BINCNK_HEADER\n{\n /*\n The four-character identifier for this binary chunk;\n specifies what type of binary chunk this is.\n */\n uint32_t Id;\n\n /*\n The offset to the next four-character identifier in the\n file, relative to the end of this struct (such that after\n doing fread(&OfsNextId, sizeof(OfsNextId), 1, file);\n you can just do fseek(file, OfsNextId, SEEK_CUR)).\n */\n uint32_t OfsNextId;\n};\n
Immediately following this struct comes all of the data (structs, strings, etc.) required to represent the binary chunk. The format of this data depends on the platform and type of binary chunk being represented. Check the Id field to determine this.
After each binary chunk (including all of its data) has been written, the file is padded (with 0
s) to a position that is divisible by the \"alignment\" specified by the platform (usually it's 16, but notably, it's 32 on Gamecube/Wii).
What follows is documentation for all known binary chunk types, in the order they appear within binary-form NN chunk files.
"},{"location":"docs/nn/common/chunk-format/#info-chunk","title":"Info Chunk","text":"Important
This chunk is required to be present at the beginning of all binary-form NN chunk files! The Sega NN games I checked actually rely on this behavior, so you can too.
This binary chunk serves as the header for a binary-form NN chunk file, and contains info needed to parse the file. It is represented as the following struct:
struct NNS_BINCNK_FILEHEADER\n{\n /*\n Binary chunk header; must be present at the beginning of all binary chunks.\n\n The chunk ID is set to \"**IF\", where \"**\" is the \"ID\" of\n the platform (e.g. \"NGIF\" for \"Ninja Gamecube InFo\").\n */\n NNS_BINCNK_HEADER ChunkHeader;\n\n /* The number of data chunks in the file. */\n uint32_t nChunk;\n\n /* Absolute offset to the first data chunk in the file. */\n uint32_t OfsData;\n\n /* The combined size of all of the data chunks in the file, including padding. */\n uint32_t SizeData;\n\n /* Absolute offset to the (required) NOF0 binary chunk. */\n uint32_t OfsNOF0;\n\n /*\n Size of the (required) NOF0 binary chunk, including its header.\n Depending on the variant of the format, this size either includes\n the padding that comes after the NOF0 binary chunk, or it doesn't.\n\n (I haven't figured out exactly which versions include padding yet).\n\n (It seems PSP files and .[x]ncp files don't count the padding,\n but everything else does?)\n */\n uint32_t SizeNOF0;\n\n /*\n 1 in most files, 0 in some newer variants.\n (Maybe they just stopped using this value?)\n */\n uint32_t Version;\n};\n
Todo
Further research NIFL header chunks and add info on those.
"},{"location":"docs/nn/common/chunk-format/#data-chunk-header","title":"Data Chunk Header","text":"After the Info Chunk, comes a sequence of one or more data chunks.
In binary-form NN chunk files, each data chunk begins with the following struct:
struct NNS_BINCNK_DATAHEADER\n{\n /*\n Binary chunk header; must be present at the beginning of all binary chunks.\n\n The chunk ID is set to the \"ID\" of the platform, followed\n by the \"ID\" of the data chunk type being written (e.g.\n \"NXTL\" for \"Ninja Xbox Texture List\").\n */\n NNS_BINCNK_HEADER ChunkHeader;\n\n /*\n Offset to the \"main\" (root) struct that makes up this chunk's data\n (e.g. offset to a NNS_NODENAMELIST if the chunk type indicates\n that this is a NODENAMELIST data chunk), relative to the\n position specified by the [OfsData] field from the info chunk.\n */\n uint32_t OfsMainData;\n\n /* Always 0 in every file I've seen thus far. */\n uint32_t Version;\n};\n
Immediately following this struct comes all of the data (structs, strings, etc.) required to represent the data chunk. The format of this data depends on the platform and type of data chunk being represented. Check the chunk ID from the ChunkHeader field in the above struct to determine this.
See the linked pages in the data chunks chart.
"},{"location":"docs/nn/common/chunk-format/#offsets-list-chunk","title":"Offsets List Chunk","text":"Important
This chunk is required to be present in all binary-form NN chunk files!
After all of the data chunks, comes the offsets list chunk.
This binary chunk represents a list of positions for all of the pointers (\"offsets\") in all of the data chunks in the file, relative to the value of the [OfsData]
field from the file's info chunk.
struct NNS_BINCNK_NOF0HEADER\n{\n /*\n Binary chunk header; must be present at the beginning of all binary chunks.\n\n The chunk ID is set to \"NOF0\".\n */\n NNS_BINCNK_HEADER ChunkHeader;\n\n /* The number of pointer positions listed within this chunk. */\n uint32_t nData;\n\n /*\n Padding; always 0 in files.\n\n Some games use this value as a marker that states whether or not\n the offsets have been \"fixed\". In those games, after they're done\n \"fixing\" all of the pointers listed within this chunk, they will set\n this value to 1 in memory.\n */\n uint32_t Pad;\n};\n
Immediately following this struct comes an array of uint32_t
values of size [nData]
. These values represent the positions of every pointer in all of the data chunks in the file, relative to the [OfsData]
field from the file's info chunk.
Most Sega NN games use this chunk to quickly \"fix\" all of the pointers within the data chunks (that is, to convert all of the offsets into absolute memory addresses that can then just be used as normal pointers).
Some games, however, (namely: Sonic 4 Episode I for Windows Phone) ignore the values in this chunk, and instead, just manually add [OfsData]
to each offset to get an absolute file position whenever they need to jump there.
Regardless of whether the data is used or not, it is still required to be present.
Todo
Add pseudo-code for \"fixing\" the offsets listed in this chunk.
"},{"location":"docs/nn/common/chunk-format/#file-name-chunk","title":"File Name Chunk","text":"Info
This chunk is completely optional and seems to only be used for debugging/internal-tooling purposes.
This chunk simply states the name and extension (without the path) of the file it's contained in.
struct NNS_BINCNK_NFN0HEADER\n{\n /*\n Binary chunk header; must be present at the beginning of all binary chunks.\n\n The chunk ID is set to \"NFN0\".\n */\n NNS_BINCNK_HEADER ChunkHeader;\n\n /* Padding; always 0 in files. */\n uint32_t Pad[2];\n};\n
Immediately following this header comes a null-terminated string which represents the file's name and extension (without its path).
"},{"location":"docs/nn/common/chunk-format/#end-chunk","title":"End Chunk","text":"Important
This chunk is required to be present as the last chunk in all binary-form NN chunk files!
This is the last chunk in all binary-form NN chunk files. It exists purely to indicate that there are no more chunks left in the file, so that you know when to stop reading if you're reading the file one chunk at a time.
struct NNS_BINCNK_NENDHEADER\n{\n /*\n Binary chunk header; must be present at the beginning of all binary chunks.\n\n The chunk ID is set to \"NEND\".\n */\n NNS_BINCNK_HEADER ChunkHeader;\n\n /* Padding; always 0 in files. */\n uint32_t Pad[2];\n};\n
"},{"location":"docs/nn/common/chunk-format/#text-form-file-format","title":"Text-Form File Format","text":"Just like text-form Ninja chunk model files, text-form NN chunk files are actually C header files designed to be directly #include
-able from C or C++ code, allowing developers to literally embed NN data directly into the game's code itself!
They also, however, are designed to serve as a human-readable variant of binary-form NN chunk files that can be more easily parsed and/or generated by the official Sega NN tooling.
They accomplish all of this by using only a very strict subset of C in a precise layout, and by heavily utilizing preprocessor defines from other NN library header files that the developer is supposed to #include
in their code before #include
-ing the text-form NN chunk file.
The general layout is as follows:
Important
Replace these special phrases in all of the following \"text snippets
\" as follows:
\\t
\": Replace with a tab character (not spaces).TYPE
\": Replace with the name of the type currently being written.NAME
\": Replace with the name of whatever you're currently writing.Create\\t:
\" followed by the date this file was created in the \"ddd MMM dd HH:mm:ss yyyy
\" .NET DateTime format.TYPE\\t: NAME
\", where TYPE
refers to the type of the struct being referenced (e.g. NNS_TEXFILELIST). See the linked pages in the data chunks chart.TYPE START
\", where TYPE
refers to the data chunk's type (e.g. TEXLIST).TYPE END
\", where TYPE
refers to the data chunk's type (e.g. TEXLIST).End of File
\".SampleFile.xtt
/*\n Sample NN Exporter Version 1.00.00\n Create : Wed Feb 08 21:06:46 2023\n NNS_TEXFILELIST : nntexfilelist_SampleFile\n*/\n\n/* TEXLIST START */\n\nNNS_TEXFILE nntexfile_SampleFile[] =\n{\n TEXFILE(\n TF_FILENAME( \"SampleTex_dif.dds\" ),\n TF_FILTER( NND_MIN_LINEAR_MIPMAP_NEAREST, NND_MAG_LINEAR )\n ),\n TEXFILE(\n TF_FILENAME( \"SampleTex_spec.dds\" ),\n TF_FILTER( NND_MIN_LINEAR_MIPMAP_NEAREST, NND_MAG_LINEAR )\n ),\n TEXFILE(\n TF_FILENAME( \"SampleTex_norm.dds\" ),\n TF_FILTER( NND_MIN_LINEAR_MIPMAP_NEAREST, NND_MAG_LINEAR )\n ),\n};\n\nNNS_TEXFILELIST nntexfilelist_SampleFile[] =\n{\n TEXFILELIST(\n TFL_N_TEXFILE( 3 ),\n TFL_TEXFILE( nntexfile_SampleFile )\n )\n};\n\n/* TEXLIST END */\n\n/* End of File */\n
Info
All of the following in the above example are struct/enum/preprocessor defines from the NN library:
NNS_TEXFILE
TEXFILE
TF_FILENAME
TF_FILTER
NND_MIN_LINEAR_MIPMAP_NEAREST
NND_MAG_LINEAR
NNS_TEXFILELIST
TEXFILELIST
TFL_N_TEXFILE
TFL_TEXFILE
For a complete list of all of these defines, please refer to the individual pages linked in the data chunks chart (for this example, refer to the TEXLIST documentation).
The ordering of the data within each data chunk is generally in \"reverse\" order, such that any reference to a value will not be written until after the value it is referencing, as is required by C.
In some cases, the \"reverse\" order is still not enough to satisfy this requirement, so the Sega NN exporters will write an extern declaration for the value being referenced.
Example snippet from en_Kyozoress.xto in Sonic '06
Here, the nnvertex_plb_op_en_Kyozoress_head_l__2_w2_Eye
value is declared so that it can be referenced by the VTX_LISTPTR
field in nnvertexdesc_plb_op_en_Kyozoress_head_l__2_w2_Eye
:
extern NNS_VTXTYPE_XB_PW4INCT nnvertex_plb_op_en_Kyozoress_head_l__2_w2_Eye[];\n\nNNS_VTXLIST_DX_DESC nnvertexdesc_plb_op_en_Kyozoress_head_l__2_w2_Eye[] =\n{\n VTXDESC(\n /* ... */\n VTX_LISTPTR( nnvertex_plb_op_en_Kyozoress_head_l__2_w2_Eye ),\n /* ... */\n ),\n};\n
Then, later on in the file, the referenced nnvertex_plb_op_en_Kyozoress_head_l__2_w2_Eye
value is defined as usual (contents redacted due to extreme length):
NNS_VTXTYPE_XB_PW4INCT nnvertex_plb_op_en_Kyozoress_head_l__2_w2_Eye[] =\n{\n /* ... */\n};\n
"},{"location":"docs/nn/common/chunk-format/nodenamelist/","title":"NODENAMELIST","text":""},{"location":"docs/nn/common/chunk-format/nodenamelist/#nns_nodenamelist","title":"NNS_NODENAMELIST","text":"Important
This is the \"main\" (root) struct for all NN node (bone) name list chunks.
struct NNS_NODENAMELIST\n{\n /* The sorting type */\n NNE_NODENAME_SORTTYPE SortType;\n\n /* The size of [pNodeNameList] array */\n uint32_t nNode;\n\n /* An array of NNS_NODENAME structs */ \n NNS_NODENAME* pNodeNameList;\n};\n
Todo
Find the macros used in the text-form file format
"},{"location":"docs/nn/common/chunk-format/nodenamelist/#nns_nodename","title":"NNS_NODENAME","text":"The actual node (bone) name
struct NNS_NODENAME\n{\n /* The node index */\n uint32_t iNode;\n\n /* The node name */\n char* Name;\n};\n
"},{"location":"docs/nn/common/chunk-format/nodenamelist/#nne_nodename_sorttype","title":"NNE_NODENAME_SORTTYPE","text":"This enum indicates the sorting type used in the node name list.
enum NNE_NODENAME_SORTTYPE\n{\n /* Sorting by index */\n NNE_NODENAME_SORTTYPE_INDEX,\n\n /* Sorting by name */ \n NNE_NODENAME_SORTTYPE_NAME\n};\n
Todo
Find the macros used in the text-form file format
"},{"location":"docs/nn/common/chunk-format/texlist/","title":"TEXLIST","text":""},{"location":"docs/nn/common/chunk-format/texlist/#nns_texfilelist","title":"NNS_TEXFILELIST","text":"Important
This is the \"main\" (root) struct for all NN texture list chunks.
struct NNS_TEXFILELIST\n{\n /* The size of the [pTexFileList] array. */\n uint32_t nTex;\n\n /* An array of NNS_TEXFILE structs. */\n NNS_TEXFILE* pTexFileList;\n};\n\n/*\n Binary-form files can additionally contain embedded\n texture data via setting the [Filename] field\n within one or more NNS_TEXFILE structs to NULL.\n\n In binary-form files which utilize this feature,\n there is an extra field in NNS_TEXFILELIST after\n [pTexFileList], which is a pointer to an array of\n size [nTex] of NNS_TEXFILEDATA structs, which go like this:\n*/\n\n/* NOTE: This name was guessed. */\nstruct NNS_TEXFILEDATA\n{\n /* Seems to be flags? */\n uint32_t Unknown1;\n\n /* Pointer to the embedded texture data. */\n void* pData;\n};\n\n/* Macros used by Text-Form files: */\n#define TEXFILELIST(nTex, pTexFileList) { nTex, pTexFileList }\n#define TFL_N_TEXFILE(nTex) (nTex)\n#define TFL_TEXFILE(pTexFileList) (pTexFileList)\n
Todo
See if there exists any data using the NNS_TEXLIST struct type from Sonic 4 Episode 1 Windows Phone symbols.
"},{"location":"docs/nn/common/chunk-format/texlist/#nns_texfile","title":"NNS_TEXFILE","text":"struct NNS_TEXFILE\n{\n /* Types and flags, as specified by NNE_TEXFTYPE. */\n uint32_t fType;\n\n /*\n The name of the file this texture is stored in, or NULL if\n this texture's data is embedded within this file. This value\n should be ignored if NND_TEXFTYPE_NO_FILENAME is set in [type].\n */\n char* Filename;\n\n /*\n The minification filter to use on the texture, as specified by NNE_MIN.\n This value should be ignored if NND_TEXFTYPE_NO_FILTER is set\n in [type];\n */\n uint16_t MinFilter;\n\n /*\n The magnification filter to use on the texture, as specified by NNE_MAG.\n This value should be ignored if NND_TEXFTYPE_NO_FILTER is set\n in [type];\n */\n uint16_t MagFilter;\n\n /*\n Unknown. Maybe some games have a global texture array, and\n this is the index into that array to place this texture into?\n This value should always be ignored *unless* NND_TEXFTYPE_LISTGLBIDX\n is set in [type].\n */\n uint32_t GlobalIndex;\n\n /*\n Unknown. Maybe some games group textures into banks?\n This value should always be ignored *unless* NND_TEXFTYPE_LISTBANK\n is set in [type].\n */\n uint32_t Bank;\n};\n\n/* Macros used by Text-Form files: */\n#define TEXFILE(filename, filter) { 0, filename, filter, 0, 0 }\n#define TF_FILENAME(filename) (filename)\n#define TF_FILTER(minFilter, magFilter) (minFilter), (magFilter)\n
"},{"location":"docs/nn/common/chunk-format/texlist/#nne_mag","title":"NNE_MAG","text":"All possible texture magnification filters.
enum NNE_MAG\n{\n /* Nearest magnification filtering. */\n NND_MAG_NEAREST = 0,\n\n /* Linear magnification filtering. */\n NND_MAG_LINEAR = 1,\n\n /* Anisotropic magnification filtering. */\n NND_MAG_ANISOTROPIC = 2\n};\n
"},{"location":"docs/nn/common/chunk-format/texlist/#nne_min","title":"NNE_MIN","text":"All possible texture minification filters.
enum NNE_MIN\n{\n /* Nearest minification filtering. */\n NND_MIN_NEAREST = 0,\n\n /* Linear minification filtering. */\n NND_MIN_LINEAR = 1,\n\n /* TODO */\n NND_MIN_NEAREST_MIPMAP_NEAREST = 2,\n\n /* TODO */\n NND_MIN_NEAREST_MIPMAP_LINEAR = 3,\n\n /* TODO */\n NND_MIN_LINEAR_MIPMAP_NEAREST = 4,\n\n /* TODO */\n NND_MIN_LINEAR_MIPMAP_LINEAR = 5,\n\n /* TODO */\n NND_MIN_ANISOTROPIC = 6,\n\n /* TODO */\n NND_MIN_ANISOTROPIC2 = 6,\n\n /* TODO */\n NND_MIN_ANISOTROPIC_MIPMAP_NEAREST = 7,\n\n /* TODO */\n NND_MIN_ANISOTROPIC2_MIPMAP_NEAREST = 7,\n\n /* TODO */\n NND_MIN_ANISOTROPIC_MIPMAP_LINEAR = 8,\n\n /* TODO */\n NND_MIN_ANISOTROPIC2_MIPMAP_LINEAR = 8,\n\n /* TODO */\n NND_MIN_ANISOTROPIC4 = 9,\n\n /* TODO */\n NND_MIN_ANISOTROPIC4_MIPMAP_NEAREST = 10,\n\n /* TODO */\n NND_MIN_ANISOTROPIC4_MIPMAP_LINEAR = 11,\n\n /* TODO */\n NND_MIN_ANISOTROPIC8 = 12,\n\n /* TODO */\n NND_MIN_ANISOTROPIC8_MIPMAP_NEAREST = 13,\n\n /* TODO */\n NND_MIN_ANISOTROPIC8_MIPMAP_LINEAR = 14\n};\n
"},{"location":"docs/nn/common/chunk-format/texlist/#nne_texftype","title":"NNE_TEXFTYPE","text":"Types and flags for a NNS_TEXFILE
struct.
enum NNE_TEXFTYPE\n{\n /*\n =======================================================\n == Masks\n =======================================================\n */\n\n\n /* Apply this mask to get just the texture's type, without any flags. */\n NND_TEXFTYPE_TEXTYPE_MASK = 255,\n\n\n\n /*\n =======================================================\n == Types (required; only one must be used at a time)\n =======================================================\n */\n\n\n /* The platform's default format (used most of the time). */\n NND_TEXFTYPE_DEFAULT = 0,\n\n /* The .gim format (used on PSP). */\n NND_TEXFTYPE_GIMTEX = 1,\n\n\n\n /*\n =======================================================\n == Flags (optional; one or more can be used at a time)\n =======================================================\n */\n\n\n /* The [FileName] field should be ignored. */\n NND_TEXFTYPE_NO_FILENAME = 256,\n\n /* The [MinFilter] and [MagFilter] fields should be ignored. */\n NND_TEXFTYPE_NO_FILTER = 512,\n\n /* The [GlobalIndex] field is used (default is to ignore it). */\n NND_TEXFTYPE_LISTGLBIDX = 1024,\n\n /* The [Bank] field is used (default is to ignore it). */\n NND_TEXFTYPE_LISTBANK = 2048\n};\n
Warning
The symbols from Sonic 4 Episode I for Windows Phone 7 mention the following types:
NND_TEXFTYPE_GVRTEX = 0
NND_TEXFTYPE_SVRTEX = 1
NND_TEXFTYPE_XVRTEX = 2
Looking at various NN files, however, these appear to be incorrect?
Sony NN texture lists that actually do use SVR textures seem to set the type to 0 anyway, for example.
Don't rely on these type values!
"},{"location":"guides/hedgehog-engine/blueblur/files/xncp/anims/","title":"XNCP Animations","text":"Info
This guide uses the following tools:
XNCP animations for a specific scene are listed in AnimationDictionary, which behaves the same way as the CastDictionary:
In AnimationFrameDataList, it\u2019s possible to control the amount of keyframes that a specific animation has:
To control the speed of these animations, we have a single field in the scene that controls the frame rate:
AnimationKeyFrameDataList contains the information for all the keyframes in the animation, as well as the casts that belong in that animation.
In the screenshot above, we\u2019re seeing the data referring to Animation 0 (Intro_Anim when following the dictionary). XNCPs usually follow this naming scheme for animations:
So, in Intro_Anim, we have several CastAnimationData. These control what happens to each cast in this animation. Let\u2019s see what happens to Cast 0 (position, which usually is the parent of all casts in a scene and controls their position)...
Seems like we have flags! It\u2019s a bitfield, and it controls what actually animates in this cast. Here\u2019s the meaning of each bit:
0000 0000(0) - Nothing\n0000 0001(1) - Hide Flag\n0000 0010(2) - X Position\n0000 0100(4) - Y Position\n0000 1000(8) - Rotation\n0001 0000(16) - X Scale\n0010 0000(32) - Y Scale\n0100 0000(64) - SubImage\n1000 0000(128) - Colour Mask\n
So, with this info, we now know what animates in the position cast: It is its X Position. The CastAnimationDataSubData1List is what stores the actual animation data. The amount of entries in this list depends on the number of bits signaled in the Flags field. The first entry in the list is referring to the first bit signaled from right to left. So by that logic, the list only has one entry.
And there we go. This entry is what stores the actual KeyFrames. Let\u2019s open one up to see how it is.
Scary right? I don\u2019t understand much of what\u2019s going on here, but here we go.
Frame defines which global frame this keyframe is in. Remember AnimationFrameDataList? Yeah, this animation has a total of 10 frames, and is played at 60 FPS. For each frame, you define the global frame that it refers to. So, since this cast controls the position of the entire scene, and this is the intro animation, maybe the other keyframe has the frame field set to 10? We\u2019ll see about that shortly.
Data store the data of this keyframe. The meaning of data changes depending on the flags. Data can be:
According to the flags of this specific cast, these keyframes are supposed to control the X Position, which means that \u201cData\u201d actually represents the X Position of the cast in this frame.
The Offset and Offset2 fields control the casts' Offset position value, where \"Offset\" is X, while \"Offset2\" is Y. For example, the buttons in the title screen of Sonic Generations use these values to stay in place when they're clicked since they get scaled up and down. Let\u2019s look at the second keyframe:
As we suspected, the Frame field is now set to 10, meaning this is referring to the last frame in the animation. The value in Data has increased, so this means that this cast slides from left to right in this animation!
Looking at the remaining CastAnimationData entries, we can see that none of them animate, since their Flags field is set to 0. So we can conclude that Intro_Anim makes the position cast slide from left to right, and since \u201cposition\u201d controls the entire scene, every single cast from this scene slides from left to right in this animation!
"},{"location":"guides/hedgehog-engine/blueblur/files/xncp/anims/#additional-notes","title":"Additional Notes","text":"An animation can only be looped using code, so that can't be controlled via the XNCP. However, Field00 in CastAnimationDataSubData does seem to control how fast a loop occurs, where the value 1 seems to loop it with a delay, while 2 makes it loop smoother.
"},{"location":"guides/hedgehog-engine/blueblur/files/xncp/anims/#conclusion","title":"Conclusion","text":"Hope I explained XNCP animations well enough. Have fun!
PS: there\u2019s also AnimationData2List but...
"},{"location":"guides/hedgehog-engine/blueblur/files/xncp/basics/","title":"The Basics of XNCP Editing","text":"Info
This guide uses the following tools:
XNCP is the file format of Sonic Generations's UI. In this guide, I'll explain the general things you need to get started.
"},{"location":"guides/hedgehog-engine/blueblur/files/xncp/basics/#requirements","title":"Requirements","text":"First of all, you will need to download the 010 Editor. This program is used for hex editing, and in our case, to modify XNCP files. You'll also need to download the XNCP Template; essentially, this file will make it so that you can read and understand the XNCP file's contents, otherwise you'd only see hex numbers, and that's not exactly readable.
"},{"location":"guides/hedgehog-engine/blueblur/files/xncp/basics/#opening-an-xncp-file","title":"Opening an XNCP file","text":"After installing the 010 Editor, and downloaded the XNCP Template, it's time to open a file.
Open the 010 Editor and click on File > Open File..., and open the file that you need to edit.
After opening the file, you'll see a bunch of numbers. Don't get freaked out, this is normal. These are the contents of the XNCP file.
Now, you need to go to Templates > Open Template..., and open the file that we downloaded before. It's called sonic_xncp_yncp.bt.
After opening the file, a window should pop up with the template's code. You can just ignore this window and hide it wherever you'd like, you won't need to modify this.
Now, go back to Templates and click on Run Template. This should now make the numbers have colorful backgrounds, and a new window will appear below the hex view.
This new window that has appeared will be your workspace. This'll be the way in which you edit all aspects of a UI file. Click on the struct TFAPC File dropdown, then struct TFAPCEmbeddedRes Resources[0], then struct TNNNCPJChunk CsdmProject, and then on struct TCSDNode Root. Now you'll have a few variables here; I'll explain what some of them mean!
"},{"location":"guides/hedgehog-engine/blueblur/files/xncp/basics/#the-structure-of-an-xncp-file-resource-0","title":"The structure of an XNCP file (Resource 0)","text":"Scenes are essentially the containers for a specific group of UI elements, think of it like a folder inside a folder, and you'll need SceneIDTable to understand which Scene is what. This table contains the name and index of each Scene (e.g: Scene \"gauge\" in ui_gameplay.xncp is the \"folder\" that contains all elements of the boost bar in the HUD). Scenes also have a few variables that may be of interest, like:
And the most important one of all:
The Cast has several variables that you can change:
0 - No Draw (invisible)\n1 - Sprite\n2 - Font\n
Info
If you're disabling a cast, make sure that it does not have children, or it might make the UI look weird!
Translation\nRotation\nScale\nColor - where the variable \"Color\" will change the main color of the image, and GradientTopLeft,BottomLeft,TopRight,BottomRight will change the colors of the corners of the image\n
Before, I wrote that you needed to go into Resource 0. This is because Resource 0 has most of the cool stuff that you can edit, while Resource 1 contains data about image file locations.
This was a general introduction to XNCP files, and their structures. For more information, check out the other guides in the sidebar!
"},{"location":"guides/hedgehog-engine/blueblur/levels/glvl/","title":"How to use Sonic GLvl with Sonic Generations","text":"Info
This guide uses the following tools:
Note
These video guides are old and are for Sonic GLvl 0.5.7. It's recommended you use the latest 0.9 version instead. Even if 0.9 is a more recent version, the general way of working with it remains the same, hence why these videos are still relevant.
"},{"location":"guides/hedgehog-engine/blueblur/levels/glvl/#part-1-getting-levels-and-camera-controls","title":"Part 1 (Getting Levels and Camera Controls)","text":""},{"location":"guides/hedgehog-engine/blueblur/levels/glvl/#part-2-basic-level-editing-and-testing-your-mod-in-game","title":"Part 2 (Basic Level Editing and Testing your mod in-game)","text":""},{"location":"guides/hedgehog-engine/blueblur/levels/importing-collision/","title":"How To Import Custom Collision in Sonic Generations","text":"Info
This guide uses the following tools:
You'll need a separate model for the collision. While it is possible to use your stage's model files as a collision, we still recommend that you create a separate project/model for it, even if it's a copy of it.
It is possible to specify tags for your collision, which control the type of collision it has. For this, you'll need a special ini file for HavokConverter with tags. You can download it here. To apply these tags to your collision model, you can simply rename the meshes and add the tag as a prefix to its name. Below is an example of how you can do this, in case you want a mesh to have the \"Stone\" collision tag:
Example
You can find all the available tags by opening HavokConverter
after placing the mentioned INI file in the same folder as its executable.
Open HavokConverter.exe
and fill the following options:
Now you can click the Convert
button and wait.
When the conversion process finishes, extract your custom stage's #
file, and place the generated phy.hkx
file there. Afterwards, open the Terrain.stg.xml
file, and edit the collision file that is mentioned. This is mentioned in the RigidBodyContainer
tag. Change its value to your phy.hkx
filename, without the extension. Below is an example for a file name MyCollision.phy.hkx
:
Now re-pack this file and replace the original. After booting into the game, you should now notice that your level has working collision.
"},{"location":"guides/hedgehog-engine/blueblur/levels/importing-terrain/","title":"How To Import Custom Terrain in Sonic Generations","text":"Info
This guide uses the following tools:
First of all, you need terrain for your level. You can do the terrain yourself, or take already created terrain. If your level contains transparent materials you need to add a proper layer tag to it. For transparency, you have two available layers, and you should pick the one that's best suited for your use case in order to avoid issues.
Layers Usage punch Used for materials which have binary transparency (one part is 100% opaque, another is 100% transparent). Useful for most kinds of textures, like leaves or grass trans Used for translucent materials, as in, materials which are not 100% opaque but also not 100% transparent (ex. windows)In order to specify a layer for a material, use the @LYR
prefix, with the layer name between parenthesis after it.
Example
You can then export your terrain from Blender into an Assimp compatible format (FBX, DAE or OBJ work).
"},{"location":"guides/hedgehog-engine/blueblur/levels/importing-terrain/#part-2-importing-the-level-to-the-game","title":"Part 2 (Importing the Level to the Game)","text":"Download SonicGLvl, and run bin/HedgehogConverter.exe
. Fill up the following entries:
Make sure that the folder has a name that matches the target stage you want to replace. For example, for Green Hill Modern, use the folder name ghz200
.
Be sure to also turn on the following options under \"Materials\":
In the end, you should have something similar to this:
Next, click the Convert
button and wait.
Once the conversion is done, we need to get files that might be missing from your stage.
"},{"location":"guides/hedgehog-engine/blueblur/levels/importing-terrain/#stagear-file","title":"#stage.ar file","text":"Your stage needs a \\#
file in order to store set-data, collision, and other stage information. We can use the file from the stage we're replacing. If you're replacing Green Hill Modern, go to disk/bb.cpk
(extract using PackCpk), and copy the #ghz200.ar.00
and #ghz200.arl
files into your stage mod files (disk/bb
folder).
Next up, we need to do some very basic setup of your level's set data in SonicGlvl. Open the app, and open your stage's #
archive from there. Once the level has been imported into SonicGlvl, press Ctrl+A and then Delete. This will delete all the objects that are present in your level's set data, which are the original objects from the stage we are replacing. Now, find \"SonicSpawn\"
in the objects menu on the left, and place it anywhere you want. This will be where Sonic will spawn in your level. Also, be sure to set the \"Active\" property to \"true\" in the settings of the \"SonicSpawn\"
object.
After that, go to \"File\" and press \"Save Stage Data\" and \"Save Stage Terrain\".
"},{"location":"guides/hedgehog-engine/blueblur/levels/importing-terrain/#part-4-creating-skybox-optional-but-recommended","title":"Part 4 (Creating Skybox - Optional but Recommended)","text":"Skyboxes in Sonic Generations are just regular .model files. Though not mandatory for the game to boot, they are recommended so that your level at least has a sky for you to look at. You can take these from the original levels or create one yourself.
"},{"location":"guides/hedgehog-engine/blueblur/levels/importing-terrain/#making-one-yourself","title":"Making one yourself","text":"Export your skybox model from Blender into an Assimp compatible file format. Then, using ModelConverter, drag and drop the model file into the Sonic Generations .bat file. This will generate the .model file, as well as material files. You will need to convert the textures of your skybox manually into the DDS format.
"},{"location":"guides/hedgehog-engine/blueblur/levels/importing-terrain/#grabbing-one-from-a-level","title":"Grabbing one from a level","text":"Go to the Packed
folder in bb/bb2, and open the folder corresponding to the level you want the skybox from. Then, extract the .ar
archive, and look for the sky's .model
file. The name should have something to do with \"sky\". If yo don't manage to find it, look at the stage's Terrain.stage.xml
file, as it will mention the skybox's model name there. You will need the .model file, the textures (.dds
files) and the materials of the sky model.
After getting the necessary skybox model files, place them inside your stage's Packed/stageName/stage.ar
file. Then, open #
file of your stage, and open the Terrain.stg.xml
file. You'll need to create a Sky
tag and write the name of the .model
file of your skybox, without the extension. Below is an example of how you should write this. In this example, the skybox has a model file named MySkybox.model
:
This concludes this guide. If you boot your stage now, you'll notice that you will fall through the ground. This is because you only ported the terrain, and not the collision. To do this, follow the guide here.
"},{"location":"guides/hedgehog-engine/blueblur/levels/troubleshooting/","title":"Troubleshooting","text":""},{"location":"guides/hedgehog-engine/blueblur/levels/troubleshooting/#common-issues","title":"Common Issues","text":""},{"location":"guides/hedgehog-engine/blueblur/levels/troubleshooting/#black-textures","title":"Black Textures","text":"Textures must have power of two resolutions. For example, 512x512, 1024x1024, 2048x4096, etc. An arbitrary resolution like 600x600 is not supported by the game when using compressed textures.
"},{"location":"guides/hedgehog-engine/blueblur/levels/troubleshooting/#rainbow-flashing-textures","title":"Rainbow Flashing Textures","text":"The game shows a rainbow flashing texture if the texture assigned to a material is missing. Ensure you included the texture in the AR and didn't make a typo in the material.
"},{"location":"guides/hedgehog-engine/blueblur/levels/troubleshooting/#randomly-switching-textures","title":"Randomly Switching Textures","text":"The material might not have any textures assigned at all. You need to at least assign one diffuse texture, otherwise the game is going to use the texture of whatever was rendered last.
"},{"location":"guides/hedgehog-engine/blueblur/levels/troubleshooting/#missing-terrain-models","title":"Missing Terrain Models","text":"Terrain.prm.xml
file might require higher memory sizes. Look for the g_TerrainModelLimitSizeDefault
and g_TerrainModelLimitSizeWin32
parameters, and increase them. If your stage requires more memory than what is defined in this file, some of your models might not render.The game fallbacks to displaying a red emissive material if the shader assigned to a material does not exist. If you want to see every available shader in the game, unpack shader_r_add.ar.00
located inside bb3.cpk
, and look for files with .shader-list
extension.
Terrain.prm.xml
file might require higher memory sizes. Look for the g_GITextureLimitSizeDefault
and g_GITextureLimitSizeWin32
parameters, and increase them.
If you add a new direct light with a different name, you need to edit Terrain.stg.xml
to make the stage use it. For example:
<Light>\n <DataName>MyDirectLight</DataName>\n</Light>\n
"},{"location":"guides/hedgehog-engine/blueblur/levels/troubleshooting/#missing-sky-model","title":"Missing Sky Model","text":"If you add a new sky model with a different name, you need to edit Terrain.stg.xml
to make the stage use it. For example:
<Sky>\n <Model>MySkyModel</Model>\n</Sky>\n
Ensure that the materials of the sky model also use sky shaders such as Sky_d
.
Certain enemies are loaded manually in stages to save memory. If an enemy does not appear in your stage, you can fix it by editing EnemyArchiveTree.xml
inside #Application.ar.00
. In this example, ghz_cmn
entry was modified to include data from EnemyEFighter
, which allows egg fighters to be used in both ghz100
and ghz200
:
<DefAppend>\n <Name>ghz_cmn</Name>\n <Archive>EnemyCommon</Archive>\n <Archive>EnemyBeeton</Archive>\n <Archive>EnemyBatabata</Archive>\n <Archive>EnemyGanigani</Archive>\n <Archive>EnemyMotora</Archive>\n <Archive>EnemyEFighter</Archive>\n</DefAppend>\n
"},{"location":"guides/hedgehog-engine/blueblur/levels/troubleshooting/#common-crash-reasons","title":"Common Crash Reasons","text":""},{"location":"guides/hedgehog-engine/blueblur/levels/troubleshooting/#missing-material-files","title":"Missing Material Files","text":"Unlike later games, missing materials can cause a crash in Sonic Generations and Sonic Unleashed.
"},{"location":"guides/hedgehog-engine/blueblur/levels/troubleshooting/#periods-in-file-names","title":"Periods in File Names","text":"Having periods in your file names can confuse the game and cause crashes. For example, having a material named Material.000.material
would make the game think the file has a .000.material
extension, and not recognize it as a material file.
Instances starting with ins
are treated differently, and require specialized material shaders. Using any other shader causes a crash. Ensure that none of the instances in your stage start with this word.
Run GI Atlas Converter on Pre-Render mode to have this file created automatically.
"},{"location":"guides/hedgehog-engine/blueblur/levels/troubleshooting/#missing-light-listlight-list-file","title":"Missing \"light-list.light-list\" File","text":"Copy paste .light
and .light-list
files from another stage, or add a direct light to your level in the 3D software you use. Latest Hedgehog Converter can import direct lights, so ensure your tools are up to date. Use HedgeGI for advanced light editing.
PFD files are loaded through PFI files. If the Stage.pfi
/Stage-Add.pfi
files don't match with the Stage.pfd
/Stage-Add.pfd
files in the stage, this causes a crash. Unpack the PFD files, and repack them back with HedgeArcPack using -T=pfd
command-line option to generate matching PFI files.
The game doesn't load certain Sonic animations to save memory if the gimmick in question is never used. For example, diving animations stored in SonicDiving.ar.00
are only loaded in Chemical Plant, Speed Highway and Planet Wisp. If diving is used in any other stage, the game is going to crash due to unloaded animations. This behavior can be configured by editing ArchiveTree.xml
inside #Application.ar.00
. In this example, SonicDiving
entry was edited to load in the ghz200
stage slot:
<Node>\n <Name>SonicDiving</Name>\n <Archive>SonicDiving</Archive>\n <Order>0</Order>\n <DefAppend>SonicDiving</DefAppend>\n <Node>\n <Name>bne</Name>\n <Archive>bne</Archive>\n <Order>0</Order>\n </Node>\n <Node>\n <Name>cpz200</Name>\n <Archive>cpz200</Archive>\n <Order>0</Order>\n </Node>\n <Node>\n <Name>pla200</Name>\n <Archive>pla200</Archive>\n <Order>0</Order>\n </Node>\n <Node>\n <Name>sph200</Name>\n <Archive>sph200</Archive>\n <Order>0</Order>\n </Node>\n <Node>\n <Name>ghz200</Name>\n <Archive>ghz200</Archive>\n <Order>0</Order>\n </Node> \n</Node>\n
"},{"location":"guides/hedgehog-engine/blueblur/levels/troubleshooting/#lightfield-file-too-large","title":"Lightfield File Too Large","text":"Your game might crash randomly when booting your level if the level's lightfield (.lft) file is too large. Try increasing the minimum cell radius in HedgeGI to reduce the lightfield's file size.
"},{"location":"guides/hedgehog-engine/blueblur/locations/sound/","title":"Sounds","text":"Info
These files require the following tools:
This guide contains a list of file locations for the audio files in Sonic Generations, the name of the folder in which the files are present will be above the table. Music and sound effects use the \"CSB\" format, these can be opened with SonicAudioTools.
"},{"location":"guides/hedgehog-engine/blueblur/locations/sound/#sound","title":"Sound","text":"File Name Description SNG00_SYS Title Screen Audio SNG01_GHZ Green Hill Music SNG02_CPZ Chemical Plant Music SNG03_SSZ Sky Sanctuary Music SNG04_SPH Speed Highway Music SNG05_CTE City Escape Music SNG06_SSH Seaside Hill Music SNG07_CSC Crisis City Music SNG08_EUC Rooftop Run Music SNG09_PLA Planet Wisp Music SNG10_CNZ (DLC) Casino Night Music SNG11_BMS VS. Metal Sonic Audio SNG12_BSD VS. Shadow Audio SNG13_BSL VS. Silver Audio SNG14_BDE VS. Death Egg Audio SNG15_BPC VS. Perfect Chaos Audio SNG16_BNE VS. Egg Dragoon Audio SNG17_BLB VS. Time Eater Audio SNG19_JNG Skills, Game Over, Results SNG20_MSN Generic Mission Music SNG21_ETC 20th Anniversary Demo Jingle SNG22_ADD BGM Select Music for Stages SNG23_PAM Shop & Collection Room Audio 30VCE_BLB_NP_(locale) Time Eater NPC Voices 30VCE_BOS_EG_(locale) Time Eater Eggman Voices 30VCE_EVT_NP_(locale) NPC Unlock Events 30VCE_HNT_(locale)_WIN32 Omochao Hints 50BOS_EVT Sounds for Cutscenes 70NPC_EVT Sounds for NPC Unlocks"},{"location":"guides/hedgehog-engine/blueblur/locations/sound/#diskbb2pam000","title":"disk/bb2/pam000","text":"File Name Description 40OBJ_PAM White World Object Sounds 40AMB_PAM White World Ambiance Sounds 40OBJ_CMN_PAM White World Common Objects Sounds"},{"location":"guides/hedgehog-engine/blueblur/locations/sound/#diskbb2pla200","title":"disk/bb2/pla200","text":"File Name Description 42OBJ_PLA Planet Wisp ACT 2 Objects 42AMB_PLA Planet Wisp ACT 2 Ambiance"},{"location":"guides/hedgehog-engine/blueblur/locations/sound/#diskbb2enemycommon","title":"disk/bb2/EnemyCommon","text":"File Name Description 51ENM_CMN Enemy Sound Effects #1 52ENM_CMN Enemy Sound Effects #2"},{"location":"guides/hedgehog-engine/blueblur/locations/sound/#diskbb2bsd","title":"disk/bb2/bsd","text":"File Name Description 52BOS_BSD VS. Shadow Sounds 42OBJ_BSD VS. Shadow Object Sounds 42AMB_BSD VS. Shadow Ambiance Sounds"},{"location":"guides/hedgehog-engine/blueblur/locations/sound/#diskbbactioncommon","title":"disk/bb/ActionCommon","text":"File Name Description 10SYS_ACT Results Screen Sounds"},{"location":"guides/hedgehog-engine/blueblur/locations/sound/#diskbb3application","title":"disk/bb3/Application","text":"File Name Description 10SYS_CMN HUD Sounds"},{"location":"guides/hedgehog-engine/blueblur/locations/sound/#diskbb3sonic","title":"disk/bb3/Sonic","text":"File Name Description 22PLY_SNC_PAM Sonic Sounds"},{"location":"guides/hedgehog-engine/blueblur/locations/sound/#diskbb3cmn100-or-cmn200","title":"disk/bb3/cmn100 (or cmn200)","text":"File Name Description 21PLY_SNC Gimmick Sounds #1 22PLY_SNC Gimmick Sounds #2 41AMB_CMN Common Ambiance Sounds #1 42AMB_CMN Common Ambiance Sounds #2 40OBJ_CMN_PAM Common Object Sounds (White World) 41OBJ_CMN Miscellaneous Object Sounds #1 42OBJ_CMN Miscellaneous Object Sounds #2 61CTS_CMN Skill Sounds #1 62CTS_CMN Skill Sounds #2"},{"location":"guides/hedgehog-engine/rangers/animation/import-export/","title":"Animation Importing & Exporting","text":"This guide will assume you have at least some understanding of animating in Blender.
Info
This guide uses the following tools:
First, download the required tools and extract them. Open Blender and go to Edit > Preferences
. Click on Add-ons
, and then Install...
. Browse to the FrontiersAnimDecompress folder, and install each of the 4 plugins in this directory, then minimise Blender.
Locate the pac file that contains the animations you want to change. For sonic's animations, look for raw\\character\\sonic.pac
. First, make sure you create a copy of the pac file of your choice in a folder somewhere so you don't accidentally replace your game files. Drag and drop the pac file onto HedgeArcPack.exe to extract the file into a folder.
Open the newly created folder and find the animation you want to change. These animation files have the extension .anm.pxd
. Drag and drop the .anm.pxd
file onto FrontiersAnimDecompress.exe. This will create a new file with the extension .anm.pxd.outanim
.
Open Blender again, and go to File > Import
, then select Hedgehog Engine (.model)
and browse for your model file.
Info
If you don't know how to get your model, first watch the Model Import Tutorial
After importing, select the Armature and go to File > Import
, and this time select Hedgehog Engine Compressed (.outanim)
, and browse for your .outanim
file we created in the previous step. You should now see the animation within Blender!
Info
If you don't know how to edit the animation, please look for a Blender tutorial to learn the basics in order to continue. The animation process is not specific to Sonic Frontiers.
"},{"location":"guides/hedgehog-engine/rangers/animation/import-export/#exporting-the-animation","title":"Exporting the Animation","text":"When you have finished making your changes to the animation, go to File > Export
and select Hedgehog Engine Compressed (.outanim)
, then browse for somewhere to save your file. You may overwrite the .outanim
file you imported if you like. You may close Blender now.
Drag and drop the newly exported .outanim
onto FrontiersAnimDecompress.exe to create a new .anm.pxd
containing your animation. Rename this file to be exactly the same as the original file you decompressed. If you haven't already, place it back in it's pac folder, and replace the existing file.
Now drag the pac folder onto HedgeArcPack.exe to repack the file, which you can then use in your mod!
"},{"location":"guides/hedgehog-engine/rangers/audio/replacing/","title":"Replacing Audio","text":"Info
This guide uses the following tools:
Warning
This currently does not work while replacing boss music! Also, backup any files that you modify unless you are sure of what you are doing!
"},{"location":"guides/hedgehog-engine/rangers/audio/replacing/#what-to-do","title":"What to do","text":"Find the .ACB file containing the audio that you wish to edit and open it up in foobar2000. If there is an accompanying .AWB file, open this instead.
Audio is stored in SonicFrontiers\\image\\x64\\raw\\sound
Once foobar has opened you will be able to see the names of and listen back to the respective audio files. Make sure that you have the \"Item Index\" column enabled.
Use ACBEditor.exe found in SonicAudioTools to extract all audio files by dragging and dropping the .ACB onto the exe.
There will now be a folder named the same as the .ACB that will contain .HCA files. The name of the .HCA file will be a 5 digit number that is the Item Index number -1. If you are replacing music it will be a 5 digit number and the word \"streaming\"
Example
\"1\" in the sound effect Item Index would be \"00000.hca\" and \"220\" in the music Item Index would be \"00219_streaming.hca\" (Less .HCA files may be extracted than the number of cues shown in the Item Index. Make sure to double check that the .HCA is the sound you wish to change before replacing it)
Create a .WAV file of whatever sound it is you wish to put in game and name it the same as the .HCA file you are going to replace.
Open VGAudio.Wpf and load the created .WAV file. (If you wish to convert multiple files then go to the batch tab where you will be able to add more files.)
Once the file(s) are loaded, select .HCA on the dropdown menu of file types. Save and replace the file(s) to the folder full of extracted HCA's.
Drag and drop the folder back onto ACBEditor.exe and it will repack the .ACB file with the new audio files.
"},{"location":"guides/hedgehog-engine/rangers/audio/replacing/#creating-looped-soundsmusic","title":"Creating looped sounds/music","text":"If you are working with BGM or SFX that loop, you will need to create loop points in the .HCA file. This can be done easily using VGAudio.Wpf.
Follow the same instructions as listed above but when it come to creating the HCA file you will want to drop down the menu that says \"Loop File\". You will be presented with two boxes, one labelled \"Loop Start\" and the other labelled \"Loop End\". The format used in these boxes is Samples which can easily be found in most audio editing software. Find the point in your .WAV file where you would like the sound to start looping and input that number into the \"Loop Start\" box, then do likewise with \"Loop End\". From here the process is once again the same as detailed above.
Now you can put Open Your Heart over every boss fight :)
"},{"location":"guides/hedgehog-engine/rangers/cyloop/color/","title":"Replacing Cyloop Color","text":"Info
This guide uses the following tools:
First you're going to need to drag playercommon.pac
onto HedgeArcPack.exe to get a playercommon folder. Then, find the player_common.rfl
file in that folder, and open it in 010 editor.
You're going to need to use the PlayerParameters.bt
binary template on 010 editor. This can be done by going to \"Templates\" at the top and pressing \"Open Template\" and selecting the PlayerParameters.bt
Afterwards, you can press \"Run Template\" and it should bring up a new window in 010 editor.
Info
If a new window doesn't appear, restart 010 editor or reload player_common.rfl
into the editor
Run the PlayerParameters.bt
template and you should see new information in the Variables tab in 010 editor. Split your editor so that you can see your hex values, the inspector tab, and the variables tab all at once.
Now you're ready to hex edit!
"},{"location":"guides/hedgehog-engine/rangers/cyloop/color/#editing-the-file","title":"Editing the file","text":"Open struct PlayerParameters data
in variables, then go into struct CommonPackage common
, and find struct PlayerParamCyloop cyloop
Open the cyloop struct and find CyloopLocusParameter locus
, this holds the colors for the cyloop across multiple variables. Each color will look like this (there are 3 of these):
...or these (there are 2 of these)
When you open these variables, you will see 4 values, float r, g, b, and a. These values don't make sense so keep up with this:
Choose a color with its rgb decimal code (ex: Lawn Green is (124,252,0)), then take each of your values and divide them by 255.
Example
Replace the float values with your new values (you don't need to touch float r), like the example below:
Do this for all of the color struct variables from earlier. This will replace all of the different parts of the cyloop, but you can mix colors for different results, like making some of the cyloop variables red, and some white.
"},{"location":"guides/hedgehog-engine/rangers/cyloop/color/#saving-your-changes","title":"Saving Your Changes","text":"Once you're happy with your color choices, go to \"File\"\" and save your player_common.rfl
file. Then, repack your playercommon folder into a .pac file, which you can then use in your mod!
This guide will assume you have at least some understanding of how PBR texturing works.
Info
This guide uses the following tools:
Note
There is a Substance Painter Export Template if you use Substance to export the PRM map so you don't have to construct it.
"},{"location":"guides/hedgehog-engine/rangers/materials/advanced-mats/#preparation","title":"Preparation","text":"This guide expects you to have a model that loads ingame and 5 texture maps for your model:
Ambient Occlusion
Map (if you do not want this make a solid 1
texture)Metallic
Map (if you do not want this make a solid 0
texture)f0 Specular
Map (if you do not want this make a solid 0.25
texture)Roughness
Map (if you do not want this make a solid 0.8
texture)OpenGL, Y+/Y up, Green+/Green up
Map (if you do not want this make a solid 0.5, 0.5, 1
texture) Hedgehog Engine 2 games use some variation of the PRM texture setup, Frontiers specifically uses the RGBA
setup, Specular, Smoothness, Metallic, Ambient Occlusion
. So we need to construct a map using our textures, as long as the textures go into the corresponding channels.
Add your textures besides the Normal Map
textures as layers in your photoshop document.
Then open the effects panel and have the corresponding channel as stated above be the only channel checked
Lastly select your Roughness
layer and invert it (Ctrl+I). Smoothness in PBR is just inverted roughness.
This will be your PRM map. Save it to your work directory.
"},{"location":"guides/hedgehog-engine/rangers/materials/advanced-mats/#converting-png-to-dds-correctly","title":"Converting PNG to DDS correctly","text":"Open Nvidia Texture Tools Exporter
and load your texture you want to convert and make sure BC7
is selected for the Color
maps, for your normal
map make sure BC5u
is selected (The normal map will show as yellow in the icon, ignore it). Then Save As... .dds
Example
Info
When saving the PRM texture make sure Premultiplied Alpha Blending
is unchecked
your model converter will have made .material files, you may even be using them. Remember their names and delete them. It is generally better to modify pre existing materials as it will look better because they include all the shader parameters.
A good base to modify off of is Sonic's cloth, since it is a common prm shader.
Duplicate and rename the material file you're building off of to the material name the model converter outputted.
Open HedgeEdit, then navigate to Edit > Material Editor
Once the pop up opened use File > Open to open one of the .material file you made. Then hit the ... next to Textures (Collection)
Each of these members are textures the material feeds the shader. What's important is there's 3 and they should correlate to the textures we made earlier.
Select each member and set TextureName
to the filename of the .dds
we made earlier without the file extension
Note
If you chose to edit a nondefault material (IE Sonics fur) you may need to go to the Parameters
section to get the members for the parameters.
Usually texture suffixes like fal
go to falloffs, flw
flow maps, fur
noise layer overlayed on the diffuse for the fur.
Save the material then you're done.
"},{"location":"guides/hedgehog-engine/rangers/models/import/","title":"Model Importing","text":"Info
This guide uses the following tools:
Firstly, create a PAC file named after the character and proceed to extract the contents of the archive utilizing the HedgeArcPack tool.
"},{"location":"guides/hedgehog-engine/rangers/models/import/#converting-to-fbx-and-importing-into-blender","title":"Converting to FBX and Importing into Blender","text":"Next, convert the chr_character.model
file into the FBX format using the ModelFBX tool. Please note that certain models may not necessitate conversion into FBX format. If you don't need to use the FBX format, use the HedgeNeedle tool, extract the various levels of detail from the .model
file, and rename chr_character.0.model
to chr_character
. Subsequently, utilize the model importer add-on to import the model into Blender.
After the model is imported into Blender, introduce your own model that is intended to be utilized in-game, and proceed to rig it to the original model's skeleton. It is crucial to ensure that the vertex count of your model does not surpass the maximum requirements of the model converter, which is approximately 21,000 vertices per object.
"},{"location":"guides/hedgehog-engine/rangers/models/import/#assigning-weights-and-resources","title":"Assigning Weights and Resources","text":"As weights primarily refer to Blender rather than the Hedgehog Engine itself, you should use the following resources as they may be useful in learning how to manage weights:
Weight Transfer Guide Weight Painting Guide
"},{"location":"guides/hedgehog-engine/rangers/models/import/#rigging-and-exporting-the-model","title":"Rigging and Exporting the Model","text":"Once the character model has been rigged, select the model and the original skeleton, and proceed to export them as an FBX file. In case the original model is not deleted, choose 'selected objects only' in the export settings. Although the other export settings are generally insignificant, it may be necessary to modify the scale to 0.01.
"},{"location":"guides/hedgehog-engine/rangers/models/import/#converting-to-model-and-creating-pac-file","title":"Converting to .model and Creating PAC File","text":"Utilizing the ModelConverter
tool, drag the FBX file onto ModelConverter.exe to turn it into a .model file. Subsequently, place the new .model file into the previously extracted PAC folder. To generate a new PAC file, drop the folder onto HedgeArcPack
. The PAC file may then be used in your mod to observe the changes made. Although the other export settings are generally insignificant, it may be necessary to modify the scale to 0.01.
Utilizing the ModelConverter
tool, drag the FBX file onto ModelConverter.exe to turn it into a .model file. Subsequently, place the new .model file into the previously extracted PAC folder. To generate a new PAC file, drop the folder onto HedgeArcPack
. The PAC file may then be used in your mod to observe the changes made.
For assistance with preparing materials and texture for Sonic Frontiers, refer to the Advanced Material Editing Tutorial.
"},{"location":"guides/hedgehog-engine/swa/levels/glvl/","title":"How to use Sonic GLvl with Sonic Unleashed","text":"Note
This guide covers how to setup Sonic Unleashed Xbox 360 levels in GLvl, but does not cover how to use this tool or how to set it up for PS3 levels. It's recommended that you also read the Sonic Generations GLvl guide.
Info
This guide uses the following tools:
This example will be editing Windmill Isle Act 1 Day. Open your extracted Unleashed game folder and locate your files. In my case, the files are
#ActD_MykonosAct1.ar.00\n#ActD_MykonosAct1.arl\nActD_MykonosAct1.ar.00 \nActD_MykonosAct1.ar.01\nActD_MykonosAct1.arl\n
Once located you will need to copy those files to the #files folder inside your Mod Toolbox directory. now open #SUModToolbox.bat and press 3 and enter to decompress the files, press 1 or 2 depending on the system and press enter.
Now copy the files inside #output/DecompressedFiles to a seperate folder. In order for GLvl to read the model you need to make a folder called \"Packed\" and inside your Unleashed game folder go to \"Packed\" and copy the level folder to the new \"Packed\" folder next to your decompressed .ar files.
"},{"location":"guides/hedgehog-engine/swa/levels/glvl/#preparing-glvl","title":"Preparing GLvl","text":"Locate your Xbox 360 SDK's bin/win32 folder and copy xbcompress.exe, xbdecompress.exe, xbdm.dll, msvcp71.dll and msvcr71.dll and paste them into your GLvls \"bin\" directory.
Open your GLvl folder and go to /database/LevelDatabase.xml
, you will need to add your entry for the level, in my case it would be:
<Entry name=\"ActD_MykonosAct1\" geometry=\"ActD_MykonosAct1\" layout_merge=\"\" slot=\"WindmillIsle 1\" game=\"Unleashed/\">
Afterwards the file should look something like this:
<LevelDatabase>\n <Entry name=\"ghz200\" geometry=\"ghz200\" layout_merge=\"\" slot=\"GreenHillZone\" game=\"Generations\" />\n <Entry name=\"ghz201\" geometry=\"ghz200\" layout_merge=\"\" slot=\"GreenHillZone\" game=\"Generations\" />\n <Entry name=\"cte200\" geometry=\"cte200\" layout_merge=\"\" slot=\"CityEscapeZone\" game=\"Generations\" />\n <Entry name=\"ActD_Beach\" geometry=\"ActD_Beach\" layout_merge=\"\" slot=\"JungleJoyride\" game=\"Unleashed\" />\n <Entry name=\"ActD_Africa\" geometry=\"ActD_Africa\" layout_merge=\"\" slot=\"SavanaCitadel\" game=\"Unleashed\" />\n <Entry name=\"ActD_MykonosAct1\" geometry=\"ActD_MykonosAct1\" layout_merge=\"\" slot=\"WindmillIsle 1\" game=\"Unleashed\"/>\n</LevelDatabase>\n
Open \"Unleashed Object Template.zip\" and extract the contents here, Replace files if asked.
Save the file, open GLvl, press Ctrl+O and find your decompressed .ar files. Click \"Ok\" on the first prompt and click \"Yes\" on the prompt asking about unpacking terrain.
"},{"location":"guides/hedgehog-engine/swa/levels/glvl/#extracting-textures-and-adding-them-to-glvl","title":"Extracting Textures and adding them to GLvl","text":"Inside Unleashed Mod Toolbox delete the files inside #files and #output. From your Unleashed game folder copy the various Cmn.ar files for your level and paste them inside the #files of the Unleashed ToolBox.
Open #SUModToolbox.bat and press 4 and enter to decompress the files, press 1 and enter and press 1 or 2 depending on the system and press enter. go to #files and delete the contents of the folder. Inside #output you might notice some files have not been extracted. This is because files other than ar.00 and arl don't extract, however you fix this by simply changing the file extension to ar.00, changing the file name and re-extracting them in the ToolBox.
Copy the contents of each folder in #output/ExtractedFiles into GLvl/cache/your-level/resources, replacing files if asked.
"},{"location":"guides/nn/marathon/levels/glvl/","title":"How to use Sonic GLvl with Sonic '06","text":"Info
This guide uses the following tools:
Note
Due to a lack of an actual, dedicated level editor for Sonic '06, we (at the time of writing) use a hacked together solution that allows us to use Sonic GLvl as a stand in. This guide will explain how to set up GLvl for this purpose, with the assumption that the user understands basic usage of the program itself.
"},{"location":"guides/nn/marathon/levels/glvl/#setting-up","title":"Setting Up","text":"Download your preferred version of Sonic GLvl 0.9 and extract the repository to any location. Then, open the database folder and delete the objects
folder. Next, download the Sonic '06 Stage Editing Archive and extract the SonicGLvl/database
folder to your SonicGLvl location, choosing to merge/replace existing files.
Pre converted copies of the actual Sonic '06 stages are present on the Stage Editing Archive repository (under the SonicGLvl/import
directory). When converting your own terrain (such as for a stage mod) the process is almost identical to the conversion process for Sonic Generations (it's recommended to use the two #base
files as a template). The crucial step is to remember to set the stage scale in HedgehogConverter to 1% on all three axis, as the scale does not match between both games.
The process of placing and editing objects at this point follows the workflow of using Sonic GLvl for a Generations stage mod, so will not be covered here.
"},{"location":"guides/nn/marathon/levels/glvl/#groups","title":"Groups","text":"Objects in '06 make frequent usage of grouping, allowing objects to influence each other in some way (such as an Egg Chaser commanding a squad of Egg Liners or defeating an enemy unlocking a cage). To set these up, create an XML in your stage's cache directory called groupdata_[x].group.xml
(where [x] is a name, such as base
). Then lay them out as shown below.
Each <Group> key is... Well... A Group that will be compiled into the converted SET.
The <Name> key seems to just be for identification, so here (for Ocean Palace) I called it CageGroup01
as it was the first group I made that unlocked a cage.
The <Type> key is the name of the lua event that this group will activate, this key can be left empty if the group doesn't need to activate anything. In this example, it's called Cage01, so it will fire the event called Cage01 in the stage's lua file; which, as you can probably guess, signalled a cage to open.
The <ObjectCount> key simply lists how many objects this group has (and honestly shouldn't have even been a thing, but I wrote this thing incredibly badly).
The subkeys within the <ObjectIDs> key simply give the ID of an object that should be in this group. These IDs are shown in the conversion log, and are also patched into the Generations SET if the Patch Generations SET
option is used in the Converter (see below).
For converting between Generations and '06, we use the GLvl Converter. In the Source SET, select your Generations .set.xml
file from your stage's cache directory in your GLvl location (will be named setdata_base.set.xml
by default). If you've created any groups for your object layout (which need to be made manually, see above), then select the approriate groupdata_[x].group.xml
file for the Groups XML option, otherwise, leave it blank.
For the GLvl Templates, select the database\\objects
folder.
Target SET is simply where you want to save the converted object placement to.
Filtered Object Names will prevent the Replace Object Names
option from overwriting objects that have any of the inputted values as part of their names. This object is useful for group events where you're activating an object by its name.
This converter can also convert from '06 to Generations by simply putting an '06 .set
file as the source and a Generations .set.xml
as the target. This can also convert '06 groups into an XML if a Groups XML path is specified.
Due to how Sonic GLvl handles object IDs, they will often not match with the IDs that '06 uses. To correct this, choose the Patch Generations SET
option, which will update the Generations .set.xml
to show the correct IDs.
A set of tools to modify CRIWARE file formats.
Download Source Code
"},{"location":"tools/general/audio/#vgaudiowpf","title":"VGAudio.Wpf","text":"An unofficial frontend for VGAudio on WPF.
Download Source Code
"},{"location":"tools/general/audio/#radx","title":"RADX","text":"Decoder and encoder for CRIWARE ADX file format.
Download Source Code
"},{"location":"tools/general/files/","title":"File Format Tools","text":""},{"location":"tools/general/files/#skythtools","title":"SkythTools","text":"Contains various tools for a bunch of Sonic the Hedgehog games. Read the README to have detailed information about each tool included in the repository.
Download Source Code
"},{"location":"tools/hedgehog-engine/blueblur/levels/","title":"Level Editing Tools","text":""},{"location":"tools/hedgehog-engine/blueblur/levels/#sonicglvl","title":"SonicGLvl","text":"Level editor for Sonic Generations.
Source Code
"},{"location":"tools/hedgehog-engine/blueblur/files/ar/","title":"AR/ARL Tools","text":""},{"location":"tools/hedgehog-engine/blueblur/files/ar/#compressar","title":"CompressAR","text":"Tool to compress and decompress AR files for Sonic Generations, using 'makecab' and 'expand'.
Download Source Code
"},{"location":"tools/hedgehog-engine/blueblur/files/fco/","title":"FCO Tools","text":""},{"location":"tools/hedgehog-engine/blueblur/files/fco/#fcoeditor","title":"fcoEditor","text":"FCO/Text editor for Sonic Generations
Download Source Code
"},{"location":"tools/hedgehog-engine/blueblur/files/gte/","title":"GTE/GTM Tools","text":""},{"location":"tools/hedgehog-engine/blueblur/files/gte/#glitterstudio","title":"GlitterStudio","text":"Editor application to open, modify, and resave GTE/GTM particle files for Sonic Generations.
Download Source Code
"},{"location":"tools/hedgehog-engine/blueblur/files/sav/","title":"SAV Tools","text":""},{"location":"tools/hedgehog-engine/blueblur/files/sav/#generationsskilledit","title":"GenerationsSkillEdit","text":"Skill Set Editor for Sonic Generations save files.
Source Code
"},{"location":"tools/hedgehog-engine/blueblur/files/xncp/","title":"XNCP Tools","text":""},{"location":"tools/hedgehog-engine/blueblur/files/xncp/#010-editor","title":"010 Editor","text":"Allows editing various file formats, in particular the XNCP format through the use of a template.
Download XNCP Template
"},{"location":"tools/hedgehog-engine/blueblur/files/xncp/#shuriken","title":"Shuriken","text":"XNCP Editor with graphical user interface.
Source Code
"},{"location":"tools/hedgehog-engine/common/animation/","title":"Animation Tools","text":""},{"location":"tools/hedgehog-engine/common/animation/#havokanimationexporter","title":"HavokAnimationExporter","text":"A tool that allows you to generate Havok skeleton and animation data (.skl.hkx/.anm.hkx) from FBX files.
Download Source Code
"},{"location":"tools/hedgehog-engine/common/files/","title":"File Format Tools","text":""},{"location":"tools/hedgehog-engine/common/files/#hedgearchiveeditor","title":"HedgeArchiveEditor","text":"A user interface for HedgeArcPack.
Download
"},{"location":"tools/hedgehog-engine/common/files/#hedgearcpack","title":"HedgeArcPack","text":"Command line tool that allows the extraction and creation of Hedgehog Engine package files (AR, PFD and PAC).
Download Source Code
"},{"location":"tools/hedgehog-engine/common/levels/","title":"Level Editing Tools","text":""},{"location":"tools/hedgehog-engine/common/levels/#hedgeedit","title":"HedgeEdit","text":"Level editor for Hedgehog Engine.
Download
"},{"location":"tools/hedgehog-engine/common/lighting/","title":"Lighting Tools","text":""},{"location":"tools/hedgehog-engine/common/lighting/#hedgegi","title":"HedgeGI","text":"Tool that allows you to bake global illumination and light field data for Hedgehog Engine games.
Source Code
"},{"location":"tools/hedgehog-engine/common/lighting/#soniclighttools","title":"SonicLightTools","text":"Small collection of tools to read, write, and edit .light files for Sonic Unleashed/Generations/Lost World/Forces.
Source Code
"},{"location":"tools/hedgehog-engine/common/models/","title":"Model Tools","text":""},{"location":"tools/hedgehog-engine/common/models/#modelfbx","title":"ModelFBX","text":"Converts Hedgehog Engine model files into the FBX format. Part of libgens.
Source Code
"},{"location":"tools/hedgehog-engine/common/models/#modelconverter","title":"ModelConverter","text":"Converts Assimp supported model formats into a Hedgehog Engine model file, with various batch scripts for the different games.
Download Source Code
"},{"location":"tools/hedgehog-engine/common/text/","title":"Text tools","text":""},{"location":"tools/hedgehog-engine/common/text/#puyo-text-editor","title":"Puyo Text Editor","text":"Tool for editing CNVRS-TEXT files
Download Source Code
"},{"location":"tools/hedgehog-engine/rainbow/files/","title":"File Format Tools","text":""},{"location":"tools/hedgehog-engine/rainbow/files/#acorn-engine-godot-bse","title":"Acorn Engine (godot-bse)","text":"A modified version of Godot that works with Sonic Colors: Ultimate. Instructions are included in the repository.
Source Code
"},{"location":"tools/hedgehog-engine/rangers/models/","title":"Model Tools","text":""},{"location":"tools/hedgehog-engine/rangers/models/#hedgeneedle","title":"HedgeNeedle","text":"Command line tool for working with Sonic Frontiers model files.
Download Source Code
"},{"location":"tools/hedgehog-engine/rangers/files/anmpxd/","title":"ANM.PXD Tools","text":""},{"location":"tools/hedgehog-engine/rangers/files/anmpxd/#frontiersanimdecompress","title":"FrontiersAnimDecompress","text":"Command line tool that allows the compression and decompression of Frontiers animation files (ANM.PXD).
Download Source Code
"},{"location":"tools/hedgehog-engine/rangers/files/btmesh/","title":"BTMesh Tools","text":""},{"location":"tools/hedgehog-engine/rangers/files/btmesh/#btmesh","title":"btmesh","text":"A command line tool that allows you to convert FBX files to .btmesh/.pccol.
Download Source Code
"},{"location":"tools/hedgehog-engine/rangers/files/cemt/","title":"CEMT Tools","text":""},{"location":"tools/hedgehog-engine/rangers/files/cemt/#effect-color-tool","title":"Effect Color Tool","text":"Editor tool for working with Sonic Frontiers CEMT files.
Download
"},{"location":"tools/hedgehog-engine/rangers/files/rfl/","title":"RFL Tools","text":""},{"location":"tools/hedgehog-engine/rangers/files/rfl/#010-editor","title":"010 Editor","text":"Allows editing various file formats. Frontiers RFL files are supported through the use of specific templates.
Download Binary Templates
"},{"location":"tools/hedgehog-engine/sonic2010/levels/","title":"Level Editing Tools","text":""},{"location":"tools/hedgehog-engine/sonic2010/levels/#sonic-colors-set-editor","title":"Sonic Colors Set Editor","text":"Sonic Colors Set Data editor powered by HedgeLib.
Source Code
"},{"location":"tools/hedgehog-engine/sonic2010/files/arc/","title":"ARC Tools","text":""},{"location":"tools/hedgehog-engine/sonic2010/files/arc/#brawlcrate","title":"BrawlCrate","text":"Allows editing ARC file format, viewing the models, textures, etc...
Download Source code
"},{"location":"tools/hedgehog-engine/sonic2010/files/general/","title":"General Tools","text":""},{"location":"tools/hedgehog-engine/sonic2010/files/general/#soniccolorsexporter","title":"SonicColorsExporter","text":"Info
Importing animations exported by this tool require the dkAnimErwin Maya plugin You also need to edit the dkAnimErwin.mel
script of the plugin for it to work properly. Go to File > Windows > General Editor > Script Editor, then File > Open Script > dkAnimErwin.mel, and add dkAnimErwin;
to the last line of the file.
Allows exporting various assets from Sonic Colors file formats, such as animations, models, materials, etc.
Download Source Code
"},{"location":"tools/hedgehog-engine/sonic2010/files/xncp/","title":"XNCP Tools","text":"Warning
For Sonic Colors, the XNCP file format is only used in Sonic Colours: Ultimate
"},{"location":"tools/hedgehog-engine/sonic2010/files/xncp/#010-editor","title":"010 Editor","text":"Allows editing various file formats, in particular the XNCP format through the use of a template.
Download XNCP Template
"},{"location":"tools/hedgehog-engine/sonic2010/files/xncp/#coloursxncpgen","title":"ColoursXNCPGen","text":"Basic tool to combine XNCP and DXL files, as well as split XNCP files to an XNCP-DXL pair.
Download Source Code
"},{"location":"tools/hedgehog-engine/sonic2010/files/xtb/","title":"XTB Tools","text":""},{"location":"tools/hedgehog-engine/sonic2010/files/xtb/#soniccolorsxtbconv","title":"SonicColorsXTBConv","text":"Converts XTB files to XML and vice versa.
Download Source code
"},{"location":"tools/hedgehog-engine/sonic2013/levels/","title":"Level Editing Tools","text":""},{"location":"tools/hedgehog-engine/sonic2013/levels/#sonicglvl-lost-world","title":"SonicGLvl Lost World","text":"Fork of SonicGLvl for Sonic Lost World.
Source Code
"},{"location":"tools/hedgehog-engine/swa/files/","title":"File Formats","text":""},{"location":"tools/hedgehog-engine/swa/files/#unleashed-mod-toolbox","title":"Unleashed Mod Toolbox","text":"Command line tool that allows the extraction and decompression of Sonic Unleashed .ar.00 and .arl files.
Download Source Code
"},{"location":"tools/nn/marathon/files/","title":"File Format Tools","text":""},{"location":"tools/nn/marathon/files/#marathoncli","title":"Marathon.CLI","text":"All in one tool that allows extraction and repacking of Sonic '06 .arc archives, as well as conversion of multiple formats to and from human readable JSON files.
Download Source Code
"},{"location":"tools/nn/marathon/levels/","title":"Level Editing Tools","text":""},{"location":"tools/nn/marathon/levels/#sonic-06-stage-editing-archive","title":"Sonic '06 Stage Editing Archive","text":"A collection of various small tools and a set of custom SonicGLvl object templates designed to make it more feasible to work on stage edits and custom stages for Sonic '06.
Source Code
"},{"location":"tools/others/adventure/files/","title":"File Format Tools","text":""},{"location":"tools/others/adventure/files/#sa_tools","title":"sa_tools","text":"A toolkit for modifying and extracting data from the Sonic Adventure series of games.
Download Source Code
"},{"location":"tools/renderware/common/levels/","title":"Level Editing Tools","text":""},{"location":"tools/renderware/common/levels/#heroes-power-plant","title":"Heroes Power Plant","text":"Level editor for Sonic Heroes and Shadow the Hedgehog.
Download Source Code
"},{"location":"tools/renderware/common/files/one/","title":"ONE Tools","text":""},{"location":"tools/renderware/common/files/one/#heroesone-reloaded","title":"HeroesONE Reloaded","text":"Tool/library for reading and writing Sonic Heroes and Shadow The Hedgehog's .ONE archives.
Download Source Code
"},{"location":"tools/renderware/common/files/pac/","title":"PAC Tools","text":""},{"location":"tools/renderware/common/files/pac/#pactool","title":"PACTool","text":"Archive editor for .PAC files from the PC and XBOX versions of Sonic Heroes and Shadow the Hedgehog.
Source Code
"},{"location":"tools/renderware/common/files/txd/","title":"TXD Tools","text":""},{"location":"tools/renderware/common/files/txd/#magictxd","title":"Magic.TXD","text":"Universal RenderWare TXD tool that supports creating, viewing and editing texture files.
Download
"},{"location":"tools/retro-engine/common/animation/","title":"Animation Tools","text":""},{"location":"tools/retro-engine/common/animation/#rsdk-animation-editor","title":"RSDK Animation Editor","text":"Animation editor for RSDK.
Download Source Code
"},{"location":"tools/retro-engine/common/files/","title":"File Format Tools","text":""},{"location":"tools/retro-engine/common/files/#retroed","title":"RetroED","text":"A general purpose editor for all RSDK versions below RSDKv5.
Source Code
"},{"location":"tools/retro-engine/common/models/","title":"Model Tools","text":""},{"location":"tools/retro-engine/common/models/#modelmaniac","title":"ModelManiac","text":"Importer and exporter for RSDK model formats.
Source Code
"}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"discoveries/blueblur/hud/blb_gauge/","title":"Unused Time Eater Gauge","text":"There's an unused gauge that was supposed to be used in the Time Eater boss battle. The gauge is present in bb.cpk/SonicActionCommonHud/ui_gameplay.xncp
, in the blb_gauge
XNCP scene. Unfortunately, this gauge isn't functional in-game, and its usage also remains unknown.
Visually, this element appears to be finished, and it even features animations. Below you can see the available animations for this element. Some were recorded in-game, but others were recorded using a WIP build of Shuriken, which may not be 100% accurate.
"},{"location":"discoveries/blueblur/hud/blb_gauge/#intro_anim","title":"Intro_Anim","text":"Following the naming scheme of almost every XNCP animation made for Generations, this was supposed to be played whenever the HUD element showed up on screen. Simple slide-in animation.
"},{"location":"discoveries/blueblur/hud/blb_gauge/#change_c2g-change_g2c","title":"change_c2g / change_g2c","text":"These animations are played whenever you switch between Classic Sonic to Modern Sonic and vice versa. The video below shows a recording of the animation in-game.
"},{"location":"discoveries/blueblur/hud/blb_gauge/#change_c2w-change_g2w","title":"change_c2w / change_g2w","text":"Seems like these were supposed to be animations for changing to an intermediate state between Classic and Modern Sonic, like in the final part of the boss battle. The \"w\" means \"double\" in japanese.
"},{"location":"discoveries/blueblur/hud/blb_gauge/#cl_gauge_size_1","title":"cl_gauge_size_1","text":"Animation for Classic Sonic's gauge.
"},{"location":"discoveries/blueblur/hud/blb_gauge/#gn_gauge_size_1","title":"gn_gauge_size_1","text":"Animation for Modern Sonic's gauge.
"},{"location":"discoveries/sonic2010/objects/unused/","title":"Unused Objects","text":""},{"location":"discoveries/sonic2010/objects/unused/#objects","title":"Objects","text":""},{"location":"discoveries/sonic2010/objects/unused/#appearthornball","title":"AppearThornBall","text":"Important
This section is missing some information. Help us fill it in!
"},{"location":"discoveries/sonic2010/objects/unused/#shadow","title":"Shadow","text":"Important
This section is missing some information. Help us fill it in!
"},{"location":"discoveries/sonic2010/objects/unused/#spinlaserstraightmove","title":"SpinLaserStraightMove","text":"An unused, moving variant of the spinning laser object seen in various levels of Sweet Mountain and Asteroid Coaster.
Important
This section is missing some information. Help us fill it in!
"},{"location":"discoveries/sonic2010/objects/unused/#spinlaserpathmove","title":"SpinLaserPathMove","text":"An unused, variant of the spinning laser object seen in various levels of Sweet Mountain and Asteroid Coaster, which moves along a path.
Important
This section is missing some information. Help us fill it in!
"},{"location":"discoveries/sonic2010/objects/unused/#rotationglobe","title":"RotationGlobe","text":"An unused object meant to be used by the spike wisp in gameplay. When using a spike wisp the player will be constantly rotated in spin direction of the object whilst in contact with it. The object has 3 different sizes that it can appear at. A new variant of this object was made for Sonic Generations Planet Wisp Act 1 called plaGearFloor
.
An unused, golden variant of the normal enmSpanner (Thunder Spinner) enemy. Much like the metal variant of enmSpinner (Spinner), this variant of the Thunder Spinner is also indestructable.
"},{"location":"discoveries/sonic2010/objects/unused/#enmsparva-thunder-larva","title":"enmSparva (Thunder Larva)","text":"An unused, electric variant of the normal enmLarva (Larva) enemy.
"},{"location":"discoveries/sonic2010/objects/unused/#chaserbomb","title":"ChaserBomb","text":"Important
This section is missing some information. Help us fill it in!
"},{"location":"discoveries/sonic2010/objects/unused/#cameras","title":"Cameras","text":""},{"location":"discoveries/sonic2010/objects/unused/#objectlookcamera","title":"ObjectLookCamera","text":"Important
This section is missing some information. Help us fill it in!
"},{"location":"discoveries/sonic2010/objects/unused/#colliders","title":"Colliders","text":""},{"location":"discoveries/sonic2010/objects/unused/#chagemode_3dtodash-event-dimension-change-3d-to-dash","title":"ChageMode_3DtoDash (Event Dimension Change 3D to Dash)","text":"Important
This section is missing some information. Help us fill it in!
"},{"location":"discoveries/sonic2010/objects/unused/#rollercoastercollision","title":"RollerCoasterCollision","text":"Important
This section is missing some information. Help us fill it in!
"},{"location":"discoveries/sonic2010/objects/unused/#motoraeventcollision","title":"MotoraEventCollision","text":"Important
This section is missing some information. Help us fill it in!
"},{"location":"discoveries/sonic2010/objects/unused/#test-objects","title":"Test Objects","text":""},{"location":"discoveries/sonic2010/objects/unused/#testobj","title":"TestObj","text":"Important
This section is missing some information. Help us fill it in!
"},{"location":"discoveries/sonic2010/objects/unused/#ccttestobj","title":"CCTTestObj","text":"Important
This section is missing some information. Help us fill it in!
"},{"location":"discoveries/sonic2013/cutscenes/levels/","title":"Real-Time Cutscene Levels","text":"Empty folders can be found for the real-time cutscene levels in the raw folder found within the Wii U release of the game. These folders are listed below.
raw\n\u251c\u2500\u2500 event\n| |\u2500\u2500 scene\n\u2502 | \u251c\u2500\u2500 ev000\n\u2502 \u2502 \u251c\u2500\u2500 ev120\n\u2502 \u2502 \u251c\u2500\u2500 ev125\n\u2502 \u2502 \u251c\u2500\u2500 ev130\n\u2502 \u2502 \u251c\u2500\u2500 ev140\n\u2502 \u2502 \u251c\u2500\u2500 ev150\n\u2502 \u2502 \u251c\u2500\u2500 ev210\n\u2502 \u2502 \u251c\u2500\u2500 ev220\n\u2502 \u2502 \u251c\u2500\u2500 ev230\n\u2502 \u2502 \u251c\u2500\u2500 ev240\n\u2502 \u2502 \u251c\u2500\u2500 ev250\n\u2502 \u2502 \u251c\u2500\u2500 ev310\n\u2502 \u2502 \u251c\u2500\u2500 ev320\n\u2502 \u2502 \u251c\u2500\u2500 ev330\n\u2502 \u2502 \u251c\u2500\u2500 ev345\n\u2502 \u2502 \u251c\u2500\u2500 ev350\n\u2502 \u2502 \u251c\u2500\u2500 ev360\n\u2502 \u2502 \u251c\u2500\u2500 ev410\n\u2502 \u2502 \u251c\u2500\u2500 ev420\n\u2502 \u2502 \u251c\u2500\u2500 ev430\n\u2502 \u2502 \u251c\u2500\u2500 ev435\n\u2502 \u2502 \u251c\u2500\u2500 ev440\n\u2502 \u2502 \u251c\u2500\u2500 ev450\n\u2502 \u2502 \u251c\u2500\u2500 ev510\n\u2502 \u2502 \u251c\u2500\u2500 ev520\n\u2502 \u2502 \u251c\u2500\u2500 ev530\n\u2502 \u2502 \u251c\u2500\u2500 ev540\n\u2502 \u2502 \u251c\u2500\u2500 ev550\n\u2502 \u2502 \u251c\u2500\u2500 ev610\n\u2502 \u2502 \u251c\u2500\u2500 ev620\n\u2502 \u2502 \u251c\u2500\u2500 ev630\n\u2502 \u2502 \u251c\u2500\u2500 ev642\n\u2502 \u2502 \u251c\u2500\u2500 ev645\n\u2502 \u2502 \u251c\u2500\u2500 ev650\n\u2502 \u2502 \u251c\u2500\u2500 ev720\n\u2502 \u2502 \u251c\u2500\u2500 ev730\n\u2502 \u2502 \u251c\u2500\u2500 ev740\n\u2502 \u2502 \u251c\u2500\u2500 ev750\n\u2502 \u2502 \u251c\u2500\u2500 ev755\n\u2502 \u2502 \u251c\u2500\u2500 ev757\n\u2502 \u2502 \u251c\u2500\u2500 ev760\n\u2502 \u2502 \u251c\u2500\u2500 ev764\n\u2502 \u2502 \u251c\u2500\u2500 ev770\n| |\u2500\u2500 stage\n\u2502 | \u251c\u2500\u2500 ev000\n\u2502 \u2502 \u251c\u2500\u2500 ev120\n\u2502 \u2502 \u251c\u2500\u2500 ev130\n\u2502 \u2502 \u251c\u2500\u2500 ev140\n\u2502 \u2502 \u251c\u2500\u2500 ev150\n\u2502 \u2502 \u251c\u2500\u2500 ev210\n\u2502 \u2502 \u251c\u2500\u2500 ev220\n\u2502 \u2502 \u251c\u2500\u2500 ev250\n\u2502 \u2502 \u251c\u2500\u2500 ev342\n\u2502 \u2502 \u251c\u2500\u2500 ev350\n\u2502 \u2502 \u251c\u2500\u2500 ev430\n\u2502 \u2502 \u251c\u2500\u2500 ev440\n\u2502 \u2502 \u251c\u2500\u2500 ev520\n\u2502 \u2502 \u251c\u2500\u2500 ev530\n\u2502 \u2502 \u251c\u2500\u2500 ev620\n\u2502 \u2502 \u251c\u2500\u2500 ev642\n\u2502 \u2502 \u251c\u2500\u2500 ev645\n\u2502 \u2502 \u251c\u2500\u2500 ev710\n\u2502 \u2502 \u251c\u2500\u2500 ev720\n\u2502 \u2502 \u251c\u2500\u2500 ev750\n
"},{"location":"discoveries/sonic2013/levels/colors/","title":"Colors Leftovers","text":""},{"location":"discoveries/sonic2013/levels/colors/#tropical-resort-act-1","title":"Tropical Resort Act 1","text":"There\u2019s an unused Tropical Resort Act 1 entry in Sonic Lost World\u2019s actstgmission.lua
file.
mission_all = {\n -- RSO(\u30ea\u30be\u30fc\u30c8\u9762)\n {\n missions = {\n -- \uff21\uff23\uff34\uff11\uff08\u65e7\uff21\uff23\uff34\uff11\u306e\u524d\u534a\u90e8\u5206\uff09\n {\n name = \"stg110\",\n data = \"stg110\",\n player_pos = { -11942.84, 1575.931, 16972.49 },\n player_dir = { 0.0, -159.2, 0.0 },\n start_event = 1,\n bgm = \"bgm_stg110_rso\",\n phantoms = { \"laser\", \"drill\" },\n result_bg = \"result_01_rso_act1\",\n\n --\u3010\u30b9\u30b3\u30a2\u8a2d\u5b9a\u9818\u57df\u3011\n score = {\n rank = {\n 60, -- S rank (\u30b4\u30fc\u30eb\u79d2\u6570)\n 120, -- A rank\n 180, -- B rank\n 240, -- C rank\n 320, -- D rank\n },\n time_basis = 320000,\n time_down = 1100,\n\n no_miss = {\n 280000,\n 210000,\n 182000,\n 56000,\n 28000,\n },\n\n },\n },\n },\n },\n}\n
Only thing changed in this entry from the Sonic Colors version is that player_dir
takes in a 3D value, just like every other Sonic Lost World entry.
The entire score
block, start_event
and result_bg
are leftovers from Colors as well, as those values are not read by Sonic Lost World's lua parser function.
This file is responsible for serving information to the game regarding stages, such as where the player should start at or what folder to read the assets for the stage from.
"},{"location":"discoveries/sonic2013/levels/colors/#test-levels","title":"Test Levels","text":"Due to the release of Sonic Colors Ultimate we can identify a few test levels from Sonic Colors that were reused in Sonic Lost World.
actstgmission.luatest_mission_all = {\n -- \u30d7\u30ed\u30b0\u30e9\u30de\u30c6\u30b9\u30c8.\n {\n missions = {\n -- mission test(stg901)\n {\n name = \"stg901\",\n dir = \"test/stg901\",\n player_pos = { 0, 0, 0 },\n player_dir = { 0.0, 0.0, 0.0 },\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\", \"asteroid\" },\n --\u3010\u30b9\u30b3\u30a2\u8a2d\u5b9a\u9818\u57df\u3011\n score = {\n rank = {\n 800000, -- S rank\n 700000, -- A rank\n 450000, -- B rank\n 200000, -- C rank\n },\n time_basis = 10000,\n time_down = 500,\n\n no_miss = {\n 100000,\n 50000,\n 25000,\n 10000,\n 0,\n },\n },\n },\n -- mission test(stg902)\n {\n name = \"stg902\",\n dir = \"test/stg902\",\n player_pos = { 0, 0, 0 },\n player_dir = { 0.0, -180.0, 0.0 },\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\", \"asteroid\" },\n },\n },\n },\n}\n
The only difference here when compared to the Colors version is that the entries used take a 3D value for the player_dir
tag and the inclusion of the asteroid
wisp in the phantoms
tag.
stage_all = {\n -- \u30c6\u30b9\u30c8\u30b9\u30c6\u30fc\u30b8\n {\n title = \"\u30c6\u30b9\u30c8\u30b9\u30c6\u30fc\u30b8\",\n\n stages = {\n -- \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30c6\u30b9\u30c8\u7528\n {\n name = \"stg901\",\n title = \"\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30c6\u30b9\u30c8\u30de\u30c3\u30d7\",\n },\n -- \u897f\u6751\u30c6\u30b9\u30c8\u30de\u30c3\u30d7\n {\n name = \"stg902\",\n title = \"\u897f\u6751\u30c6\u30b9\u30c8\u30de\u30c3\u30d7\",\n },\n -- Multi\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30c6\u30b9\u30c8\u7528\n {\n name = \"stg905\",\n title = \"Multi\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30c6\u30b9\u30c8\u30de\u30c3\u30d7\",\n },\n },\n },\n}\n
The Japanese titles translate to the same values in Sonic Colors Ultimate's files.
"},{"location":"discoveries/sonic2013/levels/colors/#actstgdatalua","title":"actstgdata.lua","text":"This file was only meant to be used by the game's debug menu, which does not exist in the final release, thus making the file a leftover.
"},{"location":"discoveries/sonic2013/levels/deleted/","title":"Deleted Levels","text":"There are several levels that have been removed from the game, but their entries can still be found in actstgmission.lua
.
mission_all = {\n {\n missions = {\n --old stage\n -- w2-a03 \u53e4\u4ee3\u90fd\u5e02\n {\n name = \"w2a03\",\n data = \"w2a03\",\n player_pos = { 0.00, 0.00, 51.00 },\n player_dir = { 0.0, 180.0, 0.0 },\n },\n -- w2-a04 \u30bf\u30ab\u30a2\u30b7\u30ac\u30cb\n {\n name = \"w2a04\",\n data = \"w2a04\",\n player_pos = { 2.19, 0.47, 0.49 },\n player_dir = { 0.0, 90.0, 0.0 },\n player_mode = \"2D\",\n },\n -- w2-a05 \u30b5\u30f3\u30c9\u30ef\u30fc\u30e0\u4f53\u5185\n {\n name = \"w2a05\",\n data = \"w2a05\",\n player_pos = { -1000.29, 540.33, -7.00 },\n player_dir = { 0.0, 180.0, 0.0 },\n player_mode = \"2D\",\n },\n -- w3-a07 \u5357\u56fd\u30d3\u30fc\u30c12\n {\n name = \"w3a07\",\n data = \"w3a07\",\n player_pos = { -0.54, 0.44, 105.00 },\n player_dir = { 0.0, 180.0, 0.0 },\n },\n\n -- w1-a02 \u30a4\u30f3\u30c7\u30a3\u6d1e\u7a9f\n {\n name = \"w1a02\",\n data = \"w1a02\",\n player_pos = { 50.1, -10.55, -188.27 },\n player_dir = { 0.0, 180.0, 0.0 },\n },\n -- w1-a05 \u30e2\u30a2\u30a4\n {\n name = \"w1a05\",\n data = \"w1a05\",\n player_pos = { 80, 10067.96, 0 },\n player_dir = { 0.0, 90.0, 0.0 },\n player_mode = \"2D\",\n },\n -- w1-c01 \u30ad\u30f3\u6597\u96f2\n {\n name = \"w1c01\",\n data = \"w1c01\",\n player_pos = { 0.00, -95.00, 30.00 },\n player_dir = { 0.0, 180.0, 0.0 },\n },\n -- w2-a02 \u30b9\u30ab\u30a4\u30c1\u30a7\u30a4\u30b9\n {\n name = \"w2a02\",\n data = \"w2a02\",\n player_pos = { 2401.1, 63.06, 3125.81 },\n player_dir = { 0.0, 180.0, 0.0 },\n player_mode = \"SKYCHASE\"\n },\n -- w4-a02 \u30a4\u30f3\u30c7\u30a3\u6d1e\u7a9f2\n {\n name = \"w4a02\",\n data = \"w4a02\",\n player_pos = { -0.18, -52.03, -73.52 },\n player_dir = { 0.0, 180.0, 0.0 },\n },\n -- w4-a03 ilomilo\u304a\u83d3\u5b50\n {\n name = \"w4a03\",\n data = \"w4a03\",\n player_pos = { -1.08, 3.02, -3.30 },\n player_dir = { 0.0, 90.0, 0.0 },\n player_mode = \"2D\",\n },\n },\n },\n}\n
"},{"location":"discoveries/sonic2013/levels/original-order/","title":"Original Level Order","text":""},{"location":"discoveries/sonic2013/levels/original-order/#partial-original-order","title":"Partial Original Order","text":"Up to a point the game's original level order can be revealed to us by investigating the game's leftover actstgdata.lua
file.
old_stage_all = {\n -- w1\n {\n title = \"w1\u8349\u539f\",\n\n stages = {\n {\n name = \"w1a01\",\n title = \"w1-1:\u30b0\u30e9\u30b9\u30d2\u30eb\",\n },\n {\n name = \"w1a02\",\n title = \"w1-2:\u30a4\u30f3\u30c7\u30a3\u6d1e\u7a9f\",\n },\n {\n name = \"w1a03\",\n title = \"w1-3:\u6708\u5149\",\n },\n {\n name = \"w1a04\",\n title = \"w1-4:\u5927\u30ca\u30fc\u30eb\u8ecd\",\n },\n {\n name = \"w1a05\",\n title = \"w1-5:\u30e2\u30a2\u30a4\",\n },\n {\n name = \"w1c01\",\n title = \"w1-A:\u30ad\u30f3\u6597\u96f2\",\n },\n },\n },\n -- w2\n {\n title = \"w2\u7802\u6f20\",\n\n stages = {\n {\n name = \"w2a01\",\n title = \"w2-1:\u30b5\u30f3\u30c9\u30ef\u30fc\u30e0\u8ecd\",\n },\n {\n name = \"w2a02\",\n title = \"w2-2:\u30b9\u30ab\u30a4\u30c1\u30a7\u30a4\u30b9\",\n },\n {\n name = \"w2a03\",\n title = \"w2-3:\u53e4\u4ee3\u90fd\u5e02\",\n },\n {\n name = \"w2a04\",\n title = \"w2-4:\u30bf\u30ab\u30a2\u30b7\u30ac\u30cb\",\n },\n {\n name = \"w2a05\",\n title = \"w2-5:\u30b5\u30f3\u30c9\u30ef\u30fc\u30e0\u4f53\u5185\",\n },\n {\n name = \"w2a06\",\n title = \"w2-6:\u7adc\u5dfb\",\n },\n {\n name = \"w2c01\",\n title = \"w2-A:\u9ec4\u8272\u4e09\u9023\u30d0\u30cd\",\n },\n },\n },\n -- w3\n {\n title = \"w3\u5357\u56fd\",\n\n stages = {\n {\n name = \"w3a01\",\n title = \"w3-1:\u5357\u56fd\u30d3\u30fc\u30c1\",\n },\n {\n name = \"w3a03\",\n title = \"w3-3:\u30d5\u30eb\u30fc\u30c4\u8fb2\u5712\",\n },\n {\n name = \"w3a07\",\n title = \"w3-7:\u5357\u56fd\u30d3\u30fc\u30c12\",\n },\n },\n },\n -- w4\n {\n title = \"w4\u96ea\",\n\n stages = {\n {\n name = \"w4a01\",\n title = \"w4-1:\u8ecd\u4e8b\u5de5\u5834\",\n },\n {\n name = \"w4a02\",\n title = \"w4-2:\u30a4\u30f3\u30c7\u30a3\u6d1e\u7a9f2\",\n },\n {\n name = \"w4a03\",\n title = \"w4-3:ilomilo\u304a\u83d3\u5b50\",\n },\n },\n },\n -- w5\n {\n title = \"w5\u30b8\u30e3\u30f3\u30b0\u30eb\",\n\n stages = {\n {\n name = \"w5a01\",\n title = \"w5-1:\u30b8\u30e3\u30f3\u30b0\u30eb\u8ecc\u9053\u65bd\u8a2d\",\n },\n },\n },\n}\n
Many of these levels have been deleted. However, there's plenty of changes we can dissect in this list.
"},{"location":"discoveries/sonic2013/levels/original-order/#windy-hill","title":"Windy Hill","text":"Final Original w1a01 w1a01 w1a03 w1a02 xind01 w1a03 w1a06 w1a04 w1a05 w1c01"},{"location":"discoveries/sonic2013/levels/original-order/#w1a02","title":"w1a02","text":"Starting off just like the final, it swiftly changes gears by heading into w1a02
instead of w1a03
. However, checking the description of the level (\u30a4\u30f3\u30c7\u30a3\u6d1e\u7a9f), it matches up with the final game's xind01
suggesting the two stages are one and the same, however the starting positions don't line up.
The following level is w1a03
, meaning Act 3 and Act 2 were likely swapped around early into development.
The order then continues with w1a04
, which is originally used as Sky Road Act 1. This suggests that this level was meant to be used in Windy Hill, which is supported by the fact that the level shares a very similar look with that area of the game.
w1a05
shares its description (\u30e2\u30a2\u30a4) with the level xmoa01 (Silent Forest Act 4)
suggesting, just like the previous stage, it was to come much sooner into the game, however once again the starting positions don't line up.
Looking at xmoa01
's set data reveals a few leftover objects in the sky around w1a05
's spawn position. This list includes: 4x - ObjPointSoundSource 1x - ObjGiantMoaiOut 1x - ObjGFieldConstant 1x - EventVolumeCameraChange 1x - GPathCamera 1x - GoalRing 1x - SetRigidBody
The spawn position being so close to the GoalRing means the level was more than likely supposed to start close to its end, though not meaning it was a short level as the Moai objects function as warp objects.
"},{"location":"discoveries/sonic2013/levels/original-order/#w1c01","title":"w1c01","text":"Finally for Windy Hill there's w1c01
. Taking note of the change from a
to a c
, it seems this level wasn't meant to be a normal act but a challenge level. Looking at the description (\u30ad\u30f3\u6597\u96f2) once again, it reveals to us that this level is non-other than xnim01 (Hidden World Act 1)
from the final game, however once again there's a small difference in starting locations.
Interestingly enough this leaves the final game's second encounter with Zazz in w1a06
nowhere to be seen.
Starting off just like the final, it swiftly changes gears by heading into w2a02
instead of xbee01
. However, checking the description of the level (\u30b9\u30ab\u30a4\u30c1\u30a7\u30a4\u30b9), it matches up with the final game's xsky01
, suggesting the two stages are one and the same, however the starting positions don't line up. Interestingly enough this level also has the SKYCHASE
tag, meaning it was a level where you controlled the Tornado just like the final iteration of the stage.
Test level stg823
has the following comment, which is about this level: w2-2\uff1a\u76f4\u5f8420\uff4d\u30c6\u30b9\u30c8
. This comment roughly translates to World 2-2: 20m Diameter Test
.
This level sadly does not have a final counterpart in the release of the game. Its description roughly translates to Ancient City
.
This level sadly does not have a final counterpart in the release of the game. Its description roughly translates to Japanese Spider Crab
.
This level sadly does not have a final counterpart in the release of the game. Its description roughly translates to Sandworm Body
.
w2c01
is the final level of the original order for Desert Ruins, but it's actually used as Sky Road Act 4 in the final game. The aesthetics of the area does match up with the look of Desert Ruins, so it's quite likely that this level was supposed to be there originally. The description for this level roughly translates to \"Yellow Triple Spring\", meaning it was very likely going to function like the Yellow Spring levels from Sonic Colors. This is supported by the fact that the Moving Springs in the level behave very similarly to the Yellow Springs in Sonic Colors.
From here on out the original level order becomes very segmented with barely any trace left of it.
Final Original w3a01 w3a01 w3a03 xsea01 w3a03 w3a06 w6a03 w3a07"},{"location":"discoveries/sonic2013/levels/original-order/#w3a07","title":"w3a07","text":"This level sadly does not have a final counterpart in the release of the game. Its description is the same as w3a01
's with but it has a 2
at the end.
The second level instead of being w4a04
is w4a02
. However, checking the description of the level (\u30a4\u30f3\u30c7\u30a3\u6d1e\u7a9f2), it matches up with the final game's xind02 (Silent Forest Act 3)
suggesting the two stages are one and the same, however the starting positions don't line up.
The third level instead of being xcas01
is w4a03
. However, checking the description of the level (ilomilo\u304a\u83d3\u5b50), it matches up with the final game's xswe01 (Desert Ruins Act 3)
suggesting the two stages are one and the same, however the starting positions don't line up.
Inside the configuration file for the level xswe01
, the file is still called w4a03_config.lua
, however the brief
section states it's a configuration file for w2a05
.
---------------------------------------------------------------\n-- @file w4a03_config.lua\n-- @author Jibiki_Hisae\n-- @brief w2-5 \u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\n-- @data 2012/7/20\n---------------------------------------------------------------\n
"},{"location":"discoveries/sonic2013/levels/original-order/#silent-forest","title":"Silent Forest","text":"Final Original w5a01 w5a01 w5a02 xind02 xmoa01"},{"location":"discoveries/sonic2013/levels/original-order/#sky-road","title":"Sky Road","text":""},{"location":"discoveries/sonic2013/levels/original-order/#w6a03","title":"w6a03","text":"The secret level of Tropical Coast in the final game. As most of Sky Roads levels seem to come from elsewhere, it's hard to make a proper judgement on whether the stage would aesthetically belong in Sky Road or not, it does however play very similarly to w6a05
, Sky Road's Act 3. The configuration file for the level does state that it belongs to Sky Road as well.
---------------------------------------------------------------\n-- @file w6a03_config.lua\n-- @author Yoshitaka Miura\n-- @brief w6-3 \u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\n-- @data 2012/10/30\n---------------------------------------------------------------\n
"},{"location":"discoveries/sonic2013/levels/original-order/#w6a05","title":"w6a05","text":"Inside the configuration file for the level xnim02
the brief
section states it's a configuration file for w6a05
. xnim02_config.lua
---------------------------------------------------------------\n-- @file xnim02_config.lua\n-- @author Yoshitaka_Miura\n-- @brief w6-5 \u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\n-- @data 2013/5/4\n---------------------------------------------------------------\n
"},{"location":"discoveries/sonic2013/levels/original-order/#speculative-additions","title":"Speculative Additions","text":"This section includes educated guesses due to lack of leftover data from the game.
"},{"location":"discoveries/sonic2013/levels/original-order/#tropical-coast_1","title":"Tropical Coast","text":"w3a02
, w3a04
, and w3c01
are nowhere to be seen. It's possible that these levels turned into one of the levels that don't start with the world number, or that they didn't exist to begin with. As the stage originally had a 7th act it's possible that is what would have been the equivalent of w3c01
in this zone.
Test level w0a04
has the following comment, which is about this level: w3-5\uff1aSV\u30ab\u30b8\u30ce\u30c6\u30b9\u30c8\uff08w0a04\uff09
. This comment roughly translates to World 3-5: Sideview Casino Test (w0a04)
. This could mean that w3a05
turned into xcas01
later on into development, which is housed in Frozen Factory in the final game.
w4a05
and w4c01
are nowhere to be seen. It's possible that these levels turned into one of the levels that don't start with the world number, or that they didn't exist to begin with.
w5a04
, w5a05
, w5a06
and w5c01
are nowhere to be seen.It's possible that these levels turned into one of the levels that don't start with the world number, or that they didn't exist to begin with.
The second level of Sky Road in the original game. The overall aesthetic of the level does match up with Silent Forest, which suggests it really did belong to Silent Forest at some point.
"},{"location":"discoveries/sonic2013/levels/original-order/#sky-road_1","title":"Sky Road","text":"w6a01
, w6a02
, w6a06
and w6c01
are nowhere to be seen. It's possible that these levels turned into one of the levels that don't start with the world number, or that they didn't exist to begin with.
w7a04
, w7a05
and w7c01
are nowhere to be seen. It's possible that these levels turned into one of the levels that don't start with the world number, or that they didn't exist to begin with.
There are several entries for test levels leftover in Sonic Lost World's testmission.lua
file.
Some of these entries are using the naming scheme from Sonic Colors for stage names, that being stgXYY
. Another chunk of the entries are named according to the scheme standardized in Sonic Lost World, w0xYY
.
---------------------------------------------------------------\n-- @file testmission.lua\n-- @author Kawabata Yoshitaka\n-- @brief \u30c6\u30b9\u30c8\u7528\u30df\u30c3\u30b7\u30e7\u30f3\u3092\u5b9a\u7fa9\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u3067\u3059\n---------------------------------------------------------------\n\ntest_mission_all = {\n\n -- \u30d7\u30ed\u30b0\u30e9\u30de\u30c6\u30b9\u30c8.\n {\n missions = {\n -- mission test(w0a01)\n {\n name = \"w0a01\",\n dir = \"test/w0a01\",\n player_pos = { -1111.71, 49.99, -594.29 },\n player_mode = \"3D\",\n player_dir = { 0.0, 270.0, 0.0 },\n dead_line = -50000,\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\" },\n },\n -- mission test(w0c99)\u30c7\u30b6\u30a4\u30f3\u30c6\u30b9\u30c8\u30de\u30c3\u30d7\n {\n name = \"w0c99\",\n dir = \"test/w0c99\",\n player_pos = { 0, 0, 0 },\n player_dir = { 0.0, -180.0, 0.0 },\n dead_line = -500,\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\", \"asteroid\" },\n },\n -- mission test(w0c99)\u64ae\u5f71\u6240\n {\n name = \"w0c99_2\",\n dir = \"test/w0c99\",\n player_pos = { -1200, 0, -1200 },\n player_dir = { 0.0, -180.0, 0.0 },\n dead_line = -500,\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\", \"asteroid\" },\n },\n -- mission test(w0c98)\u30b7\u30a7\u30fc\u30c0\u30fc\u30c6\u30b9\u30c8\u30de\u30c3\u30d7\n {\n name = \"w0c98\",\n dir = \"test/w0c98\",\n player_pos = { 0, 0, 0 },\n player_dir = { 0.0, -180.0, 0.0 },\n dead_line = -500,\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\", \"asteroid\" },\n },\n -- mission test(w0c97)\u30c7\u30b6\u30a4\u30f3\u30c6\u30b9\u30c8\u30de\u30c3\u30d72(\u6697\u3044\u9762)\n {\n name = \"w0c97\",\n dir = \"test/w0c97\",\n player_pos = { 0, 0, 0 },\n player_dir = { 0.0, -180.0, 0.0 },\n dead_line = -500,\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\", \"asteroid\" },\n },\n -- mission test(w0c96)\u30b3\u30ea\u30b8\u30e7\u30f3\u30c6\u30b9\u30c8\u30de\u30c3\u30d7\n {\n name = \"w0c96\",\n dir = \"test/w0c96\",\n player_pos = { 0, 0, 0 },\n player_dir = { 0.0, -180.0, 0.0 },\n dead_line = -500,\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\", \"asteroid\" },\n },\n -- mission test(stg901)\n {\n name = \"stg901\",\n dir = \"test/stg901\",\n player_pos = { 0, 0, 0 },\n player_dir = { 0.0, 0.0, 0.0 },\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\", \"asteroid\" },\n --\u3010\u30b9\u30b3\u30a2\u8a2d\u5b9a\u9818\u57df\u3011\n score = {\n rank = {\n 800000, -- S rank\n 700000, -- A rank\n 450000, -- B rank\n 200000, -- C rank\n },\n time_basis = 10000,\n time_down = 500,\n\n no_miss = {\n 100000,\n 50000,\n 25000,\n 10000,\n 0,\n },\n },\n },\n -- mission test(stg811)\n {\n name = \"stg811\",\n dir = \"test/stg811\",\n player_pos = { -0.65, 0.09, 50.8 },\n player_dir = { 0.0, 180.0, 0.0 },\n },\n -- mission test(stg812)\n {\n name = \"stg812\",\n dir = \"test/stg812\",\n player_pos = { 0, -50, -60 },\n player_dir = { 0.0, 180.0, 0.0 },\n },\n -- mission test(stg813)\n {\n name = \"stg813\",\n dir = \"test/stg813\",\n player_pos = { 4000.0, -2500.0, 7050.0 },\n player_dir = { 0.0, 180.0, 0.0 },\n },\n -- mission test(stg814)\n {\n name = \"stg814\",\n dir = \"test/stg814\",\n player_pos = { 0,0.5, 55 },\n player_dir = { 0.0, 180.0, 0.0 },\n },\n -- mission test(stg815)\n {\n name = \"stg815\",\n dir = \"test/stg815\",\n player_pos = { -7677.16, 841.78, 50.83 },\n player_dir = { 0.0, 180.0, 0.0 },\n },\n -- mission test(stg816)\n {\n name = \"stg816\",\n dir = \"test/stg816\",\n player_pos = { 1.92, -32.61, 237.17 },\n player_mode = \"2D\",\n player_dir = { 0.0, 90.0, 0.0 },\n dead_line = -50000,\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\" },\n },\n -- mission test(stg817)\n {\n name = \"stg817\",\n dir = \"test/stg817\",\n player_pos = { 0.04, 466.24, -6.63 },\n player_mode = \"3D\",\n player_dir = { 0.0, 180.0, 0.0 },\n dead_line = -50000,\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\" },\n },\n -- mission test(stg818)\n {\n name = \"stg818\",\n dir = \"test/stg818\",\n player_pos = { 3.47, 320.30, -1.62 },\n player_mode = \"3D\",\n player_dir = { 0.0, 180.0, 0.0 },\n dead_line = -50000,\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\" },\n },\n -- mission test(stg819)\n {\n name = \"stg819\",\n dir = \"test/stg819\",\n player_pos = { 1240.18, 1923.53, -15.45 },\n player_mode = \"3D\",\n player_dir = { 0.0, 180.0, 0.0 },\n dead_line = -50000,\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\" },\n },\n -- mission test(stg820)\n {\n name = \"stg820\",\n dir = \"test/stg820\",\n player_pos = { 0, 0, 0 },\n player_dir = { 0.0, 0.0, 0.0 },\n player_mode = \"2D\",\n },\n -- mission test(stg821)\n {\n name = \"stg821\",\n dir = \"test/stg821\",\n player_pos = { 80, 72, 0 },\n player_dir = { 0.0, 90.0, 0.0 },\n player_mode = \"2D\",\n },\n -- mission test(stg822)\n {\n name = \"stg822\",\n dir = \"test/stg822\",\n player_pos = { 0, 0, 0 },\n player_dir = { 0.0, 180.0, 0.0 },\n player_mode = \"2D\",\n },\n -- mission test(stg823)\n {\n name = \"stg823\",\n dir = \"test/stg823\",\n player_pos = { 1393.38, 42.29, 774.04 },\n player_dir = { 0.0, 180.0, 0.0 },\n player_mode = \"SKYCHASE\",\n },\n -- mission test(w0a03)\n {\n name = \"w0a03\",\n dir = \"test/w0a03\",\n player_pos = { -267.95, 905.79, -2215.56 },\n player_dir = { 0.0, 0.0, 0.0 },\n player_mode = \"3D\",\n },\n -- mission test(w0a04)\n {\n name = \"w0a04\",\n dir = \"test/w0a04\",\n player_pos = { 0.0, 0.0, 0.0 },\n player_dir = { 0.0, 0.0, 0.0 },\n player_mode = \"2D\",\n },\n -- mission test(w0a05)\n {\n name = \"w0a05\",\n dir = \"test/w0a05\",\n player_pos = { -1.21, -87.9, 24.48 },\n player_dir = { 0.0, 180.0, 0.0 },\n player_mode = \"3D\",\n },\n -- mission test(w0a06)\n {\n name = \"w0a06\",\n dir = \"test/w0a06\",\n player_pos = { 721.07, 994.32, -6.55 },\n player_dir = { 0.0, 180.0, 0.0 },\n player_mode = \"2D\",\n },\n -- mission test(w0a07)\n {\n name = \"w0a07\",\n dir = \"test/w0a07\",\n player_pos = { 51.82, 40.93, -74.29 },\n player_dir = { 0.0, 0.0, 0.0 },\n player_mode = \"2D\",\n },\n -- mission test(w0a08)\n {\n name = \"w0a08\",\n dir = \"test/w0a08\",\n player_pos = { 514.80, 648.50, 4219.32 },\n player_dir = { 0.0, 180.0, 0.0 },\n player_mode = \"3D\",\n },\n -- mission test(w0a09)\n {\n name = \"w0a09\",\n dir = \"test/w0a09\",\n player_pos = { -5694.29, 672.14, -295.32 },\n player_dir = { 0.0, 0.0, 0.0 },\n player_mode = \"2D\",\n },\n -- mission test(w0a10)\n {\n name = \"w0a10\",\n dir = \"test/w0a10\",\n player_pos = { -0.0, 50.0, 450.00 },\n player_dir = { 0.0, 180.0, 0.0 },\n player_mode = \"3D\",\n },\n -- mission test(w0a11)\n {\n name = \"w0a11\",\n dir = \"test/w0a11\",\n player_pos = { 0.0, -32.86, 41.54 },\n player_dir = { 0.0, 0.0, 0.0 },\n player_mode = \"2D\",\n },\n -- mission test(w0a12)\n {\n name = \"w0a12\",\n dir = \"test/w0a12\",\n player_pos = { 0.0, 510.0, 151.0 },\n player_mode = \"TOP\",\n player_dir = { 0.0, 0.0, 0.0 },\n },\n -- mission test(w0a13)\n {\n name = \"w0a13\",\n dir = \"test/w0a13\",\n player_pos = { -331.97, 600.15, -260.02 },\n player_dir = { 0.0, 180.0, 0.0 },\n player_mode = \"2D\",\n },\n -- mission test(w0a14)\n {\n name = \"w0a14\",\n dir = \"test/w0a14\",\n player_pos = { -2624.82, -1925.34, 7370.24 },\n player_dir = { 0.0, 180.0, 0.0 },\n player_mode = \"3D\",\n },\n -- mission test(w0a15)\n {\n name = \"w0a15\",\n dir = \"test/w0a15\",\n player_pos = { 500, -47, -15 },\n player_dir = { 0.0, 180.0, 0.0 },\n player_mode = \"3D\",\n },\n -- mission test(w0a16)\n {\n name = \"w0a16\",\n dir = \"test/w0a16\",\n player_pos = { 218.12, -501.53, -613.49 },\n player_dir = { 0.0, 0.0, 0.0 },\n player_mode = \"2D\",\n },\n -- mission test(stg902)\n {\n name = \"stg902\",\n dir = \"test/stg902\",\n player_pos = { 0, 0, 0 },\n player_dir = { 0.0, -180.0, 0.0 },\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\", \"asteroid\" },\n },\n -- mission test(w0a90)\n {\n name = \"w0a90\",\n dir = \"test/w0a90\",\n player_pos = { 0, 0, 0 },\n player_dir = { 0.0, 90.0, 0.0 },\n player_mode = \"2D\",\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\", \"asteroid\" },\n },\n -- mission test(stg978)\n {\n name = \"stg978\",\n dir = \"test/stg978\",\n player_pos = { 8147, -360, -18974 },\n player_mode = \"3D\",\n player_dir = { 0.0, 180.0, 0.0 },\n dead_line = -50000,\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\" },\n },\n -- mission test(stg981)\n {\n name = \"stg981\",\n dir = \"test/stg981\",\n player_pos = { 0, 5.00, -37.43 },\n player_mode = \"2D\",\n player_dir = { 0.0, 180.0, 0.0 },\n dead_line = -50000,\n phantoms = { \"laser\", \"drill\", \"spike\", \"rocket\", \"rodeo\", \"astro\", \"puzzle\", \"asteroid\" },\n },\n -- mission test(stg985)\n {\n name = \"stg985\",\n dir = \"test/stg985\",\n player_pos = { 1065.00, 49.91, -594.88 },\n player_mode = \"3D\",\n player_dir = { 0.0, 270.0, 0.0 },\n dead_line = -50000,\n },\n -- mission test(stg988)\n {\n name = \"stg988\",\n dir = \"test/stg988\",\n player_pos = { -1111.71, 49.99, -594.29 },\n player_mode = \"3D\",\n player_dir = { 0.0, 270.0, 0.0 },\n dead_line = -50000,\n },\n -- mission test(stg989)\n {\n name = \"stg989\",\n dir = \"test/stg989\",\n player_pos = { 0, -138.52, -301.15 },\n player_mode = \"2D\",\n player_dir = { 0.0, 180.0, 0.0 },\n dead_line = -50000,\n },\n },\n },\n}\n
Empty folders can be found for some of the test levels in the raw folder found within the Wii U release of the game. These folders are listed below.
raw\n\u251c\u2500\u2500 test\n\u2502 \u251c\u2500\u2500 stg811\n\u2502 \u251c\u2500\u2500 stg812\n\u2502 \u251c\u2500\u2500 stg813\n\u2502 \u251c\u2500\u2500 stg814\n\u2502 \u251c\u2500\u2500 stg815\n\u2502 \u251c\u2500\u2500 stg817\n\u2502 \u251c\u2500\u2500 stg818\n\u2502 \u251c\u2500\u2500 stg819\n\u2502 \u251c\u2500\u2500 stg820\n\u2502 \u251c\u2500\u2500 stg821\n\u2502 \u251c\u2500\u2500 stg822\n\u2502 \u251c\u2500\u2500 stg823\n\u2502 \u251c\u2500\u2500 stg901\n\u2502 \u251c\u2500\u2500 stg902\n\u2502 \u251c\u2500\u2500 stg978\n\u2502 \u251c\u2500\u2500 stg981\n\u2502 \u251c\u2500\u2500 stg985\n\u2502 \u251c\u2500\u2500 stg988\n\u2502 \u251c\u2500\u2500 stg989\n\u2502 \u251c\u2500\u2500 w0a01\n\u2502 \u251c\u2500\u2500 w0a02\n\u2502 \u251c\u2500\u2500 w0a03\n\u2502 \u251c\u2500\u2500 w0a04\n\u2502 \u251c\u2500\u2500 w0a05\n\u2502 \u251c\u2500\u2500 w0a06\n\u2502 \u251c\u2500\u2500 w0a07\n\u2502 \u251c\u2500\u2500 w0a08\n\u2502 \u251c\u2500\u2500 w0a09\n\u2502 \u251c\u2500\u2500 w0a10\n\u2502 \u251c\u2500\u2500 w0a11\n\u2502 \u251c\u2500\u2500 w0a12\n\u2502 \u251c\u2500\u2500 w0a13\n\u2502 \u251c\u2500\u2500 w0a14\n\u2502 \u251c\u2500\u2500 w0a15\n\u2502 \u251c\u2500\u2500 w0a16\n\u2502 \u251c\u2500\u2500 w0a90\n\u2502 \u251c\u2500\u2500 w0a96\n\u2502 \u251c\u2500\u2500 w0a97\n\u2502 \u251c\u2500\u2500 w0a98\n\u2502 \u251c\u2500\u2500 w0a99\n
"},{"location":"discoveries/swa/ps3/install/","title":"Leftover Install Assets","text":"There are assets leftover from an installation process. The files and folder related to it are listed below.
USRDIR\n\u251c\u2500\u2500 Install\n\u2502 \u251c\u2500\u2500 install_001.dds\n\u2502 \u251c\u2500\u2500 install_002.dds\n\u2502 \u251c\u2500\u2500 install_003.dds\n\u2502 \u251c\u2500\u2500 install_004.dds\n\u2502 \u251c\u2500\u2500 install_005.dds\n\u2502 \u251c\u2500\u2500 install_006.dds\n\u2502 \u251c\u2500\u2500 install_007.dds\n\u2502 \u2514\u2500\u2500 install_008.dds\n\u251c\u2500\u2500 Install.ar.00\n\u251c\u2500\u2500 Install.arl\n\u251c\u2500\u2500 install.files.xml\n\u2514\u2500\u2500 install.mounts.xml\n
"},{"location":"discoveries/swa/ps3/install/#install-folder","title":"Install Folder","text":"Within the disk contains a folder named Install, which contains 8 images of several characters in Sonic Unleashed. This folder is also present in the PC port of Sonic Generations, inside bb2.cpk
.
"},{"location":"discoveries/swa/ps3/install/#install-archive","title":"Install Archive","text":"
There is also UI (ui_install.yncp
) that would have shown during the install process. Despite only being in the PlayStation 3 version of the game, it uses the controller prompts texture from the Xbox 360 version of the game.
Please note that this was recorded using a WIP build of Shuriken, so the preview may not be 100% accurate to how it would look in-game.
"},{"location":"discoveries/swa/ps3/install/#playstation-3s-icon0-and-pic1","title":"PlayStation 3's ICON0 and PIC1","text":"In install.files.xml
there's information for the game to take icons/hdd_icon0.png
and icons/hdd_pic1.png
, and rename them to ICON0.png
and PIC1.png
respectively.
<System Name=\"icons/hdd_icon0.png\" To=\"ICON0.PNG\"/><System Name=\"icons/hdd_pic1.png\" To=\"PIC1.PNG\"/>\n
"},{"location":"docs/general/hson/","title":"HSON Format","text":"The Hedgehog Set Object Notation Format (\"HSON\") is a custom JSON-based file format designed collaboratively by Dar\u00edo, Radfordhound, \u0110e\u00e4Th, Skyth, and Sajid to represent object placement in a \"universal\" (non-game/editor-specific) way.
It was designed with the following principles in-mind:
The official JSON Schema for the HSON Format can be found at the hson-schema GitHub repository.
It's useful (but not necessary) to validate .hson files against this schema in editors which support this feature, as doing so allows you to have autocompletion, descriptions of each property, and data validation.
To validate all .hson files against the schema in your editor of choice, refer to the instructions in the README from the above repository.
To manually validate against the schema on a per-file basis, include the following line at the top-level of your HSON file(s), before the HSON file format version parameter.
\"$schema\": \"https://raw.githubusercontent.com/hedge-dev/hson-schema/main/hson.schema.json\",\n
If writing tooling that generates HSON, consider having your tooling write this line to generated files.
"},{"location":"docs/general/hson/#implementations","title":"Implementations","text":"As of the time of writing, the following known implementations exist:
"},{"location":"docs/general/hson/#csharp","title":"C#","text":"The following is an example file in the HSON Format, which represents a \"project\" called \"Sample Project\" that contains 5 objects.
This example file will be referenced periodically throughout the format specification.
{\n \"$schema\": \"https://raw.githubusercontent.com/hedge-dev/hson-schema/main/hson.schema.json\",\n \"version\": 1,\n \"metadata\": {\n \"name\": \"Sample Project\",\n \"author\": \"Takashi Iizuka, Morio Kishimoto\",\n \"date\": \"2023-02-09T22:38:42Z\",\n \"version\": \"1.0.0\",\n \"description\": \"green hill is looking a lot more like sand hill rn\",\n \"myCustomEditor\": {\n \"viewportTabIndex\": 0\n }\n },\n \"objects\": [\n {\n \"id\": \"{fd3e6bc9-5d2d-4da8-a22d-f88e709b3e48}\",\n \"name\": \"Spring #1\",\n \"type\": \"Spring\",\n \"position\": [ 100.0, 0.0, 0.0 ],\n \"rotation\": [ 0.0, 0.0, 0.0, 1.0 ],\n \"scale\": [ 1.0, 1.0, 1.0 ],\n \"isEditorVisible\": true,\n \"isExcluded\": false,\n \"parameters\": {\n \"tags\": {\n \"RangeSpawning\": {\n \"rangeIn\": 100.0,\n \"rangeOut\": 20.0\n }\n },\n \"visual\": \"Normal\",\n \"firstSpeed\": 420,\n \"outOfControl\": 2.5,\n \"isHorming\": true,\n \"actions\": [\n {\n \"action\": \"On\",\n \"objectIds\": [\n \"{2737e92f-4842-46cb-a590-e074f7b882f0}\",\n \"{38285a58-9969-4c5f-a649-b91440962a71}\"\n ],\n \"delayTime\": 0.5\n },\n {\n \"action\": \"Off\",\n \"objectIds\": [],\n \"delayTime\": 0.0\n },\n {\n \"action\": \"Off\",\n \"objectIds\": [],\n \"delayTime\": 0.0\n }\n ],\n }\n },\n {\n \"type\": \"Ring\"\n },\n {\n \"id\": \"{2737e92f-4842-46cb-a590-e074f7b882f0}\",\n \"parentId\": \"{fd3e6bc9-5d2d-4da8-a22d-f88e709b3e48}\",\n \"type\": \"Ring\",\n \"position\": [ 0.0, 1.0, 0.0 ],\n \"parameters\": {\n \"visibility\": \"Visible\",\n \"respawnTime\": 0.0\n },\n \"myCustomValue\": 893.5,\n \"myCustomEditor\": {\n \"presetPlacementType\": \"LINE\",\n \"presetPlacementDistance\": 1.0\n }\n },\n {\n \"id\": \"{38285a58-9969-4c5f-a649-b91440962a71}\",\n \"instanceOf\": \"{2737e92f-4842-46cb-a590-e074f7b882f0}\",\n \"position\": [ 0.0, 2.0, 0.0 ],\n \"parameters\": {\n \"respawnTime\": 0.5\n }\n },\n {\n \"id\": \"{81fdcaff-aa37-4c47-a665-5b6265a6b780}\",\n \"parentId\": \"{00000000-0000-0000-0000-000000000000}\",\n \"type\": \"DashPanel\"\n }\n ]\n}\n
"},{"location":"docs/general/hson/#format-specification","title":"Format Specification","text":"What follows is a specification of all standard properties supported by the HSON Format.
Important
All of the following properties are OPTIONAL, unless otherwise specified.
"},{"location":"docs/general/hson/#1-version","title":"1. version","text":"Info
number
This value is REQUIRED to be present in all HSON files.
The version of the HSON format being used by this file. It is represented as a number that is restricted in the following ways:
1.5
would not be allowed, but 1.0
or 1
are).Because of these restrictions, it is valid for tooling to parse this value into an unsigned int
.
Currently, version 1 is the latest version.
"},{"location":"docs/general/hson/#2-metadata","title":"2. metadata","text":"Info
object
Metadata for the project represented by this file.
It is intended to be used purely for tooling display purposes.
metadata is represented as a JSON object
consisting of the following properties:
Info
string
The name of the project represented by this file.
"},{"location":"docs/general/hson/#22-author","title":"2.2. author","text":"Info
string
The author(s) of the project represented by this file.
If the project has multiple authors, we recommend writing each author's name with a comma and space separating them, like so:
Example
\"author\": \"Me, Myself, I\"\n
With that said, this is a recommendation and by no means a requirement.
Tooling should treat this as an arbitrary string in no particular format.
"},{"location":"docs/general/hson/#23-date","title":"2.3. date","text":"Info
string
The date/time the project was created at, represented as a string in the RFC 3339 format (a similar standard to ISO 8601).
It is invalid to represent the date using any other format.
This limitation makes parsing dates in tooling a lot easier.
Getting the current DateTime in RFC 3339 format programmatically
Feel free to copy-paste any of these code snippets and do what you want with them.
C#:
public static string GetRFC3339Time()\n{\n return DateTime.UtcNow.ToString(\"yyyy-MM-ddTHH:mm:ssK\",\n CultureInfo.InvariantCulture);\n}\n
C++11:
#include <string>\n#include <stdexcept>\n#include <ctime>\n\nstd::string getRFC3339Time()\n{\n char buf[32]; // This is a few extra characters than should be necessary, just to be safe.\n const auto time = std::time(nullptr);\n const auto len = std::strftime(buf, sizeof(buf), \"%FT%TZ\", std::gmtime(&time));\n\n if (!len)\n {\n throw std::runtime_error(\"Failed to get RFC 3339 format time\");\n }\n\n return std::string(buf, len);\n}\n
C:
#include <time.h>\n\n/*\n Returns 0 on failure, or the number of bytes written\n into buf (not including the null terminator) on success.\n*/\nint getRFC3339Time(size_t bufSize, char* buf)\n{\n const time_t time = time(NULL);\n return strftime(buf, bufSize, \"%FT%TZ\", gmtime(&time));\n}\n
"},{"location":"docs/general/hson/#24-version","title":"2.4. version","text":"Info
string
The version number of the project, represented as a string.
How you want to version your project is up to you; these are all valid:
Examples
\"version\": \"1.0.0\"\n
\"version\": \"1\"\n
\"version\": \"beta release\"\n
Tooling should treat this as an arbitrary string in no particular format.
"},{"location":"docs/general/hson/#25-description","title":"2.5. description","text":"Info
string
The description of the project represented by this file.
"},{"location":"docs/general/hson/#3-objects","title":"3. objects","text":"Info
array
An array containing all of the objects contained within the project.
Each object is represented as a JSON object
consisting of the following properties:
Info
string
The UUID (aka GUID) of the object, represented as a case-insensitive string formatted like this: {11111111-2222-3333-4444-555555555555}
.
Note that it is enclosed in curly brackets; this is to make it clear that it is supposed to be parsed as a UUID, and NOT as a number.
The object's UUID is used to reference the object throughout the project.
It must be unique throughout the project; that is, no two objects within the same project are allowed to have the same UUID. That's what makes them UUIDs.
It also cannot be set to the following value: {00000000-0000-0000-0000-000000000000}
, as this value is reserved for \"null\" object references.
This property can be omitted (leaving the object without a specified UUID) if the object never needs to be referenced. This helps to save some space.
Tools are free to generate their own UUIDs for objects without a specified UUID, or to just think of the object as not having a UUID. Whichever is more convenient.
Examples
Valid UUID (lowercase):
\"id\": \"{fd3e6bc9-5d2d-4da8-a22d-f88e709b3e48}\"\n
Valid UUID (uppercase):
\"id\": \"{FD3E6BC9-5D2D-4DA8-A22D-F88E709B3E48}\"\n
Invalid UUID (no enclosing curly brackets):
\"id\": \"fd3e6bc9-5d2d-4da8-a22d-f88e709b3e48\"\n
Invalid UUID (not a UUID):
\"id\": \"{2}\"\n
Invalid UUID (the special \"null\" UUID value is not valid to use as the object's id):
\"id\": \"{00000000-0000-0000-0000-000000000000}\"\n
Valid object references (the special \"null\" UUID value is valid to use in object references):
\"parentId\": \"{00000000-0000-0000-0000-000000000000}\",\n\"instanceOf\": \"{00000000-0000-0000-0000-000000000000}\"\n
"},{"location":"docs/general/hson/#32-name","title":"3.2. name","text":"Info
string
The name of the object. This is an arbitrary string that can be anything you want.
It is intended to be used purely for tooling display purposes.
"},{"location":"docs/general/hson/#33-parentid","title":"3.3. parentId","text":"Info
string
The id of this object's parent object, or a null UUID.
If specified as a valid, non-null UUID, this object is a child of the object with the given UUID, meaning that the object's transform (represented via position
, rotation
, and scale
) is relative to the parent's transform (which is relative to its parent's transform, and so on).
Otherwise, if it is not specified, or is specified as a null UUID, this object has no parent object, and the transform is global.
Parenting Example
{\n \"id\": \"{2737e92f-4842-46cb-a590-e074f7b882f0}\",\n \"parentId\": \"{fd3e6bc9-5d2d-4da8-a22d-f88e709b3e48}\",\n \"type\": \"Ring\",\n \"position\": [ 0.0, 1.0, 0.0 ],\n \"parameters\": {\n \"visibility\": \"Visible\",\n \"respawnTime\": 0.0\n },\n \"myCustomValue\": 893.5,\n \"myCustomEditor\": {\n \"presetPlacementType\": \"LINE\",\n \"presetPlacementDistance\": 1.0\n }\n}\n
In this snippet from the example file, the object has specified a position of [ 0.0, 1.0, 0.0 ]
, and a parentId of {fd3e6bc9-5d2d-4da8-a22d-f88e709b3e48}
, which means that its transform is local to the transform of the object which uses that UUID (not included in this snippet).
This parent object has a position of [ 100.0, 0.0, 0.0 ]
.
So, the above object's global position is [ 100.0, 1.0, 0.0 ]
.
Null Reference Example
{\n \"id\": \"{81fdcaff-aa37-4c47-a665-5b6265a6b780}\",\n \"parentId\": \"{00000000-0000-0000-0000-000000000000}\",\n \"type\": \"DashPanel\"\n}\n
In this snippet from the example file, the object has specified a parentId of {00000000-0000-0000-0000-000000000000}
(the special UUID null value), which is equivalent to not specifying a parentId. This means that this object has no parent.
Info
string
The id of the object to be instanced, or a null UUID.
If specified as a valid, non-null UUID, this object is an instance of the object with the given UUID, meaning that it will inherit ALL unspecified properties from the instanced object, with the notable exception of the id
property, instead of falling back to the usual defaults.
Note that it will NOT affect the object's specified properties; these will effectively \"override\" any properties taken from the instanced object.
Otherwise, if it is not specified, or is specified as a null UUID, this object is not an instance.
Example
{\n \"id\": \"{2737e92f-4842-46cb-a590-e074f7b882f0}\",\n \"parentId\": \"{fd3e6bc9-5d2d-4da8-a22d-f88e709b3e48}\",\n \"type\": \"Ring\",\n \"position\": [ 0.0, 1.0, 0.0 ],\n \"parameters\": {\n \"visibility\": \"Visible\",\n \"respawnTime\": 0.0\n },\n \"myCustomValue\": 893.5,\n \"myCustomEditor\": {\n \"presetPlacementType\": \"LINE\",\n \"presetPlacementDistance\": 1.0\n }\n},\n{\n \"id\": \"{38285a58-9969-4c5f-a649-b91440962a71}\",\n \"instanceOf\": \"{2737e92f-4842-46cb-a590-e074f7b882f0}\",\n \"position\": [ 0.0, 2.0, 0.0 ],\n \"parameters\": {\n \"respawnTime\": 0.5\n }\n}\n
In this snippet from the example file, the second listed object (UUID: 38285a58-9969-4c5f-a649-b91440962a71
) is an instance of the first listed object (UUID: 2737e92f-4842-46cb-a590-e074f7b882f0
).
As such, it will inherit all of the unspecified properties from the first object, including the parentId
, type
, myCustomValue
, and myCustomEditor
properties, as well as the visibility
parameter.
It will NOT, however, inherit the specified properties, including the id
, instanceOf
, and position
properties, as well as the respawnTime
parameter.
This means that the second object in the above snippet will be equivalent to the following object:
{\n \"id\": \"{38285a58-9969-4c5f-a649-b91440962a71}\",\n \"parentId\": \"{fd3e6bc9-5d2d-4da8-a22d-f88e709b3e48}\",\n \"type\": \"Ring\",\n \"instanceOf\": \"{2737e92f-4842-46cb-a590-e074f7b882f0}\",\n \"position\": [ 0.0, 2.0, 0.0 ],\n \"parameters\": {\n \"visibility\": \"Visible\",\n \"respawnTime\": 0.5\n },\n \"myCustomValue\": 893.5,\n \"myCustomEditor\": {\n \"presetPlacementType\": \"LINE\",\n \"presetPlacementDistance\": 1.0\n }\n}\n
As you can see, this is a simple, yet powerful system that allows for many possibilities.
Note
UUIDs have a special exception; they never get inherited from the instanced object.
For example:
{\n \"id\": \"{AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA}\",\n \"type\": \"Ring\"\n},\n{\n \"instanceOf\": \"{AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA}\"\n}\n
The second object listed in the above example will inherit all properties from the first object, except for the id
.
This is due to the fact that every valid object must have its own unique UUID.
"},{"location":"docs/general/hson/#35-type","title":"3.5. type","text":"Info
string
This value is REQUIRED to be present, unless this object is an instance of another object, in which case, it is optional, as the type will just be taken from the instanced object.
The type of the object (e.g. \"Spring\", \"Ring\", etc.).
Note that this value is not game-specific and can be set to anything, with one exception: it is not valid for type to be an empty string.
"},{"location":"docs/general/hson/#36-position","title":"3.6. position","text":"Info
array
[ 0.0, 0.0, 0.0 ]
The position of the object within 3D space. Represented as a three-dimensional array of number
s, representing a vector3 using Y-Up right-handed coordinates (X-right, Y-up, and Z-backwards), and meters as its units.
If this object is a child of another object, this position value is local to the transform of the parent object (which is local to the transform of its parent, and so on).
Otherwise, this position value is global.
If this property is not specified, the value [ 0.0, 0.0, 0.0 ]
will be used as a fallback.
Info
array
[ 0.0, 0.0, 0.0, 1.0 ]
The rotation of the object within 3D space. Represented as a four-dimensional array of number
s, representing a quaternion using Y-up right-handed coordinates.
If this object is a child of another object, this rotation value is local to the transform of the parent object (which is local to the transform of its parent, and so on).
Otherwise, this rotation value is global.
If this property is not specified, the value [ 0.0, 0.0, 0.0, 1.0 ]
will be used as a fallback.
Note
Rotation values must be represented as a four-dimensional array representing a quaternion.
It is not valid to represent rotation values using other methods, such as by using three-dimensional arrays representing euler angles or binary angle measurement (BAMS).
When dealing with formats that utilize these (or other) methods, tooling must convert to/from quaternions as necessary.
"},{"location":"docs/general/hson/#38-scale","title":"3.8. scale","text":"Info
array
[ 1.0, 1.0, 1.0 ]
The scale of the object within 3D space. Represented as a three-dimensional array of number
s, representing a vector3 using Y-up right-handed coordinates (X-right, Y-up, and Z-backwards), and meters as its units.
If this object is a child of another object, this scale value is local to the transform of the parent object (which is local to the transform of its parent, and so on).
Otherwise, this scale value is global.
If this property is not specified, the value [ 1.0, 1.0, 1.0 ]
will be used as a fallback.
Info
boolean
true
Whether the object should be visible in the editor's 3D display (as applicable). Note that this is purely for editors, and has no effect on whether the object is visible in-game.
When converting from HSON to game-specific file(s), tooling should ignore this value.
If this property is not specified, the value true
will be used as a fallback.
Info
boolean
false
Whether the object should be excluded from game data.
If specified as true
, editors should (as applicable) hide the object from 3D display, but still show it in the object hierarchy as a disabled object, and provide a mechanism for users to un-exclude it.
When converting from HSON to a game format, tooling should treat excluded objects as if they do not exist, by simply not writing them to the resulting game-specific file(s).
If this property is not specified, the value false
will be used as a fallback.
Info
object
All named parameters specific to this object type and/or game. For example, the firstSpeed
parameter for objects of the Spring
type in Sonic Frontiers, which specifies the speed the object will launch the player off with.
This is the place to put all parameters that are specific to objects of the specified type
. It's also a great place to put game-specific parameters, such as object visibility ranges.
Any number of properties of any JSON type are allowed here, all of which are always entirely optional.
Tooling should treat this as an arbitrary list of key-value pairs, and provide some mechanism that allows the user to modify ALL of them as they please. It does not, however, have to provide a mechanism to add, remove, or edit the type of these parameters, as this may be undesirable depending on your use-case.
Tooling should not require any of these parameters to be present. When converting, tooling should, instead, lookup each parameter by its name as needed, and either error-out or fallback to a default value if a required parameter is not present.
Important
Note that the following are not allowed to be used as parameter names:
Info
The \"no forward slash\" rule allows tooling to access parameters by \"path\", like so:
\"parameters\": {\n \"tags\": {\n \"RangeSpawning\": {\n \"rangeIn\": 100.0,\n \"rangeOut\": 20.0\n }\n }\n}\n
tags/RangeSpawning/rangeIn
\": 100.0
tags/RangeSpawning/rangeIn
\": 20.0
In addition to all of the standard properties listed in the above specification, it is also completely valid to have your own custom properties which are not part of the specification, as demonstrated with the myCustomEditor
and myCustomValue
properties shown in the example file.
If you use custom properties, it's highly recommended to place them in a property named after your tooling, as demonstrated with the myCustomEditor
properties in the example.
\"myCustomEditor\": {\n \"presetPlacementType\": \"LINE\",\n \"presetPlacementDistance\": 1.0\n}\n
Doing this helps to reduce potential name collisions with custom properties from other tools, which might end up sharing the same name(s).
If your custom property is intended to be used across multiple tools (e.g. an unofficial \"extension\" to the HSON format), then it's recommended to ignore the above advice and just use the custom property directly instead, as demonstrated with the myCustomValue
property in the example.
\"myCustomValue\": 893.5,\n
Important
Note that the following are not allowed to be used as custom property names:
Info
The \"no forward slash\" rule allows tooling to access custom properties by \"path\", like so:
\"myCustomEditor\": {\n \"presetPlacementType\": \"LINE\",\n \"presetPlacementDistance\": 1.0\n}\n
myCustomEditor/presetPlacementType
\": \"LINE\"
myCustomEditor/presetPlacementDistance
\": 1.0
* Sonic Colors: Ultimate also makes use of a forked version of Godot 3.
"},{"location":"docs/hedgehog-engine/gamelist/#hedgehog-engine-2","title":"Hedgehog Engine 2","text":"Game Name Internal Name Mario & Sonic at the Rio 2016 Olympic Games unison Sonic Forces wars Olympic Games Tokyo 2020 - The Official Video Game musashi Mario & Sonic at the Tokyo 2020 Olympic Games rings (New) Sakura Wars arukas Puyo Puyo Tetris 2 tenpex Sonic Origins* hite Sonic Frontiers rangers Sonic Frontiers: Digital Art Book with Mini Digital Soundtrack rangers_artbook Sonic Origins Plus* hiteplus Sonic Superstars - Digital Artbook and mini-OST orion_artbook SONIC X SHADOW GENERATIONS** miller* Sonic Origins (Plus) also makes use of Retro Engine v5U.
** SONIC X SHADOW GENERATIONS also makes use of the Hedgehog Engine.
"},{"location":"docs/hedgehog-engine/blueblur/cameras/","title":"Camera Type List","text":""},{"location":"docs/hedgehog-engine/blueblur/cameras/#objcamera","title":"ObjCamera","text":"Camera Type Description ObjCameraFix Stays in its place while pointing at the coordinates defined in TargetPosition ObjCameraNormal The regular camera ObjCameraPan Has a different behaviour depending onCameraPositionMode
: 0
- Stays in its place while pointing at Sonic; 1
- ??? ObjCameraPoint Follows Sonic, while pointing at the camera object's location"},{"location":"docs/hedgehog-engine/blueblur/cameras/#camera-collisions","title":"Camera Collisions","text":"Collision Type Description ChangeVolumeCamera Changes the camera used to the one defined in Target
"},{"location":"docs/hedgehog-engine/blueblur/events/","title":"Event List","text":"Event ID Description 0 None 1 Open 2 Close 3 Kill 4 Generate 5 Get Off - (as in \"to get off from something\") 6 ON 7 OFF 8 Attack 9 Enable Attack Mode 10 Disable Attack Mode 11 Return to Position 12 Destroy 13 Start Moving 14 Reset 15 Ascend 16 Descend 17 Start 18 Invert 19 Clear 20 Play Audio 01 21 Play Audio 02"},{"location":"docs/hedgehog-engine/blueblur/levels/ids/","title":"Level ID Map","text":""},{"location":"docs/hedgehog-engine/blueblur/levels/ids/#mapping","title":"Mapping","text":"Stage IDs are defined like this:
{stage_short_name}{stage_type}\n
Example
cte200 -> City Escape Modern
cte100 -> City Escape Classic
cte101 -> City Escape Classic Mission 1
"},{"location":"docs/hedgehog-engine/blueblur/levels/ids/#levels","title":"Levels","text":"Level Short Name Level Name Location ghz Green Hilldisk/bb
cpz Chemical Plant disk/bb
ssz Sky Sanctuary disk/bb
sph Speed Highway disk/bb
cte City Escape disk/bb
ssh Seaside Hill disk/bb2
csc Crisis City disk/bb2
euc Rooftop Run disk/bb2
pla Planet Wisp disk/bb2
cnz Casino Night Zone disk/bb2
Level Type ID Level Type 100 Classic Sonic Stage 200 Modern Sonic Stage 10x
Classic Sonic Mission 20x
Modern Sonic Mission Note
There's some missions which have their own terrain, and missions which are using original level's terrain.
So, for first type of missions, you have mission's own terrain and #
file in the root of the CPK. For the second type of missions, you have original level's terrain and #
file in the root of the CPK.
Example: mission ghz103
has its own terrain, ghz101
and ghz102
doesn't have it, so they're using terrain from ghz100
.
disk/bb2
bde Death Egg Robot disk/bb
bsd Shadow disk/bb2
bpc Perfect Chaos disk/bb
bsl Silver disk/bb2
bne Egg Dragoon disk/bb
blb Time Eater disk/bb
"},{"location":"docs/hedgehog-engine/blueblur/levels/ids/#hub-worlds","title":"HUB Worlds","text":"HUB ID HUB Name Location fig000 Statue Room disk/bb2
pam000 Full White World disk/bb2
pam001 White World before completing Green Hill disk/bb2
"},{"location":"docs/hedgehog-engine/rangers/dlc/ids/","title":"DLC ID Map","text":"DLC Name Internal Name ID Steam App ID Adventurer's Treasure Box dlcrsv 0 2079300 Explorer's Treasure Box dlcddx 1 2079301 Monster Hunter Collaboration Pack dlcmhr 2 2089730 Sonic Emote (Koco) dlcslr 3 N/A Inugami Korone Collaboration DLC \"Gloves & Shoes\" dlcholoA 4 N/A Inugami Korone Collaboration DLC \"SE: Inugami Korone\" dlcholoB 5 N/A Inugami Korone Collaboration DLC \"Koronesuki\" dlcholoC 6 N/A Sonic Adventure 2 Shoes dlccrm 7 2089840 Holiday Cheer Suit dlcxmas 8 2089733"},{"location":"docs/hedgehog-engine/rangers/enemies/guardians/names/","title":"Guardian Internal Names","text":"This list identifies what each of the guardians are referred to within the game executable and its filesystem.
Name Internal Name Asura Ashura Caterpillar Charger Fortress Warship Ghost Tracker Ninja Blade Shark Skier Spider Spider Squid Flyer Strider Strider Sumo Sumo Tank Tyrant Tower Daruma"},{"location":"docs/hedgehog-engine/rangers/events/ids/","title":"Event ID Map","text":"Warning
This mapping is still a work in progress! Any additions and updates are greatly appreciated!
Event ID Event Description bo1120 sonic turns super against giganto bo1140 giganto second phase start bo1160 sonic murders giganto bo1180 sonic dies in giganto fight (run out of rings) chl1060 open zone timer mission chl1090 open zone timer mission chl1090 open zone timer mission chl1130 open zone timer mission chl1170 open zone timer mission chl1200 open zone timer mission ev0020 Prerecorded opening scene (Sonic and friends arrive to the Starfall Islands). Needs the level \"ui_gamemodeopening\" to be loaded to not crash. ga1010 sonic entering cyberspace for the first time ga1011 sonic returns from cyberspace ga1012 different version of ga1010 ga1013 different version of ga1011 ga1014 sonic re-enters cyberspace ga1016 sonic activates a fishing portal ga1017 sonic returns from a fishing portal ga1020 blue emerald vault now unlocked ga1021 cyan emerald vault now unlocked ga1022 green emerald vault now unlocked ga1023 purple emerald vault now unlocked ga1024 red emerald vault now unlocked ga1025 white emerald vault now unlocked ga1026 yellow emerald vault now unlocked ga1030 different version of ga1020 ga1031 different version of ga1021 ga1032 different version of ga1022 ga1033 different version of ga1023 ga1034 different version of ga1024 ga1035 different version of ga1025 ga1036 different version of ga1026 ga1040 vault key get ga1050 sonic opens blue emerald vault ga1051 sonic opens cyan emerald vault ga1052 sonic opens green emerald vault ga1053 sonic opens purple emerald vault ga1054 sonic opens red emerald vault ga1055 sonic opens white emerald vault ga1056 sonic opens yellow emerald vault ga1111 different version of ga1011 ga1113 different version of ga1011 ga1120 sonic takes the blue emerald ga1121 sonic takes the cyan emerald ga1122 sonic takes the green emerald ga1123 sonic takes the purple emerald ga1124 sonic takes the red emerald ga1125 sonic takes the white emerald ga1126 sonic takes the yellow emerald ga1130 faster version of ga1120 ga1131 faster version of ga1121 ga1132 faster version of ga1122 ga1133 faster version of ga1123 ga1134 faster version of ga1124 ga1135 faster version of ga1125 ga1136 faster version of ga1126 ga1205 tutorial bridge ga1210 bridge opens in ouranos (part of old kronos) ga1220 open the waterfall ga1225 pre-giganto ga1410 tutorial island enemies spawn in house ga1620 starfall event but on ouranos/rhea?"},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/","title":"RFL Binary Template Map","text":"Warning
This list is still a work in progress! Any additions and updates are greatly appreciated!
This list defines which binary templates to use specific RFL files, as well as what that file contains.
"},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#ambsoundparameter","title":"AmbSoundParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#arcadedata","title":"ArcadeData","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_1","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_1","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bakeboxparameter","title":"BakeBoxParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_2","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_2","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bakecameraparameter","title":"BakeCameraParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_3","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_3","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bakecameraparameterdata","title":"BakeCameraParameterData","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_4","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_4","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bgminfoparameter","title":"BGMInfoParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_5","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_5","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bossbitconfig","title":"BossBitConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_6","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_6","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bosscommonparameters","title":"BossCommonParameters","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_7","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_7","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bossdragonconfig","title":"BossDragonConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_8","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_8","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bossgiantconfig","title":"BossGiantConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_9","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_9","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bossknightconfig","title":"BossKnightConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_10","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_10","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bossrifleconfig","title":"BossRifleConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_11","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_11","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bossriflethresholdringsupplyparam","title":"BossRifleThresholdRingSupplyParam","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_12","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_12","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bossstatusparameterbase","title":"BossStatusParameterBase","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_13","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_13","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bosstheendconfig","title":"BossTheEndConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_14","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_14","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#bulletpatternsetparameters","title":"BulletPatternSetParameters","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_15","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_15","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#camerashaketable","title":"CameraShakeTable","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_16","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_16","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#captionparameter","title":"CaptionParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_17","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_17","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#contentparameter","title":"ContentParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_18","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_18","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#decoconfigparam","title":"DecoConfigParam","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_19","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_19","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#decotechparams","title":"DecoTechParams","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_20","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_20","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#devconfigparameters","title":"DevConfigParameters","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_21","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_21","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#dlcmhrbarbecueparameter","title":"DLCMhrBarbecueParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_22","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_22","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#dlcparameter","title":"DLCParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_23","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_23","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#effectrecordbasetable","title":"EffectRecordBaseTable","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_24","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_24","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#effectrecordtable","title":"EffectRecordTable","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_25","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_25","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#electriclineparameter","title":"ElectricLineParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_26","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_26","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemyaquaballconfig","title":"EnemyAquaballConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_27","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_27","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemyattackrecordbasetable","title":"EnemyAttackRecordBaseTable","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_28","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_28","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemyattackrecordtable","title":"EnemyAttackRecordTable","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_29","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_29","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemybirdconfig","title":"EnemyBirdConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_30","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_30","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemybommerconfig","title":"EnemyBommerConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_31","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_31","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemybubbleconfig","title":"EnemyBubbleConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_32","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_32","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemydefencerecordbasetable","title":"EnemyDefenceRecordBaseTable","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_33","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_33","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemydefencerecordtable","title":"EnemyDefenceRecordTable","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_34","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_34","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemydefenderconfig","title":"EnemyDefenderConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_35","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_35","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemyeggroboconfig","title":"EnemyEggRoboConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_36","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_36","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemyhelicopterconfig","title":"EnemyHelicopterConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_37","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_37","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemyjellymanconfig","title":"EnemyJellymanConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_38","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_38","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemyjumperconfig","title":"EnemyJumperConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_39","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_39","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemyjumpersubconfig","title":"EnemyJumperSubConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_40","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_40","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemylaserconfig","title":"EnemyLaserConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_41","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_41","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemyrobberconfig","title":"EnemyRobberConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_42","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_42","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemysniperconfig","title":"EnemySniperConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_43","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_43","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemytwisterconfig","title":"EnemyTwisterConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_44","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_44","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemyumbrellaconfig","title":"EnemyUmbrellaConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_45","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_45","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#enemywolfconfig","title":"EnemyWolfConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_46","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_46","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#extremeconfig","title":"ExtremeConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_47","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_47","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#fishingparameter","title":"FishingParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_48","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_48","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#fxcloudshadowparameter","title":"FxCloudShadowParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_49","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_49","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#fxdensitywindparameter","title":"FxDensityWindParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_50","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_50","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#fxdirectionalradialblurparameter","title":"FxDirectionalRadialBlurParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_51","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_51","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#fxfogparameter","title":"FxFogParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_52","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_52","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#fxfxaaparameter","title":"FxFXAAParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_53","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_53","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#fxheightmapparameter","title":"FxHeightMapParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_54","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_54","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#fxplanarprojectionshadowparameter","title":"FxPlanarProjectionShadowParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_55","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_55","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#fxsmaaparameter","title":"FxSMAAParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_56","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_56","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#gamedata","title":"GameData","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_57","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_57","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#gameexpparameter","title":"GameExpParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_58","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_58","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#gamegrassinteractionparameter","title":"GameGrassInteractionParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_59","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_59","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#gamegrindlodparameter","title":"GameGrindLodParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_60","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_60","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#gamehitstopparameter","title":"GameHitStopParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_61","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_61","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#gameskillparameter","title":"GameSkillParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_62","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_62","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#gimmickcamerasimpleparam","title":"GimmickCameraSimpleParam","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_63","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_63","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#gismoconfigdesigndata","title":"GismoConfigDesignData","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_64","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_64","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#gismoconfigplandata","title":"GismoConfigPlanData","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_65","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_65","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#graphicsparameters","title":"GraphicsParameters","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_66","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_66","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#hackingenemyparameters","title":"HackingEnemyParameters","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_67","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_67","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#heightfieldconfig","title":"HeightFieldConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_68","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_68","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#islandparameter","title":"IslandParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_69","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_69","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#meteorshowerparameter","title":"MeteorShowerParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_70","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_70","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibossashuraconfig","title":"MiniBossAshuraConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_71","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_71","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibossbladeconfig","title":"MiniBossBladeConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_72","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_72","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibosschargerattackparam","title":"MiniBossChargerAttackParam","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_73","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_73","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibosschargercamerashake","title":"MiniBossChargerCameraShake","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_74","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_74","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibosschargerconfig","title":"MiniBossChargerConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_75","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_75","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibossdarumaconfig","title":"MiniBossDarumaConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_76","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_76","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibossflyerconfig","title":"MiniBossFlyerConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_77","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_77","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibossskierconfig","title":"MiniBossSkierConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_78","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_78","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibossspiderconfig","title":"MiniBossSpiderConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_79","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_79","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibossstriderconfig","title":"MiniBossStriderConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_80","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_80","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibosssumoconfig","title":"MiniBossSumoConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_81","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_81","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibosstrackerconfig","title":"MiniBossTrackerConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_82","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_82","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibosstyrantconfig","title":"MiniBossTyrantConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_83","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_83","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#minibosswarshipconfig","title":"MiniBossWarshipConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_84","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_84","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#monologueparameters","title":"MonologueParameters","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_85","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_85","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#navmeshparameter","title":"NavMeshParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_86","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_86","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#needlefxscenedata","title":"NeedleFxSceneData","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_87","title":"Filename Format","text":"{stagename}.rfl
Examplew1r03.rfl
"},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_87","title":"Usage","text":"Controls the stage's scene data
"},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#noisepresetparameters","title":"NoisePresetParameters","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_88","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_88","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#obj3dpuzzleblockconfig","title":"Obj3DPuzzleBlockConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_89","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_89","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objbattingmachineconfig","title":"ObjBattingMachineConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_90","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_90","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objbirdlaserconfig","title":"ObjBirdLaserConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_91","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_91","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objbossringsupplyconfig","title":"ObjBossRingSupplyConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_92","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_92","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objcggconfig","title":"ObjCGGConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_93","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_93","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objeffectdebrisparameters","title":"ObjEffectDebrisParameters","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_94","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_94","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objhackingplayermachineconfig","title":"ObjHackingPlayerMachineConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_95","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_95","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objhoverstoneconfig","title":"ObjHoverStoneConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_96","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_96","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objkodamaescortparameter","title":"ObjKodamaEscortParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_97","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_97","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objkodamaquestparameter","title":"ObjKodamaQuestParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_98","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_98","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objlasermirrorconfig","title":"ObjLaserMirrorConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_99","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_99","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objmowingparameter","title":"ObjMowingParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_100","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_100","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objnormalfloorconfig","title":"ObjNormalFloorConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_101","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_101","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objquestboxparameter","title":"ObjQuestBoxParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_102","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_102","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objrotatablestatueconfig","title":"ObjRotatableStatueConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_103","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_103","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objrotatabletombstoneconfig","title":"ObjRotatableTombStoneConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_104","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_104","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objshotguntouchparam","title":"ObjShotGunTouchParam","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_105","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_105","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objskiermissileconfig","title":"ObjSkierMissileConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_106","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_106","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objstriderbulletconfig","title":"ObjStriderBulletConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_107","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_107","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objstridergrindrailconfig","title":"ObjStriderGrindRailConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_108","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_108","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objstriderlaserconfig","title":"ObjStriderLaserConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_109","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_109","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objsumopoleconfig","title":"ObjSumoPoleConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_110","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_110","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objsumopuckconfig","title":"ObjSumoPuckConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_111","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_111","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objtheendplayermachineconfig","title":"ObjTheEndPlayerMachineConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_112","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_112","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objtimeballconfig","title":"ObjTimeBallConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_113","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_113","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objwarshipdashringconfig","title":"ObjWarshipDashRingConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_114","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_114","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#objwolfmanagerconfig","title":"ObjWolfManagerConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_115","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_115","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#occlusioncapsulelist","title":"OcclusionCapsuleList","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_116","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_116","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#offmeshlinkparameter","title":"OffMeshLinkParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_117","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_117","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#optiondata","title":"OptionData","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_118","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_118","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#playercamerasetparameters","title":"PlayerCameraSetParameters","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_119","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_119","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#playerparamaerialfinish","title":"PlayerParamAerialFinish","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_120","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_120","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#playerparambehindfinish","title":"PlayerParamBehindFinish","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_121","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_121","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#playerparameters","title":"PlayerParameters","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_122","title":"Filename Format","text":"player_common.rfl
"},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_122","title":"Usage","text":"Controls Sonic's physics and other player parameters, including the cyloop colour for example.
"},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#playerparamlowaltitudejump","title":"PlayerParamLowAltitudeJump","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_123","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_123","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#playerparampursuitfinish","title":"PlayerParamPursuitFinish","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_124","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_124","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#playerparamstompingfinish","title":"PlayerParamStompingFinish","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_125","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_125","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#playstats","title":"PlayStats","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_126","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_126","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#practiceparameters","title":"PracticeParameters","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_127","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_127","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#questcollectitemparameter","title":"QuestCollectItemParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_128","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_128","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#questdarumabattleparameter","title":"QuestDarumaBattleParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_129","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_129","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#questdrawbridgeparameter","title":"QuestDrawBridgeParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_130","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_130","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#questmowingparameter","title":"QuestMowingParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_131","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_131","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#recorddata","title":"RecordData","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_132","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_132","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#reflexespanelparam","title":"ReflexesPanelParam","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_133","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_133","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#scriptparameter","title":"ScriptParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_134","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_134","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#seedparameter","title":"SeedParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_135","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_135","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#sequenceparameter","title":"SequenceParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_136","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_136","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#soundcommonparameter","title":"SoundCommonParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_137","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_137","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#standardcameraconfig","title":"StandardCameraConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_138","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_138","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#statsdatacontainer","title":"StatsDataContainer","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_139","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_139","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#swayparamindivisual","title":"SwayParamIndivisual","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_140","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_140","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#talkeventcamerapresetparameters","title":"TalkEventCameraPresetParameters","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_141","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_141","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#timeserviceparam","title":"TimeServiceParam","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_142","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_142","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#tornadoringparameter","title":"TornadoRingParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_143","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_143","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#uicreditparameter","title":"UICreditParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_144","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_144","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#uifishiguideconfig","title":"UIFishiGuideConfig","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_145","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_145","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#uimapparameter","title":"UIMapParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_146","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_146","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#uiwireframeparameter","title":"UIWireframeParameter","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_147","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_147","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#viewspaceoffsetrflparam","title":"ViewSpaceOffsetRflParam","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_148","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_148","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#volumesize","title":"VolumeSize","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_149","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_149","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#wolfvolumesize","title":"WolfVolumeSize","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#filename-format_150","title":"Filename Format","text":""},{"location":"docs/hedgehog-engine/rangers/files/rfl/mapping/#usage_150","title":"Usage","text":""},{"location":"docs/hedgehog-engine/rangers/levels/ids/","title":"Level ID Map","text":""},{"location":"docs/hedgehog-engine/rangers/levels/ids/#mapping","title":"Mapping","text":"Stage IDs are defined like this:
{world_id}{stage_type}{stage_number}\n
Example
w2r01 -> Ares Open Zone 1
"},{"location":"docs/hedgehog-engine/rangers/levels/ids/#worlds-zones","title":"Worlds (Zones)","text":"World ID World Name w1 Kronos w2 Ares w3 Chaos w5 The End w6 Green Hill w7 Chemical Plant w8 Sky Sanctuary w9 Highway"},{"location":"docs/hedgehog-engine/rangers/levels/ids/#stage-type","title":"Stage Type","text":"Stage Type ID Stage Type r Open Zone d Cyber Space f Fishing (always w1) h Hacking (always w1)"},{"location":"docs/hedgehog-engine/rangers/levels/ids/#stages-cyberspace","title":"Stages (Cyberspace)","text":"Stage Name Level ID 1-1 w6d01 1-2 w8d01 1-3 w9d04 1-4 w6d02 1-5 w7d04 1-6 w6d06 1-7 w9d06 2-1 w6d05 2-2 w8d03 2-3 w7d02 2-4 w7d06 2-5 w8d04 2-6 w6d03 2-7 w8d05 3-1 w6d04 3-2 w6d08 3-3 w8d02 3-4 w6d09 3-5 w6d07 3-6 w8d06 3-7 w7d03 4-1 w7d08 4-2 w9d02 4-3 w7d01 4-4 w9d03 4-5 w6d10 4-6 w7d07 4-7 w9d05 4-8 w7d05 4-9 w9d07"},{"location":"docs/hedgehog-engine/rangers/levels/ids/#stages-dlc-cyber-space","title":"Stages (DLC Cyber Space)","text":"Stage Name Gedit ID Terrain ID 4-A w6d21 w6d02 4-B w6d22 w6d04 4-C w6d23 w6d10 4-D w7d21 w7d01 4-E w7d22 w7d04 4-F w7d23 w7d06 4-G w9d21 w9d02 4-H w9d22 w9d03 4-I w9d23 w9d06"},{"location":"docs/hedgehog-engine/rangers/levels/ids/#oddities","title":"Oddities","text":"Due to Ouranos and Rhea actually being part of Kronos, their map files are stored in w1:
There are also various versions of Kronos in the game files (not present in the PC release), those being:
Warning
This list is still a work in progress! Any additions and updates are greatly appreciated!
Functions are listed below in the following format:
Function(arguments, ...) : returnType\n
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#achivementunlockstring-number","title":"\ud83d\uddd2\ufe0f AchivementUnlock(string, number)","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description","title":"Description","text":"Unlocks an achievement.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters","title":"Parameters","text":"This function has no callback function.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_1","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#activitystartnumber-unknown","title":"\ud83d\uddd2\ufe0f ActivityStart(number) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_2","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_2","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_1","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#activitytaskcompletenumber-number-unknown","title":"\ud83d\uddd2\ufe0f ActivityTaskComplete(number, number) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_3","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_3","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_2","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#activitytaskend-unknown","title":"\ud83d\uddd2\ufe0f ActivityTaskEnd() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_4","title":"Description","text":"This function is unused and has no callback function.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_4","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_3","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#activitytaskstartnumber-number-unknown","title":"\ud83d\uddd2\ufe0f ActivityTaskStart(number, number) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_5","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_5","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_4","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#addpracticenotifierpermissiondenystring-unknown","title":"\ud83d\uddd2\ufe0f AddPracticeNotifierPermissionDeny(string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_6","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_6","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_5","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#autosavestring","title":"\ud83d\uddd2\ufe0f AutoSave(string)","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_7","title":"Description","text":"Saves the current game data into the autosave slot.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_7","title":"Parameters","text":"Change to an event camera.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_9","title":"Parameters","text":"Changes animations for dialogue events.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_10","title":"Parameters","text":"Plays an animation from an *.asm
file using the friendly (upper-case) name when the player is frozen using HoldPlayer().
Plays an animation from an *.asm
file using the friendly (upper-case) name where available.
Toggles whether the player has permission to save.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_13","title":"Parameters","text":"Changes the current weather.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_14","title":"Parameters","text":"Sets the cleared state of the current island and proceeds to the next.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#clearobjecttarget-unknown","title":"\ud83d\uddd2\ufe0f ClearObjectTarget() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_16","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_15","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_7","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#clearpracticenotifier-yield","title":"\ud83d\uddd2\ufe0f ClearPracticeNotifier() : yield","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_17","title":"Description","text":"Clears the Training Simulator notification on the top-right of the heads-up display.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#clearquesttarget-unknown","title":"\ud83d\uddd2\ufe0f ClearQuestTarget() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_18","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_16","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_8","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#cleartutorialuiboolean-unknown","title":"\ud83d\uddd2\ufe0f ClearTutorialUI(boolean) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_19","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_17","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_9","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#clearuserguidui-yield","title":"\ud83d\uddd2\ufe0f ClearUserGuidUI() : yield","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_20","title":"Description","text":"Clears an input guide.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#debugprint-number","title":"\ud83d\uddd2\ufe0f DebugPrint() : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_21","title":"Description","text":"This function is unused and has a stripped callback function.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_18","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_10","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#deletepracticenotifierpermissiondenystring-unknown","title":"\ud83d\uddd2\ufe0f DeletePracticeNotifierPermissionDeny(string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_22","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_19","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_11","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#endletterboxui-unknown","title":"\ud83d\uddd2\ufe0f EndLetterBoxUI() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_23","title":"Description","text":"This function is unused.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_20","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_12","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#endtalkmode-unknown","title":"\ud83d\uddd2\ufe0f EndTalkMode() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_24","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_21","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_13","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#endtimegimmick-unknown","title":"\ud83d\uddd2\ufe0f EndTimeGimmick() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_25","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_22","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_14","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#exit","title":"\ud83d\uddd2\ufe0f Exit()","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_26","title":"Description","text":"Ends the current script sequence.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#fadeinnumber","title":"\ud83d\uddd2\ufe0f FadeIn(number)","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_27","title":"Description","text":"Fades the screen into gameplay from black within the specified duration.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_23","title":"Parameters","text":"Fades the screen out within the specified duration.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_24","title":"Parameters","text":"Gets the current internal block ID for Lua conditions within update functions.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_15","title":"Return Value","text":"The current block ID.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getchaosemeraldstring-unknown","title":"\ud83d\uddd2\ufe0f GetChaosEmerald(string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_30","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_25","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_16","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getchaosemeraldnum-number","title":"\ud83d\uddd2\ufe0f GetChaosEmeraldNum() : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_31","title":"Description","text":"Gets the total number of Chaos Emeralds.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_17","title":"Return Value","text":"The total number of Chaos Emeralds.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getcleartowernum-unknown","title":"\ud83d\uddd2\ufe0f GetClearTowerNum() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_32","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_26","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_18","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getdebugflagstring-number","title":"\ud83d\uddd2\ufe0f GetDebugFlag(string) : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_33","title":"Description","text":"Gets the value of any flag Sonic Team wants to check within Lua scripts.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_27","title":"Parameters","text":"The value of the requested flag.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getguardlevelnumber-number","title":"\ud83d\uddd2\ufe0f GetGuardLevel(number) : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_34","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_28","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_20","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#gethackingaliveenemynum-unknown","title":"\ud83d\uddd2\ufe0f GetHackingAliveEnemyNum() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_35","title":"Description","text":"This function is unused.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_29","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_21","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#gethackingcurrentwaveid-unknown","title":"\ud83d\uddd2\ufe0f GetHackingCurrentWaveId() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_36","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_30","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_22","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#gethaschaosemeraldnum-number","title":"\ud83d\uddd2\ufe0f GetHasChaosEmeraldNum() : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_37","title":"Description","text":"Gets the total number of currently obtained Chaos Emeralds.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_23","title":"Return Value","text":"The total number of currently obtained Chaos Emeralds.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getmaxguardlevel-number","title":"\ud83d\uddd2\ufe0f GetMaxGuardLevel() : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_38","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_31","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_24","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getmaxpowerlevelnumber-number","title":"\ud83d\uddd2\ufe0f GetMaxPowerLevel(number) : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_39","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_32","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_25","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getmaxringlevel-number","title":"\ud83d\uddd2\ufe0f GetMaxRingLevel() : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_40","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_33","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_26","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getmaxspeedlevel-number","title":"\ud83d\uddd2\ufe0f GetMaxSpeedLevel() : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_41","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_34","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_27","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getminigamequestprogressstring-unknown","title":"\ud83d\uddd2\ufe0f GetMinigameQuestProgress(string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_42","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_35","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_28","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getobjstatusstring-number-number-boolean","title":"\ud83d\uddd2\ufe0f GetObjStatus(string, number, number) : boolean","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_43","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_36","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_29","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getpinballstatusstring-unknown","title":"\ud83d\uddd2\ufe0f GetPinballStatus(string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_44","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_37","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_30","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getplayeriteminfostring-number","title":"\ud83d\uddd2\ufe0f GetPlayerItemInfo(string) : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_45","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_38","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_31","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getplayerstatusstring-number","title":"\ud83d\uddd2\ufe0f GetPlayerStatus(string) : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_46","title":"Description","text":"Returns the value of status flags for the player.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_39","title":"Parameters","text":"A 0/1 number representing the requested state.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getpowerlevelnumber-number","title":"\ud83d\uddd2\ufe0f GetPowerLevel(number) : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_47","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_40","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_33","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getpoweruprequiredkodamanum-unknown","title":"\ud83d\uddd2\ufe0f GetPowerupRequiredKodamaNum() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_48","title":"Description","text":"This function is unused.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_41","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_34","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getringlevelnumber-number","title":"\ud83d\uddd2\ufe0f GetRingLevel(number) : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_49","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_42","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_35","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getselectresultnumber-number","title":"\ud83d\uddd2\ufe0f GetSelectResult(number) : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_50","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_43","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_36","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getspeedlevelnumber-number","title":"\ud83d\uddd2\ufe0f GetSpeedLevel(number) : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_51","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_44","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_37","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#getvaluestring-number-number","title":"\ud83d\uddd2\ufe0f GetValue(string, number) : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_52","title":"Description","text":"Get the value of a flag based on the flag name and flag number.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_45","title":"Parameters","text":"The value of the requested flag.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#giantorbreleasetemporarilyreset-unknown","title":"\ud83d\uddd2\ufe0f GiantOrbReleaseTemporarilyReset() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_53","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_46","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_39","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#giantorbtemporarilyreset-unknown","title":"\ud83d\uddd2\ufe0f GiantOrbTemporarilyReset() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_54","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_47","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_40","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#gotocyberstagestring-yield","title":"\ud83d\uddd2\ufe0f GoToCyberStage(string) : yield","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_55","title":"Description","text":"This function is unused.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_48","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#hideobjectineventstring","title":"\ud83d\uddd2\ufe0f HideObjectInEvent(string)","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_56","title":"Description","text":"Hides the specified object during an event.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_49","title":"Parameters","text":"Disables player movement.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#isavailablekodamaelderlvup-boolean","title":"\ud83d\uddd2\ufe0f IsAvailableKodamaElderLvUp() : boolean","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_58","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_50","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_41","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#ishackingcurrentwaveidinrangenumber-number-unknown","title":"\ud83d\uddd2\ufe0f IsHackingCurrentWaveIdInRange(number, number) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_59","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_51","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_42","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#isinscreenviewstring-number-number-boolean","title":"\ud83d\uddd2\ufe0f IsInScreenView(string, number, number) : boolean","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_60","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_52","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_43","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#isloadinglevel-number","title":"\ud83d\uddd2\ufe0f IsLoadingLevel() : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_61","title":"Description","text":"Returns whether a level is actively being loaded via the LoadLevel() function for pausing the script until it's finished.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_44","title":"Return Value","text":"A 0/1 number representing if a level is being loaded.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#isplayingdieventstring-number","title":"\ud83d\uddd2\ufe0f IsPlayingDiEvent(string) : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_62","title":"Description","text":"Returns whether the specified event is currently playing.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_53","title":"Parameters","text":"A 0/1 number representing if the specified event is currently playing.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#isplayingdieventall-number","title":"\ud83d\uddd2\ufe0f IsPlayingDiEventAll() : number","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_63","title":"Description","text":"Returns whether any event is playing.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_46","title":"Return Value","text":"A 0/1 number representing if any event is playing.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#isplayingquest-unknown","title":"\ud83d\uddd2\ufe0f IsPlayingQuest() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_64","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_54","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_47","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#killpinballobjects-unknown","title":"\ud83d\uddd2\ufe0f KillPinballObjects() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_65","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_55","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_48","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#loaddieventstring-unknown","title":"\ud83d\uddd2\ufe0f LoadDiEvent(string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_66","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_56","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_49","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#loaddieventfrozenstring-unknown","title":"\ud83d\uddd2\ufe0f LoadDiEventFrozen(string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_67","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_57","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_50","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#loadlevelstring-unknown","title":"\ud83d\uddd2\ufe0f LoadLevel(string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_68","title":"Description","text":"Loads an archive (*.pac
) using its respective *.level
file.
Exits the current script sequence and loads the next one via the input ID.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_62","title":"Parameters","text":"Sends a message to the specified object in the *.gedit
files. Typically used to turn camera volumes on or off.
Gives the player a specific number of specific items.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_66","title":"Parameters","text":"Disables player movement.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#playvoicestring-unknown","title":"\ud83d\uddd2\ufe0f PlayVoice(string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_78","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_67","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_56","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#quitminigamequest-unknown","title":"\ud83d\uddd2\ufe0f QuitMinigameQuest() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_79","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_68","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_57","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#releaseholdplayer","title":"\ud83d\uddd2\ufe0f ReleaseHoldPlayer()","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_80","title":"Description","text":"Enables player movement.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#releasepresentskillstring-unknown","title":"\ud83d\uddd2\ufe0f ReleasePresentSkill(string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_81","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_69","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_58","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#resetcamera","title":"\ud83d\uddd2\ufe0f ResetCamera()","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_82","title":"Description","text":"Restores the player-operated camera.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#resetmenudisabledminigamequest-unknown","title":"\ud83d\uddd2\ufe0f ResetMenuDisabledMinigameQuest() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_83","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_70","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_59","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#resetpinball-unknown","title":"\ud83d\uddd2\ufe0f ResetPinball() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_84","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_71","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_60","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#resetweathernumber-unknown","title":"\ud83d\uddd2\ufe0f ResetWeather(number) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_85","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_72","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_61","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#save-yield","title":"\ud83d\uddd2\ufe0f Save() : yield","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_86","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_73","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#setbossknightlayerenabledboolean-unknown","title":"\ud83d\uddd2\ufe0f SetBossKnightLayerEnabled(boolean) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_87","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_74","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_62","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#sethackingbulletpatternglobalveltimesnumber-unknown","title":"\ud83d\uddd2\ufe0f SetHackingBulletPatternGlobalVelTimes(number) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_88","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_75","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_63","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#sethackingbulletpatternvelrangenumber-number-unknown","title":"\ud83d\uddd2\ufe0f SetHackingBulletPatternVelRange(number, number) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_89","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_76","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_64","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#sethudenabledstring-boolean","title":"\ud83d\uddd2\ufe0f SetHUDEnabled(string, boolean)","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_90","title":"Description","text":"Toggles whether certain menus are available to the player.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_77","title":"Parameters","text":"Toggles whether an object layout layer is visible.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_78","title":"Parameters","text":"Toggles whether an object layout layer is visible during an event.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_79","title":"Parameters","text":"Forces the camera to always look towards the specified position.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_80","title":"Parameters","text":"Toggles whether the specified ability can be used by the player.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_83","title":"Parameters","text":"Sets the current time.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_84","title":"Parameters","text":"Toggles the passage of time.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_85","title":"Parameters","text":"Sets a value for the specified flag.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_86","title":"Parameters","text":"This function does not work.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_87","title":"Parameters","text":"Shoots a pre-defined pattern of bullets for the Hacking minigame.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_88","title":"Parameters","text":"Displays a dialog using a caption and body entry from a *.cnvrs-text
file.
Displays a menu depending on the current sequence.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_96","title":"Parameters","text":"This function is unused.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_98","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_73","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#showtoastuistring-unknown","title":"\ud83d\uddd2\ufe0f ShowToastUI(string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_112","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_99","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_74","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#showtutorialuistring-string-unknown","title":"\ud83d\uddd2\ufe0f ShowTutorialUI(string, string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_113","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_100","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_75","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#showuserguiduistring","title":"\ud83d\uddd2\ufe0f ShowUserGuidUI(string)","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_114","title":"Description","text":"Displays an input guide for the specified control method.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_101","title":"Parameters","text":"Notice
Only three of these are actually used, as Sonic Team moved to using internal methods for displaying these guides, rather than using Lua.
Some names are unknown as they use string hashes that have no source yet.
Name Internal ID Description CameraControl 0 Displays a graphic for the right stick with the text \"Camera\". Unknown... 1 Displays a quad direction graphic with no text. Jump (unused) 2 Displays a graphic for the A button with no text. Boost (unused) 3 Displays a graphic for the right trigger with no text. HomingAttack 4 Displays a graphic for the X button with the text \"Homing Attack\". Lockon (unused) 5 Displays a graphic for the right stick button with the text \"Lock On\". Cyloop (unused) 6 Displays a graphic for the Y button with the text \"Cyloop (while moving)\". CyloopBattle 7 Displays a graphic for the Y button with the text \"Cyloop (while moving)\". Unknown... 8 Displays a graphic for the left bumper with no text. WallRun (unused) 9 Displays two graphics, one with a quad direction graphic with the text \"Climb\", and another with a graphic for the right trigger with the text \"Wall Run (while climbing)\". Boarding (unused) 10 Displays two graphics, one with a quad direction graphic with the text \"Climb\", and another with a graphic for the A button with no text. Unknown... 11 Displays two graphics, one with a left/right direction graphic with no text, and another with a graphic for the left trigger with no text. Diving (unused) 12 Displays a graphic for the right trigger with no text. Unknown... 13 Displays two graphics, one with a quad direction graphic with the text \"Move the target\", and another with a graphic for the A button with the text \"Cast the line\". Unknown... 14 Displays a graphic for the B button with the text \"Quit\". Unknown... 15 Displays a graphic for the A button with the text \"Reel it in\". Unknown... 16 Displays a graphic for the A button with the text \"Hook the fish\". Unknown... 17 Displays a graphic for the A button with no text. Unknown... 18 Displays a graphic for the A button with no text. Unknown... 19 Displays a graphic for the X button with the text \"Place cannonball\". Unknown... 20 Displays a graphic for the X button with the text \"Load cannon\"."},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#showyesnowindowuistring-string-yield","title":"\ud83d\uddd2\ufe0f ShowYesNoWindowUI(string, string) : yield","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_115","title":"Description","text":"Displays a Yes/No dialog using a caption and body entry from a *.cnvrs-text
file.
This function is unused.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_107","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_80","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#startminigamequeststring-unknown","title":"\ud83d\uddd2\ufe0f StartMinigameQuest(string) : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_121","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_108","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_81","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#startpinball-unknown","title":"\ud83d\uddd2\ufe0f StartPinball() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_122","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_109","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_82","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#starttimegimmick-unknown","title":"\ud83d\uddd2\ufe0f StartTimeGimmick() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_123","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_110","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_83","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#startupgimmickinfo-unknown","title":"\ud83d\uddd2\ufe0f StartupGimmickInfo() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_124","title":"Description","text":"This function is unused.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_111","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_84","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#startwaitminigamequest-unknown","title":"\ud83d\uddd2\ufe0f StartWaitMinigameQuest() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_125","title":"Description","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_112","title":"Parameters","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_85","title":"Return Value","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#unloaddievent-unknown","title":"\ud83d\uddd2\ufe0f UnloadDiEvent() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_126","title":"Description","text":"This function is unused.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_113","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_86","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#unloadlevel-unknown","title":"\ud83d\uddd2\ufe0f UnloadLevel() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_127","title":"Description","text":"This function is unused.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_114","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_87","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#waitfromchaosemeraldnum-unknown","title":"\ud83d\uddd2\ufe0f WaitFromChaosEmeraldNum() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_128","title":"Description","text":"This function is unused.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_115","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_88","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#waitfromflag-unknown","title":"\ud83d\uddd2\ufe0f WaitFromFlag() : unknown","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_129","title":"Description","text":"This function is unused.
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_116","title":"Parameters","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#return-value_89","title":"Return Value","text":"Unknown...
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#waittimenumber","title":"\ud83d\uddd2\ufe0f WaitTime(number)","text":""},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#description_130","title":"Description","text":"Waits for a specified amount of time (in seconds).
"},{"location":"docs/hedgehog-engine/rangers/scripts/funcs/#parameters_117","title":"Parameters","text":"Light fields are invisible pieces of geometry utilized by Sonic Colors to tint the color of Sonic, and the world around him, as he runs through the stage. Sadly this mechanic is mostly broken in Sonic Colors: Ultimate, but the files still remain.
"},{"location":"docs/hedgehog-engine/sonic2010/files/lightfield/#light-field-format","title":"Light Field Format","text":"Light field data is stored in \"stgxxx_lfield.orc\" BINA containers, which can be found in \"stgxxx_obj.arc\" archives for a given stage. In the original Wii release, the data is stored in big-endian format.
The format for these files is as follows:
class LightFieldData {\n uint signature = 1380730451; // \"RLFS\" ASCII in big-endian.\n uint version = 1; // Always \"1\".\n uint lfArrayHierarchyDepth; // The depth count of the Light Field object array hierarchy.\n uint lfArrayCount; // The number of entries in the Light Field object array.\n uint lfArrayOffset; // The non-absolute offset to the Light Field object array.\n uint lfAabbTreeCount; // The number of entries in the Light Field AABB (Axis Aligned Bounding Box) tree.\n uint lfAabbTreeOffset; // The non-absolute offset to the Light Field AABB tree.\n LightFieldObject[lfArrayCount] lfObjectArray;\n LightFieldAABBTreeNode[lfAabbTreeCount] lfAabbTree;\n}\n\nenum LightFieldObjectType : uint8 {\n SPHERE = 0,\n CAPSULE = 1,\n BOX = 2,\n OMNIBOX = 3\n}\n\nclass LightFieldObject {\n uint nameOffset; // The non-absolute offset to the object name in the BINA string table.\n int index; // The index of the Light Field object, to be referenced in \"stgxxx_config.lua\" files.\n LightFieldObjectType type; // The type of the Light Field object.\n uint8 padding1; // Padding to pad out the type field to 2 bytes.\n uint16 childrenAABBTreeEntryIndex; // The index to the bounding box of this node's children in the Light Field AABB tree. 0 if the object node has no children.\n float[5] scale; // The scale of the Light Field object. Data format varies depending on the LightFieldObjectType (see below for more information).\n float[3] position; // The position of the Light Field object in 3D space.\n float[4] rotation; // The rotation of the Light Field object in 3D space.\n}\n\nclass LightFieldAABBTreeNode {\n int leftNodeIndex; // Index to the left node in the Light Field AABB tree.\n int rightNodeIndex; // Index to the right node in the Light Field AABB tree. If leftNodeIndex is 0, this field serves as an index back into the Light Field object array.\n float[3] bBoxMin; // The minimum bounding box vertex position in 3D space.\n float[3] bBoxMax; // The maximum bounding box vertex position in 3D space.\n}\n
"},{"location":"docs/hedgehog-engine/sonic2010/files/lightfield/#light-field-object-scale","title":"Light Field Object Scale","text":"The contents of the \"scale\" float array in a LightFieldObject varies depending on the type specified in the LightFieldObjectType field.
Type Layout Sphere radius, margin, 0.0, 0.0, 0.0 Capsule radius, height, margin, 0.0, 0.0 Box length, width, height, margin1, margin2 Omnibox length, width, height, margin, 0.0"},{"location":"docs/hedgehog-engine/sonic2010/files/lightfield/#lightfieldconv-xml-layout","title":"LightFieldConv XML Layout","text":"LightFieldConv was a tool used by Sonic Team to convert light field XML data into \"binarc\" .src files, in preparation for packing the data into a BINA container. The following example XML data can be used to generate an .src file, similar to that which would have been used to create \"stg901_lfield.orc\" for the test level discovered in Sonic Colors: Ultimate:
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Sonic2010LField version=\"1.0.0\">\n <scene>\n <lfield_array> \n <node id=\"LFieldBox_01\">\n <lfield type=\"box\">\n <index>2</index>\n <box>\n <length>80.0</length>\n <width>80.0</width>\n <height>80.0</height>\n <margin1>10.0</margin1>\n <margin2>10.0</margin2>\n </box>\n <bbox>\n <min>-40.0 -20.0 -40.0</min>\n <max>40.0 60.0 40.0</max>\n </bbox>\n </lfield>\n <translate>0.0 20.0 -40.0</translate>\n <rotate>0.707107 0.0 0.0 0.707107</rotate>\n </node>\n\n <node id=\"LFieldCapsule_01\">\n <lfield type=\"capsule\">\n <index>3</index>\n <capsule>\n <radius>30.0</radius>\n <height>100.0</height>\n <margin>5.0</margin>\n </capsule>\n <bbox>\n <min>25.550200 -30.0 -139.162003</min>\n <max>156.261002 30.0 -8.451360</max>\n </bbox>\n </lfield>\n <translate>90.905502 79.9999 -73.806702</translate>\n <rotate>0.923880 0.0 -0.382683 -0.000001</rotate>\n </node>\n\n <node id=\"LFieldSphere_01\">\n <lfield type=\"sphere\">\n <index>4</index>\n <sphere>\n <radius>40.0</radius>\n <margin>10.0</margin>\n </sphere>\n <bbox>\n <min>-126.564003 -40.0 42.505001</min>\n <max>-46.564201 40.0 122.504997</max>\n </bbox>\n </lfield>\n <translate>-86.564201 0.0 82.504997</translate>\n <rotate>0.0 0.0 0.0 1.0</rotate>\n </node>\n\n <node id=\"LFieldOmniBox_01\">\n <lfield type=\"omnibox\">\n <index>5</index>\n <omnibox>\n <length>40.0</length>\n <width>40.0</width>\n <height>40.0</height>\n <margin1>10.0</margin1>\n <margin2>0.0</margin2>\n </omnibox>\n <bbox>\n <min>60.0 -40.0 40.0</min>\n <max>140.0 40.0 120.0</max>\n </bbox>\n </lfield>\n <translate>100.0 0.0 80.0</translate>\n <rotate>0.0 0.0 0.0 1.0</rotate>\n </node>\n </lfield_array>\n </scene>\n</Sonic2010LField>\n
"},{"location":"docs/hedgehog-engine/sonic2010/files/setobject/","title":"Set Object","text":"The Set Object file format is used in Sonic Colors in order to define stage object layout, serving the same purpose as \"Set\" and \"setdata\" XML files in Sonic Unleashed and Sonic Generations respectively. However, unlike in those games, this data is actually stored in binary format for greater efficiency, with the same practice being carried forward in all future titles by Sonic Team.
"},{"location":"docs/hedgehog-engine/sonic2010/files/setobject/#set-object-format","title":"Set Object Format","text":"Set object data is stored in \"stgxxx_obj_xx.orc\" BINA containers, which can be found in \"set\" folder in \"sonic2010_0.cpk\". The objects themselves are arranged into 8 \"layers\" for each stage, separated into files with suffixes from 00 to 07 in the \"set\" folder. In the original Wii release, the data is stored in big-endian format.
class SetObjectData {\n uint signature = 1397703242; // \"SOBJ\" ASCII in big-endian.\n uint version = 1; // Always \"1\".\n uint objectDictCount; // The number of unique object types.\n uint objectDictOffset; // The non-absolute offset to the object dictionary array.\n uint bvhTreeOffset; // The non-absolute offset to the bounding volume hierarchy tree. This is unused in Colors.\n uint objectOffsetArrayOffset; // The non-absolute offset to the array of offsets to all the objects stored in the file.\n uint objectCount; // The number of objects stored in the file.\n uint bvhTreeNodeCount; // The number of nodes in the bounding volume hierarchy tree.\n uint objectInstanceCount; // The total number of object instances in the object instance array.\n\n SetObjectDictNode[objectDictCount] objectDictArray; // The dictionary of object types;\n SetObjectIndicesArrayNode[objectDictCount] objectIndicesArray; // An array of nodes, that each store indices to objects in the object array, grouped by object type.\n uint[objectCount] objectOffsetArray; // An array of offsets to all of the objects stored in the file, indexed into by SetObjectIndicesArrayNode entries.\n SetObject[objectCount] objectArray; // The \"array\" of objects. The term \"array\" is used loosely here as the objects are not fixed size, due to the custom parameters that can be defined for them.\n SetObjectInstance[objectInstanceCount] objectInstanceArray; // The array of object instances.\n}\n\n// One node for every object type in the SOBJ file.\nclass SetObjectDictNode {\n uint objectTypeNameOffset; // The non-absolute offset to the object type name in the BINA string table.\n uint objectIndicesCount; // The number of indices in the object indices array that are of the corresponding type.\n uint objectIndicesOffset; // The non-absolute offset to the array of object indices for the corresponding type.\n}\n\n// One node for every object type in the SOBJ file.\nclass SetObjectIndicesArrayNode {\n uint[objectIndicesCount] objectIndices; // An array of indices of all the objects of the corresponding type in the object indices array.\n}\n\nenum ReplicationAlignment : uint8 {\n NONE = 0,\n GROUND = 1,\n GUIDE = 2,\n GRIND = 3,\n SV = 4, // Side View\n CIRCLE = 5\n}\n\n// setcvtr actually treats these enum values as 4 bit uints, with each padded out with a second 4 bit uint to the length of a uint8. For clarity this is documented as a uint8.\nenum ReplicationLayout : uint8 {\n FRONT = 0x00,\n SIDE = 0x10,\n UP = 0x20\n}\n\n// Set objects can be thought of as templates for object instances. Here common parameters can be defined for later use by multiple instances of the same object.\n\nclass SetObject {\n uint replicationObjectIDComposite; // Composite field of object replication parameters (ReplicationAlignment + ReplicationLayout) and the object ID (uint16), stored as a single uint.\n uint classId; // The unique ID assigned to the object class in the SetEdClass XML file.\n uint unknownOffset1 = 0; // Unknown offset, hardcoded to null in setcvtr. Likely intended to be an offset to a node in the unused bvh tree.\n float interval; // The interval between replicated objects.\n float rangeIn; // The distance from Sonic where the object should become visible.\n float rangeOut; // The distance from Sonic where the object should disappear.\n uint objectInstanceArrayOffset; // The non-absolute offset to the object instance array.\n uint objectInstanceArrayCount; // The number of instances in the instance array.\n uint unknownInt = 0; // Unknown uint, hardcoded to 0 in setcvtr.\n\n // ... Object-specific parameters, defined in SetEdClass XML \"<class>\" entries.\n\n}\n\n// Object instances, or \"units\" as they are referred to in Sonic Team's \"setcvtr\" development tool, are instances of SetObject templates that are described above. By using this system of separating object units from objects themselves, clusters of objects can be defined in a level with the same parameters, with minimal repitition.\n\nclass SetObjectInstance {\n float[3] position; // The position of the object instance in 3D space.\n float[3] rotation; // The rotation of the object instance in 3D space.\n}\n
"},{"location":"docs/hedgehog-engine/sonic2010/files/setobject/#setcvtr-xml-layouts","title":"setcvtr XML Layouts","text":"\"setcvtr\" was a tool used by Sonic Team with the purpose of converting set data XML files into binarc \".src\" files, in preparation for packing data into BINA containers. This allowed the team to define objects in XML format to make development and testing easier. The tool takes two XML files as input, which are explained below.
"},{"location":"docs/hedgehog-engine/sonic2010/files/setobject/#setedclass-xml-layout","title":"SetEdClass XML Layout","text":"The \"SetEdClass\" XML layout is used to define the various types of objects, and their respective parameters, that can be utilized within stages. The following XML demonstrates how a SetEdClass XML can be defined, alongside object classes and parameters:
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<SetEdClass>\n <class name=\"DummyObjectClass1\" crc=\"1\">\n <param_desc_array>\n <param_desc name=\"boolParam\" type=\"bool\" />\n\n <param_desc name=\"sint8Param\" type=\"sint8\" default=\"1\" />\n <param_desc name=\"sint16Param\" type=\"sint16\" />\n <param_desc name=\"sint32Param\" type=\"sint32\" />\n\n <param_desc name=\"uint8Param\" type=\"uint8\" />\n <param_desc name=\"uint16Param\" type=\"uint16\" />\n <param_desc name=\"uint32Param\" type=\"uint32\" />\n\n <!--\n Accepts normal integers, but doesn't appear to take hex input correctly.\n -->\n <param_desc name=\"uint32HexParam\" type=\"uint32_hex\" />\n\n <param_desc name=\"floatParam\" type=\"float\" />\n\n <!--\n Arrays are not fixed size at the class level, count is declared when the parameter is used in the SetObject XML.\n -->\n <param_desc name=\"sint32ArrayParam\" type=\"array_sint32\" />\n <param_desc name=\"floatArrayParam\" type=\"array_float\" />\n </param_desc_array>\n </class>\n\n <class name=\"DummyObjectClass2\" crc=\"2\">\n <param_desc_array>\n <param_desc name=\"enumParam\" type=\"enum\" default=\"test2\">\n <!--\n When used in the SetObject XML, numbers can be also used in place of item names.\n -->\n <item name=\"enum1\" caption=\"Enum 1 Description\" />\n <item name=\"enum2\" caption=\"Enum 2 Description\" />\n <item name=\"enum3\" caption=\"Enum 3 Description\" />\n </param_desc>\n\n <param_desc name=\"bitsetParam\" type=\"bitset\">\n <field name=\"bit1\" pos=\"0\" />\n <field name=\"bit2\" pos=\"1\" />\n <field name=\"bit3\" pos=\"2\" />\n <field name=\"bit4\" pos=\"3\" />\n </param_desc>\n\n <!--\n Valid parameter type, but doesn't appear to function correctly - causes setcvtr to fail on declaration.\n -->\n <!-- <param_desc name=\"stringParam\" type=\"string\" /> -->\n\n <param_desc name=\"positionParam\" type=\"position\" />\n\n <param_desc name=\"targetParam\" type=\"target\" />\n\n </param_desc_array>\n </class>\n</SetEdClass>\n
"},{"location":"docs/hedgehog-engine/sonic2010/files/setobject/#setobject-xml-layout","title":"SetObject XML Layout","text":"The \"SetObject\" XML layout is used to define objects, and their respective \"units\", that should be placed within a stage. The following XML demonstrates how a SetObject XML can be defined, utilizing objects from the SetEdClass in the previous example and defining the parameters:
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<SetObject>\n <object id=\"1\" class=\"DummyObjectClass1\" range_in=\"100\" range_out=\"120\">\n <param_array>\n <param name=\"boolParam\">true</param>\n\n <param name=\"sint8Param\">5</param>\n <param name=\"sint16Param\">10</param>\n <param name=\"sint32Param\">15</param>\n\n <param name=\"uint8Param\">20</param>\n <param name=\"uint16Param\">25</param>\n <param name=\"uint32Param\">30</param>\n\n <param name=\"uint32HexParam\">100</param>\n\n <param name=\"floatParam\">1.5</param>\n\n <param name=\"sint32ArrayParam\" count=\"5\">1 2 3 4 5</param>\n <param name=\"floatArrayParam\" count=\"3\">1 2 3</param>\n </param_array>\n\n <unit_array interval=\"0\" alignment=\"none\" layout=\"front\">\n <unit position=\"10 10 10\" rotation=\"0.0 0.0 0.0\"/>\n <unit position=\"30 30 30\" rotation=\"0.0 0.0 0.0\"/>\n <unit position=\"50 50 50\" rotation=\"0.0 0.0 0.0\"/>\n </unit_array>\n </object>\n\n <object id=\"2\" class=\"DummyObjectClass2\" range_in=\"110\" range_out=\"130\">\n <param_array>\n <!--\n Bits are set to true by defining them in the parameter. If a bit is omitted, it's set to false.\n -->\n <param name=\"bitsetParam\">\n <bit name=\"bit1\" />\n <bit name=\"bit2\" />\n <bit name=\"bit4\" />\n </param>\n\n <param name=\"enumParam\">enum2</param>\n\n <!-- <param name=\"stringParam\">demostring</param> -->\n\n <param name=\"positionParam\">10 20 30</param>\n\n <param name=\"targetParam\">1</param>\n </param_array>\n <unit_array interval=\"1\" alignment=\"circle\" layout=\"side\">\n <unit position=\"5 5 5\" rotation=\"0.707107 0.0 0.0\"/>\n <unit position=\"25 25 25\" rotation=\"0.923880 0.0 -0.382683\"/>\n </unit_array>\n </object>\n</SetObject>\n
"},{"location":"docs/hedgehog-engine/swa/cutscenes/ids/","title":"Cutscene IDs for Sonic Unleashed","text":"Info
Thanks to Archxe and Hedgeturdd for writing these documents!
Here's a list with all the cutscenes and their respective archive names in Sonic Unleashed.
Cutscene Name Cutscene ID Opening M0_01_05 A New Journey M0_06 Special Sundae M1_01 The First Night M1_02 Tails in Trouble! M1_03_1 To Spagonia! M1_03_2 Kidnapped M2_01 Same As Ever M2_02 Gaia Manuscripts M2_03 Eggman Again M3_01 The Egg Beetle M3_02 Temple Activated! M3_03 Planet Pieces M3_04 Tails' Report M3_05 Eggman's Idea M4_01 Guiding Pulse M5_01 The Dark Gaia Project M5_02 Chip's Change M6_01 Chip's Memories M6_02 No Reason M6_03 Eggmanland M7_01 The Final Temple M7_02 The 7th Continent M7_03 Congratulations M7_04 Pickle's Message M8_01 The Egg Dragoon M8_02 Planet's End M8_03 Dark Gaia Appears M8_04 Shrines in Flight M8_05 Hour of Awakening M8_06_1 Let's Finish This! M8_06_2 Speading Darkness M8_07 Dark World M8_08 Hope and Despair M8_09 The Final Form M8_10 Darkness and Light M8_11_1 Annihilation M8_11_2 A Score Settled M8_11_3 Rekindled Light M8_12 Begin Anew M8_13 Save the Speech M8_14 To the Surface M8_15 Always M8_16 The Divine Beast S1_03 The Key S1_04 Chun-Nan Temple S1_05 Back to Normal S1_06 Amy's Mistake S2_01 Midnight Dance S2_03 Rescuing Amy S2_04 A Monster on Ice S3_03 Holoskan Temple S3_04 Spagonian Temple T0_01 Shamaran Temple T0_02 Charge! T0_03 Temple Entrance T0_04 Sonic and Chip (in Chun-nan) CHN Sonic and Chip (in Adabat) SEA Sonic and Chip (in Holoska) SNW_gooON"},{"location":"docs/hedgehog-engine/swa/levels/ids/","title":"Level IDs for Sonic Unleashed","text":"Info
Thanks to Archxe and Hedgeturdd for writing these documents!
"},{"location":"docs/hedgehog-engine/swa/levels/ids/#mapping","title":"Mapping","text":"Level IDs are defined like this:
Act{Day/Night}_{region}Act{stage_number}\nor\nAct{Day/Night}_{sub}{region}_{substage_number}\n
Note
Not all stages follow this format, exceptions include:
ActD_EU -> Rooftop Run Day 1
ActD_SubMykonos_01 -> Windmill Isle Day Act 3
Here's a list with all the levels and their respective archive names in Sonic Unleashed.
"},{"location":"docs/hedgehog-engine/swa/levels/ids/#region-names","title":"Region Names","text":"Region Internal Name Apotos/Windmill Isle Mykonos Mazuri/Savannah Citadel Africa Spagonia/Rooftop Run EU Chun-Nan/Dragon Road China Holoska/Cool Edge Snow Shamar/Arid Sands Petra Empire City/Skyscraper Scamper NY Adabat/Jungle Joyride Beach EggmanLand EggManLand"},{"location":"docs/hedgehog-engine/swa/levels/ids/#stages-day","title":"Stages (Day)","text":"Stage Name Level ID Windmill Isle Day Act 1 ActD_MykonosAct1 Windmill Isle Day Act 1-2 ActD_SubMykonos_04 Windmill Isle Day Act 2 ActD_MykonosAct2 Windmill Isle Day Act 2-2 ActD_SubMykonos_05 Windmill Isle Day Act 3 ActD_SubMykonos_01 Windmill Isle Day Act 4 ActD_SubMykonos_02 Savannah Citadel Day Act 1 ActD_Africa Savannah Citadel Day Act 1-2 ActD_SubAfrica_05 Savannah Citadel Day Act 2 ActD_SubAfrica_01 Savannah Citadel Day Act 3 ActD_SubAfrica_03 Savannah Citadel Day Act 3-2 ActD_SubAfrica_06 Savannah Citadel Day Act 4 ActD_SubAfrica_02 Savannah Citadel Day Act 5 ActD_SubAfrica_04 Rooftop Run Day 1 ActD_EU Rooftop Run Day Act 1-2 ActD_SubEU_05 Rooftop Run Day Act 2 ActD_SubEU_01 Rooftop Run Day Act 2-2 ActD_SubEU_06 Rooftop Run Day Act 3 ActD_SubEU_02 Rooftop Run Day Act 4 ActD_SubEU_03 Rooftop Run Day Act 5 ActD_SubEU_04 Tornado Defence Act 1 ExStageTails1 Dragon Road Day Act 1 ActD_China Dragon Road Day Act 1-2 ActD_SubChina_05 Dragon Road Day Act 2 ActD_SubChina_03 Dragon Road Day Act 2-2 ActD_SubChina_06 Dragon Road Day Act 3 ActD_SubChina_04 Dragon Road Day Act 4 ActD_SubChina_01 Dragon Road Day Act 5 ActD_SubChina_02 Cool Edge Day Act 1 ActD_Snow Cool Edge Day Act 1-2 ActD_SubSnow_04 Cool Edge Day Act 2 ActD_SubSnow_01 Cool Edge Day Act 2-2 ActD_SubSnow_05 Cool Edge Day Act 3 ActD_SubSnow_02 Cool Edge Day Act 4 ActD_SubSnow_03 Arid Sands Day Act 1 ActD_Petra Arid Sands Day Act 1-2 ActD_SubPetra_04 Arid Sands Day Act 2 ActD_SubPetra_03 Skyscraper Scamper Day Act 1 ActD_NY Skyscraper Scamper Day Act 1-2 ActD_SubNY_03 Skyscraper Scamper Day Act 2 ActD_SubNY_01 Skyscraper Scamper Day Act 3 ActD_SubNY_02 Jungle Joyride Day Act 1 ActD_Beach Jungle Joyride Day Act 1-2 ActD_SubBeach_05 Jungle Joyride Day Act 2 ActD_SubBeach_02 Jungle Joyride Day Act 3 ActD_SubBeach_04 Jungle Joyride Day Act 4 ActD_SubBeach_01 Jungle Joyride Day Act 5 ActD_SubBeach_03 EggmanLand Act_EggmanLand Tornado Defense Act 2 ExStageTails2"},{"location":"docs/hedgehog-engine/swa/levels/ids/#stages-night","title":"Stages (Night)","text":"Stage Name Level ID Windmill Isle Night Act 1 ActN_MykonosEvil Windmill Isle Night Act 1-2 ActN_SubMykonos_03 Windmill Isle Night Act 1-3 ActN_SubMykonos_04 Windmill Isle Night Act 2 ActN_SubMykonos_01 Savannah Citadel Night Act 1 ActN_AfricaEvil Savannah Citadel Night Act 2 ActN_SubAfrica_01 Savannah Citadel Night Act 3 ActN_SubAfrica_02 Savannah Citadel Night Act 4 ActN_SubAfrica_03 Rooftop Run Night Act 1 ActN_EUEvil Rooftop Run Night Act 1-2 ActN_SubEU_02 Rooftop Run Night Act 2 ActN_SubEU_01 Dragon Road Night Act 1 ActN_ChinaEvil Dragon Road Night Act 1-2 ActN_SubChina_03 Dragon Road Night Act 2 ActN_SubChina_01 Dragon Road Night Act 3 ActN_SubChina_02 Arid Sands Night Act 1 ActN_PetraEvil Arid Sands Night Act 2 ActN_SubPetra_03 Arid Sands Night Act 3 ActN_SubPetra_02 Cool Edge Night Act 1 ActN_SnowEvil Cool Edge Night Act 2 ActN_SubSnow_01 Cool Edge Night Act 3 ActN_SubSnow_02 Skyscraper Scamper Night Act 1 ActN_NYEvil Skyscraper Scamper Night Act 2 ActN_SubNY_02 Skyscraper Scamper Night Act 3 ActN_SubNY_01 Jungle Joyride Night Act 1 ActN_BeachEvil Jungle Joyride Night Act 1-2 ActN_SubBeach_03 Jungle Joyride Night Act 2 ActN_SubBeach_01 Jungle Joyride Night Act 3 ActN_SubBeach_02"},{"location":"docs/hedgehog-engine/swa/levels/ids/#bosses","title":"Bosses","text":"Boss Name Level ID Egg Beetle BossEggBeetle Egg Devil Ray BossEggRayBird Dark Gaia Phoenix BossPhoenix Dark Gaia Moray BossDarkGaiaMoray Dark Guardian BossPetra Egg Lancer BossEggLancer Egg Dragoon BossEggDragoon Dark Gaia - Gaia Colossus Sections BossDarkGaia1_1Air Dark Gaia - Sonic Section 1 BossDarkGaia1_1Run Dark Gaia - Sonic Section 2 BossDarkGaia1_2Run Dark Gaia - Sonic Section 3 BossDarkGaia1_3Run Perfect Dark Gaia BossFinalDarkGaia"},{"location":"docs/hedgehog-engine/swa/towns/ids/","title":"Town IDs for Sonic Unleashed","text":"Info
Thanks to Archxe and Hedgeturdd for writing these documents!
Here's a list with all the towns and their respective archive names in Sonic Unleashed.
"},{"location":"docs/hedgehog-engine/swa/towns/ids/#towns-day","title":"Towns (Day)","text":"Town Name Level ID Apotos Day Town Town_Mykonos Apotos Day Entrance Field Town_MykonosETF Mazuri Day Town Town_Africa Mazuri Day Entrance Field Town_AfricaETF Spagonia Day Town Town_EuropeanCity Spagonia Day Entrance Field Town_EuropeanCityETF Spagonia Day Lab Town_EULabo Chun-Nan Day Town Town_China Chun-Nan Day Entrance Field Town_ChinaETF Holoska Day Town Town_Snow Holoska Day Entrance Field Town_SnowETF Shamar Day Town Town_PetraCapital Shamar Day Entrance Field Town_PetraCapitalETF Shamar Day Lab Town_PetraLabo Empire City Day Town Town_NYCity Empire City Day Entrance Field Town_NYCityETF Adabat Day Town Town_SouthEastAsia Adabat Day Entrance Field Town_SouthEastAsiaETF EggmanLand Town Town_EggManBase"},{"location":"docs/hedgehog-engine/swa/towns/ids/#towns-night","title":"Towns (Night)","text":"Town Name Level ID Apotos Night Town Town_Mykonos_Night Apotos Night Entrance Field Town_MykonosETF_Night Mazuri Night Town Town_Africa_Night Mazuri Night Entrance Field Town_AfricaETF_Night Spagonia Night Town Town_EuropeanCity_Night Spagonia Night Entrance Field Town_EuropeanCityETF_Night Spagonia Night Lab Town_EULabo_Night Chun-Nan Night Town Town_China_Night Chun-Nan Night Entrance Field Town_ChinaETF_Night Holoska Night Town Town_Snow_Night Holoska Night Entrance Field Town_SnowETF_Night Shamar Night Town Town_PetraCapital_Night Shamar Night Entrance Field Town_PetraCapitalETF_Night Shamar Night Lab Town_PetraLabo_Night Empire City Night Town Town_NYCity_Night Empire City Night Entrance Field Town_NYCityETF_Night Adabat Night Town Town_SouthEastAsia_Night Adabat Night Entrance Field Town_SouthEastAsiaETF_Night"},{"location":"docs/hedgehog-engine/wars/levels/ids/","title":"Level ID Map","text":""},{"location":"docs/hedgehog-engine/wars/levels/ids/#mapping","title":"Mapping","text":"Stage IDs are defined like this:
{world_id}{stage_type}{character_index}\n
Example
w5a01 -> Lost Valley
"},{"location":"docs/hedgehog-engine/wars/levels/ids/#worlds-zones","title":"Worlds (Zones)","text":"World ID World Name w1 Death Egg w2 Chemical Plant w3 City w4 Mystic Jungle w5 Green Hill w6 Metropolis w7 Eggman Empire Fortress"},{"location":"docs/hedgehog-engine/wars/levels/ids/#stage-type","title":"Stage Type","text":"Stage Type ID Stage Type a Act b Boss d DLC s Credits t Title x Extra"},{"location":"docs/hedgehog-engine/wars/levels/ids/#character-index","title":"Character Index","text":"Character Index Character 01 Modern Sonic 02 Avatar 03 Tag Team 04 Classic SonicNote
Bosses don't use this value to indicate character, rather as a boss index for the current world (which only comes up in World 7).
Note
The Secret and Extra stages don't use this value to indicate character.
"},{"location":"docs/hedgehog-engine/wars/levels/ids/#main-stages","title":"Main Stages","text":"Stage Name Level ID Lost Valley w5a01 Space Port w2a02 Ghost Town w3a04 Prison Hall w1a02 VS. Zavok w1b01 Egg Gate w1a01 Arsenal Pyramid w5a03 Luminous Forest w4a01 VS. Infinite w4b01 Green Hill w5a04 VS. Eggman w5b01 Park Avenue w3a02 Casino Forest w4a04 Aqua Road w4a02 Sunset Heights w3a01 Capital City w6a02 VS. Infinite w6b01 Chemical Plant w2a04 Red Gate Bridge w3a03 Guardian Rock w5a02 Network Terminal w2a01 Death Egg w1a04 Metropolitan Highway w6a01 Null Space w6a03 Imperial Tower w7a02 Mortar Canyon w7a01 VS. Infinite w7b01 Iron Fortress w7a04 Final Judgement w7a03 VS. Death Egg Robot w7b02"},{"location":"docs/hedgehog-engine/wars/levels/ids/#secret-stages","title":"Secret Stages","text":"Stage Name Level ID Fire Cannon 1 w4x02 Vanish Panel 1 w3x02 Bomb Block 1 w5x03 Plasma Cannon 1 w2x02 Laser Cannon 1 w1x02 Reverse Block 1 w6x02"},{"location":"docs/hedgehog-engine/wars/levels/ids/#extra-stages","title":"Extra Stages","text":"Stage Name Level ID Flying Pod w5x02 Bomb Block 2 w2x01 Laser Cannon 2 w6x01 Reverse Block 2 w5x01 Vanish Panel 2 w4x01 Fire Cannon 2 w3x01 Plasma Cannon 2 w1x01"},{"location":"docs/hedgehog-engine/wars/levels/ids/#episode-shadow-stages","title":"Episode Shadow Stages","text":"Stage Name Level ID Enemy Territory w3d01 Eggman's Facility w4d01 Virtual Reality w5d01"},{"location":"docs/nn/common/chunk-format/","title":"NN Chunk Format","text":"Warning
This page is still a work in progress! Any additions and updates are greatly appreciated!
Info
HedgeDocs' initial Sega NN documentation was written by: Radfordhound.
Thanks to:
ItsEasyActually: For sharing his Sega NN findings with me, which helped immensely in getting me started on my journey to reverse-engineer and document all of Sega NN across all of its many crazy iterations and platforms.
ArMM1998: For sharing his documentation on some more obscure NN file types with me (specifically Puyo Puyo stuff, including DS games that used NN which I didn't know was a thing); I never would've known about these otherwise!
TGE and WamWooWam: For decompiling SEGA's unholy port of Sonic 4 Episode I to Windows Phone 7, which used the Sega NN library, and just-so-happened to include complete symbols for everything (even enum values)! I can't understate how much this information has helped me!
SEGA: For making these games, and for letting us freely mod them. Seriously, not many companies let us do this stuff openly, and I think it's awesome. (Also, for releasing that awful version of Sonic 4 Episode I on Windows Phone 7 which had all the symbols in it. Thanks guys, you're the best!! <3)
The Sega NN Chunk Format is a generic \"container\" format developed by Sega somewhere around 2002-2004. It originally appeared in 2004's \"Sega Superstars\" (to our knowledge), and has been heavily utilized in many Sega games released since.
The format is heavily based on the older \"Sega Ninja Chunk Model\" format, which was originally developed for the Sega Dreamcast and was utilized in many Dreamcast games (it was even included as part of the Dreamcast's \"Katana\" SDK).
While the exact meaning of the \"NN\" in \"Sega NN\" is still currently unknown, given that it is so heavily based off of the older Ninja format, it's almost certainly an acronym for something like \"New Ninja\" or \"Ninja Next\".
"},{"location":"docs/nn/common/chunk-format/#platforms","title":"Platforms","text":"The NN Chunk Format, much like the older Ninja format it's based on, is designed heavily around the specific hardware/software requirements of whatever platform it is intended to be used on.
Unlike the older Ninja format, however (which only supports one platform: the Sega Dreamcast), the NN Chunk Format is \"multi-platform\", and therefore comes in many different platform-specific variants.
All known supported platforms are listed in the following chart:
ID Meaning CC NN Library Version Endianness Alignment Description NX Ninja Xbox x DirectX G1.1 Little 16 Xbox/Xbox 360 NS Ninja Sony s PlayStation 2 Little 16 ? PlayStation 2 NG Ninja Gamecube g GAMECUBE Big 32 Gamecube/Wii NC Ninja Cell c ? PS3 Little ? 16 ? PlayStation 3 NU Ninja Umd ? u/s PSP Little 16 ? PlayStation Portable DS DS ? ? Little 16 ? Nintendo DS/3DS NI Ninja Ios i ? OpenGL ES 1.1 Little 16 ? iOS/Android/Windows Phone NE ? ? DirectX G2.0 on XBOX360 Little ? 16 ? Xbox 360 NY ? ? ? Big 16 ? Xbox 360/PlayStation 3 NZ Ninja [Other] z DirectX G2.0 Little 16 Other platforms, such as PC"},{"location":"docs/nn/common/chunk-format/#data-chunks","title":"Data Chunks","text":"As the name implies, files in the NN Chunk Format are comprised of a series of one or more \"data chunks\", one after another.
A \"data chunk\" is simply a block of data (structs, arrays, strings, etc.) that represents a single resource of a specific type.
All known data chunk types are listed in the following chart:
ID CC Type Description TL t TEXLIST A list of textures. EF ? EFFECTLIST A list of effects (shaders). NN a NODENAMELIST A list of names for the nodes (bones) within an object (a model). OB o OBJECT A model. CA ? CAMERA Camera parameters. MO m MOTION (node) A node (bone) animation. MC d MOTION (camera) A camera animation. ML ? MOTION (light) A light animation. MM f MOTION (morph) A morph animation. MA v MOTION (material) A material animation. LI l LIGHT A light.Todo
Add the rest of the data chunk types.
For more specific information on the format of these data chunk types, please refer to the linked pages in the above chart.
"},{"location":"docs/nn/common/chunk-format/#file-types","title":"File Types","text":"Just like with the older Ninja format, NN chunk files come in two forms:
Info
The vast majority of NN chunk files in released games are in binary-form.
To our knowledge, all released games using NN don't support loading text-form files, meaning that all NN text-form files found in the games are unused developer leftovers!
File extensions for NN chunk files typically consist of three characters:
n
for Binary-Form files, or t
for Text-Form files.Examples
Extension Meaning .xno Xbox | Binary-Form | OBJECT .gno Gamecube | Binary-Form | OBJECT .xtv Xbox | Text-Form | MOTION (material) .snt Sony | Binary-Form | TEXLIST"},{"location":"docs/nn/common/chunk-format/#binary-form-file-format","title":"Binary-Form File Format","text":"Binary-Form NN chunk files are just a series of consecutive \"binary chunks\", each of which begins with the following struct:
Important
All instances of this struct (and ONLY this struct) are represented in little-endian, regardless of the endianness specified by the platform. Everything else in Binary-Form NN chunk files is represented in the endianness specified by the platform.
/*\n NOTE: A struct type with this name does not actually exist\n (to my knowledge) in real Sega NN implementations; instead,\n these fields are just embedded directly within every binary\n chunk's header struct. This is just an easier way to think\n about it for our purposes.\n*/\nstruct NNS_BINCNK_HEADER\n{\n /*\n The four-character identifier for this binary chunk;\n specifies what type of binary chunk this is.\n */\n uint32_t Id;\n\n /*\n The offset to the next four-character identifier in the\n file, relative to the end of this struct (such that after\n doing fread(&OfsNextId, sizeof(OfsNextId), 1, file);\n you can just do fseek(file, OfsNextId, SEEK_CUR)).\n */\n uint32_t OfsNextId;\n};\n
Immediately following this struct comes all of the data (structs, strings, etc.) required to represent the binary chunk. The format of this data depends on the platform and type of binary chunk being represented. Check the Id field to determine this.
After each binary chunk (including all of its data) has been written, the file is padded (with 0
s) to a position that is divisible by the \"alignment\" specified by the platform (usually it's 16, but notably, it's 32 on Gamecube/Wii).
What follows is documentation for all known binary chunk types, in the order they appear within binary-form NN chunk files.
"},{"location":"docs/nn/common/chunk-format/#info-chunk","title":"Info Chunk","text":"Important
This chunk is required to be present at the beginning of all binary-form NN chunk files! The Sega NN games I checked actually rely on this behavior, so you can too.
This binary chunk serves as the header for a binary-form NN chunk file, and contains info needed to parse the file. It is represented as the following struct:
struct NNS_BINCNK_FILEHEADER\n{\n /*\n Binary chunk header; must be present at the beginning of all binary chunks.\n\n The chunk ID is set to \"**IF\", where \"**\" is the \"ID\" of\n the platform (e.g. \"NGIF\" for \"Ninja Gamecube InFo\").\n */\n NNS_BINCNK_HEADER ChunkHeader;\n\n /* The number of data chunks in the file. */\n uint32_t nChunk;\n\n /* Absolute offset to the first data chunk in the file. */\n uint32_t OfsData;\n\n /* The combined size of all of the data chunks in the file, including padding. */\n uint32_t SizeData;\n\n /* Absolute offset to the (required) NOF0 binary chunk. */\n uint32_t OfsNOF0;\n\n /*\n Size of the (required) NOF0 binary chunk, including its header.\n Depending on the variant of the format, this size either includes\n the padding that comes after the NOF0 binary chunk, or it doesn't.\n\n (I haven't figured out exactly which versions include padding yet).\n\n (It seems PSP files and .[x]ncp files don't count the padding,\n but everything else does?)\n */\n uint32_t SizeNOF0;\n\n /*\n 1 in most files, 0 in some newer variants.\n (Maybe they just stopped using this value?)\n */\n uint32_t Version;\n};\n
Todo
Further research NIFL header chunks and add info on those.
"},{"location":"docs/nn/common/chunk-format/#data-chunk-header","title":"Data Chunk Header","text":"After the Info Chunk, comes a sequence of one or more data chunks.
In binary-form NN chunk files, each data chunk begins with the following struct:
struct NNS_BINCNK_DATAHEADER\n{\n /*\n Binary chunk header; must be present at the beginning of all binary chunks.\n\n The chunk ID is set to the \"ID\" of the platform, followed\n by the \"ID\" of the data chunk type being written (e.g.\n \"NXTL\" for \"Ninja Xbox Texture List\").\n */\n NNS_BINCNK_HEADER ChunkHeader;\n\n /*\n Offset to the \"main\" (root) struct that makes up this chunk's data\n (e.g. offset to a NNS_NODENAMELIST if the chunk type indicates\n that this is a NODENAMELIST data chunk), relative to the\n position specified by the [OfsData] field from the info chunk.\n */\n uint32_t OfsMainData;\n\n /* Always 0 in every file I've seen thus far. */\n uint32_t Version;\n};\n
Immediately following this struct comes all of the data (structs, strings, etc.) required to represent the data chunk. The format of this data depends on the platform and type of data chunk being represented. Check the chunk ID from the ChunkHeader field in the above struct to determine this.
See the linked pages in the data chunks chart.
"},{"location":"docs/nn/common/chunk-format/#offsets-list-chunk","title":"Offsets List Chunk","text":"Important
This chunk is required to be present in all binary-form NN chunk files!
After all of the data chunks, comes the offsets list chunk.
This binary chunk represents a list of positions for all of the pointers (\"offsets\") in all of the data chunks in the file, relative to the value of the [OfsData]
field from the file's info chunk.
struct NNS_BINCNK_NOF0HEADER\n{\n /*\n Binary chunk header; must be present at the beginning of all binary chunks.\n\n The chunk ID is set to \"NOF0\".\n */\n NNS_BINCNK_HEADER ChunkHeader;\n\n /* The number of pointer positions listed within this chunk. */\n uint32_t nData;\n\n /*\n Padding; always 0 in files.\n\n Some games use this value as a marker that states whether or not\n the offsets have been \"fixed\". In those games, after they're done\n \"fixing\" all of the pointers listed within this chunk, they will set\n this value to 1 in memory.\n */\n uint32_t Pad;\n};\n
Immediately following this struct comes an array of uint32_t
values of size [nData]
. These values represent the positions of every pointer in all of the data chunks in the file, relative to the [OfsData]
field from the file's info chunk.
Most Sega NN games use this chunk to quickly \"fix\" all of the pointers within the data chunks (that is, to convert all of the offsets into absolute memory addresses that can then just be used as normal pointers).
Some games, however, (namely: Sonic 4 Episode I for Windows Phone) ignore the values in this chunk, and instead, just manually add [OfsData]
to each offset to get an absolute file position whenever they need to jump there.
Regardless of whether the data is used or not, it is still required to be present.
Todo
Add pseudo-code for \"fixing\" the offsets listed in this chunk.
"},{"location":"docs/nn/common/chunk-format/#file-name-chunk","title":"File Name Chunk","text":"Info
This chunk is completely optional and seems to only be used for debugging/internal-tooling purposes.
This chunk simply states the name and extension (without the path) of the file it's contained in.
struct NNS_BINCNK_NFN0HEADER\n{\n /*\n Binary chunk header; must be present at the beginning of all binary chunks.\n\n The chunk ID is set to \"NFN0\".\n */\n NNS_BINCNK_HEADER ChunkHeader;\n\n /* Padding; always 0 in files. */\n uint32_t Pad[2];\n};\n
Immediately following this header comes a null-terminated string which represents the file's name and extension (without its path).
"},{"location":"docs/nn/common/chunk-format/#end-chunk","title":"End Chunk","text":"Important
This chunk is required to be present as the last chunk in all binary-form NN chunk files!
This is the last chunk in all binary-form NN chunk files. It exists purely to indicate that there are no more chunks left in the file, so that you know when to stop reading if you're reading the file one chunk at a time.
struct NNS_BINCNK_NENDHEADER\n{\n /*\n Binary chunk header; must be present at the beginning of all binary chunks.\n\n The chunk ID is set to \"NEND\".\n */\n NNS_BINCNK_HEADER ChunkHeader;\n\n /* Padding; always 0 in files. */\n uint32_t Pad[2];\n};\n
"},{"location":"docs/nn/common/chunk-format/#text-form-file-format","title":"Text-Form File Format","text":"Just like text-form Ninja chunk model files, text-form NN chunk files are actually C header files designed to be directly #include
-able from C or C++ code, allowing developers to literally embed NN data directly into the game's code itself!
They also, however, are designed to serve as a human-readable variant of binary-form NN chunk files that can be more easily parsed and/or generated by the official Sega NN tooling.
They accomplish all of this by using only a very strict subset of C in a precise layout, and by heavily utilizing preprocessor defines from other NN library header files that the developer is supposed to #include
in their code before #include
-ing the text-form NN chunk file.
The general layout is as follows:
Important
Replace these special phrases in all of the following \"text snippets
\" as follows:
\\t
\": Replace with a tab character (not spaces).TYPE
\": Replace with the name of the type currently being written.NAME
\": Replace with the name of whatever you're currently writing.Create\\t:
\" followed by the date this file was created in the \"ddd MMM dd HH:mm:ss yyyy
\" .NET DateTime format.TYPE\\t: NAME
\", where TYPE
refers to the type of the struct being referenced (e.g. NNS_TEXFILELIST). See the linked pages in the data chunks chart.TYPE START
\", where TYPE
refers to the data chunk's type (e.g. TEXLIST).TYPE END
\", where TYPE
refers to the data chunk's type (e.g. TEXLIST).End of File
\".SampleFile.xtt
/*\n Sample NN Exporter Version 1.00.00\n Create : Wed Feb 08 21:06:46 2023\n NNS_TEXFILELIST : nntexfilelist_SampleFile\n*/\n\n/* TEXLIST START */\n\nNNS_TEXFILE nntexfile_SampleFile[] =\n{\n TEXFILE(\n TF_FILENAME( \"SampleTex_dif.dds\" ),\n TF_FILTER( NND_MIN_LINEAR_MIPMAP_NEAREST, NND_MAG_LINEAR )\n ),\n TEXFILE(\n TF_FILENAME( \"SampleTex_spec.dds\" ),\n TF_FILTER( NND_MIN_LINEAR_MIPMAP_NEAREST, NND_MAG_LINEAR )\n ),\n TEXFILE(\n TF_FILENAME( \"SampleTex_norm.dds\" ),\n TF_FILTER( NND_MIN_LINEAR_MIPMAP_NEAREST, NND_MAG_LINEAR )\n ),\n};\n\nNNS_TEXFILELIST nntexfilelist_SampleFile[] =\n{\n TEXFILELIST(\n TFL_N_TEXFILE( 3 ),\n TFL_TEXFILE( nntexfile_SampleFile )\n )\n};\n\n/* TEXLIST END */\n\n/* End of File */\n
Info
All of the following in the above example are struct/enum/preprocessor defines from the NN library:
NNS_TEXFILE
TEXFILE
TF_FILENAME
TF_FILTER
NND_MIN_LINEAR_MIPMAP_NEAREST
NND_MAG_LINEAR
NNS_TEXFILELIST
TEXFILELIST
TFL_N_TEXFILE
TFL_TEXFILE
For a complete list of all of these defines, please refer to the individual pages linked in the data chunks chart (for this example, refer to the TEXLIST documentation).
The ordering of the data within each data chunk is generally in \"reverse\" order, such that any reference to a value will not be written until after the value it is referencing, as is required by C.
In some cases, the \"reverse\" order is still not enough to satisfy this requirement, so the Sega NN exporters will write an extern declaration for the value being referenced.
Example snippet from en_Kyozoress.xto in Sonic '06
Here, the nnvertex_plb_op_en_Kyozoress_head_l__2_w2_Eye
value is declared so that it can be referenced by the VTX_LISTPTR
field in nnvertexdesc_plb_op_en_Kyozoress_head_l__2_w2_Eye
:
extern NNS_VTXTYPE_XB_PW4INCT nnvertex_plb_op_en_Kyozoress_head_l__2_w2_Eye[];\n\nNNS_VTXLIST_DX_DESC nnvertexdesc_plb_op_en_Kyozoress_head_l__2_w2_Eye[] =\n{\n VTXDESC(\n /* ... */\n VTX_LISTPTR( nnvertex_plb_op_en_Kyozoress_head_l__2_w2_Eye ),\n /* ... */\n ),\n};\n
Then, later on in the file, the referenced nnvertex_plb_op_en_Kyozoress_head_l__2_w2_Eye
value is defined as usual (contents redacted due to extreme length):
NNS_VTXTYPE_XB_PW4INCT nnvertex_plb_op_en_Kyozoress_head_l__2_w2_Eye[] =\n{\n /* ... */\n};\n
"},{"location":"docs/nn/common/chunk-format/nodenamelist/","title":"NODENAMELIST","text":""},{"location":"docs/nn/common/chunk-format/nodenamelist/#nns_nodenamelist","title":"NNS_NODENAMELIST","text":"Important
This is the \"main\" (root) struct for all NN node (bone) name list chunks.
struct NNS_NODENAMELIST\n{\n /* The sorting type */\n NNE_NODENAME_SORTTYPE SortType;\n\n /* The size of [pNodeNameList] array */\n uint32_t nNode;\n\n /* An array of NNS_NODENAME structs */ \n NNS_NODENAME* pNodeNameList;\n};\n
Todo
Find the macros used in the text-form file format
"},{"location":"docs/nn/common/chunk-format/nodenamelist/#nns_nodename","title":"NNS_NODENAME","text":"The actual node (bone) name
struct NNS_NODENAME\n{\n /* The node index */\n uint32_t iNode;\n\n /* The node name */\n char* Name;\n};\n
"},{"location":"docs/nn/common/chunk-format/nodenamelist/#nne_nodename_sorttype","title":"NNE_NODENAME_SORTTYPE","text":"This enum indicates the sorting type used in the node name list.
enum NNE_NODENAME_SORTTYPE\n{\n /* Sorting by index */\n NNE_NODENAME_SORTTYPE_INDEX,\n\n /* Sorting by name */ \n NNE_NODENAME_SORTTYPE_NAME\n};\n
Todo
Find the macros used in the text-form file format
"},{"location":"docs/nn/common/chunk-format/texlist/","title":"TEXLIST","text":""},{"location":"docs/nn/common/chunk-format/texlist/#nns_texfilelist","title":"NNS_TEXFILELIST","text":"Important
This is the \"main\" (root) struct for all NN texture list chunks.
struct NNS_TEXFILELIST\n{\n /* The size of the [pTexFileList] array. */\n uint32_t nTex;\n\n /* An array of NNS_TEXFILE structs. */\n NNS_TEXFILE* pTexFileList;\n};\n\n/*\n Binary-form files can additionally contain embedded\n texture data via setting the [Filename] field\n within one or more NNS_TEXFILE structs to NULL.\n\n In binary-form files which utilize this feature,\n there is an extra field in NNS_TEXFILELIST after\n [pTexFileList], which is a pointer to an array of\n size [nTex] of NNS_TEXFILEDATA structs, which go like this:\n*/\n\n/* NOTE: This name was guessed. */\nstruct NNS_TEXFILEDATA\n{\n /* Seems to be flags? */\n uint32_t Unknown1;\n\n /* Pointer to the embedded texture data. */\n void* pData;\n};\n\n/* Macros used by Text-Form files: */\n#define TEXFILELIST(nTex, pTexFileList) { nTex, pTexFileList }\n#define TFL_N_TEXFILE(nTex) (nTex)\n#define TFL_TEXFILE(pTexFileList) (pTexFileList)\n
Todo
See if there exists any data using the NNS_TEXLIST struct type from Sonic 4 Episode 1 Windows Phone symbols.
"},{"location":"docs/nn/common/chunk-format/texlist/#nns_texfile","title":"NNS_TEXFILE","text":"struct NNS_TEXFILE\n{\n /* Types and flags, as specified by NNE_TEXFTYPE. */\n uint32_t fType;\n\n /*\n The name of the file this texture is stored in, or NULL if\n this texture's data is embedded within this file. This value\n should be ignored if NND_TEXFTYPE_NO_FILENAME is set in [type].\n */\n char* Filename;\n\n /*\n The minification filter to use on the texture, as specified by NNE_MIN.\n This value should be ignored if NND_TEXFTYPE_NO_FILTER is set\n in [type];\n */\n uint16_t MinFilter;\n\n /*\n The magnification filter to use on the texture, as specified by NNE_MAG.\n This value should be ignored if NND_TEXFTYPE_NO_FILTER is set\n in [type];\n */\n uint16_t MagFilter;\n\n /*\n Unknown. Maybe some games have a global texture array, and\n this is the index into that array to place this texture into?\n This value should always be ignored *unless* NND_TEXFTYPE_LISTGLBIDX\n is set in [type].\n */\n uint32_t GlobalIndex;\n\n /*\n Unknown. Maybe some games group textures into banks?\n This value should always be ignored *unless* NND_TEXFTYPE_LISTBANK\n is set in [type].\n */\n uint32_t Bank;\n};\n\n/* Macros used by Text-Form files: */\n#define TEXFILE(filename, filter) { 0, filename, filter, 0, 0 }\n#define TF_FILENAME(filename) (filename)\n#define TF_FILTER(minFilter, magFilter) (minFilter), (magFilter)\n
"},{"location":"docs/nn/common/chunk-format/texlist/#nne_mag","title":"NNE_MAG","text":"All possible texture magnification filters.
enum NNE_MAG\n{\n /* Nearest magnification filtering. */\n NND_MAG_NEAREST = 0,\n\n /* Linear magnification filtering. */\n NND_MAG_LINEAR = 1,\n\n /* Anisotropic magnification filtering. */\n NND_MAG_ANISOTROPIC = 2\n};\n
"},{"location":"docs/nn/common/chunk-format/texlist/#nne_min","title":"NNE_MIN","text":"All possible texture minification filters.
enum NNE_MIN\n{\n /* Nearest minification filtering. */\n NND_MIN_NEAREST = 0,\n\n /* Linear minification filtering. */\n NND_MIN_LINEAR = 1,\n\n /* TODO */\n NND_MIN_NEAREST_MIPMAP_NEAREST = 2,\n\n /* TODO */\n NND_MIN_NEAREST_MIPMAP_LINEAR = 3,\n\n /* TODO */\n NND_MIN_LINEAR_MIPMAP_NEAREST = 4,\n\n /* TODO */\n NND_MIN_LINEAR_MIPMAP_LINEAR = 5,\n\n /* TODO */\n NND_MIN_ANISOTROPIC = 6,\n\n /* TODO */\n NND_MIN_ANISOTROPIC2 = 6,\n\n /* TODO */\n NND_MIN_ANISOTROPIC_MIPMAP_NEAREST = 7,\n\n /* TODO */\n NND_MIN_ANISOTROPIC2_MIPMAP_NEAREST = 7,\n\n /* TODO */\n NND_MIN_ANISOTROPIC_MIPMAP_LINEAR = 8,\n\n /* TODO */\n NND_MIN_ANISOTROPIC2_MIPMAP_LINEAR = 8,\n\n /* TODO */\n NND_MIN_ANISOTROPIC4 = 9,\n\n /* TODO */\n NND_MIN_ANISOTROPIC4_MIPMAP_NEAREST = 10,\n\n /* TODO */\n NND_MIN_ANISOTROPIC4_MIPMAP_LINEAR = 11,\n\n /* TODO */\n NND_MIN_ANISOTROPIC8 = 12,\n\n /* TODO */\n NND_MIN_ANISOTROPIC8_MIPMAP_NEAREST = 13,\n\n /* TODO */\n NND_MIN_ANISOTROPIC8_MIPMAP_LINEAR = 14\n};\n
"},{"location":"docs/nn/common/chunk-format/texlist/#nne_texftype","title":"NNE_TEXFTYPE","text":"Types and flags for a NNS_TEXFILE
struct.
enum NNE_TEXFTYPE\n{\n /*\n =======================================================\n == Masks\n =======================================================\n */\n\n\n /* Apply this mask to get just the texture's type, without any flags. */\n NND_TEXFTYPE_TEXTYPE_MASK = 255,\n\n\n\n /*\n =======================================================\n == Types (required; only one must be used at a time)\n =======================================================\n */\n\n\n /* The platform's default format (used most of the time). */\n NND_TEXFTYPE_DEFAULT = 0,\n\n /* The .gim format (used on PSP). */\n NND_TEXFTYPE_GIMTEX = 1,\n\n\n\n /*\n =======================================================\n == Flags (optional; one or more can be used at a time)\n =======================================================\n */\n\n\n /* The [FileName] field should be ignored. */\n NND_TEXFTYPE_NO_FILENAME = 256,\n\n /* The [MinFilter] and [MagFilter] fields should be ignored. */\n NND_TEXFTYPE_NO_FILTER = 512,\n\n /* The [GlobalIndex] field is used (default is to ignore it). */\n NND_TEXFTYPE_LISTGLBIDX = 1024,\n\n /* The [Bank] field is used (default is to ignore it). */\n NND_TEXFTYPE_LISTBANK = 2048\n};\n
Warning
The symbols from Sonic 4 Episode I for Windows Phone 7 mention the following types:
NND_TEXFTYPE_GVRTEX = 0
NND_TEXFTYPE_SVRTEX = 1
NND_TEXFTYPE_XVRTEX = 2
Looking at various NN files, however, these appear to be incorrect?
Sony NN texture lists that actually do use SVR textures seem to set the type to 0 anyway, for example.
Don't rely on these type values!
"},{"location":"guides/hedgehog-engine/blueblur/files/xncp/anims/","title":"XNCP Animations","text":"Info
This guide uses the following tools:
XNCP animations for a specific scene are listed in AnimationDictionary, which behaves the same way as the CastDictionary:
In AnimationFrameDataList, it\u2019s possible to control the amount of keyframes that a specific animation has:
To control the speed of these animations, we have a single field in the scene that controls the frame rate:
AnimationKeyFrameDataList contains the information for all the keyframes in the animation, as well as the casts that belong in that animation.
In the screenshot above, we\u2019re seeing the data referring to Animation 0 (Intro_Anim when following the dictionary). XNCPs usually follow this naming scheme for animations:
So, in Intro_Anim, we have several CastAnimationData. These control what happens to each cast in this animation. Let\u2019s see what happens to Cast 0 (position, which usually is the parent of all casts in a scene and controls their position)...
Seems like we have flags! It\u2019s a bitfield, and it controls what actually animates in this cast. Here\u2019s the meaning of each bit:
0000 0000(0) - Nothing\n0000 0001(1) - Hide Flag\n0000 0010(2) - X Position\n0000 0100(4) - Y Position\n0000 1000(8) - Rotation\n0001 0000(16) - X Scale\n0010 0000(32) - Y Scale\n0100 0000(64) - SubImage\n1000 0000(128) - Colour Mask\n
So, with this info, we now know what animates in the position cast: It is its X Position. The CastAnimationDataSubData1List is what stores the actual animation data. The amount of entries in this list depends on the number of bits signaled in the Flags field. The first entry in the list is referring to the first bit signaled from right to left. So by that logic, the list only has one entry.
And there we go. This entry is what stores the actual KeyFrames. Let\u2019s open one up to see how it is.
Scary right? I don\u2019t understand much of what\u2019s going on here, but here we go.
Frame defines which global frame this keyframe is in. Remember AnimationFrameDataList? Yeah, this animation has a total of 10 frames, and is played at 60 FPS. For each frame, you define the global frame that it refers to. So, since this cast controls the position of the entire scene, and this is the intro animation, maybe the other keyframe has the frame field set to 10? We\u2019ll see about that shortly.
Data store the data of this keyframe. The meaning of data changes depending on the flags. Data can be:
According to the flags of this specific cast, these keyframes are supposed to control the X Position, which means that \u201cData\u201d actually represents the X Position of the cast in this frame.
The Offset and Offset2 fields control the casts' Offset position value, where \"Offset\" is X, while \"Offset2\" is Y. For example, the buttons in the title screen of Sonic Generations use these values to stay in place when they're clicked since they get scaled up and down. Let\u2019s look at the second keyframe:
As we suspected, the Frame field is now set to 10, meaning this is referring to the last frame in the animation. The value in Data has increased, so this means that this cast slides from left to right in this animation!
Looking at the remaining CastAnimationData entries, we can see that none of them animate, since their Flags field is set to 0. So we can conclude that Intro_Anim makes the position cast slide from left to right, and since \u201cposition\u201d controls the entire scene, every single cast from this scene slides from left to right in this animation!
"},{"location":"guides/hedgehog-engine/blueblur/files/xncp/anims/#additional-notes","title":"Additional Notes","text":"An animation can only be looped using code, so that can't be controlled via the XNCP. However, Field00 in CastAnimationDataSubData does seem to control how fast a loop occurs, where the value 1 seems to loop it with a delay, while 2 makes it loop smoother.
"},{"location":"guides/hedgehog-engine/blueblur/files/xncp/anims/#conclusion","title":"Conclusion","text":"Hope I explained XNCP animations well enough. Have fun!
PS: there\u2019s also AnimationData2List but...
"},{"location":"guides/hedgehog-engine/blueblur/files/xncp/basics/","title":"The Basics of XNCP Editing","text":"Info
This guide uses the following tools:
XNCP is the file format of Sonic Generations's UI. In this guide, I'll explain the general things you need to get started.
"},{"location":"guides/hedgehog-engine/blueblur/files/xncp/basics/#requirements","title":"Requirements","text":"First of all, you will need to download the 010 Editor. This program is used for hex editing, and in our case, to modify XNCP files. You'll also need to download the XNCP Template; essentially, this file will make it so that you can read and understand the XNCP file's contents, otherwise you'd only see hex numbers, and that's not exactly readable.
"},{"location":"guides/hedgehog-engine/blueblur/files/xncp/basics/#opening-an-xncp-file","title":"Opening an XNCP file","text":"After installing the 010 Editor, and downloaded the XNCP Template, it's time to open a file.
Open the 010 Editor and click on File > Open File..., and open the file that you need to edit.
After opening the file, you'll see a bunch of numbers. Don't get freaked out, this is normal. These are the contents of the XNCP file.
Now, you need to go to Templates > Open Template..., and open the file that we downloaded before. It's called sonic_xncp_yncp.bt.
After opening the file, a window should pop up with the template's code. You can just ignore this window and hide it wherever you'd like, you won't need to modify this.
Now, go back to Templates and click on Run Template. This should now make the numbers have colorful backgrounds, and a new window will appear below the hex view.
This new window that has appeared will be your workspace. This'll be the way in which you edit all aspects of a UI file. Click on the struct TFAPC File dropdown, then struct TFAPCEmbeddedRes Resources[0], then struct TNNNCPJChunk CsdmProject, and then on struct TCSDNode Root. Now you'll have a few variables here; I'll explain what some of them mean!
"},{"location":"guides/hedgehog-engine/blueblur/files/xncp/basics/#the-structure-of-an-xncp-file-resource-0","title":"The structure of an XNCP file (Resource 0)","text":"Scenes are essentially the containers for a specific group of UI elements, think of it like a folder inside a folder, and you'll need SceneIDTable to understand which Scene is what. This table contains the name and index of each Scene (e.g: Scene \"gauge\" in ui_gameplay.xncp is the \"folder\" that contains all elements of the boost bar in the HUD). Scenes also have a few variables that may be of interest, like:
And the most important one of all:
The Cast has several variables that you can change:
0 - No Draw (invisible)\n1 - Sprite\n2 - Font\n
Info
If you're disabling a cast, make sure that it does not have children, or it might make the UI look weird!
Translation\nRotation\nScale\nColor - where the variable \"Color\" will change the main color of the image, and GradientTopLeft,BottomLeft,TopRight,BottomRight will change the colors of the corners of the image\n
Before, I wrote that you needed to go into Resource 0. This is because Resource 0 has most of the cool stuff that you can edit, while Resource 1 contains data about image file locations.
This was a general introduction to XNCP files, and their structures. For more information, check out the other guides in the sidebar!
"},{"location":"guides/hedgehog-engine/blueblur/levels/glvl/","title":"How to use Sonic GLvl with Sonic Generations","text":"Info
This guide uses the following tools:
Note
These video guides are old and are for Sonic GLvl 0.5.7. It's recommended you use the latest 0.9 version instead. Even if 0.9 is a more recent version, the general way of working with it remains the same, hence why these videos are still relevant.
"},{"location":"guides/hedgehog-engine/blueblur/levels/glvl/#part-1-getting-levels-and-camera-controls","title":"Part 1 (Getting Levels and Camera Controls)","text":""},{"location":"guides/hedgehog-engine/blueblur/levels/glvl/#part-2-basic-level-editing-and-testing-your-mod-in-game","title":"Part 2 (Basic Level Editing and Testing your mod in-game)","text":""},{"location":"guides/hedgehog-engine/blueblur/levels/importing-collision/","title":"How To Import Custom Collision in Sonic Generations","text":"Info
This guide uses the following tools:
You'll need a separate model for the collision. While it is possible to use your stage's model files as a collision, we still recommend that you create a separate project/model for it, even if it's a copy of it.
It is possible to specify tags for your collision, which control the type of collision it has. For this, you'll need a special ini file for HavokConverter with tags. You can download it here. To apply these tags to your collision model, you can simply rename the meshes and add the tag as a prefix to its name. Below is an example of how you can do this, in case you want a mesh to have the \"Stone\" collision tag:
Example
You can find all the available tags by opening HavokConverter
after placing the mentioned INI file in the same folder as its executable.
Open HavokConverter.exe
and fill the following options:
Now you can click the Convert
button and wait.
When the conversion process finishes, extract your custom stage's #
file, and place the generated phy.hkx
file there. Afterwards, open the Terrain.stg.xml
file, and edit the collision file that is mentioned. This is mentioned in the RigidBodyContainer
tag. Change its value to your phy.hkx
filename, without the extension. Below is an example for a file name MyCollision.phy.hkx
:
Now re-pack this file and replace the original. After booting into the game, you should now notice that your level has working collision.
"},{"location":"guides/hedgehog-engine/blueblur/levels/importing-terrain/","title":"How To Import Custom Terrain in Sonic Generations","text":"Info
This guide uses the following tools:
First of all, you need terrain for your level. You can do the terrain yourself, or take already created terrain. If your level contains transparent materials you need to add a proper layer tag to it. For transparency, you have two available layers, and you should pick the one that's best suited for your use case in order to avoid issues.
Layers Usage punch Used for materials which have binary transparency (one part is 100% opaque, another is 100% transparent). Useful for most kinds of textures, like leaves or grass trans Used for translucent materials, as in, materials which are not 100% opaque but also not 100% transparent (ex. windows)In order to specify a layer for a material, use the @LYR
prefix, with the layer name between parenthesis after it.
Example
You can then export your terrain from Blender into an Assimp compatible format (FBX, DAE or OBJ work).
"},{"location":"guides/hedgehog-engine/blueblur/levels/importing-terrain/#part-2-importing-the-level-to-the-game","title":"Part 2 (Importing the Level to the Game)","text":"Download SonicGLvl, and run bin/HedgehogConverter.exe
. Fill up the following entries:
Make sure that the folder has a name that matches the target stage you want to replace. For example, for Green Hill Modern, use the folder name ghz200
.
Be sure to also turn on the following options under \"Materials\":
In the end, you should have something similar to this:
Next, click the Convert
button and wait.
Once the conversion is done, we need to get files that might be missing from your stage.
"},{"location":"guides/hedgehog-engine/blueblur/levels/importing-terrain/#stagear-file","title":"#stage.ar file","text":"Your stage needs a \\#
file in order to store set-data, collision, and other stage information. We can use the file from the stage we're replacing. If you're replacing Green Hill Modern, go to disk/bb.cpk
(extract using PackCpk), and copy the #ghz200.ar.00
and #ghz200.arl
files into your stage mod files (disk/bb
folder).
Next up, we need to do some very basic setup of your level's set data in SonicGlvl. Open the app, and open your stage's #
archive from there. Once the level has been imported into SonicGlvl, press Ctrl+A and then Delete. This will delete all the objects that are present in your level's set data, which are the original objects from the stage we are replacing. Now, find \"SonicSpawn\"
in the objects menu on the left, and place it anywhere you want. This will be where Sonic will spawn in your level. Also, be sure to set the \"Active\" property to \"true\" in the settings of the \"SonicSpawn\"
object.
After that, go to \"File\" and press \"Save Stage Data\" and \"Save Stage Terrain\".
"},{"location":"guides/hedgehog-engine/blueblur/levels/importing-terrain/#part-4-creating-skybox-optional-but-recommended","title":"Part 4 (Creating Skybox - Optional but Recommended)","text":"Skyboxes in Sonic Generations are just regular .model files. Though not mandatory for the game to boot, they are recommended so that your level at least has a sky for you to look at. You can take these from the original levels or create one yourself.
"},{"location":"guides/hedgehog-engine/blueblur/levels/importing-terrain/#making-one-yourself","title":"Making one yourself","text":"Export your skybox model from Blender into an Assimp compatible file format. Then, using ModelConverter, drag and drop the model file into the Sonic Generations .bat file. This will generate the .model file, as well as material files. You will need to convert the textures of your skybox manually into the DDS format.
"},{"location":"guides/hedgehog-engine/blueblur/levels/importing-terrain/#grabbing-one-from-a-level","title":"Grabbing one from a level","text":"Go to the Packed
folder in bb/bb2, and open the folder corresponding to the level you want the skybox from. Then, extract the .ar
archive, and look for the sky's .model
file. The name should have something to do with \"sky\". If yo don't manage to find it, look at the stage's Terrain.stage.xml
file, as it will mention the skybox's model name there. You will need the .model file, the textures (.dds
files) and the materials of the sky model.
After getting the necessary skybox model files, place them inside your stage's Packed/stageName/stage.ar
file. Then, open #
file of your stage, and open the Terrain.stg.xml
file. You'll need to create a Sky
tag and write the name of the .model
file of your skybox, without the extension. Below is an example of how you should write this. In this example, the skybox has a model file named MySkybox.model
:
This concludes this guide. If you boot your stage now, you'll notice that you will fall through the ground. This is because you only ported the terrain, and not the collision. To do this, follow the guide here.
"},{"location":"guides/hedgehog-engine/blueblur/levels/troubleshooting/","title":"Troubleshooting","text":""},{"location":"guides/hedgehog-engine/blueblur/levels/troubleshooting/#common-issues","title":"Common Issues","text":""},{"location":"guides/hedgehog-engine/blueblur/levels/troubleshooting/#black-textures","title":"Black Textures","text":"Textures must have power of two resolutions. For example, 512x512, 1024x1024, 2048x4096, etc. An arbitrary resolution like 600x600 is not supported by the game when using compressed textures.
"},{"location":"guides/hedgehog-engine/blueblur/levels/troubleshooting/#rainbow-flashing-textures","title":"Rainbow Flashing Textures","text":"The game shows a rainbow flashing texture if the texture assigned to a material is missing. Ensure you included the texture in the AR and didn't make a typo in the material.
"},{"location":"guides/hedgehog-engine/blueblur/levels/troubleshooting/#randomly-switching-textures","title":"Randomly Switching Textures","text":"The material might not have any textures assigned at all. You need to at least assign one diffuse texture, otherwise the game is going to use the texture of whatever was rendered last.
"},{"location":"guides/hedgehog-engine/blueblur/levels/troubleshooting/#missing-terrain-models","title":"Missing Terrain Models","text":"Terrain.prm.xml
file might require higher memory sizes. Look for the g_TerrainModelLimitSizeDefault
and g_TerrainModelLimitSizeWin32
parameters, and increase them. If your stage requires more memory than what is defined in this file, some of your models might not render.The game fallbacks to displaying a red emissive material if the shader assigned to a material does not exist. If you want to see every available shader in the game, unpack shader_r_add.ar.00
located inside bb3.cpk
, and look for files with .shader-list
extension.
Terrain.prm.xml
file might require higher memory sizes. Look for the g_GITextureLimitSizeDefault
and g_GITextureLimitSizeWin32
parameters, and increase them.
If you add a new direct light with a different name, you need to edit Terrain.stg.xml
to make the stage use it. For example:
<Light>\n <DataName>MyDirectLight</DataName>\n</Light>\n
"},{"location":"guides/hedgehog-engine/blueblur/levels/troubleshooting/#missing-sky-model","title":"Missing Sky Model","text":"If you add a new sky model with a different name, you need to edit Terrain.stg.xml
to make the stage use it. For example:
<Sky>\n <Model>MySkyModel</Model>\n</Sky>\n
Ensure that the materials of the sky model also use sky shaders such as Sky_d
.
Certain enemies are loaded manually in stages to save memory. If an enemy does not appear in your stage, you can fix it by editing EnemyArchiveTree.xml
inside #Application.ar.00
. In this example, ghz_cmn
entry was modified to include data from EnemyEFighter
, which allows egg fighters to be used in both ghz100
and ghz200
:
<DefAppend>\n <Name>ghz_cmn</Name>\n <Archive>EnemyCommon</Archive>\n <Archive>EnemyBeeton</Archive>\n <Archive>EnemyBatabata</Archive>\n <Archive>EnemyGanigani</Archive>\n <Archive>EnemyMotora</Archive>\n <Archive>EnemyEFighter</Archive>\n</DefAppend>\n
"},{"location":"guides/hedgehog-engine/blueblur/levels/troubleshooting/#common-crash-reasons","title":"Common Crash Reasons","text":""},{"location":"guides/hedgehog-engine/blueblur/levels/troubleshooting/#missing-material-files","title":"Missing Material Files","text":"Unlike later games, missing materials can cause a crash in Sonic Generations and Sonic Unleashed.
"},{"location":"guides/hedgehog-engine/blueblur/levels/troubleshooting/#periods-in-file-names","title":"Periods in File Names","text":"Having periods in your file names can confuse the game and cause crashes. For example, having a material named Material.000.material
would make the game think the file has a .000.material
extension, and not recognize it as a material file.
Instances starting with ins
are treated differently, and require specialized material shaders. Using any other shader causes a crash. Ensure that none of the instances in your stage start with this word.
Run GI Atlas Converter on Pre-Render mode to have this file created automatically.
"},{"location":"guides/hedgehog-engine/blueblur/levels/troubleshooting/#missing-light-listlight-list-file","title":"Missing \"light-list.light-list\" File","text":"Copy paste .light
and .light-list
files from another stage, or add a direct light to your level in the 3D software you use. Latest Hedgehog Converter can import direct lights, so ensure your tools are up to date. Use HedgeGI for advanced light editing.
PFD files are loaded through PFI files. If the Stage.pfi
/Stage-Add.pfi
files don't match with the Stage.pfd
/Stage-Add.pfd
files in the stage, this causes a crash. Unpack the PFD files, and repack them back with HedgeArcPack using -T=pfd
command-line option to generate matching PFI files.
The game doesn't load certain Sonic animations to save memory if the gimmick in question is never used. For example, diving animations stored in SonicDiving.ar.00
are only loaded in Chemical Plant, Speed Highway and Planet Wisp. If diving is used in any other stage, the game is going to crash due to unloaded animations. This behavior can be configured by editing ArchiveTree.xml
inside #Application.ar.00
. In this example, SonicDiving
entry was edited to load in the ghz200
stage slot:
<Node>\n <Name>SonicDiving</Name>\n <Archive>SonicDiving</Archive>\n <Order>0</Order>\n <DefAppend>SonicDiving</DefAppend>\n <Node>\n <Name>bne</Name>\n <Archive>bne</Archive>\n <Order>0</Order>\n </Node>\n <Node>\n <Name>cpz200</Name>\n <Archive>cpz200</Archive>\n <Order>0</Order>\n </Node>\n <Node>\n <Name>pla200</Name>\n <Archive>pla200</Archive>\n <Order>0</Order>\n </Node>\n <Node>\n <Name>sph200</Name>\n <Archive>sph200</Archive>\n <Order>0</Order>\n </Node>\n <Node>\n <Name>ghz200</Name>\n <Archive>ghz200</Archive>\n <Order>0</Order>\n </Node> \n</Node>\n
"},{"location":"guides/hedgehog-engine/blueblur/levels/troubleshooting/#lightfield-file-too-large","title":"Lightfield File Too Large","text":"Your game might crash randomly when booting your level if the level's lightfield (.lft) file is too large. Try increasing the minimum cell radius in HedgeGI to reduce the lightfield's file size.
"},{"location":"guides/hedgehog-engine/blueblur/locations/sound/","title":"Sounds","text":"Info
These files require the following tools:
This guide contains a list of file locations for the audio files in Sonic Generations, the name of the folder in which the files are present will be above the table. Music and sound effects use the \"CSB\" format, these can be opened with SonicAudioTools.
"},{"location":"guides/hedgehog-engine/blueblur/locations/sound/#sound","title":"Sound","text":"File Name Description SNG00_SYS Title Screen Audio SNG01_GHZ Green Hill Music SNG02_CPZ Chemical Plant Music SNG03_SSZ Sky Sanctuary Music SNG04_SPH Speed Highway Music SNG05_CTE City Escape Music SNG06_SSH Seaside Hill Music SNG07_CSC Crisis City Music SNG08_EUC Rooftop Run Music SNG09_PLA Planet Wisp Music SNG10_CNZ (DLC) Casino Night Music SNG11_BMS VS. Metal Sonic Audio SNG12_BSD VS. Shadow Audio SNG13_BSL VS. Silver Audio SNG14_BDE VS. Death Egg Audio SNG15_BPC VS. Perfect Chaos Audio SNG16_BNE VS. Egg Dragoon Audio SNG17_BLB VS. Time Eater Audio SNG19_JNG Skills, Game Over, Results SNG20_MSN Generic Mission Music SNG21_ETC 20th Anniversary Demo Jingle SNG22_ADD BGM Select Music for Stages SNG23_PAM Shop & Collection Room Audio 30VCE_BLB_NP_(locale) Time Eater NPC Voices 30VCE_BOS_EG_(locale) Time Eater Eggman Voices 30VCE_EVT_NP_(locale) NPC Unlock Events 30VCE_HNT_(locale)_WIN32 Omochao Hints 50BOS_EVT Sounds for Cutscenes 70NPC_EVT Sounds for NPC Unlocks"},{"location":"guides/hedgehog-engine/blueblur/locations/sound/#diskbb2pam000","title":"disk/bb2/pam000","text":"File Name Description 40OBJ_PAM White World Object Sounds 40AMB_PAM White World Ambiance Sounds 40OBJ_CMN_PAM White World Common Objects Sounds"},{"location":"guides/hedgehog-engine/blueblur/locations/sound/#diskbb2pla200","title":"disk/bb2/pla200","text":"File Name Description 42OBJ_PLA Planet Wisp ACT 2 Objects 42AMB_PLA Planet Wisp ACT 2 Ambiance"},{"location":"guides/hedgehog-engine/blueblur/locations/sound/#diskbb2enemycommon","title":"disk/bb2/EnemyCommon","text":"File Name Description 51ENM_CMN Enemy Sound Effects #1 52ENM_CMN Enemy Sound Effects #2"},{"location":"guides/hedgehog-engine/blueblur/locations/sound/#diskbb2bsd","title":"disk/bb2/bsd","text":"File Name Description 52BOS_BSD VS. Shadow Sounds 42OBJ_BSD VS. Shadow Object Sounds 42AMB_BSD VS. Shadow Ambiance Sounds"},{"location":"guides/hedgehog-engine/blueblur/locations/sound/#diskbbactioncommon","title":"disk/bb/ActionCommon","text":"File Name Description 10SYS_ACT Results Screen Sounds"},{"location":"guides/hedgehog-engine/blueblur/locations/sound/#diskbb3application","title":"disk/bb3/Application","text":"File Name Description 10SYS_CMN HUD Sounds"},{"location":"guides/hedgehog-engine/blueblur/locations/sound/#diskbb3sonic","title":"disk/bb3/Sonic","text":"File Name Description 22PLY_SNC_PAM Sonic Sounds"},{"location":"guides/hedgehog-engine/blueblur/locations/sound/#diskbb3cmn100-or-cmn200","title":"disk/bb3/cmn100 (or cmn200)","text":"File Name Description 21PLY_SNC Gimmick Sounds #1 22PLY_SNC Gimmick Sounds #2 41AMB_CMN Common Ambiance Sounds #1 42AMB_CMN Common Ambiance Sounds #2 40OBJ_CMN_PAM Common Object Sounds (White World) 41OBJ_CMN Miscellaneous Object Sounds #1 42OBJ_CMN Miscellaneous Object Sounds #2 61CTS_CMN Skill Sounds #1 62CTS_CMN Skill Sounds #2"},{"location":"guides/hedgehog-engine/rangers/animation/import-export/","title":"Animation Importing & Exporting","text":"This guide will assume you have at least some understanding of animating in Blender.
Info
This guide uses the following tools:
First, download the required tools and extract them. Open Blender and go to Edit > Preferences
. Click on Add-ons
, and then Install...
. Browse to the FrontiersAnimDecompress folder, and install each of the 4 plugins in this directory, then minimise Blender.
Locate the pac file that contains the animations you want to change. For sonic's animations, look for raw\\character\\sonic.pac
. First, make sure you create a copy of the pac file of your choice in a folder somewhere so you don't accidentally replace your game files. Drag and drop the pac file onto HedgeArcPack.exe to extract the file into a folder.
Open the newly created folder and find the animation you want to change. These animation files have the extension .anm.pxd
. Drag and drop the .anm.pxd
file onto FrontiersAnimDecompress.exe. This will create a new file with the extension .anm.pxd.outanim
.
Open Blender again, and go to File > Import
, then select Hedgehog Engine (.model)
and browse for your model file.
Info
If you don't know how to get your model, first watch the Model Import Tutorial
After importing, select the Armature and go to File > Import
, and this time select Hedgehog Engine Compressed (.outanim)
, and browse for your .outanim
file we created in the previous step. You should now see the animation within Blender!
Info
If you don't know how to edit the animation, please look for a Blender tutorial to learn the basics in order to continue. The animation process is not specific to Sonic Frontiers.
"},{"location":"guides/hedgehog-engine/rangers/animation/import-export/#exporting-the-animation","title":"Exporting the Animation","text":"When you have finished making your changes to the animation, go to File > Export
and select Hedgehog Engine Compressed (.outanim)
, then browse for somewhere to save your file. You may overwrite the .outanim
file you imported if you like. You may close Blender now.
Drag and drop the newly exported .outanim
onto FrontiersAnimDecompress.exe to create a new .anm.pxd
containing your animation. Rename this file to be exactly the same as the original file you decompressed. If you haven't already, place it back in it's pac folder, and replace the existing file.
Now drag the pac folder onto HedgeArcPack.exe to repack the file, which you can then use in your mod!
"},{"location":"guides/hedgehog-engine/rangers/audio/replacing/","title":"Replacing Audio","text":"Info
This guide uses the following tools:
Warning
This currently does not work while replacing boss music! Also, backup any files that you modify unless you are sure of what you are doing!
"},{"location":"guides/hedgehog-engine/rangers/audio/replacing/#what-to-do","title":"What to do","text":"Find the .ACB file containing the audio that you wish to edit and open it up in foobar2000. If there is an accompanying .AWB file, open this instead.
Audio is stored in SonicFrontiers\\image\\x64\\raw\\sound
Once foobar has opened you will be able to see the names of and listen back to the respective audio files. Make sure that you have the \"Item Index\" column enabled.
Use ACBEditor.exe found in SonicAudioTools to extract all audio files by dragging and dropping the .ACB onto the exe.
There will now be a folder named the same as the .ACB that will contain .HCA files. The name of the .HCA file will be a 5 digit number that is the Item Index number -1. If you are replacing music it will be a 5 digit number and the word \"streaming\"
Example
\"1\" in the sound effect Item Index would be \"00000.hca\" and \"220\" in the music Item Index would be \"00219_streaming.hca\" (Less .HCA files may be extracted than the number of cues shown in the Item Index. Make sure to double check that the .HCA is the sound you wish to change before replacing it)
Create a .WAV file of whatever sound it is you wish to put in game and name it the same as the .HCA file you are going to replace.
Open VGAudio.Wpf and load the created .WAV file. (If you wish to convert multiple files then go to the batch tab where you will be able to add more files.)
Once the file(s) are loaded, select .HCA on the dropdown menu of file types. Save and replace the file(s) to the folder full of extracted HCA's.
Drag and drop the folder back onto ACBEditor.exe and it will repack the .ACB file with the new audio files.
"},{"location":"guides/hedgehog-engine/rangers/audio/replacing/#creating-looped-soundsmusic","title":"Creating looped sounds/music","text":"If you are working with BGM or SFX that loop, you will need to create loop points in the .HCA file. This can be done easily using VGAudio.Wpf.
Follow the same instructions as listed above but when it come to creating the HCA file you will want to drop down the menu that says \"Loop File\". You will be presented with two boxes, one labelled \"Loop Start\" and the other labelled \"Loop End\". The format used in these boxes is Samples which can easily be found in most audio editing software. Find the point in your .WAV file where you would like the sound to start looping and input that number into the \"Loop Start\" box, then do likewise with \"Loop End\". From here the process is once again the same as detailed above.
Now you can put Open Your Heart over every boss fight :)
"},{"location":"guides/hedgehog-engine/rangers/cyloop/color/","title":"Replacing Cyloop Color","text":"Info
This guide uses the following tools:
First you're going to need to drag playercommon.pac
onto HedgeArcPack.exe to get a playercommon folder. Then, find the player_common.rfl
file in that folder, and open it in 010 editor.
You're going to need to use the PlayerParameters.bt
binary template on 010 editor. This can be done by going to \"Templates\" at the top and pressing \"Open Template\" and selecting the PlayerParameters.bt
Afterwards, you can press \"Run Template\" and it should bring up a new window in 010 editor.
Info
If a new window doesn't appear, restart 010 editor or reload player_common.rfl
into the editor
Run the PlayerParameters.bt
template and you should see new information in the Variables tab in 010 editor. Split your editor so that you can see your hex values, the inspector tab, and the variables tab all at once.
Now you're ready to hex edit!
"},{"location":"guides/hedgehog-engine/rangers/cyloop/color/#editing-the-file","title":"Editing the file","text":"Open struct PlayerParameters data
in variables, then go into struct CommonPackage common
, and find struct PlayerParamCyloop cyloop
Open the cyloop struct and find CyloopLocusParameter locus
, this holds the colors for the cyloop across multiple variables. Each color will look like this (there are 3 of these):
...or these (there are 2 of these)
When you open these variables, you will see 4 values, float r, g, b, and a. These values don't make sense so keep up with this:
Choose a color with its rgb decimal code (ex: Lawn Green is (124,252,0)), then take each of your values and divide them by 255.
Example
Replace the float values with your new values (you don't need to touch float r), like the example below:
Do this for all of the color struct variables from earlier. This will replace all of the different parts of the cyloop, but you can mix colors for different results, like making some of the cyloop variables red, and some white.
"},{"location":"guides/hedgehog-engine/rangers/cyloop/color/#saving-your-changes","title":"Saving Your Changes","text":"Once you're happy with your color choices, go to \"File\"\" and save your player_common.rfl
file. Then, repack your playercommon folder into a .pac file, which you can then use in your mod!
This guide will assume you have at least some understanding of how PBR texturing works.
Info
This guide uses the following tools:
Note
There is a Substance Painter Export Template if you use Substance to export the PRM map so you don't have to construct it.
"},{"location":"guides/hedgehog-engine/rangers/materials/advanced-mats/#preparation","title":"Preparation","text":"This guide expects you to have a model that loads ingame and 5 texture maps for your model:
Ambient Occlusion
Map (if you do not want this make a solid 1
texture)Metallic
Map (if you do not want this make a solid 0
texture)f0 Specular
Map (if you do not want this make a solid 0.25
texture)Roughness
Map (if you do not want this make a solid 0.8
texture)OpenGL, Y+/Y up, Green+/Green up
Map (if you do not want this make a solid 0.5, 0.5, 1
texture) Hedgehog Engine 2 games use some variation of the PRM texture setup, Frontiers specifically uses the RGBA
setup, Specular, Smoothness, Metallic, Ambient Occlusion
. So we need to construct a map using our textures, as long as the textures go into the corresponding channels.
Add your textures besides the Normal Map
textures as layers in your photoshop document.
Then open the effects panel and have the corresponding channel as stated above be the only channel checked
Lastly select your Roughness
layer and invert it (Ctrl+I). Smoothness in PBR is just inverted roughness.
This will be your PRM map. Save it to your work directory.
"},{"location":"guides/hedgehog-engine/rangers/materials/advanced-mats/#converting-png-to-dds-correctly","title":"Converting PNG to DDS correctly","text":"Open Nvidia Texture Tools Exporter
and load your texture you want to convert and make sure BC7
is selected for the Color
maps, for your normal
map make sure BC5u
is selected (The normal map will show as yellow in the icon, ignore it). Then Save As... .dds
Example
Info
When saving the PRM texture make sure Premultiplied Alpha Blending
is unchecked
your model converter will have made .material files, you may even be using them. Remember their names and delete them. It is generally better to modify pre existing materials as it will look better because they include all the shader parameters.
A good base to modify off of is Sonic's cloth, since it is a common prm shader.
Duplicate and rename the material file you're building off of to the material name the model converter outputted.
Open HedgeEdit, then navigate to Edit > Material Editor
Once the pop up opened use File > Open to open one of the .material file you made. Then hit the ... next to Textures (Collection)
Each of these members are textures the material feeds the shader. What's important is there's 3 and they should correlate to the textures we made earlier.
Select each member and set TextureName
to the filename of the .dds
we made earlier without the file extension
Note
If you chose to edit a nondefault material (IE Sonics fur) you may need to go to the Parameters
section to get the members for the parameters.
Usually texture suffixes like fal
go to falloffs, flw
flow maps, fur
noise layer overlayed on the diffuse for the fur.
Save the material then you're done.
"},{"location":"guides/hedgehog-engine/rangers/models/import/","title":"Model Importing","text":"Info
This guide uses the following tools:
Firstly, create a PAC file named after the character and proceed to extract the contents of the archive utilizing the HedgeArcPack tool.
"},{"location":"guides/hedgehog-engine/rangers/models/import/#converting-to-fbx-and-importing-into-blender","title":"Converting to FBX and Importing into Blender","text":"Next, convert the chr_character.model
file into the FBX format using the ModelFBX tool. Please note that certain models may not necessitate conversion into FBX format. If you don't need to use the FBX format, use the HedgeNeedle tool, extract the various levels of detail from the .model
file, and rename chr_character.0.model
to chr_character
. Subsequently, utilize the model importer add-on to import the model into Blender.
After the model is imported into Blender, introduce your own model that is intended to be utilized in-game, and proceed to rig it to the original model's skeleton. It is crucial to ensure that the vertex count of your model does not surpass the maximum requirements of the model converter, which is approximately 21,000 vertices per object.
"},{"location":"guides/hedgehog-engine/rangers/models/import/#assigning-weights-and-resources","title":"Assigning Weights and Resources","text":"As weights primarily refer to Blender rather than the Hedgehog Engine itself, you should use the following resources as they may be useful in learning how to manage weights:
Weight Transfer Guide Weight Painting Guide
"},{"location":"guides/hedgehog-engine/rangers/models/import/#rigging-and-exporting-the-model","title":"Rigging and Exporting the Model","text":"Once the character model has been rigged, select the model and the original skeleton, and proceed to export them as an FBX file. In case the original model is not deleted, choose 'selected objects only' in the export settings. Although the other export settings are generally insignificant, it may be necessary to modify the scale to 0.01.
"},{"location":"guides/hedgehog-engine/rangers/models/import/#converting-to-model-and-creating-pac-file","title":"Converting to .model and Creating PAC File","text":"Utilizing the ModelConverter
tool, drag the FBX file onto ModelConverter.exe to turn it into a .model file. Subsequently, place the new .model file into the previously extracted PAC folder. To generate a new PAC file, drop the folder onto HedgeArcPack
. The PAC file may then be used in your mod to observe the changes made. Although the other export settings are generally insignificant, it may be necessary to modify the scale to 0.01.
Utilizing the ModelConverter
tool, drag the FBX file onto ModelConverter.exe to turn it into a .model file. Subsequently, place the new .model file into the previously extracted PAC folder. To generate a new PAC file, drop the folder onto HedgeArcPack
. The PAC file may then be used in your mod to observe the changes made.
For assistance with preparing materials and texture for Sonic Frontiers, refer to the Advanced Material Editing Tutorial.
"},{"location":"guides/hedgehog-engine/swa/levels/glvl/","title":"How to use Sonic GLvl with Sonic Unleashed","text":"Note
This guide covers how to setup Sonic Unleashed Xbox 360 levels in GLvl, but does not cover how to use this tool or how to set it up for PS3 levels. It's recommended that you also read the Sonic Generations GLvl guide.
Info
This guide uses the following tools:
This example will be editing Windmill Isle Act 1 Day. Open your extracted Unleashed game folder and locate your files. In my case, the files are
#ActD_MykonosAct1.ar.00\n#ActD_MykonosAct1.arl\nActD_MykonosAct1.ar.00 \nActD_MykonosAct1.ar.01\nActD_MykonosAct1.arl\n
Once located you will need to copy those files to the #files folder inside your Mod Toolbox directory. now open #SUModToolbox.bat and press 3 and enter to decompress the files, press 1 or 2 depending on the system and press enter.
Now copy the files inside #output/DecompressedFiles to a seperate folder. In order for GLvl to read the model you need to make a folder called \"Packed\" and inside your Unleashed game folder go to \"Packed\" and copy the level folder to the new \"Packed\" folder next to your decompressed .ar files.
"},{"location":"guides/hedgehog-engine/swa/levels/glvl/#preparing-glvl","title":"Preparing GLvl","text":"Locate your Xbox 360 SDK's bin/win32 folder and copy xbcompress.exe, xbdecompress.exe, xbdm.dll, msvcp71.dll and msvcr71.dll and paste them into your GLvls \"bin\" directory.
Open your GLvl folder and go to /database/LevelDatabase.xml
, you will need to add your entry for the level, in my case it would be:
<Entry name=\"ActD_MykonosAct1\" geometry=\"ActD_MykonosAct1\" layout_merge=\"\" slot=\"WindmillIsle 1\" game=\"Unleashed/\">
Afterwards the file should look something like this:
<LevelDatabase>\n <Entry name=\"ghz200\" geometry=\"ghz200\" layout_merge=\"\" slot=\"GreenHillZone\" game=\"Generations\" />\n <Entry name=\"ghz201\" geometry=\"ghz200\" layout_merge=\"\" slot=\"GreenHillZone\" game=\"Generations\" />\n <Entry name=\"cte200\" geometry=\"cte200\" layout_merge=\"\" slot=\"CityEscapeZone\" game=\"Generations\" />\n <Entry name=\"ActD_Beach\" geometry=\"ActD_Beach\" layout_merge=\"\" slot=\"JungleJoyride\" game=\"Unleashed\" />\n <Entry name=\"ActD_Africa\" geometry=\"ActD_Africa\" layout_merge=\"\" slot=\"SavanaCitadel\" game=\"Unleashed\" />\n <Entry name=\"ActD_MykonosAct1\" geometry=\"ActD_MykonosAct1\" layout_merge=\"\" slot=\"WindmillIsle 1\" game=\"Unleashed\"/>\n</LevelDatabase>\n
Open \"Unleashed Object Template.zip\" and extract the contents here, Replace files if asked.
Save the file, open GLvl, press Ctrl+O and find your decompressed .ar files. Click \"Ok\" on the first prompt and click \"Yes\" on the prompt asking about unpacking terrain.
"},{"location":"guides/hedgehog-engine/swa/levels/glvl/#extracting-textures-and-adding-them-to-glvl","title":"Extracting Textures and adding them to GLvl","text":"Inside Unleashed Mod Toolbox delete the files inside #files and #output. From your Unleashed game folder copy the various Cmn.ar files for your level and paste them inside the #files of the Unleashed ToolBox.
Open #SUModToolbox.bat and press 4 and enter to decompress the files, press 1 and enter and press 1 or 2 depending on the system and press enter. go to #files and delete the contents of the folder. Inside #output you might notice some files have not been extracted. This is because files other than ar.00 and arl don't extract, however you fix this by simply changing the file extension to ar.00, changing the file name and re-extracting them in the ToolBox.
Copy the contents of each folder in #output/ExtractedFiles into GLvl/cache/your-level/resources, replacing files if asked.
"},{"location":"guides/nn/marathon/levels/glvl/","title":"How to use Sonic GLvl with Sonic '06","text":"Info
This guide uses the following tools:
Note
Due to a lack of an actual, dedicated level editor for Sonic '06, we (at the time of writing) use a hacked together solution that allows us to use Sonic GLvl as a stand in. This guide will explain how to set up GLvl for this purpose, with the assumption that the user understands basic usage of the program itself.
"},{"location":"guides/nn/marathon/levels/glvl/#setting-up","title":"Setting Up","text":"Download your preferred version of Sonic GLvl 0.9 and extract the repository to any location. Then, open the database folder and delete the objects
folder. Next, download the Sonic '06 Stage Editing Archive and extract the SonicGLvl/database
folder to your SonicGLvl location, choosing to merge/replace existing files.
Pre converted copies of the actual Sonic '06 stages are present on the Stage Editing Archive repository (under the SonicGLvl/import
directory). When converting your own terrain (such as for a stage mod) the process is almost identical to the conversion process for Sonic Generations (it's recommended to use the two #base
files as a template). The crucial step is to remember to set the stage scale in HedgehogConverter to 1% on all three axis, as the scale does not match between both games.
The process of placing and editing objects at this point follows the workflow of using Sonic GLvl for a Generations stage mod, so will not be covered here.
"},{"location":"guides/nn/marathon/levels/glvl/#groups","title":"Groups","text":"Objects in '06 make frequent usage of grouping, allowing objects to influence each other in some way (such as an Egg Chaser commanding a squad of Egg Liners or defeating an enemy unlocking a cage). To set these up, create an XML in your stage's cache directory called groupdata_[x].group.xml
(where [x] is a name, such as base
). Then lay them out as shown below.
Each <Group> key is... Well... A Group that will be compiled into the converted SET.
The <Name> key seems to just be for identification, so here (for Ocean Palace) I called it CageGroup01
as it was the first group I made that unlocked a cage.
The <Type> key is the name of the lua event that this group will activate, this key can be left empty if the group doesn't need to activate anything. In this example, it's called Cage01, so it will fire the event called Cage01 in the stage's lua file; which, as you can probably guess, signalled a cage to open.
The <ObjectCount> key simply lists how many objects this group has (and honestly shouldn't have even been a thing, but I wrote this thing incredibly badly).
The subkeys within the <ObjectIDs> key simply give the ID of an object that should be in this group. These IDs are shown in the conversion log, and are also patched into the Generations SET if the Patch Generations SET
option is used in the Converter (see below).
For converting between Generations and '06, we use the GLvl Converter. In the Source SET, select your Generations .set.xml
file from your stage's cache directory in your GLvl location (will be named setdata_base.set.xml
by default). If you've created any groups for your object layout (which need to be made manually, see above), then select the approriate groupdata_[x].group.xml
file for the Groups XML option, otherwise, leave it blank.
For the GLvl Templates, select the database\\objects
folder.
Target SET is simply where you want to save the converted object placement to.
Filtered Object Names will prevent the Replace Object Names
option from overwriting objects that have any of the inputted values as part of their names. This object is useful for group events where you're activating an object by its name.
This converter can also convert from '06 to Generations by simply putting an '06 .set
file as the source and a Generations .set.xml
as the target. This can also convert '06 groups into an XML if a Groups XML path is specified.
Due to how Sonic GLvl handles object IDs, they will often not match with the IDs that '06 uses. To correct this, choose the Patch Generations SET
option, which will update the Generations .set.xml
to show the correct IDs.
A set of tools to modify CRIWARE file formats.
Download Source Code
"},{"location":"tools/general/audio/#vgaudiowpf","title":"VGAudio.Wpf","text":"An unofficial frontend for VGAudio on WPF.
Download Source Code
"},{"location":"tools/general/audio/#radx","title":"RADX","text":"Decoder and encoder for CRIWARE ADX file format.
Download Source Code
"},{"location":"tools/general/files/","title":"File Format Tools","text":""},{"location":"tools/general/files/#skythtools","title":"SkythTools","text":"Contains various tools for a bunch of Sonic the Hedgehog games. Read the README to have detailed information about each tool included in the repository.
Download Source Code
"},{"location":"tools/hedgehog-engine/blueblur/levels/","title":"Level Editing Tools","text":""},{"location":"tools/hedgehog-engine/blueblur/levels/#sonicglvl","title":"SonicGLvl","text":"Level editor for Sonic Generations.
Source Code
"},{"location":"tools/hedgehog-engine/blueblur/files/ar/","title":"AR/ARL Tools","text":""},{"location":"tools/hedgehog-engine/blueblur/files/ar/#compressar","title":"CompressAR","text":"Tool to compress and decompress AR files for Sonic Generations, using 'makecab' and 'expand'.
Download Source Code
"},{"location":"tools/hedgehog-engine/blueblur/files/fco/","title":"FCO Tools","text":""},{"location":"tools/hedgehog-engine/blueblur/files/fco/#fcoeditor","title":"fcoEditor","text":"FCO/Text editor for Sonic Generations
Download Source Code
"},{"location":"tools/hedgehog-engine/blueblur/files/gte/","title":"GTE/GTM Tools","text":""},{"location":"tools/hedgehog-engine/blueblur/files/gte/#glitterstudio","title":"GlitterStudio","text":"Editor application to open, modify, and resave GTE/GTM particle files for Sonic Generations.
Download Source Code
"},{"location":"tools/hedgehog-engine/blueblur/files/sav/","title":"SAV Tools","text":""},{"location":"tools/hedgehog-engine/blueblur/files/sav/#generationsskilledit","title":"GenerationsSkillEdit","text":"Skill Set Editor for Sonic Generations save files.
Source Code
"},{"location":"tools/hedgehog-engine/blueblur/files/xncp/","title":"XNCP Tools","text":""},{"location":"tools/hedgehog-engine/blueblur/files/xncp/#010-editor","title":"010 Editor","text":"Allows editing various file formats, in particular the XNCP format through the use of a template.
Download XNCP Template
"},{"location":"tools/hedgehog-engine/blueblur/files/xncp/#shuriken","title":"Shuriken","text":"XNCP Editor with graphical user interface.
Source Code
"},{"location":"tools/hedgehog-engine/common/animation/","title":"Animation Tools","text":""},{"location":"tools/hedgehog-engine/common/animation/#havokanimationexporter","title":"HavokAnimationExporter","text":"A tool that allows you to generate Havok skeleton and animation data (.skl.hkx/.anm.hkx) from FBX files.
Download Source Code
"},{"location":"tools/hedgehog-engine/common/files/","title":"File Format Tools","text":""},{"location":"tools/hedgehog-engine/common/files/#hedgearchiveeditor","title":"HedgeArchiveEditor","text":"A user interface for HedgeArcPack.
Download
"},{"location":"tools/hedgehog-engine/common/files/#hedgearcpack","title":"HedgeArcPack","text":"Command line tool that allows the extraction and creation of Hedgehog Engine package files (AR, PFD and PAC).
Download Source Code
"},{"location":"tools/hedgehog-engine/common/levels/","title":"Level Editing Tools","text":""},{"location":"tools/hedgehog-engine/common/levels/#hedgeedit","title":"HedgeEdit","text":"Level editor for Hedgehog Engine.
Download
"},{"location":"tools/hedgehog-engine/common/lighting/","title":"Lighting Tools","text":""},{"location":"tools/hedgehog-engine/common/lighting/#hedgegi","title":"HedgeGI","text":"Tool that allows you to bake global illumination and light field data for Hedgehog Engine games.
Source Code
"},{"location":"tools/hedgehog-engine/common/lighting/#soniclighttools","title":"SonicLightTools","text":"Small collection of tools to read, write, and edit .light files for Sonic Unleashed/Generations/Lost World/Forces.
Source Code
"},{"location":"tools/hedgehog-engine/common/models/","title":"Model Tools","text":""},{"location":"tools/hedgehog-engine/common/models/#modelfbx","title":"ModelFBX","text":"Converts Hedgehog Engine model files into the FBX format. Part of libgens.
Source Code
"},{"location":"tools/hedgehog-engine/common/models/#modelconverter","title":"ModelConverter","text":"Converts Assimp supported model formats into a Hedgehog Engine model file, with various batch scripts for the different games.
Download Source Code
"},{"location":"tools/hedgehog-engine/common/text/","title":"Text tools","text":""},{"location":"tools/hedgehog-engine/common/text/#puyo-text-editor","title":"Puyo Text Editor","text":"Tool for editing CNVRS-TEXT files
Download Source Code
"},{"location":"tools/hedgehog-engine/rainbow/files/","title":"File Format Tools","text":""},{"location":"tools/hedgehog-engine/rainbow/files/#acorn-engine-godot-bse","title":"Acorn Engine (godot-bse)","text":"A modified version of Godot that works with Sonic Colors: Ultimate. Instructions are included in the repository.
Source Code
"},{"location":"tools/hedgehog-engine/rangers/models/","title":"Model Tools","text":""},{"location":"tools/hedgehog-engine/rangers/models/#hedgeneedle","title":"HedgeNeedle","text":"Command line tool for working with Sonic Frontiers model files.
Download Source Code
"},{"location":"tools/hedgehog-engine/rangers/files/anmpxd/","title":"ANM.PXD Tools","text":""},{"location":"tools/hedgehog-engine/rangers/files/anmpxd/#frontiersanimdecompress","title":"FrontiersAnimDecompress","text":"Command line tool that allows the compression and decompression of Frontiers animation files (ANM.PXD).
Download Source Code
"},{"location":"tools/hedgehog-engine/rangers/files/btmesh/","title":"BTMesh Tools","text":""},{"location":"tools/hedgehog-engine/rangers/files/btmesh/#btmesh","title":"btmesh","text":"A command line tool that allows you to convert FBX files to .btmesh/.pccol.
Download Source Code
"},{"location":"tools/hedgehog-engine/rangers/files/cemt/","title":"CEMT Tools","text":""},{"location":"tools/hedgehog-engine/rangers/files/cemt/#effect-color-tool","title":"Effect Color Tool","text":"Editor tool for working with Sonic Frontiers CEMT files.
Download
"},{"location":"tools/hedgehog-engine/rangers/files/rfl/","title":"RFL Tools","text":""},{"location":"tools/hedgehog-engine/rangers/files/rfl/#010-editor","title":"010 Editor","text":"Allows editing various file formats. Frontiers RFL files are supported through the use of specific templates.
Download Binary Templates
"},{"location":"tools/hedgehog-engine/sonic2010/levels/","title":"Level Editing Tools","text":""},{"location":"tools/hedgehog-engine/sonic2010/levels/#sonic-colors-set-editor","title":"Sonic Colors Set Editor","text":"Sonic Colors Set Data editor powered by HedgeLib.
Source Code
"},{"location":"tools/hedgehog-engine/sonic2010/files/arc/","title":"ARC Tools","text":""},{"location":"tools/hedgehog-engine/sonic2010/files/arc/#brawlcrate","title":"BrawlCrate","text":"Allows editing ARC file format, viewing the models, textures, etc...
Download Source code
"},{"location":"tools/hedgehog-engine/sonic2010/files/general/","title":"General Tools","text":""},{"location":"tools/hedgehog-engine/sonic2010/files/general/#soniccolorsexporter","title":"SonicColorsExporter","text":"Info
Importing animations exported by this tool require the dkAnimErwin Maya plugin You also need to edit the dkAnimErwin.mel
script of the plugin for it to work properly. Go to File > Windows > General Editor > Script Editor, then File > Open Script > dkAnimErwin.mel, and add dkAnimErwin;
to the last line of the file.
Allows exporting various assets from Sonic Colors file formats, such as animations, models, materials, etc.
Download Source Code
"},{"location":"tools/hedgehog-engine/sonic2010/files/xncp/","title":"XNCP Tools","text":"Warning
For Sonic Colors, the XNCP file format is only used in Sonic Colours: Ultimate
"},{"location":"tools/hedgehog-engine/sonic2010/files/xncp/#010-editor","title":"010 Editor","text":"Allows editing various file formats, in particular the XNCP format through the use of a template.
Download XNCP Template
"},{"location":"tools/hedgehog-engine/sonic2010/files/xncp/#coloursxncpgen","title":"ColoursXNCPGen","text":"Basic tool to combine XNCP and DXL files, as well as split XNCP files to an XNCP-DXL pair.
Download Source Code
"},{"location":"tools/hedgehog-engine/sonic2010/files/xtb/","title":"XTB Tools","text":""},{"location":"tools/hedgehog-engine/sonic2010/files/xtb/#soniccolorsxtbconv","title":"SonicColorsXTBConv","text":"Converts XTB files to XML and vice versa.
Download Source code
"},{"location":"tools/hedgehog-engine/sonic2013/levels/","title":"Level Editing Tools","text":""},{"location":"tools/hedgehog-engine/sonic2013/levels/#sonicglvl-lost-world","title":"SonicGLvl Lost World","text":"Fork of SonicGLvl for Sonic Lost World.
Source Code
"},{"location":"tools/hedgehog-engine/swa/files/","title":"File Formats","text":""},{"location":"tools/hedgehog-engine/swa/files/#unleashed-mod-toolbox","title":"Unleashed Mod Toolbox","text":"Command line tool that allows the extraction and decompression of Sonic Unleashed .ar.00 and .arl files.
Download Source Code
"},{"location":"tools/nn/marathon/files/","title":"File Format Tools","text":""},{"location":"tools/nn/marathon/files/#marathoncli","title":"Marathon.CLI","text":"All in one tool that allows extraction and repacking of Sonic '06 .arc archives, as well as conversion of multiple formats to and from human readable JSON files.
Download Source Code
"},{"location":"tools/nn/marathon/levels/","title":"Level Editing Tools","text":""},{"location":"tools/nn/marathon/levels/#sonic-06-stage-editing-archive","title":"Sonic '06 Stage Editing Archive","text":"A collection of various small tools and a set of custom SonicGLvl object templates designed to make it more feasible to work on stage edits and custom stages for Sonic '06.
Source Code
"},{"location":"tools/others/adventure/files/","title":"File Format Tools","text":""},{"location":"tools/others/adventure/files/#sa_tools","title":"sa_tools","text":"A toolkit for modifying and extracting data from the Sonic Adventure series of games.
Download Source Code
"},{"location":"tools/renderware/common/levels/","title":"Level Editing Tools","text":""},{"location":"tools/renderware/common/levels/#heroes-power-plant","title":"Heroes Power Plant","text":"Level editor for Sonic Heroes and Shadow the Hedgehog.
Download Source Code
"},{"location":"tools/renderware/common/files/one/","title":"ONE Tools","text":""},{"location":"tools/renderware/common/files/one/#heroesone-reloaded","title":"HeroesONE Reloaded","text":"Tool/library for reading and writing Sonic Heroes and Shadow The Hedgehog's .ONE archives.
Download Source Code
"},{"location":"tools/renderware/common/files/pac/","title":"PAC Tools","text":""},{"location":"tools/renderware/common/files/pac/#pactool","title":"PACTool","text":"Archive editor for .PAC files from the PC and XBOX versions of Sonic Heroes and Shadow the Hedgehog.
Source Code
"},{"location":"tools/renderware/common/files/txd/","title":"TXD Tools","text":""},{"location":"tools/renderware/common/files/txd/#magictxd","title":"Magic.TXD","text":"Universal RenderWare TXD tool that supports creating, viewing and editing texture files.
Download
"},{"location":"tools/retro-engine/common/animation/","title":"Animation Tools","text":""},{"location":"tools/retro-engine/common/animation/#rsdk-animation-editor","title":"RSDK Animation Editor","text":"Animation editor for RSDK.
Download Source Code
"},{"location":"tools/retro-engine/common/files/","title":"File Format Tools","text":""},{"location":"tools/retro-engine/common/files/#retroed","title":"RetroED","text":"A general purpose editor for all RSDK versions below RSDKv5.
Source Code
"},{"location":"tools/retro-engine/common/models/","title":"Model Tools","text":""},{"location":"tools/retro-engine/common/models/#modelmaniac","title":"ModelManiac","text":"Importer and exporter for RSDK model formats.
Source Code
"}]} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 7b00042f..f30f32f0 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,422 +2,422 @@