Post subject: Duck Tales
Player (36)
Joined: 9/11/2004
Posts: 2623
Because Donkey Kong is a long game and I hate the vines in world 4 with a passion, I figured I'd try something quick and easy. http://www.nerdparadise.com/crap/Omni/DuckTales-Omni.fcm First level complete around a second quicker than Genisto's published video. AFAICT most of the gains came from using the vines to speed myself up in a Rockman-esque fashion, and better Launchpad grab.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Joined: 4/23/2004
Posts: 150
Looks good. The only thing I can add is that you can walk right under the first bee, but it could very well be slower, and I'm sure you've tried it. Andreas
Player (36)
Joined: 9/11/2004
Posts: 2623
Well, not really, there's a biting plant there.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Editor, Reviewer, Experienced player (968)
Joined: 4/17/2004
Posts: 3107
Location: Sweden
I saw a speedrun the other day which skipped grabbing Launch Pad altogether. I think. I'll check when I get home. Does it speed it up somehow?
Joined: 4/23/2004
Posts: 150
Perhaps I should have clarified that I meant the first bee after climbing the vines. Andreas
Player (36)
Joined: 9/11/2004
Posts: 2623
Truncated wrote:
I saw a speedrun the other day which skipped grabbing Launch Pad altogether. I think. I'll check when I get home. Does it speed it up somehow?
It may or may not, I was unable to skip Launchpad. My longest Pogo wasn't long enough. I might be missing a trick.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Player (36)
Joined: 9/11/2004
Posts: 2623
I went to the end of level 3. But I was unable to find any time savers in 2 or 3. So, I'm abandoning this unless someone really wants to see it. All it will wind up being is a rehash of Genisto's run with a faster 1st level, and less wobbling.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Editor, Reviewer, Experienced player (968)
Joined: 4/17/2004
Posts: 3107
Location: Sweden
From the short glimpse of your run it seemed that you could skip forward a little by grabbing and letting go of vines and such, so you wouldn't want to skip Launchpad. But I'll check it anyway and I won't forget it this time, promise. How much is the first level improved? Do you have no ideas for speeding things up in the later levels? Those would be interesting questions for deciding if (I think that) you should go on.
Player (36)
Joined: 9/11/2004
Posts: 2623
If I could find a way to skip Launchpad it would save 4 frames, assuming I can do it immediately with no windup. I gained about a second over Genisto in the first level. (Hard to tell because it's in Famitasia) And I have no ideas about speeding up anything else. I was even forced to manipulate the Transylvania boss in what seemed like the exact same way (3 frames of waiting for me). If anyone actually wants to see it I'll continue. But don't get too excited about it. Nothing game breaking, or even original really.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
adelikat
He/Him
Emulator Coder, Site Developer, Site Owner, Expert player (3596)
Joined: 11/3/2004
Posts: 4738
Location: Tennessee
still, it is an improvement. I would go ahead and finish it and submit it. Faster is Faster even if only 1 second
It's hard to look this good. My TAS projects
Player (67)
Joined: 3/11/2004
Posts: 1058
Location: Reykjaví­k, Ísland
Not only that, but also the new run will use FCEU, which is better than Famtasia. It could encourage even more improvement later.
Editor, Reviewer, Experienced player (968)
Joined: 4/17/2004
Posts: 3107
Location: Sweden
Okay, I went back and checked. The speedrun guy definitely skips Launchpad and jumps the chasm without windup. The speedrun is done on the EU version (or so the AVI filename says), so that might be the reason you can't do it. Personally I think 1 second is a bit on the short side for this kind of game. But I would watch it and vote yes anyway if you completed it.
Player (36)
Joined: 9/11/2004
Posts: 2623
Well, I could switch versions. But it'll probably set a bad precedent and cause controversy and general angst. I redid the third stage. Some minor improvements. Plus a minor glitch showed off during the boss battle. Current progress: My 13775 vs. Gen's 13860 http://www.nerdparadise.com/crap/Omni/DuckTales-Omni.fcm
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Emulator Coder
Joined: 10/9/2004
Posts: 453
Location: Norway
That was nice fast smooth and good :P
adelikat
He/Him
Emulator Coder, Site Developer, Site Owner, Expert player (3596)
Joined: 11/3/2004
Posts: 4738
Location: Tennessee
good job, look foward to seeing the rest
It's hard to look this good. My TAS projects
Player (36)
Joined: 9/11/2004
Posts: 2623
It is done. Check the submission queue.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Joined: 4/23/2004
Posts: 150
Two things I thought of: 1) I keep remembering that you can hit Magica De Spell before she lifts off if you enter the room with the pogo stance. I may very well be wrong, though. 2) I'm quite sure you can hit the Snail King boss of the African Mines in his roll form (You can also him high up by taking a hit at the ceiling.). I never really confirm suggestions, so I might be wrong. [And also, the octopus you killed before getting the Gizmo remote dropped a 10.000 diamond, which wastes time as it counts towards your score at the end, OMG!!124!] Maybe you could pogo off the bee in the vine section up to the "temple" part in the Amazon, but it's such a short bit to climb, and the screen scrolls, so I don't think it helps. You might even have to wait slightly, but it just crossed my mind. Otherwise, this was a very clean minimalistic run without any stops. Question: Why did you grab the Moon Cheese so high up? Was it just to be parallell to the "shelves" or am I missing something? Andreas
Player (36)
Joined: 9/11/2004
Posts: 2623
1) Yes you can, but it requires you manipulate her to stay on the ground, I entered the room on the first frame that I could always hit her without pause 2) You cannot, they aren't even the same enemy in memory, you can't even phase through him like all the other bosses either. 3) That octopus, AFAIK, always drops the diamond, and avoiding it would cost >1 frame which is how long it takes to count it down. 4) This honestly didn't cross my mind. I'm not sure it'll be faster though. 5) Yeah, pretty much. Now that I watch it again, I could have been more centered though....
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Expert player (3578)
Joined: 11/9/2007
Posts: 375
Location: Varberg, Sweden
A japanese fellow has beaten my time due to a new trick on the moon level: http://www.youtube.com/watch?v=yQObPomgA_w It's very much easier to perform than the previous glitch and not as spectacular IMO but indeed faster and thus it should to be on this site. Overall the run is pretty sloppy and I think I can do 5-6 seconds faster. If so, should I just give him credits or add him as a co-author (since his discovery is the only reason for redoing this run) even though he's not a member of this site?
feos wrote:
Only Aglar can improve this now.
Player (223)
Joined: 10/17/2005
Posts: 399
Aglar wrote:
Overall the run is pretty sloppy and I think I can do 5-6 seconds faster. If so, should I just give him credits or add him as a co-author (since his discovery is the only reason for redoing this run) even though he's not a member of this site?
I don't think there exists a single run on this site that wouldn't use a tactic discovered by someone else. So no, I wouldn't say it's necessary to add him as a co-author. Just remember to credit him nice and well on submission text.
<adelikat> I've been quoted with worse
Former player
Joined: 4/16/2004
Posts: 1286
Location: Finland
Yeah it shouldn't be considered as co-authored if you're just using a trick of his and he hasn't actually recorded anything. Pretty much what Bablo said.
Joined: 4/3/2006
Posts: 269
I agree with Bablo and Kyrsimys, no need to add as co-author. It's enough to just mention it to give credit.
MESHUGGAH
Other
Skilled player (1889)
Joined: 11/14/2009
Posts: 1349
Location: 𝔐𝔞𝔤𝑦𝔞𝔯
I'm working on improving the previous submission by Aglar since I finished Duck Tales 2 with feos. I'm currently 15 frames ahead after leaving the icy stage at level 4 (I had to sacrifice 3 frame to manipulate away the hockey enemy). Now if this wouldn't be enough, the way the game calculates the Y sub position is ridiculous.
A:AB X:00 Y:00 S:BB P:nvUbdIZC     $E9ED:20 A1 F2  JSR $F2A1
A:AB X:00 Y:00 S:B9 P:nvUbdIZC       $F2A1:BD 60 06  LDA $0660,X @ $0660 = #$15 -- load y sub 1
A:15 X:00 Y:00 S:B9 P:nvUbdIzC       $F2A4:38        SEC                        -- set carry flag
A:15 X:00 Y:00 S:B9 P:nvUbdIzC       $F2A5:FD B0 07  SBC $07B0,X @ $07B0 = #$55 -- Y sub 1 - Y sub 2 - ~C
A:C0 X:00 Y:00 S:B9 P:NvUbdIzc       $F2A8:9D 60 06  STA $0660,X @ $0660 = #$15 -- store y sub 1
A:C0 X:00 Y:00 S:B9 P:NvUbdIzc       $F2AB:BD 40 06  LDA $0640,X @ $0640 = #$AB -- load Y pos
A:AB X:00 Y:00 S:B9 P:NvUbdIzc       $F2AE:FD C0 07  SBC $07C0,X @ $07C0 = #$04 -- vertical boost - Y sub 2 -~C
A:A6 X:00 Y:00 S:B9 P:NvUbdIzC       $F2B1:9D 40 06  STA $0640,X @ $0640 = #$AB -- store y pos
A:A6 X:00 Y:00 S:B9 P:NvUbdIzC       $F2B4:60        RTS (from $F2A1) -----------------
Y sub 1 changes on every in-game frame even when you are on ground. Y sub 2 changes only when you are jumping/falling. Needless to say, it's possible to abuse higher jumps and lower jumps. However I have no idea how to calculate it since the jump length depends on time of jumping, length of jumping and previous jumps. And here is a lua script.
-- HUD (all functions except stuff()) by Pasky13
-- rest made by mostly feos and MESHUGGAH

local camx

lastXpos = 0
lastYpos = 0

function findbit(p) 
	return 2 ^ (p - 1)
end

function hasbit(x, p) 
	return x % (p + p) >= p 
end

local function hex(val)
	val = string.format("%X",val)
	if string.len(val) == 1 then
		val = "0" .. val
	end
	return val
end

local function axis(x,y,color)
	gui.line(x,y-16,x,y+16,color)
	gui.line(x-16,y,x+16,y,color)
end

local function camera()
	camx = memory.readbyte(0xF2) + (memory.readbyte(0xF3) * 256)
end

local function player()
	local x = (memory.readbyte(0x720) + memory.readbyte(0x730) * 256) - camx
	local y = memory.readbyte(0x640)
	local offset = memory.readbytesigned(0x7D0)
	local action = memory.readbyte(0x620)
	if hasbit(action,findbit(3)) == true then
		axis(x,y,"#FF0000")
	else
		axis(x,y,"#FFB000")
	end
	
end

local function objects()
	for i = 1,15,1 do
		if memory.readbytesigned(0x700 + i) < 0 then
		
			local x = (memory.readbyte(0x720 + i) + memory.readbyte(0x730 + i) * 256) - camx
			local y = memory.readbyte(0x640 + i)
			local fill  = "#FF0000FF"
			local outl = "#FF000030"
			local xrad = 0
			local yrad = 0
			local enemy = false
			local offset = 0
			
			local etype = memory.readbytesigned(0x7D0 + i)
			if etype < 0 then
				if bit.band(etype,0x70)  == 0 then
					fill = "#FFFF00FF"
					outl = "#FFFF0030"
				else
					enemy = true
				end
				
				offset = bit.band(etype,0x7F)
				if enemy == true then
					if memory.readbyte(0x620) == 3 then
						offset = offset + 7
					end	
				end
				
				xrad = rom.readbyte(0x1F4C8 + offset)
				yrad = rom.readbyte(0x1F4A8 + offset)
				if xrad < 0x50 then
					gui.box(x+xrad,y+yrad,x-xrad,y-yrad,outl,fill)
				end
			else
				offset = memory.readbyte(0x610 + i)
				xrad = rom.readbyte(0x18675 + offset)
				offset = bit.band(memory.readbyte(0x7D0+i),0x7F)
				yrad = rom.readbyte(0x1F4A8 + offset)
				if xrad < 0x50 then
					gui.box(x+xrad,y+yrad,x-xrad,y-yrad,outl,fill)
				end
			end
			--gui.text(x,y,"E" .. hex(i) .. "/" .. hex(offset) .. "/" .. hex(xrad) .. "/" .. hex(yrad))
		end
		
	end
end



function Stuff()
	camera()
	player()
	objects()

	local Xpos = memory.readbyte(0x720) + memory.readbyte(0x730) * 0x100 + memory.readbyte(0x670)/400
	local Ypos = memory.readbyte(0x640) + memory.readbyte(0x7B0)/400
	local YposSub = memory.readbyte(0x660)/400
        camx = memory.readbyte(0xF2) + memory.readbyte(0xF3) * 0x100
	local Ycam = memory.readbyte(0xF1)
	local timer = memory.readbyte(0x92)
	local timer2 = memory.readbyte(0x95)
	local RNG = memory.readbyte(0x90)
	local bossHP = memory.readbyte(0xB1)
	local bossInv = memory.readbyte(0x6FF)

	local Xspd = Xpos - lastXpos
	local Yspd = Ypos - lastYpos

	gui.text(75, 8, string.format("Tmr: %3d:%3d\nRNG: later, ok?\nHP: %d\nInv: %d",timer,timer2,bossHP,bossInv))

	for i = 0, 16 do
		id		= memory.readbyte(0x620+i)
		xSub	= memory.readbyte(0x670+i)
		scrnX	= memory.readbyte(0x650+i)
		x		= memory.readbyte(0x720+i) + memory.readbyte(0x730+i)*256 - camx
		ySub	= memory.readbyte(0x7B0+i) -- or 660
		y		= memory.readbyte(0x640+i)
		state	= memory.readbyte(0x710+i)
		
		if x<0>242 then x=242 end
		 if id>0 and i>0 then
			gui.text(x-6, y-2, string.format("%X",id), "#ffffffa0")
		 end
		if i == 0 then gui.text(scrnX-10, Ypos+10, string.format("%.2f\n%.2f",Xspd,Yspd), "#ffff00ff") end
	end	
	gui.text( 0, 8, string.format(
		"X: %.2f\nY: %.2f",Xpos,Ypos
	))
	gui.text(150,8, string.format("Ysub: %.2f", YposSub))

	-- if memory.readbyte(0x80) == 2 then gui.box(1,1,256,256,"#FFFF00FF") end


	lastXpos = Xpos
	lastYpos = Ypos
end

emu.registerafter(Stuff)
edit: lua script modified
PhD in TASing 🎓 speedrun enthusiast ❤🚷🔥 white hat hacker ▓ black box tester ░ censorships and rules...
Expert player (3578)
Joined: 11/9/2007
Posts: 375
Location: Varberg, Sweden
I also started an improvement of this myself long ago, but put it aside and never got back into. Here it is, though I doubt it's better than yours. Feel free to finish the project. The constant y-subpixel change on ground is basically the same as in Chip 'n' Dale, with the difference of increasing 51 every frame instead of 85. I don't think there exist such things as a second set of subpixels though. as far as I recall the y-subpixels in air can only be changed by having different y-subpixels before jumping/falling.
feos wrote:
Only Aglar can improve this now.
MESHUGGAH
Other
Skilled player (1889)
Joined: 11/14/2009
Posts: 1349
Location: 𝔐𝔞𝔤𝑦𝔞𝔯
Aglar wrote:
I also started an improvement of this myself long ago, but put it aside and never got back into. Here it is, though I doubt it's better than yours. Feel free to finish the project.
That boss 1 ending (scrooge humping the air) is very nice, but I won't steal it.
Aglar wrote:
The constant y-subpixel change on ground is basically the same as in Chip 'n' Dale, with the difference of increasing 51 every frame instead of 85. I don't think there exist such things as a second set of subpixels though. as far as I recall the y-subpixels in air can only be changed by having different y-subpixels before jumping/falling.
It exists as the debugged information shows. You can easily verify this by doing 2 little jumps in a row. If you remove the 1st jump, the 2nd jump's vertical boost (and it's total height depending on the delay between the 2 jumps) will be changed. If Y sub 1 wouldn't change all the (in-game) time, every jump on the same platform would be equally high and would have the same boost. Currently I'm sticking to brute forcing all jump possibilities whenever I need to be higher or lower.
PhD in TASing 🎓 speedrun enthusiast ❤🚷🔥 white hat hacker ▓ black box tester ░ censorships and rules...