Ah. Didn't see that. If a mod wants to append this topic to the end of that one, I have no problem with that.
I see you never actually got around to it. I have a few projects I'm working on, but this one will be on my list fairly soon I hope.
Emulator Coder, Site Developer, Site Owner, Expert player
(3573)
Joined: 11/3/2004
Posts: 4754
Location: Tennessee
Actually, I did start it, but didn't get very far do to only having a keyboard and that a game like this requires a lot of keypresses at once.
If you want to work on in it, by all means.
I have just completed a tas of DD2 and was wondering if there would be consideration to make a 1P category for this game. It's completed in a little over 10 minutes or just under (depending on how the frame count is done) and uses a trick on lvl 6 that I had never seen before in any movie of this game. Looking forward to some feedback.
was the 1p a good tas. i seem to recall that it was a bit sloppy (could be remembering wrong though). either way it sounds like i wont be submitting since its obselete. are u talking about the teleport glitch btw?
Emulator Coder, Site Developer, Site Owner, Expert player
(3573)
Joined: 11/3/2004
Posts: 4754
Location: Tennessee
I was speaking of the shortcut in lv 6 that honorablejay mentioned. But in a 1p TAS I guess the zipping glitch could also be used to save time depending on circumstances. I discovered it back when doing an older version of the 2p TAS but couldn't find a use for it in that version. I think maybe this trick is what you are referring to you? It is where you use the L+R flying knee trick to fall into the platform where the enemies are, and appear on the left side of it.
And yeah, that old 1p TAS was definately improvable. In general, the site policy is to prefer 2p runs _over_ 1p runs unless a 1p run can be completed faster, in which case we tend to have both.
As such, the 1p DD2 TAS was published because it was faster than the 2p run at the time.
Regardless if it is publishable are not, I'd be interested in seeing your TAS, maybe you could upload it and post it here ^_^
Yah its the zipping glitch im talking about. Anyway I am currently uploading lv l1-5 on youtube and will probably post 6-9 this evening when i get off work. Thanks for the feedback adelikat. Cant wait to see the improved 2p.
Speaking of Double Dragon 2, I discovered a trick for a 2 player run that doesn't seem to have been used. Probably should have spoken up earlier.
At the beginning of the first level after the first enemies are defeated and it tells you you can move on, one player can knee the other player through the right side of the screen and it causes it to scroll much faster than if the players walk. I don't know how feasible this is, but it seemed to save me some time when I tried it.
Emulator Coder, Site Developer, Site Owner, Expert player
(3573)
Joined: 11/3/2004
Posts: 4754
Location: Tennessee
There are some nice moments in this run :)
The beginning of level 4 death shortcut was nice
The fact that the zipping/teleporting glitch could save time was really nice to see
Of course, it uses the end of level 6 shortcut (which will be in my next movie).
There are some improvemable moments for sure
The conveyor belts at the end of level 4 really stood out, watch how that is handled in the published movie a little closer
The level 7 dynomite guys on the disappearing platform, was it really not faster to knee them off the edge?!
The level 7 stick guys at the end looked really dubious
Overall though, the 1 player version is a lot like the 2 player except a whole lot less interesting. It does have the teleport glitch though, that adds some value to the run.
Emulator Coder, Site Developer, Site Owner, Expert player
(3573)
Joined: 11/3/2004
Posts: 4754
Location: Tennessee
Well, I've decided to post my current progress of my v3 movie. This is because I have stumbled on a possible big shortcut in level 6 but can't quite figure out what is going on.
Here is a complete level 6 wip that uses the expected shortcut at the end (same one in the 1p movie posted here). At the black screen it is 601 frames ahead of the published movie.
adelikatv3-601
However, here is an almost awesome shortcut using the spin kick.
Possible shortcut
The thing is, this shouldn't work! I tested this idea when I first considered doing a mode be run years ago. The game does checks to prevent you from taking advantage of extra height from taking damage. But somehow in this wip, the game allows Jimmy to enter the door. I've tried making the spin kick from different spots at different times, and it almost never works. So I am not sure what factors allow this to happen. And of course Bimmy propells the opposite direction (when normall they would both go in the same direction, figures) so I don't know if he would have entered the door too. If Bimmy had entered the door too, the move would be about 550 frames faster than my first posted wip (1150 faster than the published movie).
If anyone has any insight into this, I'd be much appreciative.[/i]
Now that is a nice trick. I was wondering though how you did the other little glitch where you landed in mid-air, maybe that has something to do with the cyclone glitch? Do you think there's any possibility to make the game think you're on the ground just long enough to jump again or even do a special move (uppercut maybe)?
The only thing I can think of with regards to the cyclone glitch is using U+D/L+R to confuse the game so it can't tell what height you started with. It's either something like that, or just a bug in the level itself. Maybe something along the lines of a straight line where the check that makes sure stuff like that doesn't happen is broken.
Too bad we don't have some really technical person doing a hex dump of the game and figuring this stuff out like they do with mega man 2.
I don't know how to do this myself, but try looking up the player position values and watching them as the cyclone is executed. Another one to check would be the height value. If the height value can be reset in the air or just have garbage data thrown at it you could do some really sick maneuvers.
Btw, I take it you're an AVGN fan? Luv the Bimmy reference :)
*possible brainstorm*
I checked out the shortcut again in frame advance, and what I noticed is the frame you enter the exit door on still has Sr. Red in the "standing with mouth gaping" position. Maybe the game doesn't consider the player falling until he actually goes sideways. I did some frame counting and when your player gets hit with the uppercut he moves up for 15 frames in the "standing ouch" position and doesn't go sideways until the 16th frame (just don't ask me how many game units you move up, I don't know how to find that). Possibly you could get on the platform just under the exit and have both players execute an uppercut on each other to get them to the exit.
Do you have any idea why Sr. Red went left and Sr. Blue went right after the cyclone kick? I noticed at multiple times during the run you were able to send both players flying in the same direction from a double hit and other times you'd have them go opposite. Is that cyclone glitch just something that you can't control?
Emulator Coder, Site Developer, Site Owner, Expert player
(3573)
Joined: 11/3/2004
Posts: 4754
Location: Tennessee
Honestly, I don't know why they go in opposite directions :|
When I get them to go in the same direction it is based on the value in ram address 0420. If it is low, they are eligible for the same direction simultaneous hits. In that .fm2 the value is low and I can easily pull off the flying knee, and jump kicks in the same direction. I was even messing around on the bottom platforms, and was able to do the cyclone kick down there.
I like your theory about the standing animation. However, with various jump kicks, cyclone kicks, etc. I can get a player into that door even while they are horizontal. But it often doesn't work.
Nice improvements :)
Just a ? about lvl 6 at the end: is it really necessary to walk all the way to the left just to show the platforms or is it possible to just start jumping on them as soon as you get there? I remember doing that years ago on the real thing and the only problem I had to worry about was by the time you landed on the platform it was already disappearing.
The other observation I had was with the mid-air landing (during the stickmen fight on lvl 6, and yes I mentioned this before) where you do the knee zip glitch. Would it be possible to use that glitch on lvl 7 to in the gear room? I've been thinking about how to skip the ladder, and the only thing I can come up with is to do the knee zip and get hit by a spike near the top of the jump.
I also saw you get pushed into the platform then pushed out really fast, would it be possible to use that small glitch somewhere else to save time/warp to other places or is the game too smart for that to work?
thanks!
about the lvl 6 platforms. its not necessary to scroll but i do anyway because as you said you can never catch the first platform b4 it disappears. also i haven't actually tested this but it seems like the platforms don't cycle as fast if you don't scroll them into the screen. i may also be hallucinating.
as to the zip-glitch. im not sure what causes this. i randomly found it to work on lvl 5 at the chin-tai-meis (stickmen) right b4 the train. other than that and lvl 6 i haven't found any other places where it works (although i haven't actually tested it in many places and def not the 2nd trap room hmmm...).
i'm not sure which platform you're referring to but im assuming its in the 2nd trap room. please clarify and i'll see if i can come up with an answer.
i tend to agree with that adelikat. although on lvl 6 the platforms are on the same screen and lvl 5 the platforms im assuming are the ones on the train, so its kinda weird.
@adelikat
1st of all congrats on a fantastic TAS, I loved every minute of it.
I had a crazy idea for a substantial timesaver. It would be in Mission 2 right before the chopper that drops 3 sets of enemies out. After beating the Ropers climb up the 1st and 2nd vertical pipes. Instead of climbing up the 3rd vertical pipe that initiates the chopper could you move to the far right edge and do the double knee to send both characters flying across to the next area? It is a very short distance so it is just a matter of whether or not the screen will scroll without beating the chopper enemies.
I know that if you are on that side after beating the chopper enemies there is no wall there and you can pass through back towards the pipes so maybe it works from the other side as well. Not sure at all if this would work but if it did you would save a big chunk of time by skipping the chopper.
Sorry to resurrect the thread, but I wanted to post a lua script I just made here in case anyone playing dd2 would find it useful. It puts health bars on top of the enemies that are color coded to help you determine how to kill them quickly. I'm practicing for a speedrun.
Here's a short video of it in action:
Link to video
And here's the script itself:
Language: lua
-- Double Dragon II enemy health meter bars by Andypro
-- Helpful for speedrunning practice.
--
-- Red bars represent a "knee" amount of damage (30)
-- Orange bars represent an uppercut (20)
-- Yellow bars represent a spin kick (15)
-- Green bars represent a jump kick (8)
-- Blue bars represent a punch (4)
--
-- For instance, if an enemy has two red bars followed by a green bar, you know the fastest way to defeat
-- him is to knee him twice and then jump kick him. Obviously any enemy with no red bars will die from a single knee attack.
local function box(x1, y1, x2, y2, color)
if(x1 > 0 and x1 < 255 and x2 > 0 and x2 < 255 and y1 > 0 and y1 < 241 and y2 > 0 and y2 < 241) then
gui.drawbox(x1, y1, x2, y2, color);
end;
end;
-- Draw a life bar given a position and an integer life value
local function DrawLifeBar(x, y, life)
local lifeSegment = life;
local drawYPos = 0;
local Xstart = x-6;
local Ystart = y-44;
local Xend = x+4;
local Yend = y-40;
local Color = { Red = "#ff0000aa", Orange = "#FF9933aa", Yellow = "#ffdd00aa", Green = "#00ff00aa", Blue = "#0000ffaa" };
local chosenColor;
-- Progressively draw the heaviest to lightest bars moving upwards. Therefore the top health bar
-- is the one that is being "worked on" by the player.
while(lifeSegment > 0) do
if(lifeSegment >= 30) then
chosenColor = Color.Red;
lifeSegment = lifeSegment - 30;
elseif(lifeSegment >= 20) then
chosenColor = Color.Orange;
lifeSegment = lifeSegment - 20;
elseif(lifeSegment >= 15) then
chosenColor = Color.Yellow;
lifeSegment = lifeSegment - 15;
elseif(lifeSegment >= 8) then
chosenColor = Color.Green;
lifeSegment = lifeSegment - 8;
else
chosenColor = Color.Blue;
lifeSegment = lifeSegment - 4;
end;
box(Xstart, Ystart, Xend, Yend, chosenColor);
Ystart = Ystart - 4;
Yend = Yend - 4;
end;
end;
-- Calculates the positions of Billy and the enemies and draws
-- the health information. Adding Jimmy to this function should be trivial.
local function DrawHealthInfo()
-- Player 1 memory values
-- 77, d1d0, 880
-- 240 - 92, b6 8ad, 8d3 8d2
local HPp1 = memory.readbyte(0x41e)
local player1x = memory.readbyte(0x077) - (memory.readbyte(0x0D0) + (memory.readbyte(0x0D1) * 255)) + (memory.readbyte(0x880) * 255)
local player1y = 240 - memory.readbyte(0x092) - (memory.readbyte(0x8AD) + (memory.readbyte(0x0B6) * 255)) + (memory.readbyte(0x8D2) + (memory.readbyte(0x8D3) * 255))
if(HPp1 > 0) then
gui.text(player1x, player1y-8, HPp1)
end;
-- Enemy 1 memory values
-- X: 79, d5 d4, 882
-- Y: 240 - 94, xx 8af, 8d7 8d6
local HP1 = memory.readbyte(0x420)
local enemy1x = memory.readbyte(0x079) - (memory.readbyte(0x0D4) + (memory.readbyte(0x0D5) * 255)) + (memory.readbyte(0x882) * 255)
local enemy1y = 240 - memory.readbyte(0x094) - (memory.readbyte(0x8af) + (memory.readbyte(0x0B6) * 255)) + (memory.readbyte(0x8D6) + (memory.readbyte(0x8D7) * 255))
if(HP1 > 0) then
DrawLifeBar(enemy1x, enemy1y-8, HP1);
end;
-- Enemy 2 memory values
-- X: 7A, d9 d8, 883
-- Y: 240 - 95, xx 8b0, 8db 8da
local HP2 = memory.readbyte(0x421)
local enemy2x = memory.readbyte(0x07a) - (memory.readbyte(0x0D8) + (memory.readbyte(0x0D9) * 255)) + (memory.readbyte(0x883) * 255)
local enemy2y = 240 - memory.readbyte(0x095) - (memory.readbyte(0x8b0) + (memory.readbyte(0x0B6) * 255)) + (memory.readbyte(0x8da) + (memory.readbyte(0x8db) * 255))
if(HP2 > 0) then
DrawLifeBar(enemy2x, enemy2y-8, HP2);
end;
end;
gui.register(DrawHealthInfo) -- Register our draw routine so it is drawn on every frame