Skilled player (1339)
Joined: 6/27/2014
Posts: 87
Location: Finland
I'd be interested of TASing this, anyone has ram address resources? EDIT: After few hours of TAS experience in this game, I improved the first 200 frames of the first level by 9 frames over the published TAS https://puu.sh/vIytU/2f5fb2d99d.mp4 And here's some useful RAM I found related to hagane X speed & position / screen X position: https://puu.sh/vIxsa/7e0cf4f17b.png
Player (37)
Joined: 2/16/2012
Posts: 282
Glad some folks are interested in this game again! It's due for a revamp. I don't think I have any lua scripts built for it, but I know the full RNG process/addresses if you want to manipulate drops. A few things were discovered after the previous TAS was published for use in RTA runs. This list isn't exhaustive, but includes the most significant things off the top of my head: -Shura-Oh quick kill. Should be pretty straightforward, just get the luck right. -Cutscene skips in 3-1 and 3-2. By buffering tumble attacks and getting some good positioning, you can start the screen transition earlier. -Faster kills on a few minibosses. I don't remember exactly which, but be sure to watch Ohon's run for hints. -Generally better movement in several rooms, such as 2-3 and 5-4. May not be as applicable to a TAS since you have walljumps and zips to work with, but worth checking out nonetheless. Good luck on the TAS! I'm also available to help out if you get caught up on any mechanics or otherwise.
Skilled player (1339)
Joined: 6/27/2014
Posts: 87
Location: Finland
Stage 1-1: 44 frames saved. Stage 1-2: 134 frames saved. Comparison of Stage 1-2: https://puu.sh/vODQF/4121b79e87.mp4
Former player
Joined: 7/14/2006
Posts: 51
Location: Mexico
Hey Sniq, I saw the improvements you posted and gotta say, great job so far. Are you going to continue with this project? Best of luck and if you have any questions i'll do my best to answer them. Also, there's a way to skip the first gunship on 1-1, but i have not found any way to exploit it, you face the first gunship at the end of the level and the screen wraps to the start of the level, if you go back to the place when the first gunship appears the 2nd gunship comes and then you finish the level. No idea if there's a flag or something that needs to be set for the level to end. Needs more research. Thanks for posting the videos.
Skilled player (1339)
Joined: 6/27/2014
Posts: 87
Location: Finland
Tiger- wrote:
Are you going to continue with this project?
Yes. I've also been TASing Super Metroid so this has been on bench. I'm in stage 2-3 right now. Here's how many frames I've saved per level (longer load times of Lsnes not counted): stage 1-1: -44F stage 1-2: -143F stage 1-3: -34F stage 1-4: -0F stage 1 boss: -19F stage 2-1: -6F stage 2-2: -119F total: -365F
Tiger- wrote:
Also, there's a way to skip the first gunship on 1-1, but i have not found any way to exploit it, you face the first gunship at the end of the level and the screen wraps to the start of the level, if you go back to the place when the first gunship appears the 2nd gunship comes and then you finish the level. No idea if there's a flag or something that needs to be set for the level to end. Needs more research.
How would that be done / would it be faster? Do you have movie file of it?
Former player
Joined: 7/14/2006
Posts: 51
Location: Mexico
Unfortunately it is not faster. You lure the throwing axe enemy and bounce of him, hold B before starting the flaming kick animation so you get more height on the bounce. Then you spin jump to the right and if you scroll the screen enough you bypass completely the first gunship. Kind of useless though, because you face the same gunship at the end of the level. After the gunship goes away the level won't end. You can walk to the right and the level wraps on itself, you keep walking right and at the same place the first gunship normally appears the second gunship comes. Then after the second one goes away the level ends. I don't have the movie file, lost that a long time ago when I stopped using Snes 1.51. But I still have the ROM and Bizhawk installed. I'll give it a try after work, is not that difficult. Fantastic news on those improvements by the way, always thought we could save some frames on the wall jumps or the zips. Glad someone could build on the work me and Heisnaevilgenius did. Love to see that dedication we did ages ago didn't go to waste. Best of luck.
Skilled player (1339)
Joined: 6/27/2014
Posts: 87
Location: Finland
Tiger- wrote:
Unfortunately it is not faster.
https://puu.sh/x7qOr/c9e3cc86b7.mp4 45 more frames saved!
Former player
Joined: 7/14/2006
Posts: 51
Location: Mexico
Ok, that does not make any sense. I need to see the movie file to compare. I was sure a screen scroll was all it was required for a faster cutscene so my earlier tries on my second attempt at this TAS was just me holding right, because I was, again, absolutely sure walking was the fastest way for the screen to scroll to the right. Mind blown. This has really rekindled my desire to TAS this game again.
Aran_Jaeger
He/Him
Banned User
Joined: 10/29/2014
Posts: 176
Location: Bavaria, Germany
Here's some experimental data that was obtained via memory search (by me and Omnigamer). In the following, when I refer to memory addresses, the indicator ''0x'' for a number corresponding to a memory address was left out for brevity, and most of the memory addresses are listed in order from small to large. Memory addresses are generally refered to them being represented as 1 byte and unsigned unless specified otherwise. I hope from the context it should be clear which numbers are refered to as decimal numbers (any number other than memory addresses) and which as memory addresses (or otherwise hex values which should be indicated with the pre-fix ''0x''). In particular, values of memory addresses are refered to as decimal numbers. I tried to (for the most part) order the addresses by their size and have an empty line between each 2 in the text neighboured statements about memory addresses whenever there exists at least 1 address between the 2 corresponding addresses in these statements. Any claim of the sorts ''x is (exactly) or behaves as y'' is meant as observation based on experimental sample data. ----- Memory addresses of the form 7E.... : 007A seems to be a looping countdown for In-Game-Time frames (from 59 to 0). 007B seems to be a looping countdown for In-Game-Time seconds (from 153 to 0). 00AA and 00AB together determine the (complete) RNG value, according to Omnigamer's results during his research from longer ago on the SDA forum ( https://forum.speeddemosarchive.com/post/hagane_snes.html ). 020C, 021B, and 021C each seem to count the current number of ''existing explosion sprites + existing Hagane pickups''. 0508 seems to count the number of stages through which one has progressed and assigns 1 number to every stage: 0 - stage 1-1, 1 - stage 1-2 and 1-3, 2 - stage 1-4, 3 - Musha Mukuro, 4 - stage 2-1, 5 - stage 2-2, 6 - stage 2-3, 7 - En-Mikoshi, 8 - stage 3-1, 9 - stage 3-2, 10 - stage 3-3, 11 - stage 3-4 and Jasei-Jyu, 12 - stage 4-1, 13 - stage 4-2, 14 - stage 4-3, 15 - Jyuso-Dama, 16 - stage 5-1, 17 - stage 5-2, 18 - stage 5-3 and stage 5-4 and 5-5, 19 - Shura-Oh, 20 - Amano-Ikazuchi. 050F seems to determine the currently chosen weapon as follows: 0 - sword, 1 - kunai, 2 - grenade, 3 - grapple hook. Hagane will attack with if one does an attack (that is normally shown in the HUD). (AB24 to AB2F aswell as AB64 to AB6F seem to be related to the currently chosen weapon in the HUD, too.) 0511 seems to be the current kunai ammunition count. 0512 seems to be the current grenade ammunition count. 0513 seems to be the maximum of health points Hagane currently can carry. 0514 seems to be Hagane's current number of health points. 0515 seems to be the number of Hagane's lifes currently. 0516 seems to be the current ammunition count for ''fullscreen attacks''. 0520 and 051D (and 051A, but only at the end of some stages) seems to indicate the score's last 3 digits (the final digit stays 0, and every multiple of 16 in the address value contributes 100 points, and the remainder contributes 10 points, e.g. 22 = 16+6 would correspond to 160 points). 0521 and 051E (and 051B, but only at the end of some stages) seems to indicate the score's central 2 digits (every multiple of 16 in the address value contributes 10000 points, and the remainder contributes 1000 points, e.g. 22 = 16+6 would correspond to 16000 points). 0522 and 051F (and 051C, but only at the end of some stages) seems to indicate the score's first 2 digits (every multiple of 16 in the address value contributes 1000000 points, and the remainder contributes 100000 points, e.g. 22 = 16+6 would correspond to 1600000 points). 0535 to 053B have fixed values ordered from 1 to 6 (for an unknown purpose). 053C to 0542 have fixed values ordered from 2 to 12 (for an unknown purpose). 0768 seems to be the current screen x-position in pixels. 076A seems to be the current screen y-position in pixels. - - - Hagane pose change related addresses: 0901 seems to be an indicator for Hagane being vulnerable, and normally has the value 128 except during Hagane's knockback animation or sometimes during backwards tumbles it has the value 0. 0903 seems to be Hagane's invulnerability timer which is normally 0 but jumps to 96 and then decrements by 1 every (gameplay-)frame as countdown. 0905 seems to be a game mode indicator as follows (0 - during loading times, 8 - when a stage is active). 0904 seems to indicates if Hagane is moving against a wall as follows (0 - otherwise, 1 - Hagane is moving against a wall (outside of a spinjump re-bounce)). 0906 seems to indicate Hagane's sprite state as follows: 0 - standing on ground, 1 - falling during normal jump, 2 - rising during normal jump, 3 - spinjump, 4 - spinjump re-bounce, 14 - crouching, 16 - 1st forwards tumble, 17 2nd forwards tumble, 18 3rd forwards tumble, 19 backwards tumble, 20 - ground-slide, 23 - downkick, 24 - 1st phase ground attack, 25 and 30 - 1st phase air attack, 26 and 30 - 2nd phase ground attack, 27 and 30 - 2nd phase air attack, 28 - 3rd phase ground attack, 29 and 30 and 12 - 3rd phase air attack, 32 - knockback animation, 33 - death animation, 40 - initial automatic 1-1 walking animation. 0908 seems to be Hagane's screen-dependent x-position in subpixels. 0909 seems to be Hagane's current screen-dependent x-position corresponding to the number of tiles. 090A seems to be Hagane's screen-dependent y-position in subpixels. 090B seems to be Hagane's screen-dependent y-position in the number of tiles. 090C seems to be Hagane's current x-movement speed in subpixels and seems to behave as follows: 32 - moving rightwards mid-jump, 64 - Hagane walks to the right, 96 - rightwards ground-slide/spinjump, 160 - leftwards ground-slide/spinjump, 192 - Hagane walks to the left, 224 - moving leftwards mid-jump, changing values - during spinjump-wall-bonk right-/left-wards. 090D seems to be an indicator for ''trying to make Hagane move leftwards'', by holding left or ground-sliding leftwards with Hagane (during gameplay frames, independent on if it makes Hagane move left) unless while Hagane is doing a downkick or tumbling rightwards or in the spinjump-rebounce animation or ground-sliding rightwards or if one is holding left+right among maybe further cases as follows (0 - otherwise, 255 - Hagane trying to move to the left). 090E seems to be Hagane's current y-movement speed in subpixels. Or it might (in different stages) be an absolute Hagane y-position in subpixels. 090F seems to indicate if Hagane is rising during a jump and seems to behave as follows (0 - otherwise, 255 - Hagane rising). 0910 seems to be another screen-dependent Hagane x-position in pixels. 0912 seems to be another screen-dependent Hagane y-position in pixels. 0918 seems to indicate Hagane's current pose and seems to behave as follows: 0 - spinjump, 1 - crouching/rising during jump/spinjump, 2 - downwards kick/crouched sword slash/forwards tumble, 3 - standing/forwards tumble, 4 - ground-sliding/rising jump kunai/rising jump grapple hook/rising jump grenade, 5 - falling during jump/upwards grapple hook/sword slash/rising during jump/backwards tumble/rising jump sword slash, 6 - standing sword slash/backwards tumble/rising jump sword slash, 7 - backwards tumble, 8 - walking/throwing grenade standing/throwing kunai standing/sideways grapple hook standing/forwards tumble/backwards tumble. 091C seems to behave accordingly to Hagane's actions as follows: 0 - during crouch/jump, 2 - Hagane is standing, frame-wise incrementing up to 55 and looping back to 0 - while Hagane is walking, incrementing by 1 and 2 - during spinjumps/downkicks until they end. 091E seems to be some ''attack timer'' that behaves as follows (frame-wise incrementing from 1 to 7 - during sword slash, frame-wise incrementing from 1 to 11 - when a grenade/kunai is thrown, frame-wise incrementing from 1 to 27 - during the duration of any grapple hook shot (if it doesn't hit anything); and resets back to 0 afterwards in all cases). 0920 and 0921 together seem to count the number of frames Hagane is standing on ground (idling) (with 0921's value incrementing each time the value of 0920 loops). These counters reset to 0 when Hagane dies. In 1-1, 0920 also keeps incrementing during the initial automatic walking animation. It appears that these addresses are used for the cycling breathing animation of Hagane which stops if one fixes the values. 0922 seems to behave accordingly to Hagane's actions as follows: slow loops from 8 to 21 - while Hagane is walking, incrementing from 44 to 45 - during standing- or midair-horizontal-grapple-hook, incrementing from 48 to 49 - during crouched grapple hook, incrementing from 60 to 61 - during standing- or midair-upwards-grapple-hook, incrementing from 64 to 67 - during standing- or midair-kunai-throw, incrementing from 72 to 75 - during crouched kunai-throw, 96 - during ground-slide, oscillating between 100 and 101 - during downkick, incrementing from 128 to 131 - during standing- and midair-sword-slash, incrementing from 136 to 139 - during crouched sword slash, 160 - during crouch, 164 - while rising during jump, 166 - while falling during jump, slow loops from 168 to 171 - during idling standing phase. 0924 seems to behave accordingly to Hagane's actions as follows: slow loops from 0 to 6 - while Hagane is walking, 7 - during crouch, 104 - during ground-slide, oscillating between 108 and 109 - during downkick, 165 - during midair kunai throw/sword slash/grapple hook/grenade, 165 - while rising during jump, 167 - while falling during jump, slow loops from 172 to 175 - during idling standing phase, for short time adding 1 and 2 to the idling standing pose values - during kunai throw/sword slash/grapple hook/grenade. 0926 seems to be the direction Hagane currently faces as follows (0 - right, 1 - left). 092B seems to behave as follows (oscillating between 32 and 34 - as long as Hagane is blinking from getting hit (so it might be related to drawing the Hagane sprite entirely white), 34 - otherwise). All addresses from 092C to 0931 have the value 0 as long as Hagane is in the knockback animation (and have mostly other fixed values otherwise). 092C seems to behave as follows: 240 - during ground-slides, 246 - during backwards tumbles, 248 - during forward tumbles and spinjumps, 252 - otherwise. 092E and 092F have the value 0 when Hagane crouches (and have mostly other fixed values otherwise). 0931 seems to indicate some Hagane poses as follows: 0 - any tumble phase attack/knockback animation, 7 - ground-sliding, 15 - spinjump/re-bounce, 20 - forwards tumbles/backwards tumble, 23 - standing/walking/crouching/jumping/falling, 24 - downkick. 0932 seems to indicate Hagane's current attack type as follows: 0 - no attack, 1 - sword slash, 2 - kunai, 3 - grenade, 4 - horizontal grapple hook, 5 - vertical grapple hook. 098C seems to be another Hagane pose indicator. - - - Hagane projectiles related addresses: -- |0A10 seems to be Hagane's 1st kunai slot's screen-dependent x-position in pixels. |0A11 seems to indicate if Hagane's next projectile is the 1st kunai slot (0 - no, 255 and 1 - yes), and seems to indicate if the projectile is still on screen or offscreen to the left or right. |0A12 seems to be Hagane's 1st kunai slot's screen-dependent y-position in pixels. | |0A14 seems to determine the sprite look of Hagane's 1st kunai. | |0A18 seems to count the number of frames for which the 1st kunai exists (and does full loops), and seems to correspond to and drive its dust animation. |0A19 seems to increment (by 1) every time 0A18 finishes a loop. -- -- |0A30 seems to be Hagane's 2nd kunai slot's screen-dependent x-position in pixels. |0A31 seems to indicate if Hagane's next projectile is the 2nd kunai slot (0 - no, 255 and 1 - yes), and seems to indicate if the projectile is still on screen or offscreen to the left or right. |0A32 seems to be Hagane's 2nd kunai slot's screen-dependent y-position in pixels. | |0A34 seems to determine the sprite look of Hagane's 2nd kunai. | |0A38 seems to count the number of frames for which the 2nd kunai exists (and does full loops), and seems to correspond to and drive its dust animation. |0A39 seems to increment (by 1) every time 0A18 finishes a loop. -- The following 5 collections of memory addresses seem to analogously copy/imitate the above Hagane projectile stats for X=5, X=7, X=9; X=B, and X=D. -- |0AX0 |0AX1 |0AX2 | |0AX4 | |0AX8 |0AX9 -- - - - Sound related addresses: 0A58, 0A78, 0A98, 0AB8 are similar and seem to indicate attack sounds or are some ground collision noise timers. 0A5C, 0A7C, 0A9C, 0ABC are similar and seem to indicate attack sounds. 0A5F, 0A7F, 0A9F, 0ABF are similar and seem to indicate attack sounds. - - - Enemy related addresses: The data for each enemy seems to range from 1X00 to 1X7F, or 1X80 to 1XFF, with X from 0 to F, for 32 enemy slots in total. -- |1X03 / 1X83 seems to be an enemy's invulnerability timer. |1X04 / 1X84 seems to indicate how an enemy moves and its appearance. |1X06 / 1X86 seems to be an enemy's AI state. | |1X08 / 1X88 seems to be an enemy's screen-dependent x-position in subpixels. |1X09 / 1X89 seems to be an enemy's (or its projectile's) screen-dependent x-position in tiles. |1X0A / 1X8A seems to be an enemy's screen-dependent y-position in subpixels. |1X0B / 1X8B seems to be an enemy's screen-dependent y-position in tiles. | |1X10 / 1X90 seems to be an enemy's (or its projectile's) far left side's (screen-dependent?) x-position in pixels. |1X11 / 1X91 seems to indicate if an enemy is on screen, or past its boundary to the right or left. |1X12 / 1X92 seems to be an enemy's far top's (screen-dependent?) y-position in pixels. | |1X15 / 1X95 and 1X25 / 1XA5 seem to indicate if an enemy is blinking (from getting hit). | |1X18 / 1X98 seems to be a frame counter for how long an enemy is already active. | |1X1C / 1X9C seems to indicate an enemy's current pose. | |1X20 / 1XA0 seems to be aswell an enemy's (or its projectile's) far left side's (screen-dependent?) x-position in pixels. |1X21 / 1XA1 seems to aswell indicate if an enemy currently is on screen, or past its boundary to its right or left. |1X22 / 1XA2 seems to be aswell an enemy's (screen-dependent?) far top's y-position in pixels. | |1X2B / 1XAB seems to determine an enemy's current sprite to some extent. | |1X2E / 1XAE seems to be the number of scorepoints that killing an enemy adds. |1X2F / 1XAF seems to be an enemy's current number of health points (with an enemy dying once the hp goes strictly below 0). | |1X40 / 1XC0 seems to be a delay timer (or countdown) for when the enemy starts executing an action. | |1X44 / 1XC4 seems to be a timer that determines the progression of the enemy's sprite animation. | |1X46 / 1XC6 seems to be another timer that determines the progression of the enemy's action or animation. | |1X48 / 1XC8 seems to be a slow timer for when the enemy does an action. | |1X64 / 1XE4 seems to be a dying enemy's countdown timer for when its blinking shall start and when it shall disappear. | |1X70 / 1XF0 and 1X74 / 1XF4 seem to be an enemy's slow timers that correspond to its animation. -- Apparently, an enemy can despawn once its y-position reaches 38 in pixels and 49 in subpixels (below the screen), but this might be dependent on the enemy's vertical size. An enemy apparently can also despawn once its x-position reaches 249 in tiles and 176 in subpixels (to the left of screen). The very first enemy that appears in 1-1 seems to consist of 2 parts. 2000, 2004, 2008, 200C seem to be screen-dependent x-positions in pixels of enemy projectile sprites, (but not their hitboxes). Some of the following addresses seem to change depending on Hagane's animation or pose: -- |2003 seems to update when the direction that Hagane currently faces changes (34 - right, 98 - left) |09B5 seems to update aswell when the direction that Hagane currently faces changes, but only seems to update for Hagane's turnarounds on ground. |When Hagane lands from a jump, the values of 2003 and 2007 seem to be increased by 2 for a short time. |2003, 2007,... (step size of +0x4 for further addresses), up to 201F seem to indicate the direction Hagane currently faces aswell (with the same values for all these addresses), but seem to not update during crouched turnarounds. |2017, 201B and 201F seem to not update if Hagane turns around midair but seem to update if Hagane turns around while standing on ground. |2007, 200B, 200F and 2013 seem to keep updating at turnarounds during jumps. -- - - - Timers/Counters/Countdowns (candidates): During the Intro: 000A seems to be a frame counter and countdown. 0011 seems to be a frame countdown with small sized steps. 0013 seems to be a slow intro countdown that does full loops. 0028 seems to be a general frame counter. 007D and 0081 are similar and seem to be frame counters that both do loops. 007E seems to reset at the beginning of every stage to 0 and increment (by 1) every time the address 007D finishes a loop. 0099 seems to be a fast counter with small steps. 0766 and 1212 are similar and seem to be frame counters that do full loops. 1016 and 1036 are similar and seem to be frame counters that do full loops. 1056, 1076, 1096, 10B6, 10D6, 10F6 and 1116 are similar and seem to be frame counters. 110A seems to be a countdown with large sized steps. 1216, 1296 and 1298 are similar and seem to be frame counters. 1298, 12B8, 12D8, 12F8, 1318, 1338 and 1358 are similar and seem to be frame counters that do full loops. 129C seems to be another frame counter. ----- Addresses of the form 7F.... : - - - Further timers: 007E seems to slowly count up (during stage gameplay). 06E2 seems to be a frame counter that does full loops (during stage gameplay). 072D and 07C1 are similar and seem to be frame countdowns that do full loops (during autoscroller gameplay). 07A8, 07C7 and 07D2 seem to be frame countdowns that do full loops (during autoscroller gameplay). 07B4 and 07DE are similar and seem to be slow countdowns, or might be some constantly changing x-positions too (during autoscroller gameplay). AB50 seems to be some in-game-time seconds countdown timer that runs from 41 to 32 and loops (during stage gameplay). 0C09 seems to be a frame counter that does full loops (during autoscroller gameplay). 1018 and 1398 are similar and seem to be frame counters that do full loops (during gameplay at bosses). All addresses from D000 to D0FF are similar and seem to be counters with large and small steps and with a pattern of alternating values. All addresses from D140 to D17F are similar and seem to be counters with large and small steps and with a pattern of alternating values. D614 seems to be another frame counter. All addresses from D614 to D61F are similar and seem to be frame countdowns. - - - - - Overview of addresses that don't change at all during the entire TAS by Tiger and Heisanevilgenius: - - - |7E0000 |... |7E220E - |7E220F |... (0 changes) |7E27FF - |7E2800 |... |7FFFFF - |s00000 |... (0 changes) |s1FFFF - |i00000 |... (0 changes) |i020FF - |i02100 |... |i04367 - |i04368 |... (0 changes) |i07FFF - - - - - - Most addresses of the form 7E.... that change by messing around at beginning of 1-1 are from 0000 to 0386, 0511 to 0BFF, 1000 to 12C4, 2000 to 204F, 2200 to 2204, and 3001 to 3011; and for the addresses of the form 7F.... from A800 to ADFF, D122 to D13F, D800 to DF2C, i02117 to i02140, and i04202 to i04317. - - - - - List of things for which addresses might exist: - number of killed enemies - number of currently existing enemies - number of currently existing projectiles - game mode - full screen attack timer - indicator for grapple hook being attached to something - enemy pose states - indicator for when slow auto-scrolling is active - autoscroller timer - boss fight start countdown timer - enemy movement speed - crumble platform despawn timer - x- and y-positions for explosions (or other sprite positions) For primary enemy boxes: - all enemy body-boxes that hurt Hagane - all boss body-boxes (where they can be hurt) For secondary enemy boxes: - enemy projectile body-boxes For Hagane: - Hagane's body-box - Hagane projectile attack-boxes (including the ''full screen attack'') For the environment: - item pickup collection-boxes .
collect, analyse, categorise. "Mathematics - When tool-assisted skills are just not enough" ;) Don't want to be taking up so much space adding to posts, but might be worth mentioning and letting others know for what games 1) already some TAS work has been done (ordered in decreasing amount, relative to a game completion) by me and 2) I am (in decreasing order) planning/considering to TAS them. Those would majorly be SNES games (if not, it will be indicated in the list) I'm focusing on. 1) Spanky's Quest; On the Ball/Cameltry; Musya; Super R-Type; Plok; Sutte Hakkun; The Wizard of Oz; Battletoads Doubledragon; Super Ghouls'n Ghosts; Firepower 2000; Brain Lord; Warios Woods; Super Turrican; The Humans. 2) Secret Command (SEGA); Star Force (NES); Hyperzone; Aladdin; R-Type 3; Power Blade 2 (NES); Super Turrican 2; First Samurai. (last updated: 18.03.2018)
Aran_Jaeger
He/Him
Banned User
Joined: 10/29/2014
Posts: 176
Location: Bavaria, Germany
I thought I'd also provide Sniq's WIP (from longer ago, to the furthest point of stage 3-2) for the (U) version of the game (which includes the stage 1-1 slow screen shift skip), aswell as the RAM watch that he's been using: https://cdn.discordapp.com/attachments/171753856378732544/449598970541637632/haganeany_stage3-2.lsmv However, according to Sniq, the method at the very end in the WIP that is used to break the walls is unoptimal. lsnes RAM watch: https://cdn.discordapp.com/attachments/218520158963105792/449625916386050049/hagane.lwch Furthermore, there's an analysis of the game's RNG regarding drops, aswell as hitbox scripts, and a boss strategy (that involves the use of ''full screen attacks'' so that one probably would want to try and get aswell as collect enough ''full screen attack'' drops on the way up to this point, although drops that increase the maximum of health points that Hagane can carry are important, too), all made by Omnigamer: List of 500 RNG values (are those all?) together with their order and corresponding drops that one would get: https://cdn.discordapp.com/attachments/218520158963105792/449594067421102080/Hagane_Drops.txt Hitbox scripts: https://pastebin.com/D9CnvX86 https://cdn.discordapp.com/attachments/218520158963105792/449625865584902146/haganehitboxpluslag.lua https://cdn.discordapp.com/attachments/218520158963105792/449625900573655050/haganepositionpluslag.lua Omnigamer's strategy for the miniboss of 3-2: Link to video In the SDA forum ( https://forum.speeddemosarchive.com/post/hagane_snes.html ), one can find Omnigamer's explanation for the grapple hook zipping inside walls and further information:
1. Face away from a wall, jump, and use the grappling hook. Right after you fire it, press towards the wall and you will partially clip into it. 2. Right before you are clipped back out of the wall, you have roughly 2 frames to press down, which puts you into a crouch animation. 3. Once you're crouching, you have a window of 2 frames to jump. This has to occur at least 1 frame after pressing down; it cannot be on the same frame. Several other places you can use it to perform a small zip, but unfortunately it will only be possible to use overhanging ledges for this.
The game's RNG is based on your score (for portions of it, at least). This can be abused in a run to ensure that several of the bosses always give a good pattern, with Boss 2 being the best example. You have a ton of invincibility during several of your flips and attacks, so abusing this can get you through some parts quicker than others. Also of note is that you can bounce off of some enemies to reach otherwise inaccessible ledges and things, which can significantly break up some levels.
Damages: T1J - 6, hits twice if aimed T1A - 5, hits twice if aimed T2J - 2, hits several times T2A - 7, hits once T3J - 25, hits once T3A - 4, hits area JumpKick - 1 Kunai - 2 Sword - 2 Grenade - 2 direct, 1 splash Grappling - 1 Bomb - 3 sets of 2 dmg, 6 total
One last thing that's useless, but fun to mention. If you're holding down and back as you enter Boss 1's area, the game bugs out and thinks you're pressing left+right. Kind of fun to do just for the heck of it. You can backwards slide too. Style points are go!
I can't seem to manipulate Boss 5 consistently yet. Being able to predict the spawn point of the weak spot is crucial, and it appears that going through 5-5 differently will force him to go through different patterns, no matter how I manipulate him by position. I was able to isolate the address for the spawn point (and his attacks) but I haven't investigated how to guarantee the pattern yet. It's at 7E1044 7E00AA-B as its main source of entropy, and it calls it for a lot of the graphical effects (flames during enemy death animations, charging up to swing the axe, etc). It also entirely influences Boss 5's pattern, at least. Another interesting note is that if you die, you will start at the beginning of the stage with the exact same AA/AB values as when you first entered. So if you go through, die, and then proceed mostly the same the next time, you are very likely to get the same drops. Because the RNG is called and changes every time: -Certain enemies perform actions (throwing axe, change directions, etc) -Enemy death animations occur (bird feathers, explosions as they fall away) -You kill an enemy -Any sort of fire/flame attack from any source, including the faces throughout stage 5.
c101e1 jsl $c0c434 [c0c434] A:0007 X:0002 Y:0000 S:01e4 D:1180 DB:83 nvmxdiZC V: 2 c0c434 php A:0007 X:0002 Y:0000 S:01e1 D:1180 DB:83 nvmxdiZC V: 2 c0c435 phd A:0007 X:0002 Y:0000 S:01e0 D:1180 DB:83 nvmxdiZC V: 2 c0c436 sep #$20 A:0007 X:0002 Y:0000 S:01de D:1180 DB:83 nvmxdiZC V: 2 c0c438 lda #$00 A:0007 X:0002 Y:0000 S:01de D:1180 DB:83 nvMxdiZC V: 2 c0c43a xba A:0000 X:0002 Y:0000 S:01de D:1180 DB:83 nvMxdiZC V: 2 c0c43b lda #$00 A:0000 X:0002 Y:0000 S:01de D:1180 DB:83 nvMxdiZC V: 2 c0c43d tcd A:0000 X:0002 Y:0000 S:01de D:1180 DB:83 nvMxdiZC V: 2 c0c43e lda $aa [0000aa] A:0000 X:0002 Y:0000 S:01de D:0000 DB:83 nvMxdiZC V: 2 c0c440 lsr a A:00b0 X:0002 Y:0000 S:01de D:0000 DB:83 NvMxdizC V: 2 c0c441 lsr a A:0058 X:0002 Y:0000 S:01de D:0000 DB:83 nvMxdizc V: 2 c0c442 lsr a A:002c X:0002 Y:0000 S:01de D:0000 DB:83 nvMxdizc V: 2 c0c443 lsr a A:0016 X:0002 Y:0000 S:01de D:0000 DB:83 nvMxdizc V: 2 c0c444 sta $28 [000028] A:000b X:0002 Y:0000 S:01de D:0000 DB:83 nvMxdizc V: 2 c0c446 lda $ab [0000ab] A:000b X:0002 Y:0000 S:01de D:0000 DB:83 nvMxdizc V: 3 c0c448 asl a A:0067 X:0002 Y:0000 S:01de D:0000 DB:83 nvMxdizc V: 3 c0c449 asl a A:00ce X:0002 Y:0000 S:01de D:0000 DB:83 NvMxdizc V: 3 c0c44a asl a A:009c X:0002 Y:0000 S:01de D:0000 DB:83 NvMxdizC V: 3 c0c44b asl a A:0038 X:0002 Y:0000 S:01de D:0000 DB:83 nvMxdizC V: 3 c0c44c ora $28 [000028] A:0070 X:0002 Y:0000 S:01de D:0000 DB:83 nvMxdizc V: 3 c0c44e eor #$ff A:007b X:0002 Y:0000 S:01de D:0000 DB:83 nvMxdizc V: 3 c0c450 sta $28 [000028] A:0084 X:0002 Y:0000 S:01de D:0000 DB:83 NvMxdizc V: 3 c0c452 lda $aa [0000aa] A:0084 X:0002 Y:0000 S:01de D:0000 DB:83 NvMxdizc V: 3 c0c454 ora $ab [0000ab] A:00b0 X:0002 Y:0000 S:01de D:0000 DB:83 NvMxdizc V: 3 c0c456 bne $c45e [c0c45e] A:00f7 X:0002 Y:0000 S:01de D:0000 DB:83 NvMxdizc V: 3 c0c45e lda $aa [0000aa] A:00f7 X:0002 Y:0000 S:01de D:0000 DB:83 NvMxdizc V: 3 c0c460 sta $ab [0000ab] A:00b0 X:0002 Y:0000 S:01de D:0000 DB:83 NvMxdizc V: 3 c0c462 clc A:00b0 X:0002 Y:0000 S:01de D:0000 DB:83 NvMxdizc V: 3 c0c463 adc $28 [000028] A:00b0 X:0002 Y:0000 S:01de D:0000 DB:83 NvMxdizc V: 3 c0c465 sta $aa [0000aa] A:0034 X:0002 Y:0000 S:01de D:0000 DB:83 nVMxdizC V: 3 c0c467 lda $28 [000028] A:0034 X:0002 Y:0000 S:01de D:0000 DB:83 nVMxdizC V: 3 c0c469 pld A:0084 X:0002 Y:0000 S:01de D:0000 DB:83 NVMxdizC V: 3 c0c46a plp A:0084 X:0002 Y:0000 S:01e0 D:1180 DB:83 nVMxdizC V: 3 c0c46b rtl A:0084 X:0002 Y:0000 S:01e1 D:1180 DB:83 nvmxdiZC V: 3
Alright, I've found the relative odds for each of the drops: 1UP: 1.56% Blue Flame: 1.56% Red Flame: 9.38% Kunai: 56.25% Grenade: 26.56% Bomb: 4.69% These are all stored in a 64-byte table at $83/A48E, and are indexed by the 6 most significant bits of the RNG function. RNG function is the process listed a couple posts above, and is the value left in the accumulator after all that.
- - - There's also some info on the game in GameFAQ ( https://www.gamefaqs.com/boards/588366-hagane ), but I'm not sure how useful it is: https://www.gamefaqs.com/snes/588366-hagane/faqs/60624 https://www.gamefaqs.com/snes/588366-hagane/faqs/34636 There's also a Hagane entry on gamehacking, which might contain some more info on memory addresses: https://gamehacking.org/game/43103 - - - I made a list that contains timestamps for the TAS by Tiger and Heisanevilgenius, and some observations during tests: https://cdn.discordapp.com/attachments/218520158963105792/449627163646361613/Hagane_timestamps_for_the_TAS_by_Tiger__Heisanevilgenius.txt Hagane cannot attach himself with the grapple hook onto the ''open/non-solid'' ceiling in stage 1-1 (which can be tested by creating solid 8by8-pixel tiles with the cheat tool higher up in the air). The ceiling in stage 1-1 also doesn't cause Hagane to bonk it and lose upwards speed and fall down immediately but keeps Hagane sticking to the ceiling until he naturally starts falling. Apparently it seems that Hagane (in standing and walking pose) has a body-box width of 8 or less pixels, because it suffices to change 1 floor tile address (in stage 1-1) from solid to air to let him fall into the floor, with the created gap. However, if one creates a gap in the floor (using the cheat tool) at the beginning of stage 1-1 that is three 8by8-pixel tiles wide and a solid floor tile is put 1 tile row under it in the center of the gap, one can move Hagane into the gap and onto this lower floor tile and can walk left and right and can crouch and turn and will not fall past the floor. But with the downkick, Hagane can move through the gaps, so his body-box is probably thinner in that pose. In stage 1-1, if one turns enough rows of floor tiles into air to the far left to make a gap in the ground, then Hagane can fall through the floor and the screen will fade out, Hagane loses 1 life, and the stage restarts. And when the next attempt starts, Hagane during his inital automatic movement animation where he walks to about the center of the screen will move over the gap and doesn't fall into it. SO there is no interaction with the ground at this initial phase (would Hagane move through solid blocks, too?). If one starts an attack during crouch, one can stand up during the attack, but not vice versa. If one inputs a grapple hook attack at the same time as a downkick, then the downkick happens with the grapple hook sound. In 1-1 one can jump into the 1st enemy's sword attack and get hit without a knockback animation happening.
collect, analyse, categorise. "Mathematics - When tool-assisted skills are just not enough" ;) Don't want to be taking up so much space adding to posts, but might be worth mentioning and letting others know for what games 1) already some TAS work has been done (ordered in decreasing amount, relative to a game completion) by me and 2) I am (in decreasing order) planning/considering to TAS them. Those would majorly be SNES games (if not, it will be indicated in the list) I'm focusing on. 1) Spanky's Quest; On the Ball/Cameltry; Musya; Super R-Type; Plok; Sutte Hakkun; The Wizard of Oz; Battletoads Doubledragon; Super Ghouls'n Ghosts; Firepower 2000; Brain Lord; Warios Woods; Super Turrican; The Humans. 2) Secret Command (SEGA); Star Force (NES); Hyperzone; Aladdin; R-Type 3; Power Blade 2 (NES); Super Turrican 2; First Samurai. (last updated: 18.03.2018)
Player (37)
Joined: 2/16/2012
Posts: 282
The cycle for a natural Hagane RNG is something like 1700 values - I only logged 500 because that's approximately how many are useful for real-time planning. I have a Matlab script for calculating the full sequence, but it should be very easy to recreate in just about any language. I mention "natural" here because it is possible to start the game with a corrupted RNG seed, among other things. Oddities related to this have happened to me numerous times on console, but really shouldn't be considered for a TAS.