Register - Login
Views: 99408838
Main - Memberlist - Active users - Calendar - Wiki - IRC Chat - Online users
Ranks - Rules/FAQ - Stats - Latest Posts - Color Chart - Smilies
04-24-22 09:13:26 PM
Jul - General Game/ROM Hacking - Peppy's Tool - The Star Fox Random Level Generator New poll - New thread - New reply
Next newer thread | Next older thread
VL-Tone
Member
Super Mario 64 forum moderator
Level: 53


Posts: 621/621
EXP: 1135601
For next: 21518

Since: 07-27-07

From: Montreal, Canada

Since last post: 4.7 years
Last activity: 1.2 years

Posted on 08-29-17 01:08:34 AM Link | Quote
Time: One second ago - Date: Tomorrow - Weather: Sunshine - Mood: Moody Answer to the universe: Yes
Hello there!

It's been a while...

Some of you might remember that I was working on a Star Fox level editor around 2004, before I started hacking Super Mario 64 which lead to me making Toad's Tool 64.

Here's a thread about it on the old Acmlm's board:
http://web.archive.org/web/20050517170102/http://board.acmlm.org/thread.php?id=6876

The editor never went farther than a level script editor, where level script commands are listed and parameters can be edited, along with a single model polygon viewer. When I went all in on SM64 hacking I stopped working on it, but it helped me a lot to quickly figure out how the polygon and level data was stored in SM64, since they have similar formats.

I love when game corruption leads to seemingly random levels. This is the kind of thing I would enjoy doing as a kid by experimenting with Game Genie codes on games like SMB1, and also by "circuit-bending" (hardware hacking) my NES with a switch that could (sometimes) warp SMB1 to levels filled with random platforms, enemies and blocks.

Even though I enjoyed playing levels like this via game corruption, for some reason it had never occurred to make a tool to patch a game with randomly generated levels.

When I learned about Super Mario 64: Chaos Edition and the Super Mario World Randomizer, a light bulb lit up on top of my head (I blame home automation...). I thought about doing some game randomizer with the games I've hacked over the years.

Star Fox was a good match for the kind of randomizing I was striving for, since it's not a platform game, which randomness can make easily unplayable by creating walls and unreachable platforms.

It's also very linear in its gameplay (though level scripts do have some conditional branching and loops) so you can easily generate playable random levels simply by chaining random level script commands.

So... I made a tool:

Introducing Peppy's Tool - The Star Fox Random Level Generator. (Is there a pun to be made about this name?)


Download links for Windows and Mac
http://qubedstudios.rustedlogic.net/PeppysTool.htm

The tool will patch a Star Fox ROM with a new randomly generated level accessible though the default "Training" option in the control setup screen. It supports version 1.0 and 1.2 of the ROM, with or without a header. It doesn't work with higan or bsnes yet, probably because it extends the ROM by 32k and these emulators don't like that.



When I first got it working and played those random levels, I found it more enjoyable than I imagined. The levels are full of surprises and are seemingly infinite, since the tool fills a whole 32k bank with level commands (the whole game uses two 32k banks for level scripts). Sometimes weird stuff happens, like corrupted music and weird camera angles and other glitchy stuff. There's also always new things to shoot at on the screen which makes it hard to stop playing.

At the technical level, it works by scanning every level script commands in the game (excluding branch, loop, conditional branch and some other commands) and storing them in order in a list. Then it creates a new level by chaining random commands from that list into the extended 32k, and patches the Training level to jump to the start of a an existing level chosen at random (to initialize music, background, camera etc.) then jumps back to the new level.

By default the generator will copy random groups of 1-10 commands at a time from that list from their original order, so you may recognize some groups of objects from the original game. Some objects/structures in the game are made of more than one command so by doing that it can preserve them more entirely. You can adjust the range of randomness for command group sizes by moving the "Randomness" sliders.

You can make "completely random" levels by setting both randomness sliders all the way to the right, which will make the level generator copy one random command at a time from a random position in the list, creating more chaotic levels. It may increase the possibility of crashing, even though it doesn't tend to happen very often as the game engine is relatively resilient.

You can also adjust the level density, which will remove a percentage of level z-spacer (or what I called ztimers) commands at random. At its maximum setting, density will be so high that the game slows down to a crawl with too much stuff on the screen.

There are other features, which you can see in the screenshot and are described in the read me file.

Ok that was a long post, I guess I can't help it, like in the good old days!

____________________
2Tie

Rumours of my death have been greatly exaggerated.
Level: 70


Posts: 894/1229
EXP: 2872160
For next: 143651

Since: 02-22-10

Pronouns: anything works
From: here

Since last post: 50 days
Last activity: 2 days

Posted on 08-29-17 02:22:10 PM Link | Quote
UESCTerm 802.11 (remote override)
044 05.10.2337

it certainly has been a while! your star fox editor is what originally brought me back to Jul so i could PM you about it some six years ago i can't wait to try the randomizer out, and i'm certainly glad something more came of the script editor!

____________________
Press B to Cancel
Press A to Acknowledge
Gabu

Star Mario
Placeholder Ikachan until :effort: is found
Level: 172


Posts: 9665/9981
EXP: 67927883
For next: 174351

Since: 08-10-09

Pronouns: they/them, she/her
From: Santa Cruisin' USA

Since last post: 48 days
Last activity: 8 days

Posted on 09-10-17 02:13:45 AM Link | Quote
Can't believe I'm saying this. The wise one has returned.

Also thank God a version of the level editor exists because I somehow lost my one copy of it, and it's been years and I'm aching to dabble in that program again.

On that note, any idea if you'd be willing to develop some kind of SF2 tool once the official ROM leaks?

Regardless, going to be tinkering tonight.

____________________
divingkataetheweirdo

Bandit
TCRF Super Editor
Level: 57


Posts: 763/822
EXP: 1479805
For next: 6123

Since: 07-09-11


Since last post: 1.6 years
Last activity: 253 days

Posted on 10-01-17 05:26:38 PM Link | Quote
Now that SF2 has been released, it would be nice to see this updated for that too.

____________________
Gabu

Star Mario
Placeholder Ikachan until :effort: is found
Level: 172


Posts: 9681/9981
EXP: 67927883
For next: 174351

Since: 08-10-09

Pronouns: they/them, she/her
From: Santa Cruisin' USA

Since last post: 48 days
Last activity: 8 days

Posted on 10-01-17 09:04:24 PM Link | Quote
Gonna have to second divingkatae on that one, if at all possible. The one issue I see is the fact that Starfox was a rail shooter, while Starfox 2 one can pretty much fly anywhere, not to mention that battleship/planet levels have multiple segments that may rely on different... protocols, so to speak? (It's been a day)

____________________
2Tie

Rumours of my death have been greatly exaggerated.
Level: 70


Posts: 917/1229
EXP: 2872160
For next: 143651

Since: 02-22-10

Pronouns: anything works
From: here

Since last post: 50 days
Last activity: 2 days

Posted on 10-01-17 09:07:48 PM Link | Quote
UESCTerm 802.11 (remote override)
044 05.10.2337

sf1 levels are a time-based script system, whereas sf2 is more map based

that said, having another randomizer for 2 would be cool

____________________
Press B to Cancel
Press A to Acknowledge
Next newer thread | Next older thread
Jul - General Game/ROM Hacking - Peppy's Tool - The Star Fox Random Level Generator New poll - New thread - New reply


Rusted Logic

Acmlmboard - commit 47be4dc [2021-08-23]
©2000-2022 Acmlm, Xkeeper, Kaito Sinclaire, et al.

31 database queries, 2 query cache hits.
Query execution time:  0.088796 seconds
Script execution time:  0.017225 seconds
Total render time:  0.106021 seconds


TidyHTML vomit below
line 1 column 1 - Warning: missing <!DOCTYPE> declaration
line 2 column 301 - Warning: unescaped & or unknown entity "&page"
line 119 column 11 - Warning: <form> isn't allowed in <table> elements
line 118 column 10 - Info: <table> previously mentioned
line 120 column 11 - Warning: missing <tr>
line 120 column 119 - Warning: missing </font> before </td>
line 124 column 16 - Warning: plain text isn't allowed in <tr> elements
line 120 column 11 - Info: <tr> previously mentioned
line 125 column 68 - Warning: missing </nobr> before </td>
line 141 column 68 - Warning: missing </nobr> before <tr>
line 147 column 35 - Warning: missing <tr>
line 147 column 50 - Warning: missing </font> before </td>
line 148 column 37 - Warning: unescaped & or unknown entity "&id"
line 147 column 223 - Warning: missing </font> before </table>
line 149 column 35 - Warning: missing <tr>
line 149 column 50 - Warning: missing </font> before </td>
line 149 column 91 - Warning: missing </font> before </table>
line 156 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 158 column 9 - Warning: missing <tr>
line 176 column 13 - Warning: missing <tr>
line 177 column 102 - Warning: unescaped & or unknown entity "&postid"
line 179 column 74 - Warning: <style> isn't allowed in <td> elements
line 179 column 9 - Info: <td> previously mentioned
line 179 column 138 - Warning: missing </div>
line 227 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 229 column 9 - Warning: missing <tr>
line 247 column 13 - Warning: missing <tr>
line 248 column 102 - Warning: unescaped & or unknown entity "&postid"
line 250 column 74 - Warning: <style> isn't allowed in <td> elements
line 250 column 9 - Info: <td> previously mentioned
line 253 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 255 column 9 - Warning: missing <tr>
line 273 column 13 - Warning: missing <tr>
line 274 column 102 - Warning: unescaped & or unknown entity "&postid"
line 276 column 314 - Warning: missing </div>
line 282 column 1010 - Warning: discarding unexpected </div>
line 282 column 1016 - Warning: discarding unexpected </td>
line 285 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 287 column 9 - Warning: missing <tr>
line 305 column 13 - Warning: missing <tr>
line 306 column 102 - Warning: unescaped & or unknown entity "&postid"
line 311 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 313 column 9 - Warning: missing <tr>
line 331 column 13 - Warning: missing <tr>
line 332 column 102 - Warning: unescaped & or unknown entity "&postid"
line 334 column 314 - Warning: missing </div>
line 334 column 942 - Warning: discarding unexpected </div>
line 334 column 948 - Warning: discarding unexpected </td>
line 337 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 339 column 9 - Warning: missing <tr>
line 357 column 13 - Warning: missing <tr>
line 358 column 102 - Warning: unescaped & or unknown entity "&postid"
line 360 column 74 - Warning: <style> isn't allowed in <td> elements
line 360 column 9 - Info: <td> previously mentioned
line 365 column 17 - Warning: missing <tr>
line 365 column 17 - Warning: discarding unexpected <table>
line 368 column 35 - Warning: missing <tr>
line 368 column 50 - Warning: missing </font> before </td>
line 368 column 91 - Warning: missing </font> before </table>
line 370 column 35 - Warning: missing <tr>
line 370 column 50 - Warning: missing </font> before </td>
line 371 column 37 - Warning: unescaped & or unknown entity "&id"
line 370 column 223 - Warning: missing </font> before </table>
line 372 column 17 - Warning: discarding unexpected </textarea>
line 372 column 28 - Warning: discarding unexpected </form>
line 372 column 35 - Warning: discarding unexpected </embed>
line 372 column 43 - Warning: discarding unexpected </noembed>
line 372 column 53 - Warning: discarding unexpected </noscript>
line 372 column 64 - Warning: discarding unexpected </noembed>
line 372 column 74 - Warning: discarding unexpected </embed>
line 372 column 82 - Warning: discarding unexpected </table>
line 372 column 90 - Warning: discarding unexpected </table>
line 374 column 9 - Warning: missing </font> before <table>
line 386 column 25 - Warning: discarding unexpected </font>
line 395 column 57 - Warning: discarding unexpected </font>
line 373 column 1 - Warning: missing </center>
line 120 column 63 - Warning: <img> lacks "alt" attribute
line 125 column 19 - Warning: <td> attribute "width" has invalid value "120px"
line 125 column 93 - Warning: <img> lacks "alt" attribute
line 141 column 19 - Warning: <td> attribute "width" has invalid value "120px"
line 141 column 98 - Warning: <img> lacks "alt" attribute
line 148 column 44 - Warning: <img> proprietary attribute value "absmiddle"
line 148 column 142 - Warning: <img> proprietary attribute value "absmiddle"
line 148 column 246 - Warning: <img> proprietary attribute value "absmiddle"
line 161 column 22 - Warning: <img> lacks "alt" attribute
line 161 column 63 - Warning: <img> lacks "alt" attribute
line 161 column 112 - Warning: <img> lacks "alt" attribute
line 161 column 162 - Warning: <img> lacks "alt" attribute
line 172 column 15 - Warning: <img> lacks "alt" attribute
line 179 column 691 - Warning: <img> lacks "alt" attribute
line 204 column 3730 - Warning: <img> lacks "alt" attribute
line 210 column 4332 - Warning: <img> lacks "alt" attribute
line 210 column 4407 - Warning: <img> lacks "alt" attribute
line 212 column 4962 - Warning: <img> proprietary attribute value "absmiddle"
line 212 column 4962 - Warning: <img> lacks "alt" attribute
line 224 column 6728 - Warning: <img> proprietary attribute value "absmiddle"
line 224 column 6728 - Warning: <img> lacks "alt" attribute
line 224 column 6862 - Warning: <img> lacks "alt" attribute
line 224 column 7019 - Warning: <img> lacks "alt" attribute
line 231 column 11 - Warning: <img> lacks "alt" attribute
line 232 column 22 - Warning: <img> lacks "alt" attribute
line 232 column 63 - Warning: <img> lacks "alt" attribute
line 232 column 111 - Warning: <img> lacks "alt" attribute
line 232 column 161 - Warning: <img> lacks "alt" attribute
line 233 column 11 - Warning: <img> lacks "alt" attribute
line 243 column 15 - Warning: <img> lacks "alt" attribute
line 250 column 503 - Warning: <img> lacks "alt" attribute
line 250 column 732 - Warning: <img> proprietary attribute value "absmiddle"
line 250 column 732 - Warning: <img> lacks "alt" attribute
line 250 column 926 - Warning: <div> anchor "joyeuse" already defined
line 257 column 11 - Warning: <img> lacks "alt" attribute
line 258 column 23 - Warning: <img> lacks "alt" attribute
line 258 column 64 - Warning: <img> lacks "alt" attribute
line 258 column 113 - Warning: <img> lacks "alt" attribute
line 258 column 163 - Warning: <img> lacks "alt" attribute
line 259 column 11 - Warning: <img> lacks "alt" attribute
line 269 column 15 - Warning: <img> lacks "alt" attribute
line 282 column 873 - Warning: <img> lacks "alt" attribute
line 289 column 11 - Warning: <img> lacks "alt" attribute
line 290 column 22 - Warning: <img> lacks "alt" attribute
line 290 column 63 - Warning: <img> lacks "alt" attribute
line 290 column 112 - Warning: <img> lacks "alt" attribute
line 290 column 161 - Warning: <img> lacks "alt" attribute
line 291 column 11 - Warning: <img> lacks "alt" attribute
line 301 column 15 - Warning: <img> lacks "alt" attribute
line 308 column 188 - Warning: <img> lacks "alt" attribute
line 315 column 11 - Warning: <img> lacks "alt" attribute
line 316 column 23 - Warning: <img> lacks "alt" attribute
line 316 column 64 - Warning: <img> lacks "alt" attribute
line 316 column 113 - Warning: <img> lacks "alt" attribute
line 316 column 163 - Warning: <img> lacks "alt" attribute
line 317 column 11 - Warning: <img> lacks "alt" attribute
line 327 column 15 - Warning: <img> lacks "alt" attribute
line 334 column 805 - Warning: <img> lacks "alt" attribute
line 341 column 11 - Warning: <img> lacks "alt" attribute
line 342 column 22 - Warning: <img> lacks "alt" attribute
line 342 column 63 - Warning: <img> lacks "alt" attribute
line 342 column 111 - Warning: <img> lacks "alt" attribute
line 342 column 161 - Warning: <img> lacks "alt" attribute
line 343 column 11 - Warning: <img> lacks "alt" attribute
line 353 column 15 - Warning: <img> lacks "alt" attribute
line 360 column 378 - Warning: <div> anchor "joyeuse" already defined
line 360 column 503 - Warning: <img> lacks "alt" attribute
line 362 column 766 - Warning: <div> anchor "joyeuse" already defined
line 371 column 44 - Warning: <img> proprietary attribute value "absmiddle"
line 371 column 142 - Warning: <img> proprietary attribute value "absmiddle"
line 371 column 246 - Warning: <img> proprietary attribute value "absmiddle"
line 380 column 25 - Warning: <img> lacks "alt" attribute
line 385 column 267 - Warning: <img> lacks "alt" attribute
line 149 column 50 - Warning: trimming empty <font>
line 365 column 17 - Warning: trimming empty <tr>
line 368 column 50 - Warning: trimming empty <font>
line 125 column 68 - Warning: <nobr> is not approved by W3C
line 141 column 68 - Warning: <nobr> is not approved by W3C
line 177 column 27 - Warning: <nobr> is not approved by W3C
line 179 column 158 - Warning: <table> proprietary attribute "height"
line 179 column 223 - Warning: <td> proprietary attribute "background"
line 179 column 318 - Warning: <td> proprietary attribute "background"
line 179 column 407 - Warning: <table> proprietary attribute "height"
line 179 column 487 - Warning: <td> proprietary attribute "background"
line 179 column 1430 - Warning: <td> proprietary attribute "background"
line 248 column 27 - Warning: <nobr> is not approved by W3C
line 274 column 27 - Warning: <nobr> is not approved by W3C
line 276 column 74 - Warning: <table> proprietary attribute "height"
line 306 column 27 - Warning: <nobr> is not approved by W3C
line 332 column 27 - Warning: <nobr> is not approved by W3C
line 334 column 74 - Warning: <table> proprietary attribute "height"
line 358 column 27 - Warning: <nobr> is not approved by W3C
Info: Document content looks like HTML5
Info: No system identifier in emitted doctype
Tidy found 163 warnings and 0 errors!


The alt attribute should be used to give a short description
of an image; longer descriptions should be given with the
longdesc attribute which takes a URL linked to the description.
These measures are needed for people using non-graphical browsers.

For further advice on how to make your pages accessible
see http://www.w3.org/WAI/GL.
You are recommended to use CSS to specify the font and
properties such as its size and color. This will reduce
the size of HTML files and make them easier to maintain
compared with using <FONT> elements.

You are recommended to use CSS to control line wrapping.
Use "white-space: nowrap" to inhibit wrapping in place
of inserting <NOBR>...</NOBR> into the markup.

About HTML Tidy: https://github.com/htacg/tidy-html5
Bug reports and comments: https://github.com/htacg/tidy-html5/issues
Official mailing list: https://lists.w3.org/Archives/Public/public-htacg/
Latest HTML specification: http://dev.w3.org/html5/spec-author-view/
Validate your HTML documents: http://validator.w3.org/nu/
Lobby your company to join the W3C: http://www.w3.org/Consortium

Do you speak a language other than English, or a different variant of
English? Consider helping us to localize HTML Tidy. For details please see
https://github.com/htacg/tidy-html5/blob/master/README/LOCALIZE.md