Posts for sugarfoot


sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
Update: I dug through source code and found I'm supposed to use XML based cheat files, not the old format I posted. So now my question is, is there a way to set CPU overclock slider from command line (I read the feature is no longer available in XML Cheat files) I'll just recompile from source if I can't figure it out, but if you happen to know special foo to adjust overclock settings from CLI, please let me know
Post subject: Recording in mame-rr with overclock cheats? Is this possible
sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
Hello. I'm wondering if it's possible to record movies in Mame-RR 0.139-v0.1 beta with some overclocking cheats enabled? And if so, how? Exactly what I'm trying to do:
    Write a cheat.dat file with overclock settings for all CPUs Have that file autoload when I launch mame with -cheat flag Record TAS movie files like normal
I think this is the snippet I need, but I'm not sure how to load this into this version of MAME (It's not working for me when I write this into a CHEATS.DAT file in root installation directory):
ddragonw:65004000:00000000:00020000:00000000:Overclock CPU#1 
ddragonw:65004000:00000001:00020000:00000000:Overclock CPU#2 
ddragonw:65004000:00000002:00020000:00000000:Overclock CPU#3 
This is for a Two-Player TAS project I'm working on for Double Dragon and Double Dragon 2. I'm totally aware I can't submit vids with cheats - I would be hosting this on my own channel for fun - just to show what a good, entertaining 2P TAS would look like for DD if I overclock CPUs to the point that 2P runs at same speed as 1P (as it stands now... 2P TAS vids of this game are fun to make, but pretty dreadful to watch as a viewer, due to all the lag of original arcade cabinet ROMs) https://www.youtube.com/watch?v=ojlzwZHmpuA
sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
ViGadeomes wrote:
I'm not sure to meet the interest behind this TAS. Even if it's well done with new 2 players only strats, I just see more lags and more ennemis than the previous 1 player TAS submission and not enough difference between them... Sorry but it will be a meh vote from me.
No worries - totally understand the meh vote. I made this to cross it off my bucket list, and share what I imagined would be a submission bound for The Vault
sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
Cyorter wrote:
The another submission: 6078S This submission: 6087S LUL Well let's watch this one, I think it'll be as good as the other one, or even better!
Oh man that's an unfortunate numbering sequence hah. I hope you find this one enjoyable (or at least interesting!). Now that I have both one-player and two-player to compare, I'm finding 1P more entertaining (in terms of both watching, and making them). I think a ROM hack of this game that eliminates the lag frames would be incredible. Cheers
sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
r57shell wrote:
First of all, I'll describe how banking is working here, in ddragonw. Bank is located from 4000 to 8000 in address space. So this chunk is replaced from another if new value is writen in bank register. Bank register is byte at address 3808. So, when something is written in 3808, it sets bank. Bank index is stored in highest three bits of that byte. Other bits is used for other stuff. If we look at code parts where write in 3808 appear, everywhere we see write at address 003A. It's backup register value, implemented in software. It is for transparent code. When something is need to change bank, it will change it, do stuff, and then it will change it back. So, each time we want to know current bank, we can do it by typing "print b@3a & E0" Now, bank values and corresponding chunks of data: 00: 21j-2-3.25 first half (0-4000) 20: 21j-2-3.25 second half (4000-8000) 40: 21a-3.24 first half (0-4000) 60: 21a-3.24 second half (4000-8000) 80: 21j-4.23 first half (0-4000) A0: 21j-4.23 second half (4000-8000) Also, in addition, 8000-FFFF of maincpu address space is whole 21j-1.26 Now, ground fetching code is located at $4000 offset when bank is 80. This means it's at offset 0 in 21a-3.24. It is library function. I mean someone in ddragon team made it as utility. Its usage is following. Programmer needs to set X register to enemy/player, and fill structure located at address B31. Output of library is stored in same structure. I'm lazy to calculate its size. But here is its structure: B31: xpos current (word) B33: ypos current (word) B35: zpos current (word) B37: xpos next (word) B39: ypos next (word) B3B: zpos next (word) B3D: byte_3 (byte) B3E: four samples. each sample is x,y,z byte coords. 12 bytes total. B4A: unknown output (byte) B4B: unknown output (byte) (looks like always zero) B4C: unknown output (byte) (looks like always zero) B4D: unknown output (byte) (looks like always zero) B4E: word xpos result - output B50: word ypos result - output B52: word zpos result - output After this address, temporary data used by this library is stored: B54: X register backup (word) (enemy/player offset) B56: map cell offset (word) B58: iteration (byte) (sample id counting from 1) B59: direction of change (byte) (range is [0,8], 9 directions. 0 - didn't move) B5A: x pos for map (word) B5C: unknown B5D: unknown B5E: y pos for map (word) B60: z pos for map (word) B62-B68: unknown B69-B6D: 5 byte heights. B6E and above - unknown. NOTE: even though all addresses are BXX, in code they appear without B. Because B is set into DP register, which is concatenated in front to address when offset is byte. This indexing mode is called "direct". I had confusion with it until I read about this. Structure of calculations: 1) 4000-4038 pc: initialization + transform coords into map space. transformation looks like: x_map = x, y_map = y, z_map = y+z. 2) 4038: JSR $407F calculation of B59 byte. 3) 403B-4051: first result calculation: x_result = x_map+xshift, y_result = y_map + y_shift, z_result = z_map + y_shift + z_shift, 4) 4053: JSR $40AF sampling 5) 4056: JSR $4507 unknown additional processing. 6) 4059-4077: reverse transformation of resulting coords. Structure of sampling: 1) 40AF-40B1: iteration initialization 2) 40B3: JSR $40E6 - get sample pos: it's just result + sample[iteration-1], where result is x,y,z result, and sample is one of four samples at B3E. If all x,y,z values of sample coords is zero, it's skipped by branching at 40B7. 3) 40B9: JSR $4154 - get map cell. its result in B56 4) 40BC-40DB: loop over cell data. 5) 40DD-405E: increment iteration and continue loop. Map structure: It is located at 4780 in same bank. Offsets starting IDK where, but looks like 4800 already offsets. Each offset is offset at 32 offsets. Then, each of this 32 offsets is offset at list of offsets until word=FFFF. Offsets in the list is actual data. Their 7-th byte is height mask though. (which height byte should be overwriten to FF) Step (4) has few JSR-s which does actual processing of cell data. I didn't dig into details. But when character lands, its z_result overwriten at 4299. Normaly, enemy is filling this structure and then calls this library, and then, enemy is reading result back as is, without any postprocessing.
Sorry for lack of response for two months, I've been off learning assembly basics, struggling to meet a deadline... and new husband duties. I've been tinkering with the script and notes you gave me during that time... couldn't find much predictability with glitch - even after lots of time in debugger and several nights of frustration. 10 minutes ago I figured it out! If an enemy is launched while the Y,Y_frac value is less than FF,00.... they will fall off ledge 100% of the time But how to reliably get all 3 of the mobs to have a Y, Y_frac value is less than FF,00? It turns out I have to manipulate the enemies so that the 2nd mob out of the elevator is the first one to come down to the edge of the platform. At the same time, I also have to manipulate the 1st mob's walk path so it resets - otherwise the path down to the edge will always result in a Y, Y_frac value that is FF,4A Basic Solution (I plan to get exact values this weekend) 1) Throw box off left edge (prevents enemy retargeting) 2) Walk Billy down to platform edge (Y=FE, Y_frac=00) 3) Trigger Elevator Opening 4) Position Billy so his X offset is slightly to the left of first Linda out of Elevator (X=7DD, X_frac=00, Y=FE, Y_frac=00) 5) When Linda exits elevator, stay slightly left of her, walk to X=809). This will pin Linda in Top corner 6) Stand still, wait for enemies while 1st mob is pinned, and AI adjusts to have 2nd mob lead path to Billy 7) Walk a couple of steps to right At this point, the 2nd mob is guaranteed to have a Y value < FF when they hit the platform edge. The 1st and 3rd mob, following the first path established by 2nd mob, also end up with Y offset < FF It's also possible to elbow all 3 off the edge at the same time like this [still working out precise values for walk paths] Thank you so much for all the help - I learned so much starting with what you showed me (it helped get me to the point where I could determine that Y value < FF gives 100% guaranteed results). Process of elimination is also a powerful tool :) P.S. - Apologies in advance if I vanish again without responding, I work for a startup - when things get too crazy, my TAS hobby gets put on shelf.
sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
r57shell wrote:
sugarfoot wrote:
My mistake was concluding the enemy location objects and HP objects were tracked separately (digging through the source code and sprite data got me off the rails).
It is tracked separately, as far as I know. If you didn't notice, enemy struct size is 0x55, and player struct size is 0x5E. Maybe they share some of funcs usage, will see.
sugarfoot wrote:
- I'll take a step back from pushing through another TAS and focus on fundamentals - doesn't look like I'll get to my sub 6 second runs until I master this level of TAS'ing
I don't think you should dig into this. Edit: I have found all landing-code that we need. I don't know, should I post it now, or you want to find it yourself. Spoiler: it's way too complex.
I'm happy to take what you've learned about landing code! I don't mind the spoilers :) I plan to research this stuff myself too, but it would definitely help to work from a good solution (it will serve as baseline for my TAS of Double Dragon II research) Man - seriously thank you so much. I was getting lost in all this stuff - your crash course on how you debugged this is huge. Thanks again.
sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
feos wrote:
BTW they added some of the debugger help to the docs: http://docs.mamedev.org/debugger/index.html Also, mame-rr implements ram search/watch. https://i.imgur.com/b5J3LpK.png Finally, I'm pretty sure I've already linked his, but still here it is again: http://tasvideos.org/ReverseEngineering.html
Thanks feos. Yep I was making heavy use of RAM Search/Watch as well (i was using that to cross check the sprite coordinate objects I had figured out from inspecting source code. I also used that to find the HP values for all characters). My mistake was concluding the enemy location objects and HP objects were tracked separately (digging through the source code and sprite data got me off the rails). I'm still pretty lost in the Assembly Code and Debugger (The little bit of Assembly coding I did do was 18 years ago). - I'll take a step back from pushing through another TAS and focus on fundamentals - doesn't look like I'll get to my sub 6 second runs until I master this level of TAS'ing
sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
r57shell wrote:
Ok, here is my fresh new script
Language: lua

function draw_enemy(base, id) if memory.readbyteunsigned(base) < 0x80 then return end local x = memory.readwordunsigned(base+4) local y = memory.readwordunsigned(base+6) local z = memory.readwordunsigned(base+8) local hp = memory.readbyteunsigned(base+0x1F) gui.text(0,id*8,string.format("%d: %4X %4X %4X %d", id, x, y, z, hp)) end function draw_enemies() for i = 0, 8 do local base = 0x45E+0x55*i draw_enemy(base,i) end end gui.register(function() draw_enemies() end)
It shows positions and hp. Make sure you have simlar all three coordinates... not just one or two. I would call them X, Y, Z. X - left/right, Y - far/near, Z - top/bottom. I have found corresponding code, but I don't wanna dig into it right now. Tell me does it something new, or you had this already? If you curious: at least two locations where Z is used: 5318, 40A0. It means, that they are in bank, at offsets from 0x318 and 0x10A0. Bank is most probably in 21j-2-3.25 at offset 0, so it's 0x318 and 0x10A0 there. But you may just put type "bpset 5318" in debugger, and "bpset 40A0".
Oh wow that's much cleaner! Question - how were you able to find this table so quickly? I had been working from online videos for TAS'ing that mentioned using RAM Watch and RAM Search to find interesting addresses in memory - that's how I ended up finding the HP addresses (which aren't the same locations used in your script). P.S. - I'm new to the world of TAS'ing and the general architecture/coding/design of all things Arcade game related, but I am very willing to take advise and learn techniques that help me figure things out myself.
sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
This is the script I've been adjusting to debug (I pieced this together from mame source code from video/ddragon.c, drivers/ddragon.c, and lots of time stepping through frame by frame with RAM Watch and RAM Search)
Language: lua

local player_1_hp = 0x03C1 local player_2_hp = 0x041F local enemy_1 = 0x047D local enemy_2 = 0x04D2 local enemy_3 = 0x0527 local enemy_4 = 0x057C -- local enemy_5 = 0x05D1 -- local enemy_6 = 0x0626 -- local enemy_7 = 0x067B -- local enemy_8 = 0x06D0 local boss = 0x0725 function sprite_data () gui.text(180,20,"P1 HP: " .. memory.readbyte(player_1_hp) ) gui.text(180,30,"P2 HP: " .. memory.readbyte(player_2_hp) ) gui.text(180,50,"E1 HP: " .. memory.readbyte(enemy_1) ) gui.text(180,60,"E2 HP: " .. memory.readbyte(enemy_2) ) gui.text(180,70,"E3 HP: " .. memory.readbyte(enemy_3) ) gui.text(180,80,"E4 HP: " .. memory.readbyte(enemy_4) ) gui.text(180,90,"Boss HP: " .. memory.readbyte(boss) ) gui_y = 20; offset = 1; -- sprite data starts at offset 2800 -- all characters appear to be comprised of -- 4 separate sprites for i=0x2800,0x2940,5 do sx = memory.readbyte(i + 4); sy = memory.readbyte(i + 0); if sy < 140 then dimension = bit.band(memory.readbyte(i + 1), 48); which = memory.readbyte(i + 3) + bit.lshift(bit.band(memory.readbyte(i + 2),0x0f), 8); gui.text(20,gui_y,"S" .. offset .. " X=" .. sx .. " Y=" .. sy); -- .. " DIM=" .. dimension .. " WHICH=" .. which); gui_y = gui_y + 10; offset = offset + 1; end; end; end; while true do sprite_data(); emu.frameadvance() end;
Post subject: How to analyze hard-to-reproduce glitch (help needed)
sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
Hi all, I've been beating my head against wall for 2 weeks and am hoping you can help me. In all my TAS runs of Double Dragon Arcade - I've been pulling off a trick where I elbow enemies off the platform in Stage 2 (https://youtu.be/vok6SResKIE?list=PLo3SyZacAQ8ZVNpdn4tiYG6HH5I00Un-w&t=101). I've been trying to optimize the sequence of input from my last submission, and am discovering I can't recreate this setup. I'm not even close - I'm 4 seconds slower than before. Even after 2 weeks of tinkering, debugging, macro testing, lua scripting yadda yadda, I can't recreate the glitch as quickly. Instead of falling off the cliffs, the enemies seem like they teleport in space as they fall past the pit ledge (something seems to be preventing them from falling all the way into pit below) I've written LUA scripts to dump the relevant sprite RAM to screen while I test (x position, y positions of all sprites for each element on screen. As best as I can tell, the glitch where I can quickly elbow all enemies quickly over the ledge is dependent on Linda *NOT* being the first enemy the elbow hits. On top of that, there also seems to be a dependency on a certain scroll and x positioning on screen. I am trying to figure out a reproducible set of conditions to create this glitch - and am flat out stuck (even after digging through source code for how sprite offsets are working). I would love some suggestions on debugging techniques I can use to help find exactly what controls whether or not these enemies are falling into pits. Any tips are welcome. TLDR: * Can't reproduce elbow off platform ledge * Having enemies on exact same Y position as Player isn't enough to reproduce * Linda (female character with whip) can't be the first enemy hit * Some dependency on combination of Player's X-offset and Level Scroll * Would love to figure out how to tell if game is going to execute instructions to fall on ledge, or fall into pit below Thanks. PS. Links to previous runs I'm trying to optimize: http://tasvideos.org/5869S.html http://tasvideos.org/5957S.html
Post subject: 2P TAS: Intentional Deaths and use of continues
sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
Hello, I have started work on a 2P TAS for Arcade Double Dragon, and am wondering if there are any restrictions on use of multiple credits? Example: I am considering a run where I intentionally keep a character dead for certain sections of game, and use a continue to bring them back (goal being lag reduction in places where the second player isn't adding any value) I know intentional deaths are allowed, but is a TAS considered acceptable if the fastest strategy requires using multiple credits/continues?
sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
Patashu wrote:
I know there exists a multi-track recording script for MAME-RR/FBA-RR (so that you can pick a specific player to rerecord the inputs for, and every other player just does what they used to do without having to input it again).
Do you happen to know if the multi-track rerecording feature accounts for lag frames? I happen to be TAS'ing an incredibly lag-prone game (double dragon arcade version)
sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
I don't know if that would help me here - I'm doing arcade emulation with FBA and Mame (plus TAS Editor is the software, I still want a way to easily input stuff with square grid hardware)
Post subject: Seeking keyboards/controller recommendations for 2P TAS'ing
sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
Hi All, I could use recommendations for good keyboard/controller for 2P TAS'ing I started making a 2P this weekend - and quickly ran into frustrations using a run-of-the-mill keyboard Problem 1: (I think) I'm running into X-Key-Rollover Limits while hitting combinations of directional and button input (meaning I can only hit up to 4 keys at once). I debugged this with help from Feos over weekend, but after I started getting my 2P TAS - I realized I still get the problem as soon as I introduce a directional key in the combination Problem 2: Awkward key layout for 2 players on a standard keyboard. Trying to two-player two TAS on a standard keyboard (with offset key layout) has been uber frustrating. Does anyone have recommendations for a keyboard/controller that's good for stuff like this? Ideally - I would love to have a keyboard/controller with at least 8KRO, and a uniform grid layout:
0 0 0 | 0 0 0
0 0 0 | 0 0 0
0 0 0 | 0 0 0
B B B | B B B
B B B | B B B
Where "0"s are mapped to directional keys for 1P and 2P, and "B"s can be mapped to buttons (Button 1, 2, 3 frame advance, pause, etc) If anyone can point me to where I could find something like this, I'd really appreciate it. Thanks. Update: I found the the kind of keyboard layout I'm looking for - https://www.amazon.com/gp/product/B076LRJ528/ref=ask_ql_qh_dp_hza I'm asking retailer about the specs for Key Rollover. If you have recommendations for keyboards that look like this - I would love to hear them!
sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
c-square wrote:
Very entertaining! A couple of quick questions: 1) It seems like there's input after the last boss is thrown into the pit (some moving and a jump). Are you able to end input early once the boss is on his way into the pit? 2) Would a 2-player game be faster? Thanks for making this!
You're very welcome. Re #1 - The actual game completion input ends on the last elbow input (button 2+3 press at same time). The remainder of the input after that - that is used to generate the glitch (the sound of Willy's Machine Gun, Man falling from sky) Re #2 - On paper a two-player route would be much faster - in practice I'm not sure. I have to see how many lag frames a second player will introduce (this game is infamous for massive amounts of lag). I also need to learn how to count lag frames haha (I'm still learning all the details of TAS engineering/analysis)
Post subject: Re: Awesome!
sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
PLANET wrote:
Digging into it! : ) Value of my face during watching = ":O". Oh man. This is so good! :) Taking into account how it all started, you've come a long way with this run and this game! :) Congratulations, an obvious, clear Yes vote! There are so many good moments entertainment-wise and optimization-wise that I would have to write a really long comment about it and I don't want to bore anyone, but suffice to say - kids, don't play around with knives. And oh, dynamite! ; ) Of course, there are some moments of taking damage (but mostly they don't *seem* to affect the run too much), or a movement eg away from the elevator at the end of stage 2, and probably more moments where it could be done smoother, but overall the lag is reduced really nicely in many places... sometimes you even forget there is any in the game ; ) Once again, congrats on the end effect! And if you have enough determination, please consider working on this game further :) As this is awesome what you did there :)
Thanks! I appreciate the feedback. I'll continue to optimize this game. I'm especially interested in a sub 6 run.... the impossible dream haha. And if you're willing to write it... I'd be delighted to read the long version of your notes (the good and the bad). your feedback will help me make a cleaner/faster run... so I'd love to see your thoughts P.S. Re: Stage 2 and "walking away from elevator" after I kill Jeff - that is intentional. This game has predefined walking path for transitions between levels. After I kill Jeff, I walk Billy up to the start of that walking path so as not to waste time (the extra walking time will create delays). If you want to see what happens if I don't walk away from elevator, watch this run - it's from original submission I canceled back in March: https://www.youtube.com/watch?v=PuxPbKiry4Y&feature=youtu.be&list=PLo3SyZacAQ8ZVNpdn4tiYG6HH5I00Un-w&t=163 You'll see Billy has to walk up the checkpoint spot... even though he's no longer in my control. This also highlights the fact I should't be doing the Reverse Kick at the end of Stage 1 if I want to be 100% strict about speed (overall - this is a negligible waste of frames - I think the freeze shot of kick looks cool so I left it in. Entertainment vs Speed tradeoff)
sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
Now that I've finished a 6:17 run of this game, I don't know if a sub 6 minute run is possible (outside of using some game ending glitch) :( There's not a lot of places left in the game where timing can be saved - unless someone finds a way to get the throw all the bolos off the cliffs immediately - throughout the entire game.
Post subject: Double Dragon II - The Revenge
sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
Status ======== Work in progress - Save States are very buggy in MAME-rr for this game. I''m gonna try Bizhawk - hopefully I get better results Working ROM Sets ================ None so far Unreliable ROM Sets (Reload from Save States Randomly Crash MAME while TAS'ing) ================ ddragon2 (World Set) ddragon2u (US) Untested ROM Sets ============== ddragon2j (Japan) ddragon2b Basic Attack Damage ===================== Punch - 2 HP Uppercut - 4 HP Knee - 2 HP Throw - 4 HP Kick - 2 HP Roundhouse - 2 HP Elbow - 3 HP Hurricane Kick - 6 HP Jump Kick - 3 HP Jumping Side Kick - 2 HP Combos ========== TBD Weapon Damage ========== Knife - 12 HP Knife (Lofted throw by Williams) - ??? Whip - 4 HP Kettlebell - ??? Grenade Toss - 5 HP Grenade Ground - 20 HP Log - 6 HP Environmental Hazard Damage ======================== Stage 3 Tractor - 12 HP Stage 4 Rolling Bombs - 5 HP Stage 4 Statue Lasers - 20 HP Stage 4 Extending Wall- 8 HP RAM Addresses Of Interest ===================== 000003C1 - Player 1 Health 00000420 - Player 2 Health 0000047F - Enemy 1 Slot HP 000004E2 - Enemy 2 Slot HP 00000545 - Enemy 3 Slot HP 000005A8 - Enemy 4 Slot HP 0000060B - Enemy 5 Slot HP 0000066E - Enemy 6 Slot HP 000006D1 - Enemy 7 Slot HP 00000734 - Enemy 8 Slot HP 00000797 - Boss HP Difficulty Differences ================= There are 4 difficulty levels - Easy, Medium, Hard, Hardest. Enemies get extra health, that's it From Easy to Hard, all enemies are granted an extra 4 HP per difficulty increase From Hard to Hardest, enemies receive a 6 HP boost Enemy HP Breakdown Please visit Google Sheet for analysis of HP for every enemy in game https://docs.google.com/spreadsheets/d/1PdwyURSoRlUhSpXkavUQmQZCWBlAk7NiUCwb0W4tZkg/edit?usp=sharing TAS Environment ===============
    Windows 10 64-bit MAME-RR 0.139-v.0.1-beta
Things that made me mad about this game =============================== Mystery solved from childhood about why I thought this game used to drain my quarters faster after I died. It's by design >_< You get less life on your extra lives, and continues The very first life from fresh game gets 64 HP. All subsequent extra lives and continues have 53 HP per life. Pretty lame.
sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
zaphod77 wrote:
this game is very laggy. perhaps lag management will be able to improve things?
Unfortunately I'm not sure how much [more] can be done about lag caused by sprites. This game is infamous for being a laggy P.O.S., and it kicks in as soon as there's 3+ sprites on screen (and trying to fight 1 on 1 makes for a slow stage completion) If you'll notice, I do manage minor lag caused by aux. objects like weapons (boxes, boulders, whips, etc). I'm either throwing them off screen, or making sure they fall into pits/cliffs once I've used them as much as I need to. For example, in my previous TAS when I dropped the Lindas off ledge in Stage 2 Boss Area, their whips fell onto elevator platform - which left them on screen at start of Stage 3 - and caused a little lag. For this run, I elbow them in opposite direction to keep the whips off screen at start of Stage 3
sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
feos wrote:
Please talk about the difficulty differences.
There's 4 levels of difficulty: Easy, Medium, Hard, Extra Hard. Enemies gain an extra 4 HP per difficulty level. For example: Stage 1 Adobo has 34 HP on Easy, 38 HP Medium, 42 HP on Hard, 46 HP on Extra Hard. Player health does not change between difficulty levels (you always have 53 HP) The AI difficulty doesn't seem to change much between levels - if at all. From memory - the enemy counts don't change either (I rarely play on Hard and Extra Hard - with the health amounts - it's a boring grind) If you're interested in a full breakdown of every enemy's health on all 4 stages: please take a look at this Google Spreadsheet: https://docs.google.com/spreadsheets/d/1rrCgVNUCvbQ-CbDxKYcOKLS3B7h4YxN6liTRHngzw10/edit#gid=0 Fun Fact: Stage 4 Jeff (the Green Palette swap of Billy and Jimmy) is actually the highest HP character on game, not Willy - the final boss
sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
PLANET wrote:
Wow : ) Maan, that's so much better! : ) A definitive yes vote. Gotta love the new improvements, especially the "here, catch!" moment for two black Bolos and their companion, both with knife and the dynamite ; ) @ lvl 4 : D Anyhow, there are some moments of taking in damage where I don't feel it's necessary, and perhaps some other parts could be further optimized, but I think it's safe to say this is great :)
Thanks for the feedback. Re: unnecessary damage - there's definitely some points I don't intend to take damage. And there are others where I'm working around the stupid AI system (esp in places where I'm stuck walking towards enemies in straight line instead of being able to approach at angle). I haven't done uber heavy analysis on frame counts consumed on hit trade vs entering fight at slight angle - was waiting to complete a TAS that I felt would be good basis to build an absolutely perfect run upon (and I think this 2nd run nails my basis)
sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
TheReflexWonder wrote:
If you're able to throw the final enemies into the pit from above, why couldn't you do it to the two Abobos you used dynamite on? Is the floor actually different between there and the final fight? Regardless, there was great use of enemy manipulation and it was pretty entertaining. Yes vote from me. :)
Thank you! Re: the two adobos I used dynamite on - I can align myself on same Y-offset to throw enemies into the pit. The problem is the game glitch won't work here. It's unreachable by the Adobos. The enemies will simply get stuck in place - right out of range, and will never come down. I did manage to throw one of the Adobo's off the left hand side of that area once (not using the glitch... just managing to get them into the lower part of that bridge area) - but I can't get both over here - one of them always gets stuck.
Post subject: Need help with MAME, MacroLUA and laggy games
sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
Hi all, I'm new to TAS'ing (~2 weeks in) - and have a question about using LUA Keyboard Macros that aren't reliable with laggy games (I've been TAS'ing Double Dragon Arcade: http://tasvideos.org/5869S.html) The game lags at different rates depending on how many enemies or objects (weapons) are on screen. Say for example I capture/record all my combo macros based off of my input in first fight (single enemy): https://youtu.be/GeqYfzzoJUE?t=15 I can't playback those same macros (.MIS files) in fights with 2+ enemies when the game starts to lag: https://youtu.be/GeqYfzzoJUE?t=22 - the input is out of sync thanks to the lag and the combos don't work anymore Am I stuck having to write different sets of macros specific to number of enemies on screen, or is there a way around this?
sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
ViGadeomes wrote:
sugarfoot wrote:
When I'm moving around into deep right part of the corner after I kill the boss (and before jingle plays as Mariam drops from Rope) - that's intentional (and think the inputs after the boss are relevant to playback)
    I thought it was funny that the last Black Roper drops the bat and Nopes his way out of there when I run towards him The glitch that makes the boulder and White Roper appear after I kill the boss - it only appears when I wedge myself in that corner (after I kill the boss)
I can generate the glitch with dying White Roper with Boxes and Whips too using a kick as the input as the game ends, but wedging myself in corner is most consistent so far
Ok, yes vote by the way :)
Thank you!
sugarfoot
He/Him
Experienced Forum User, Published Author, Player (73)
Joined: 3/6/2018
Posts: 42
ViGadeomes wrote:
I think you can delete your last inputs and finish them at your last punch of the boss if you have inputs after because I see your character moving but I don't know if it's you or the game.
When I'm moving around into deep right part of the corner after I kill the boss (and before jingle plays as Mariam drops from Rope) - that's intentional (and think the inputs after the boss are relevant to playback)
    I thought it was funny that the last Black Roper drops the bat and Nopes his way out of there when I run towards him The glitch that makes the boulder and White Roper appear after I kill the boss - it only appears when I wedge myself in that corner (after I kill the boss)
I can generate the glitch with dying White Roper with Boxes and Whips too using a kick as the input as the game ends, but wedging myself in corner is most consistent so far