Skilled player (1436)
Joined: 11/26/2011
Posts: 655
Location: RU
Stage 1 is just awesome. Looking forward to see stage 2 WIP too :) And i really hope you will finish full TAS of this great game.
Truncated wrote:
My guess is that the run will end up in the vault.
No way! It is one of the most entertainment Sega Genesis games. I will eat my hat if it will end up in the vault.
I show you how deep the rabbit hole goes. Current projects: NES: Tetris "fastest 999999" (improvement, with r57shell) Genesis: Adventures of Batman & Robin (with Truncated); Pocahontas; Comix Zone (improvement); Mickey Mania (improvement); RoboCop versus The Terminator (improvement); Gargoyles (with feos)
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11268
Location: RU
Archanfel wrote:
Truncated wrote:
My guess is that the run will end up in the vault.
No way! It is one of the most entertainment Sega Genesis games. I will eat my hat if it will end up in the vault.
Me too.
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.
Editor, Reviewer, Experienced player (968)
Joined: 4/17/2004
Posts: 3107
Location: Sweden
Archanfel wrote:
Stage 1 is just awesome. Looking forward to see stage 2 WIP too :) And i really hope you will finish full TAS of this great game.
Truncated wrote:
My guess is that the run will end up in the vault.
No way! It is one of the most entertainment Sega Genesis games. I will eat my hat if it will end up in the vault.
Glad you liked it! I have done the two first lock screens of stage 1-2, the last one being is a bit problematic so far. Stupid helicopters. But I'll get through eventually. That vault comment was before I started recording anything. If the rest of the stages are good, it might make up for all the boring autoscrollers.
Editor, Reviewer, Experienced player (968)
Joined: 4/17/2004
Posts: 3107
Location: Sweden
1-2 is now completed: User movie #16023971691581508 Almost 470 frames were saved compared to the test movie. I switched to the green weapon for the three upcoming sub-bosses. I have a gnawing suspicion that that might not have been a good idea, but we'll see. I also noticed that for the red weapon, level 6 and 7 recharge slightly faster than the other levels. There might be other such differences, because I only tested the first level for all weapons when I looked into it previously.
Active player (471)
Joined: 2/1/2014
Posts: 928
Video of WIP above :) Link to video
Active player (471)
Joined: 2/1/2014
Posts: 928
http://tasvideos.org/userfiles/info/16401811903468453 Link to video Saw it on IRC, thought a video would be nice.
Skilled player (1436)
Joined: 11/26/2011
Posts: 655
Location: RU
I show you how deep the rabbit hole goes. Current projects: NES: Tetris "fastest 999999" (improvement, with r57shell) Genesis: Adventures of Batman & Robin (with Truncated); Pocahontas; Comix Zone (improvement); Mickey Mania (improvement); RoboCop versus The Terminator (improvement); Gargoyles (with feos)
Editor, Reviewer, Experienced player (968)
Joined: 4/17/2004
Posts: 3107
Location: Sweden
Archanfel wrote:
(funny picture)
Heh. Thanks for believing in me! I actually have half of the next level (truck convoy) done, but I thought I'd wait with uploading it until it's done. Some time... As before, if anyone wants to join to speed this up, just contact me.
Joined: 10/5/2014
Posts: 31
Aqfaq wrote:
Doesn't Bizhawk have a bit better sound emulation? Does the run synch on Bizhawk?
Checked that, doesn't sync on real hardware, as well as genplusgx/Bizhawk.
Joined: 5/27/2008
Posts: 17
Truncated wrote:
Thanks! I rewatched the movie of the speed run to see if I could hear the differences, but nothing stands out to me. Is there any sound effect in particular you are thinking of?
Explosions on the Bank, and explosions on picking up the skull bomb. Picking up the powerup that gives you instant charges also sounds wrong.
Joined: 11/18/2011
Posts: 31
Location: Siberia
Truncated wrote: Ok, so I found a pattern of punching and jumpkicking which increases the damage 50% compared to just crouching punches. Like the throwing animation, the punching animation can be cancelled by jumping. - Press A for 8 frames (or 11, if a headbutt comes out) - 64 dmg - Press B for 1 frame - Press nothing for 1 frame - Press vB for 9 frames - 32 dmg What does vB mean?
ALAKTORN
He/Him
Player (99)
Joined: 10/19/2009
Posts: 2527
Location: Italy
netwizard wrote:
What does vB mean?
“Down + B” I suppose.
Editor, Reviewer, Experienced player (968)
Joined: 4/17/2004
Posts: 3107
Location: Sweden
Here's a small present for anyone following this topic: http://tasvideos.org/userfiles/info/22158252089463586 Stage 1-4 (and all of level 1) complete! It's pretty intense. Reminder to feos and r57shell: the script needs to be updated for the upcoming shoot em up stages. The hitboxes go a bit crazy when scrolling the screen up and down and don't match the objects on screen. Also, now taking applications for people who like playing around in autoscrollers. Send your resume to me.
netwizard wrote:
What does vB mean?
ALAKTORN was right, down+B. I use v^<> when writing directions. You can see the pattern in question on the first boss.
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11268
Location: RU
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.
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11268
Location: RU
Scroller fix. EDIT: see below.
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.
Joined: 11/18/2011
Posts: 31
Location: Siberia
Yey! So nice to see yet another stage getting done really-really fast! Nice work here, and waiting for the 2-1 part. I think it's much easier to TAS compared to previous parts, since it's an autoscroller. However, here's one question, is it really worth it not taking the power up coin right at the beginning of this stage? I noticed that at Joker Robin had fully upgraded weapon (really big projectile) while Batman hadn't (not that big projectile). EDIT: "Curiously it's better to charge up Batman with the lower level weapon Green 6 instead of Robin with Green 7 for the boss." This statement puzzled me. My thoughts were like ~ He made this choice because overall DPS fastchargingG6> DPS fastchargingG7. Hm. But this is nonsense. Wait. Hm. Okay. Hm. Why? If he wrote it then it makes some sense to him. Hm. Still nonsense. And then I've come up with ~ You did it because fastcharging has some disadvantages, for example its effectiveness decreases as the weapon power increases. In other words, FC boosts G6 much more compared to G7. Oh, my brain melts.
Editor, Reviewer, Experienced player (968)
Joined: 4/17/2004
Posts: 3107
Location: Sweden
feos: I tried to get in touch with you on IRC, because I think it's probably easier to discuss it there. Something is off with the script, because I get a number of end mismatch. I think it's around the end of HandleMsgTable, here: if (MsgTable[ i ].timer_ <gens>= num1) and (var <= num2) then return true netwizard: I am looking into the skip of the weapon powerup, because at the moment I can't remember why I made that choice. (I made the first part of stage 1-4 nine months ago, and gave up on the balloons for a long while.) Anyway, even though the projectile is a lot bigger, the damage increase isn't that much from Green 6 to Green 7. A test I made yesterday showed that having both at Green 7 saves about 55 frames at the boss. I will have to test how much picking up the powerup costs. My guess is that it's similar or less. (This is mostly out of curiosity. I'm not remaking this stage.) About charging up Green 6 instead of Green 7: You are correct that DPS of charged Green 6 is less than charged Green 7. (This actually isn't true for all weapons - the damage of charged Blue doesn't increase at all for some levels and for charged Red 1 to 7 goes 64 - 128 - 192 - 80 - 240 - 160 - 240, meaning higher weapon levels are sometimes significantly weaker.) However, charging up Green 6 gives a larger percent damage increase than charging up Green 7. This means that DPS of Green 7 + charged Green 6 is greater than DPS of Green 6 + charged Green 7 Hope that makes sense.
Joined: 11/18/2011
Posts: 31
Location: Siberia
"However, charging up Green 6 gives a larger percent damage increase than charging up Green 7." This is what I was thinking about, yes. Btw, is there something like TASEditor for Genesis? I sooo would like to watch the movie with that piano roll tool. The very thought of not being able to quickly rewatch interesting moves and monitor the entire input picture makes me very-very sad =( EDIT: "A test I made yesterday showed that having both at Green 7 saves about 55 frames at the boss." Is it available to somehow hack this parameter? Like, I was having G1, edited some memory cell and there you are - G7! In general, can I edit memory while playing? What if I changed boss HP? Or my x axis position? What would happen then?
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11268
Location: RU
Damn, forgot that freaking checkbox. Download TAoBaR.lua
Language: lua

-- The Adventures of Batman and Robin -- 2013, feos and r57shell MsgTable = {} MsgTime = 30 MsgOffs = 16 MsgCutoff = 60 RNGcount = 0 function GetCam() xcam = memory.readwordsigned(0xFFDFC4) if memory.readbyte(0xFFFFF6) == 50 then ycam2= memory.readwordsigned(0xFFDFE0)-20 else ycam2 = 0 end -- ycam = memory.readwordsigned(0xFFCD70) end function EnemyPos(Base) GetCam() x1 = memory.readwordsigned(Base + 0x12) - xcam y1 = memory.readwordsigned(Base + 0x14) - ycam2 x2 = memory.readwordsigned(Base + 0x16) - xcam y2 = memory.readwordsigned(Base + 0x18) - ycam2 hp = memory.readwordsigned(Base + 0x1E) end function PlayerPos() local sbase1 = memory.readword(0xFFAD5C) + 0xFF0000 local sbase2 = memory.readword(0xFFADB6) + 0xFF0000 p1speedx = memory.readlongsigned(sbase1 + 0x18) / 0x10000 p1speedy = memory.readlongsigned(sbase1 + 0x1C) / 0x10000 p2speedx = memory.readlongsigned(sbase2 + 0x18) / 0x10000 p2speedy = memory.readlongsigned(sbase2 + 0x1C) / 0x10000 end function HandleMsgTable(clear) for i = 1, #MsgTable do if (clear) then MsgTable[i] = nil end if (MsgTable[i]) then GetCam() if (MsgTable[i].y_ > MsgCutoff) then MsgY1 = 0 MsgY2 = 6 else MsgY1 = 203 MsgY2 = 203 end gui.line(i * MsgOffs + 3, MsgY2, MsgTable[i].x_ - xcam, MsgTable[i].y_, "#ff0000c0") gui.text(i * MsgOffs , MsgY1, MsgTable[i].damage_, "red") if (MsgTable[i].timer_ < gens.framecount()) then MsgTable[i] = nil end end end end function HandleDamage() local damage = AND(memory.getregister("d0"), 0xFFFF) local base = AND(memory.getregister("a2"), 0xFFFFFF) EnemyPos(base) unit = { timer_ = gens.framecount() + MsgTime, damage_ = damage, x_ = x1 + xcam, y_ = y1 } for i = 1, 200 do if MsgTable[i] == nil then MsgTable[i] = unit break end end end function Collision() GetCam() local a0 = AND(memory.getregister("a0"), 0xFFFF) local a6 = AND(memory.getregister("a6"), 0xFFFF) local damage = memory.readword(a6 + 0xFF0012) local wx2 = memory.getregister("d6") - xcam local wy2 = memory.getregister("d7") - ycam2 local wx1 = memory.getregister("d4") - xcam local wy1 = memory.getregister("d5") - ycam2 --gui.text(wx2 + 2, wy1 + 1, string.format("%X",a6)) if (damage == 0) then damage = memory.readword(a0 + 0xFF0034) end if (DamageHitbox) then gui.box(wx1, wy1, wx2, wy2, "#ff000000") gui.text(wx1 + 2, wy1 + 1, damage) else gui.box(wx1, wy1, wx2, wy2, "#ffff0000") end end function InRange(var, num1, num2) if (var >= num1) and (var <= num2) then return true end end function Item() GetCam() local a6 = AND(memory.getregister("a6"), 0xFFFF) local x = memory.readword(a6 + 0xFF003E) - xcam local y = memory.readword(a6 + 0xFF0042) local code = memory.readbyte(a6 + 0xFF0019) if InRange(code, 0, 1) then return elseif InRange(code, 7, 19) then item = "Amo" -- ammo elseif InRange(code, 21, 23) then item = "Cha" -- fast charge elseif InRange(code, 24, 26) then item = "Bom" -- bomb elseif InRange(code, 27, 29) then item = "Lif" -- life elseif InRange(code, 30, 47) then item = "HiP" -- hearts else item = tostring(code) end gui.text(x-7, y, string.format("%s" , item ), "yellow") -- gui.text(x-7, y, string.format("\n%X", a6+0x19), "yellow") end function Hitbox(address) local i = 0 local base = memory.readword(address) while (base ~= 0) do base = base + 0xFF0000 if (memory.readword(base + 2) == 0) then break end EnemyPos(base) if (address == 0xFFDEB2) then gui.box(x1, y1, x2, y2, "#00ff0000") elseif (address == 0xFFDEBA) then gui.box(x1, y1, x2, y2, "#00ffff00") gui.text(x1 + 2, y1 + 1, hp, "#ff00ff") --if (x2 < 0) then gui.text(x1 + 2, y2 - 7, "x:" .. x1 ) end --if (x1 >= 320) then gui.text(x1 + 2, y2 - 7, "x:" .. x1 - 320) end --if (y2 < 0) then gui.text(x2 + 2, y2 - 7, "y:" .. y2 ) end local offtext = "" if (x2 < 0) then offtext = offtext .. "x:" .. x1 end if (x1 >= 320) then offtext = offtext .. "x:" .. x1 - 320 end if (y2 < 0) then offtext = offtext .. "y:" .. y2 end if offtext ~= "" then gui.text(x1 + 2, y2 - 7, offtext) end end -- gui.text(x1 + 2, y1 + 1, string.format("\n%X", base - 0xFF0000), "#ff00ff") base = memory.readword(base + 2) i = i + 1 if (i > 400) then break end end end function Main() local color1 = "yellow" local color2 = "yellow" local color0 = "yellow" -- local hp1 = memory.readword(0xFFF650) / 0x10 -- local life1 = memory.readword(0xFFF644) local base1 = 0xFFAD54 local base2 = 0xFFADAE local X1 = memory.readword(base1 + 0x3E) local X1sub = memory.readbyte(base1 + 0x40) local Y1 = memory.readwordsigned(base1 + 0x42) local Y1sub = memory.readbyte(base1 + 0x44) local X2 = memory.readword(base2 + 0x3E) local X2sub = memory.readbyte(base2 + 0x40) local Y2 = memory.readwordsigned(base2 + 0x42) local Y2sub = memory.readbyte(base2 + 0x44) local RNG1 = memory.readword(0xFFF5FC) -- local RNG2 = memory.readlong(0xFFF5FE) local Weapon1 = memory.readbyte(0xFFF67B) local Weapon2 = memory.readbyte(0xFFF6BB) local Charge1 = (memory.readword(0xFFF658) - 0x2800) / -0x80 local Charge2 = (memory.readword(0xFFF698) - 0x2800) / -0x80 local ScreenLock = memory.readword(0xFFDFC0) if Charge1 <= 0 then Charge1 = 0; color1 = "red" end if Charge2 <= 0 then Charge2 = 0; color2 = "red" end if RNGcount > 1 then color0 = "red" end HandleMsgTable() PlayerPos() Hitbox(0xFFDEB2) Hitbox(0xFFDEBA) gui.text( 0, 210, string.format("\nRNG:%X" , RNG1)) gui.text( 40, 210, string.format("\nLock:%d", ScreenLock)) gui.text( 34, 210, string.format("\n%d" , RNGcount), color0) gui.text(80, 20, string.format("%2d" , Charge1), color1) gui.text(235, 20, string.format("%2d" , Charge2), color2) --gui.text(180, 210, string.format("%2d" , Charge1), color1) --gui.text(300, 210, string.format("%2d" , Charge2), color2) gui.text(180, 210, string.format("\n%2d" , Weapon1+1), "yellow") gui.text(300, 210, string.format("\n%2d" , Weapon2+1), "yellow") gui.text( 81, 210, string.format("Pos: %d.%d\nSpd: %.5f", X1, X1sub, p1speedx), "#AAAAAA") gui.text(137, 210, string.format("/ %d.%d\n/ %.5f" , Y1, Y1sub, p1speedy), "#AAAAAA") gui.text(203, 210, string.format("Pos: %d.%d\nSpd: %.5f", X2, X2sub, p2speedx), "#00BB00") gui.text(260, 210, string.format("/ %d.%d\n/ %.5f" , Y2, Y2sub, p2speedy), "#00BB00") RNGcount = 0 end gui.register(Main) savestate.registerload(function() return HandleMsgTable(1) end) memory.registerexec(0x375A, function() DamageHitbox = false end) memory.registerexec(0x375E, function() DamageHitbox = true end) memory.registerexec(0x3768, function() DamageHitbox = false end) memory.registerexec(0x376C, function() DamageHitbox = true end) memory.registerexec(0x65C4, function() DamageHitbox = false end) memory.registerexec(0x65C8, function() DamageHitbox = true end) memory.registerexec(0x995C, function() RNGcount = RNGcount + 1 end) memory.registerexec(0x4738, Item) memory.registerexec(0x4534, Item) memory.registerexec(0x8C9A, Collision) memory.registerexec(0x1085A, HandleDamage) -- meelee memory.registerexec(0x10CBA, HandleDamage) -- weapon memory.registerexec(0x10CC4, HandleDamage) -- weapon
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 (1436)
Joined: 11/26/2011
Posts: 655
Location: RU
Commissioner James Gordon wrote:
Hello Bruce, Infinitely happy that you finally back! For last nine months while you were absent criminal activity is increased for 65%. You will not belive, but in eastern quarter of the city near toy factory we already have... field of giant mechanical mushrooms instead of buildings. As soon as possible you (and robin) should to make long flying to another side of city and to stop this madness! P.S. Please not leave Gotham again for so long term.
I show you how deep the rabbit hole goes. Current projects: NES: Tetris "fastest 999999" (improvement, with r57shell) Genesis: Adventures of Batman & Robin (with Truncated); Pocahontas; Comix Zone (improvement); Mickey Mania (improvement); RoboCop versus The Terminator (improvement); Gargoyles (with feos)
Editor, Reviewer, Experienced player (968)
Joined: 4/17/2004
Posts: 3107
Location: Sweden
feos: Thanks! The shoot em up stage works like a charm now. I am wondering, could there be any variable like the X scroll lock (0xFFDFC0) for vertical scrolling stages like the current airship hangar? I haven't found anything. (0xFFB79E seemed promising but only changes on he first scroll lock.) It's very helpful for timing purposes to know when you reach/leave locked screens. netwizard: Yes, it is possible to hack your weapon level. In fact, this is what I tried first to see how much Green 7 would save. Unfortunately, the movie desyncs halfway through the boss fight when you increase Batman to Green 7, but it syncs all the way if you lower his weapon level. I suspect this is because Green 7 has a larger projectile hitbox than the other levels, which are all the same size. Because of this I had to use some calculations to estimate the result instead. Archanfel: Heh, thanks man. I appreciate the support.
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11268
Location: RU
You can record 2 simple wips, one with killing enemies asap, another with ignoring them. Last time I played through that level, bosses were appearing without even killing any enemies. With this game (as r57shell wrote) it's really easier to test right away than predict such things.
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.
Editor, Reviewer, Experienced player (968)
Joined: 4/17/2004
Posts: 3107
Location: Sweden
Truncated wrote:
Anyway, even though the projectile is a lot bigger, the damage increase isn't that much from Green 6 to Green 7. A test I made yesterday showed that having both at Green 7 saves about 55 frames at the boss. I will have to test how much picking up the powerup costs. My guess is that it's similar or less. (This is mostly out of curiosity. I'm not remaking this stage.)
Tested now. It takes 37 frames to get the weapon powerup if you have the right RNG (which could probably be arranged in the previous stage). There could be some extra delays due to the characters being far apart during the stage, but nothing massive. So probably 15 frames or so to gain from changing this.
Joined: 11/18/2011
Posts: 31
Location: Siberia
Hello! Any progress with this wonderful game?
Editor, Reviewer, Experienced player (968)
Joined: 4/17/2004
Posts: 3107
Location: Sweden
netwizard wrote:
Hello! Any progress with this wonderful game?
Hi. Sorry, no. I am a bit in on level 2-1 (the elevator) but it isn't really anything to show. Haven't worked on it since July.