Submission Text Full Submission Page
<Describe the movie briefly here (3 to 8 lines) (it is what RSS viewers will see)>

Game objectives

  • Emulator used: BizHawk 2.2.1
  • Aims for vault
  • Improves the platformer stages
  • Very minor luck
  • Hard mode?

Comments

Recently, Alyosha made a GB core for BizHawk. I decided to test it out, and made this TAS while at it. I also managed to improve the platforming stages along with the boss fights due to finding out more about their mechanics. I chose story mode instead, since it shows more of the game. It turned out to be quite dialogue-heavy however, but it's still vaultable since this is a different game mode that also reaches the ending.
All relevant addresses are in System Bus.

Dialogue

There is no way to change the default text speed. The most one can do is press and hold "A" to make it go slightly faster. For ease of syncing in case of some change, "A" was held only on the frames that mattered. In this case, the 16 bit address 0xD492 determines the speed. Holding "A" makes text go the fastest, and sets the value of 0xD492 to 0. Whether or not "A" is held the entire time or only for the minimum amount of time necessary does not matter time wise, and is done solely for making splicing easier.
For NPC dialogue, "B" can be pressed on the first speech to exit it. This will not progress the story, so it is not done.

Platformers

Your x speed is at 0xC028, and applies for every stage. This is a 24 bit address, which RAM watch does not support, so lua was used to display it. During a platforming stage, jumping in the air gives a speed of 288, compared to 256 for walking. Therefore, hopping is the fastest way to traverse in this game.
Floating platforms that are triggered on touch should be triggered as soon as possible. If walking reaches it faster, then do so instead of jumping.
Sometimes, shooting projectiles slow you down. Your speed does not change, but for some reason you get "stuck" for a frame or so. This does not always occur; sometimes you get pushed slightly to the right when you shoot, while other times shooting has no effect on your position what so ever. I have no idea how this was triggered, and most of the time I just go through with trial and error.

NPCs

NPCs sometimes move around. If you need to go the opposite direction after talking to an NPC, it may be preferable to manipulate them to move towards you, so to reduce the distance needed to go back. The relevant addresses for the NPC's x position are 0xC120 and 0xC320. Unlike the player's position, the addresses are 32 bit addresses, so RAM watch may be used. Technically there are more addresses, but coincedentally, all relevant NPCs used the same 2 addresses here, so only these 2 will be mentioned.
When an NPC has not been spawned, the values are set to either 0, or whichever NPC is currently spawned. If you move close enough, the NPCs are spawned. The frame that they spawn in determine their behavior, so it's possible to get them to move towards you if needed.

Difficulty

In terms of both story mode and platformer, the main differences I noticed were:
  • Somewhat different platformer "lag"
  • More hits for bosses
  • You start out with 12 hearts in Easy v. 8 in Hard
  • Enemies do far less damage to you
Each attack deals 16 damage. Boss has to be hit 1 more time after reaching 0 to end. Format is Hp (hits needed).
BossEasyHard
196 (7)160 (11)
2208 (14)240 (16)
3176 (12) 240 (16)
4160 (11)240 (16)
5255 (17)255 (17)
Additionally, the zombies summoned by boss 4 die in 1 hit.

Stage by stage comments

Stage 1

The first instance of luck manipulation occurs in the overworld. In this case, the cat is needed to move right. Sailor Mini moon also needs to move to the left. Before anyone asks, I have zero idea what is going on story-wise; I simply spent an afternoon going through each NPC/store over and over until I determined with savestates what was the minimum amount of talking needed to progress the game.
A minor glitch that was not shown is that if you pressed "B" on the dialogue that was triggered before the platformer, it would exit, and then place you back outside. You still need to trigger it again to proceed however.
Every single boss uses 0xC157 as their invincibility timer and 0xC15B as their HP. Each time they get hit, a 60 frame countdown begins that prevents them from being hit. Under ideal conditions, it should reach 0, stay for another frame, then get hit again. Unfortunately, most bosses have mechanics that prevents this from occuring. Each hit deals 16 damage to the boss. It has to go below 0 to defeat them.
For the first boss, it appears luck is involved with it's attack pattern. Mainly, it can either somersault across the entire room, or only halfway across it. This is determined based on frames. The boss cannot be attacked when it is doing somersault, so it's short version is manipulated to occur each time instead. This means sometimes, an attack is delayed by a frame or so. This saves 40? frames or so each time. Using this knowledge, the first fight is 146 frames faster than the current TAS. The boss has 160 HP, so it takes 11 hits.

Stage 2

For the overworld, the only time luck happens is that broom guy to make him immobile. You use Sailor Mercury this time. Despite the change, it turned out completely spliceable with the current TAS. I cannot seem to improve the platforming stage compared to the current TAS however.
The 2nd boss has 240 HP, so it takes 16 hits. The main improvement from this boss triggering it's barrel summoning earlier. If you attack the boss in the air, he slowly falls down compared to when he lands without getting hit. He takes over 60 frames to summon falling barrels, and during this time, he's invincible. Delaying an attack and striking only when he's near the ground allows his summoning to occur earlier, thus saving 1 extra frame compared to hitting as soon as possible. In total, this happens 5 times.

Stage 3

I manipulated Mini-moon to stay still. It took too long to make her move left sadly. A minor glitch here that's not shown is that in the 2nd last dialogue, attempting to skip it with "B" makes it play back over and over until you proceed with it normally.
The 3rd boss has 240 HP, so it takes 16 hits. This is one of the rare bosses where there's no mechanic that makes them invulnerable, so all attacks are done as soon as possible. The current TAS does not sync back up when splicing over, so I had to redo the fight.

Stage 4

If you tried to skip the first 2 dialogue here with "B", it will not be triggered again, and you get locked in without able to progress. There were no luck involved for this overworld section.
For the platforming, slowing down at the 2nd spike instead of turning around is faster. The floating platforms actually block you from moving, so it's better to walk under it than jumping over them.
The 4th boss has 240 HP, so it takes 16 hits. One thing I forgot to mention last time was that when he summons the goo people, he's invincible. Hence why I try to avoid killing them, so that they won't be resummoned again. This is the hardest part of the fight; avoiding the goos, along with hitting the boss as soon as possible. The current TAS doesn't sync here, so again, had to redo the fight.

Stage 5

Don't believe there was any luck needed for the overworld section.
The platforming part is divided into 3 short sections. I tried grabbing the cake on the 3rd section to make my life easier for the boss, but for some odd reason, despite being initially slower, the current TAS somehow ended up being 1 frame faster, so I spliced that in.
The last boss has 255 HP, so it takes 16 hits. When he prepares to shoot the energy balls, he's invincible. I cannot seem to manipulate that further, so I just try to hit as soon as possible after he's not invincible. Oh, and after this, there's still 15,600 frames worth of dialogue to go before the ending. Have fun!

Other comments

Thanks

  • Alyosha for making the GB core
  • Whoever made the lua function for 24 bit addresses
  • Whoever made this game
Btw, I actually have no idea if this is actually hard mode or not, but this option gave me a bit less health, so I assumed so. Also fun fact: the story mode itself makes this game almost x5 longer, yet contributes very little to it if you cannot read the dialogue.

ThunderAxe31: Judging.
ThunderAxe31: Un-claiming.
feos: Judging...
feos: Delayed, while the author is checking the improvements.

TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 14873
Location: 127.0.0.1
Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
The lua code I used:
Language: lua

memory.usememorydomain("System Bus") --C020 local stringformat = string.format while true do local x = memory.read_u24_le(0xC020) local y = memory.read_u24_le(0xC023) local xspeed = memory.read_u16_le(0xC028) local girl = memory.read_u32_le(0xC120) local cat = memory.read_u32_le(0xC320) local textspeed = memory.read_u16_le(0xD492) local boss_timer = memory.readbyte(0xC157) local boss_hp = memory.readbyte(0xC15B) gui.text(0,75, textspeed) gui.text(0,90, "Me "..stringformat('%.6f',x/65536.0).."("..stringformat('%.6f',y/65536.0)..")") gui.text(0,105, "Spd "..xspeed) gui.text(0,120, "C "..stringformat('%.6f',cat/65536.0)) gui.text(0,135, "G "..stringformat('%.6f',girl/65536.0)) gui.text(0,150, "B "..boss_hp.."("..boss_timer..")") emu.frameadvance() end
Alyosha
He/Him
Editor, Expert player (3522)
Joined: 11/30/2014
Posts: 2728
Location: US
GBHawk isn't released yet, so this one might have to wait a bit. Thanks for putting it through it's paces though in a complete TAS. :)
Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Noxxa
They/Them
Moderator, Expert player (4138)
Joined: 8/14/2009
Posts: 4083
Location: The Netherlands
It's great to see GBHawk's progress being shown in this way, but unless the emulation is sufficiently final that no more sync changes will happen until it is released, this movie may be rejected due to only syncing on an incomplete interim emulator. And even if it is, there's still no non-interim emulator so far that this movie syncs on, so the run currently still breaks the movie rules.
http://www.youtube.com/Noxxa <dwangoAC> This is a TAS (...). Not suitable for all audiences. May cause undesirable side-effects. May contain emulator abuse. Emulator may be abusive. This product contains glitches known to the state of California to cause egg defects. <Masterjun> I'm just a guy arranging bits in a sequence which could potentially amuse other people looking at these bits <adelikat> In Oregon Trail, I sacrificed my own family to save time. In Star trek, I killed helpless comrades in escape pods to save time. Here, I kill my allies to save time. I think I need help.
Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Mothrayas wrote:
It's great to see GBHawk's progress being shown in this way, but unless the emulation is sufficiently final that no more sync changes will happen until it is released, this movie may be rejected due to only syncing on an incomplete interim emulator. And even if it is, there's still no non-interim emulator so far that this movie syncs on, so the run currently still breaks the movie rules.
Oh. Do I cancel this for now, then wait until it's out?
Noxxa
They/Them
Moderator, Expert player (4138)
Joined: 8/14/2009
Posts: 4083
Location: The Netherlands
jlun2 wrote:
Mothrayas wrote:
It's great to see GBHawk's progress being shown in this way, but unless the emulation is sufficiently final that no more sync changes will happen until it is released, this movie may be rejected due to only syncing on an incomplete interim emulator. And even if it is, there's still no non-interim emulator so far that this movie syncs on, so the run currently still breaks the movie rules.
Oh. Do I cancel this for now, then wait until it's out?
That would be the best course of action for now, yes.
http://www.youtube.com/Noxxa <dwangoAC> This is a TAS (...). Not suitable for all audiences. May cause undesirable side-effects. May contain emulator abuse. Emulator may be abusive. This product contains glitches known to the state of California to cause egg defects. <Masterjun> I'm just a guy arranging bits in a sequence which could potentially amuse other people looking at these bits <adelikat> In Oregon Trail, I sacrificed my own family to save time. In Star trek, I killed helpless comrades in escape pods to save time. Here, I kill my allies to save time. I think I need help.
TASVideosGrue
They/Them
Joined: 10/1/2008
Posts: 2738
Location: The dark corners of the TASVideos server
om, nom, nom... crunchy!
Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
I just noticed while attempting to play it back on Gamebatte core, that outside the BIOS screen, this game adds ~9-18 frames of lag on each loading screen compared to GBHawk. I don't want to create some situation where a run is almost impossible to improve due to emulation differences. What core do I use? Also, this run still seem to sync on the latest interim build at least. Edit: Also noticed I made some mistakes, such as holding "A" 1 frame later than possible in frame 553. Fixing that results in difference in both luck and lag later, so leaving that for now. Turns out that was just me turning on hard mode. :P Hard mode Boss 1 - 160 HP (10 hits) Easy mode Boss 1 - 96 HP (6 hits)
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11268
Location: RU
Doesn't sync for me on 2.2.1, 2.4, 2.4.1, or 2.4.2.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
EZGames69
He/They
Publisher, Reviewer, Expert player (3967)
Joined: 5/29/2017
Posts: 2707
Location: Michigan
syncs just fine in BizHawk 2.3.1 for me. you need to use a release that didn't change the 1 frame loading.
[14:15] <feos> WinDOES what DOSn't 12:33:44 PM <Mothrayas> "I got an oof with my game!" Mothrayas Today at 12:22: <Colin> thank you for supporting noble causes such as my feet MemoryTAS Today at 11:55 AM: you wouldn't know beauty if it slapped you in the face with a giant fish [Today at 4:51 PM] Mothrayas: although if you like your own tweets that's the online equivalent of sniffing your own farts and probably tells a lot about you as a person MemoryTAS Today at 7:01 PM: But I exert big staff energy honestly lol Samsara Today at 1:20 PM: wouldn't ACE in a real life TAS just stand for Actually Cease Existing
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11268
Location: RU
It syncs indeed, but now I have further questions. Levels 1 and 3, as well as the last boss seem to be slower in this submission. Why? I think I calculated it correctly.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
I think I made a mistake in stage 3. Attempting to paste in the platformer version of the TAS to it however desyncs it at this spot: This causes a jump to miss shortly afterwards. Attempting to just go ahead regardless by adding frames made it 4 frames slower than platformer version, and the boss then desyncs. Even then, that's assuming the last 2 stages don't mess with me (either). To assist myself in it, I resynced the platform tas to 2.3: https://cdn.discordapp.com/attachments/280806848909541376/714704090982121532/Bishoujo_Senshi_Sailormoon_R_Japan_Platformer.bk2 And also found, and added dialogue related addresses since those keep giving me trouble. Download sailormoon.lua
Language: lua

memory.usememorydomain("System Bus") --C020 local address = { x = 0xC020, y = 0xC023, x_speed = 0xC028, hp = 0xC05B, --mirrored at E05B, intervals of 16 npc1_x = 0xC120, --girl uses this boss_timer = 0xC157, --boss invulnerability timer boss_hp = 0xC15B, follower = 0xC24C, --flag for someone following? npc2_x = 0xC320, is_dialogue = 0xD102, --0xFF if dialogue? sprite_visible = 0xD112, --it's 30 during dialogue? story_progress = 0xD401, --Can start platformer at 6; mirrored at 0xF401 text_ended = 0xD481, --Ends dialogue at 0xFF text_progress = 0xD488, text_char = 0xD491, --current char? text_speed = 0xD492, character_id = 0xDE80, --1 = Sailor moon map_toggle = 0xDE83 } local stringformat = string.format while true do local x = memory.read_u24_le(address.x) local y = memory.read_u24_le(address.y) local hp = memory.readbyte(address.hp)/16 local x_speed = memory.read_u16_le(address.x_speed) local girl = memory.read_u32_le(address.npc1_x) local cat = memory.read_u32_le(address.npc2_x) local text_char = memory.readbyte(address.text_char) local text_progress = memory.readbyte(address.text_progress) local text_ended = memory.readbyte(address.text_ended) local boss_timer = memory.readbyte(address.boss_timer) local boss_hp = memory.readbyte(address.boss_hp)/16 local is_dialogue = memory.readbyte(address.is_dialogue) if (is_dialogue == 0xFF) then gui.text(0,75, "C:"..text_char .. " P:" .. text_progress) gui.text(0,90, text_ended) else gui.text(0,90, "Me "..stringformat('%.6f',x/65536.0).."("..stringformat('%.6f',y/65536.0)..")") gui.text(0,105, "Spd "..x_speed) gui.text(0,120, "C "..stringformat('%.6f',cat/65536.0)) gui.text(0,135, "G "..stringformat('%.6f',girl/65536.0)) gui.text(0,150, "B "..boss_hp.."("..boss_timer..")") end gui.text(0,60, "HP:" .. hp) --Need to show this in dialogue to see difficulty gui.text(0,165,emu.totalexecutedcycles()) emu.frameadvance() end
Sorry for the delay; something non-TAS related came up.
CoolHandMike
He/Him
Editor, Reviewer, Experienced player (636)
Joined: 3/9/2019
Posts: 582
Meh vote. This looks pretty optimized but the game itself has too much walking and far too much talking. I enjoyed the death after you killed that one boss around the 21 mark though.
discord: CoolHandMike#0352
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11268
Location: RU
Is this still in the works?
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
I found an improvement in stage 2: This saves around 20 frames for 3 lifts, so around a second. Going to cancel this for now to implement this. Sorry about that.