Site Admin, Skilled player (1234)
Joined: 4/17/2010
Posts: 11251
Location: RU
Updated the script I posted above. Attack collision boxes now work. As can be seen, once you hit B, it checks close combat collisions and decides the attack by whether any object is close enough. Headshot failed :D EDIT: added subpixel positions.
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, Experienced player, Reviewer (967)
Joined: 4/17/2004
Posts: 3107
Location: Sweden
From the very useful hitbox info in feos' script, this is my conclusion about how melee attacks work: - The game draws a headbutt hitbox in front of the character when an attack is initiated. If it overlaps an enemy, headbutt, kick and punch are possible outcomes. - The game then draws a kick hitbox in front of the character, and if it overlaps, kick and punch are possible outcomes. - The game then draws a punch hitbox, if it overlaps, punch. - If none of the hitboxes overlap an enemy, a regular projectile is used. In other words there is still a random element. It is possible to force a punch, but not a headbutt. http://tasvideos.org/userfiles/info/11501746348848149 More updates to feos' script. The biggest change is the presentation of subpixels - they are just one byte as far as I can tell, not two. Also I changed it to actual value rather than rounded, because I think information is obscured in rounded format. When seeing the actual value, it is obvious that air drag is 9 subpixels per frame, for example. I was going to change the speed to the same format, but ran into a familiar problem. Due to the way negative numbers are represented in binary, it is not trivial to output as pixels:subpixels. I have a hack/workaround, but it's not pretty, so I'm not posting it yet. I have tried to locate the charge counter for the weapons, but no success so far.
Site Admin, Skilled player (1234)
Joined: 4/17/2010
Posts: 11251
Location: RU
Script updated: Added damage to be caused to attack hitboxes. Check hitboxes (they actuvate when you press B, so while holding B you can shoot even close enemies) are in yellow, without damage. EDIT: Fixed yellow hitboxes to be drawn for everything that doesn't hurt.
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.
Post subject: Truncated: I always forget to disable html when post code :/
Site Admin, Skilled player (1234)
Joined: 4/17/2010
Posts: 11251
Location: RU
Language: asm

; figure out attack type $09F4 jsr RNG_ROLL_0_995A $09FA cmp.w (a2)+,d0 $09FC bcc.w $2D22 ; if D0 (left after RNG roll) > #$AB85, branch to $2D22 $0A00 addq.l #2,a2 $0A02 cmp.w (a2)+,d0 $0A04 bcs.s $0A00 ; prepare jump to $0BD0 $0A06 adda.w (a2),a2 $0A08 movea.w (a2)+,a0 $0A0A jmp (a0) ; resume to $0BD0
Language: asm

; RNG ROLL $998E move.w d0,-(sp) $9990 bsr #$C8 [00:995A] $995A move.l d1,-(sp) $995C move.w (RNG_1_FFF5FC).w,d0 $9960 move.l (RNG_2_FFF5FE).w,d1 $9964 rol.l #1,d1 $9966 eor.w d0,d1 $9968 swap d1 $996A eor.w d1,d0 $996C rol.w #1,d0 $996E eor.w d0,d1 $9970 swap d1 $9972 eor.w d1,d0 $9974 move.l d1,(RNG_2_FFF5FE).w $9978 move.w d0,(RNG_1_FFF5FC).w $997C move.l (sp)+,d1 $997E ext.l d0 $9980 rts
Language: asm

; prepare jump to $0BD0 $2D22 adda.w (a2),a2 $2D24 movea.w (a2)+,a0 $2D26 jmp (a0) ; resume to $0BD0
As we can see, RNG address is $FFF5FC, and when roll occurs, it only accounts its own previous value, and previous value of $FFF5FE. Which makes result impossible to manipulate directly. The only difference is that while RNG roll occurs every frame, when you do B attack (not double A), it rolls once more. Doesn't happen when you just press B, only when attack activates. Figuring out which value of D0 leads to what looks unnecessary to me, because you can't manipulate the result anyway. So the displayed value is not the last D0 that gets compared, but the one stored in RAM whenever gui gets registered.
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.
Post subject: Truncated: Charge timer added.
Site Admin, Skilled player (1234)
Joined: 4/17/2010
Posts: 11251
Location: RU
Script updates: - improved damage tracking and display (now obvious that it's very helpful) - added screen lock value (= screen X + 160 or 0) - damage messages get flushed on saveload - charge timer added.
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 (1234)
Joined: 4/17/2010
Posts: 11251
Location: RU
Info: - All enemies that drop items (flying stuff) set item they will drop when they spawn, depending on RNG. It rolls each frame (once), every time you shoot (once more), and when you break something (6/7). So you can make them drop weapon each time. - When weapon coin is dropping, its color depends on RNG and changes every second frame before it drops. Then it either changes very slowly, or never. - Boss behavior wasn't tested yet, but I expect it to depend on the same RNG address. - Maximum weapon level is 6. The strongest is green, but it flies by 1 (maximum charge damages 144 hp). Red is weaker, but flies by 3 on higher levels. Blue is just some kind of trolling. Script updates: - Item drop display - Weapon level - RNG roll counter Download TheAdventuresOfBatmanAndRobin.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) -- ycam = memory.readwordsigned(0xFFCD70) end function EnemyPos(Base) GetCam() x1 = memory.readwordsigned(Base + 0x12) - xcam y1 = memory.readwordsigned(Base + 0x14) x2 = memory.readwordsigned(Base + 0x16) - xcam y2 = memory.readwordsigned(Base + 0x18) 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") local wx1 = memory.getregister("d4") - xcam local wy1 = memory.getregister("d5") -- 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 (code == 1) then code = memory.readword(memory.readword(a6 + 0x1A) + 0xFF0004) end if (code == 0) 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 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(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), "yellow") gui.text(300, 210, string.format("\n%2d" , Weapon2), "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.
Editor, Experienced player, Reviewer (967)
Joined: 4/17/2004
Posts: 3107
Location: Sweden
feos wrote:
- Maximum weapon level is 6. The strongest is green, but it flies by 1 (maximum charge damages 144 hp). Red is weaker, but flies by 3 on higher levels. Blue is just some kind of trolling.
Unless I messed up in my measurements earlier, the strongest weapon is actually red, both in normal damage and charge damage. This is true for all weapon levels except for charged red 3. That however depends on all projectiles hitting. If you are attacking a distant target, green is better. The blue weapon blows, yeah. I think the idea of the blue weapon was that it should be weaker but have shorter charge time, so it's not completely trolling you.
Site Admin, Skilled player (1234)
Joined: 4/17/2010
Posts: 11251
Location: RU
Added last fix to the script: In some places there are enemies appearing in bunches, and you need to kill them almost at once to get an item drop. Helicopters in 1-2, clowns in 1-1. But what they drop is hardcoded. In 1-1 they drop life, in 1-2 they drop: charge, hp, ammo, hp, ammo, life, hp, ammo, and charge. When they come in 1 by 1 and still are marked to carry something, it's random. When they come by 3 or so, I didn't test, because I'm officially sick of this game :D Once you come to something that doesn't co-operate, let me know, maybe I'll find out why.
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
Do you have any progress? What are you working on at the moment? Make a video of level 1-1 please, just for me, it won't take much time I suppose? I'm dying to see how much improvement this fire-punch pattern trick and maybe some other tricks you must have found give. Please?
Player (147)
Joined: 11/27/2004
Posts: 688
Location: WA State, USA
No progress on my end. College is a pain. :/ feos, that script works great except when I tested a couple revisions ago it broke in stage 2-2 (the shmup stage) because of the vertical scrolling (you need to factor in the y-cam offsets for that stage to work). It should be a pretty simple fix.
Nach wrote:
I also used to wake up every morning, open my curtains, and see the twin towers. And then one day, wasn't able to anymore, I'll never forget that.
Site Admin, Skilled player (1234)
Joined: 4/17/2010
Posts: 11251
Location: RU
I know, was going to fix once the run is at that stage. Also some damage boxes are still yellow, but it doesn't hurt.
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, Experienced player, Reviewer (967)
Joined: 4/17/2004
Posts: 3107
Location: Sweden
netwizard wrote:
Do you have any progress? What are you working on at the moment? Make a video of level 1-1 please, just for me, it won't take much time I suppose? I'm dying to see how much improvement this fire-punch pattern trick and maybe some other tricks you must have found give. Please?
Sorry netwizard. RT-55J has college like he said, and I started working full-time again after being on parental leave before. I only got as far as past the first screen lock in 1-1. I can upload it but it's not too different from RT-55J's test movie, 42 frames ahead. I will pick it up again some time in the future. If anyone else wants to give it a stab in the meantime, feel free. I can give you access to everything we have so far (tricks, damage calculations, frame data, etc.)
Editor, Experienced player, Reviewer (967)
Joined: 4/17/2004
Posts: 3107
Location: Sweden
netwizard wrote:
Do you have any progress? What are you working on at the moment? Make a video of level 1-1 please, just for me, it won't take much time I suppose? I'm dying to see how much improvement this fire-punch pattern trick and maybe some other tricks you must have found give. Please?
Today is your lucky day! I was in the countryside without internet access for a few days in a row and forgot the books I was supposed to read at home, so I decided to TAS a little. I finished two more lock screens of 1-1. So far, it's 536 frames ahead. The improvements mostly come from more efficient killing of the enemies when the screen is locked, faster movement speed between screen locks is not as big a factor. Some comments: * Being able to "see" things outside the screen with feos' and r57shell's script helps immensely. * Getting the weapon upgrades to spawn in the correct color is sometimes nearly impossible. * It is meaningless to kill some enemies, they are removed by the game if they are more than ~112 pixels outside the screen, so it is better to just outrun them. * The third lock screen was weird. It does not require all enemies to be dead. My best understanding is that it allows you to progress if either 1) there is 0 to 1 enemy left, and that enemy is a big guy 2) there are 0 to 2 enemies left, and neither is a big guy Here is the movie for anyone interested: User movie #14164670741047069 Here is the lua HUD with some minor updates: User movie #14164733364724597 EDIT: Script credit to r57shell, sorry for missing that.
Player (96)
Joined: 12/12/2013
Posts: 376
Location: Russia
Great!
Truncated wrote:
* Being able to "see" things outside the screen with feos' script helps immensely.
:(
Truncated wrote:
* The third lock screen was weird. It does not require all enemies to be dead. My best understanding is that it allows you to progress if either 1) there is 0 to 1 enemy left, and that enemy is a big guy 2) there are 0 to 2 enemies left, and neither is a big guy
We discussed about it with feos few weaks ago. I don't remember... Did someone of us described conditions of unlocking? Nevermind, here we go. All event system done in this way: 1) In start of level, current condition and function initialized. 2) While condition is not true, nothing happens. 3) If condition is true then function called. But, this function can have hardcoded additional condition, and this is very common behavior. 4) function can: a) do nothing if some condition was met. b) update condition (set new one) c) update function (set current function to another) d) fork another (condition;function) event system (with same behavior) e) and most of them (of such functions) spawn new enemy, and doing some animations, change music, lock/unlock screen. I have script which shows all awaiting conditions, but there is no way to find out what is hardcoded unless manually viewing all code of all events. Lot of code, for any little scene. So, I gave up to make further investigation in this way. And, it's much faster to figure out contidions in game, than viewing code. But yes, you can miss something.
Site Admin, Skilled player (1234)
Joined: 4/17/2010
Posts: 11251
Location: RU
I can only add that this game, while being created by a talented coder, was being don with complete ignorance towards SEGA's time limits and whatnot, and then it was finished in a hurry. You can even tell by how absurdly boring the last boss looks. So I think he just wrote, wrote, wrote, wrote something... Then quickly draw the line and now no one (even himself) can reverse that.
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, Experienced player, Reviewer (967)
Joined: 4/17/2004
Posts: 3107
Location: Sweden
Finished the rest of stage 1-1, now at subboss. http://tasvideos.org/userfiles/info/14737566844594077 I noticed that the hitbox script gives false positives on when hitting the subboss. In the first phase, only the tracks (bottom hitbox) can be hurt, but the script also registers hits on the upper part as doing damage. I need to redo the beginning of the fight paying attention to the HP counter instead. Because the RNG changes an extra step for every melee attack, this will probably be a complex subboss even with two-track recording. Something recorded for one character will rapidly desync when adding the other character.
Site Admin, Skilled player (1234)
Joined: 4/17/2010
Posts: 11251
Location: RU
Looks superb. Link to video
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, Expert player (2457)
Joined: 4/8/2005
Posts: 1573
Location: Gone for a year, just for varietyyyyyyyyy!!
Looks much better and faster than I had expected. Great action. I like how it is easy to follow both players, because the graphics are so nice and clear. Looking forward to more.
Editor, Experienced player, Reviewer (967)
Joined: 4/17/2004
Posts: 3107
Location: Sweden
Finished subboss and stage 1-1. Now time for 1-2. http://tasvideos.org/userfiles/info/15046649006587311 I suspect this will be the most entertaining boss fight of the run. Like expected the RNG was a bit though at times, where only 1 attack could be recorded per player before having to switch and fix up the other player which now desyncs. RT-55J has now left the project, and since he didn't record anything in this version (his test movie is very useful for comparison though) this is now a solo project. I would love to have someone to co-operate with though, so if anyone is interested, send me a message.
Site Admin, Skilled player (1234)
Joined: 4/17/2010
Posts: 11251
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.
Joined: 5/27/2008
Posts: 17
This is really awesome to watch! I will say though that the emulation does a rather poor job with the sound effects unfortunately.
Editor, Expert player (2457)
Joined: 4/8/2005
Posts: 1573
Location: Gone for a year, just for varietyyyyyyyyy!!
Doesn't Bizhawk have a bit better sound emulation? Does the run synch on Bizhawk?
Editor, Experienced player, Reviewer (967)
Joined: 4/17/2004
Posts: 3107
Location: Sweden
CMiller wrote:
This is really awesome to watch! I will say though that the emulation does a rather poor job with the sound effects unfortunately.
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? I know that the sound emulation in Genesis is way off in some games (for example Taz-mania) so it doesn't surprise me.
Aqfaq wrote:
Doesn't Bizhawk have a bit better sound emulation? Does the run synch on Bizhawk?
No idea in both cases. Is there a convenient way to convert from GMV to Bizhawk movie, to test this?
Site Admin, Skilled player (1234)
Joined: 4/17/2010
Posts: 11251
Location: RU
I don't have a script for BizHawk.
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, Experienced player, Reviewer (967)
Joined: 4/17/2004
Posts: 3107
Location: Sweden
feos wrote:
I don't have a script for BizHawk.
It wouldn't be necessary. If the converted movie syncs on BizHawk, I can finish recording it on Genesis, and it can be encoded on BizHawk to get better sound.