Posts for Kirkq


1 2
20 21 22
31 32
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
http://dehacked.2y.net/microstorage.php/info/61775649/Float%20Zone%20Mid%20Backup.m64 Here's progress halfway through Float Zone. I'm having problems kicking the bomb right before input ends. Something about taking damage makes it harder for the game to register a bomb kick it seems. (I just keep walking through it.) It may just be faster to lob a bomb at the switch. I haven't investigated too much. The damage route was executed as planned though. I have been checking Y position to maximize height when jumping at the bubble power.
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
I just wanted to emphasize that the floor was touched one time in the entire Wood Man level before the boss gates. I think Rockman 2 has been tortured enough, you should probably play a different episode. =p Easy yes vote, one of the best runs on the site got a large time/entertainment improvement.
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
Just to spur a bit more discussion. I'm quite unfamiliar with the classes assigned based on djinn combinations. I've read that the stat gains and spells are different. We probably need to figure out which stats are most helpful. Does anyone know of any particularly good setups? Possibly one for random encounters and one for bosses. Also I've been wondering, do summons deal more damage if the character utilizing them has higher current stats? For example, if a character has all djinn set to summon, will a summon they attack with do less damage than someone who has all djinn contributing to stats? Is there any one hit kill moves in this game? (on random encounters with special weapons or something.) We should be able to easily figure out which of avoid and sacred feather is better (or equal) by observing the step counter memory values I posted earlier. I'm going to speculate that the minimal number of djinn necessary to beat the game in a timely manner is around 4-5 of each type. Flash and Granite are absolutely necessary. With 4 characters it may be feasible to get the Fusion Dragon to use weak attacks every turn. (Stat break, etc.) This depends if the attack type RNG is dependent on your attacks though, which it may or may not be. PkGamerB beat the game in 32 youtube segments averaging 9.5-10 minutes each. He did fast forward some dialogs. Probably saving about 20 minutes worth. So I'll throw out an estimate that his run was under 6 hours. He collected all djinn, and he had no control over how random battles went. (running away, quick kill, etc.) He probably spent well over half an hour in side dungeons or backtracking to get some of the djinn. I would speculate a TAS to be at around 4 hours. I do want to do a battle disassembly eventually, but I haven't quite figured out how to use the debugger yet. It seems I need to connect some external program to VBA or order to use it effectively. Learning to read the instructions will be a project by itself, I did find a few data sheets. If anyone has experience in this and is willing to help me get started let me know. I probably won't work on this for quite some time though.
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
MrGrunz wrote:
http://www.youtube.com/watch?v=r7mr6mHKI4A&feature=channel_page new way to escape the forest. might be useful for a RBA TAS
Kirkq wrote:
I did a rough comparison and the old method still seems to be about 10-15 seconds faster assuming the deku stick is acquired in both cases. Someone please correct me if I'm wrong.
(The 'old method' refers to megaflipping out of the lost woods.) The video you linked is a bit different, but since you have to go to the shop anyway, it still seems slower. The Saria cutscene is quite lengthy.
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
World 2 complete and youtube'd. http://www.youtube.com/watch?v=cIJhouHwoBw Will probably continue making decent progress until Nitros/Hard Coaster.
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
Is there a black screen somewhere that could be used?
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
0 and 1's epic journey. I was fairly entertained and I could almost tell what was going on. Walking, Battle, Fanfare, Menu, Walking. The 1 minute RPGs are strangely intriguing. Yes vote. "A Chest! You may: Oops Teleporter!"
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
Make sure you get our emulator versions customized for TASing here: http://www.bluetoaster.net/emu/ Defaults should be "+" and "-" for speed and "\" for frame advance. TASers almost always play in frame advance. Here are two of the Mupen 64 "How to"s. http://www.youtube.com/watch?v=KwiXClsrXWU http://www.youtube.com/watch?v=MKaELawWWhg N64 TASing is typically much more difficult than NES or SNES When I press a button and frame advance, the result occurs and records. If I don't like the result I can reload to whatever point I want and do it again and it will record input from there. There is a hotkey to switch to reading mode instead of writing mode to review progress. It is tedious, but not as tedious as you seem to think. The hotkeys can be used quickly once you get used to them.
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
The Checksum seems to indicate this was played on the PRG1 rom. Every screen in the woods looks the same. All the monsters in the woods are the same. Everywhere in the tunnels looks the same. (At least they gave you a map.) The shootout apparently they decided to vary and make some enemies take two hits instead of one while you're staring at blackness. For the last minute I thought I was going to be mildly entertained, but then every screen and enemy was the same. Sorry this game is pretty terrible. No.
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
I never watched Solomon's Key, so I don't have that to compare to. I watched roughly 15 various minutes of the movie at varying points in the run. This run is long and slow paced, a boring combination. This run also demonstrates the theoretical fastest possible strategy for each level, which is a plus. If the game ran naturally at 200% speed it might be entertaining to see the levels beaten optimally, but as it is the movement is just obscenely slow. I'm going to go with Meh leaning towards no.
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
Regardless of any sort of table maximums, assuming exactly 50/50 this betting method does not improve your odds. Bet 10 - Lose Bet 20 - Lose Bet 40 - Lose Bet 80 - Lose Bet 160 - Lose Bet 320 - Win You lost 10 + 20 + 40 + 80 + 160 = 310 and made 320. You made 10 dollars this round. No matter which round you win in you only make 10 bucks. In this case, there was a (1/2)^6 = 1/64 chance you lost 6 rounds in a row. You have to win 32 times to double your money, and there is a 32*(1/64) chance you will lose in the 6th round once. This strategy assumes you had a maximum 630 dollars to start with. If you lose 6 bets in a row one time you just lost it all. If you were playing with 100,000+ dollars the problem is still the same. The odds of you losing 10-20 games in a row are considerably higher than one would like to think. If you have infinite money you also have to play infinite games to double your money. 28 losses starting at 10 dollars reaches about 13 billion. You still have a 50% chance of losing after you've played enough rounds to double. Time is money, so why waste your time playing an unnecessary amount of games for the same odds. =p
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
I take it that klmz's warpless 8-2 improvement isn't possible in this movie for whatever reason. The side effects of these glitches are quite humorous. Yes vote.
Post subject: Grinding followed by Grinding.
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
The entirety of grinding complete in roughly 14 minutes. This WIP goes through Padal and gets to Serpent. http://dehacked.2y.net/microstorage.php/info/1675479866/To%20Serpent.smv Kamil, Olvan, and Lejes are in phenomenal placement, and Kamil is set to join. There was a 1/4096 chance that the apprentice locations could be this good. You can spoil yourself or stay tuned. =) Kamil = Padal Barracks (0 frames) Olvan = Bilthem 3F (48 frames) Lejes = Patrof Weapon/Armor Shop (621 frames, but we can shop for Olvan there and save a trip to Bonro) Part 4 - It's just grinding. http://www.youtube.com/watch?v=nfdl9gJMmgU
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
A note about colloseum. According to pkGamerB, the time it takes for the opponent to get to the end is always the same. As long as you get to the end first, there is no reason to go out of your way to speed up the sequence. Party members should be placed in the closest areas, and no psynergy should be used unless necessary. In the case of the final fight, he claims it is faster to kill yourself. (You only lose the lure cap supposedly.) I think the real issue is how many Djinn can be skipped. In pkGamerB's run, certain Djinn are highly necessary for boss fights. As the game progresses I think the random battles will become 1 round of minimal damage followed by an escape. We will probably want to utilize sacred feathers as well. It probably cuts the step increments in half, this is easy to check.
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
You must beat the current record for the run to be accepted. Warps: 4:58.18 No Warps Minus World Walking Only (No B Button) Your movie does not beat the warps run. Please do not submit runs that do not beat existing records.
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
That's pretty interesting. When watching the run I noted that he froze some bridges what seemed like a bit to early. It seemed like if he had walked a little closer before freezing he could have walked a bit more towards his destination while the camera was locked. I might watch the run again later to speculate.
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
Congratulations HappyLee. I tried everything I could think based on variations on the previous runs for the 1-2 pipe and the 8-4 pipe and could not see any way to beat you. The fish can't spawn fast enough to get in the pipe any faster. I concede. Yes vote. Also, can we use this as an opportunity to standardize the timing issues. It's going to be quite confusing if this movie gets obsoleted by a movie that appears to be slower than it. Perhaps we should just convert the movie to an fm2 and update the submission so the timing is consistent.
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
Well done HappyLee. This trick may be useful in other places. Here's a demonstration of the wide variety of things that can occur while moonwalking. http://dehacked.2y.net/microstorage.php/info/637510412/SMB%20Success8%20Good.fcm It seems to scroll the screen when alternating x subpixel 0400 between 0 and 240. Mario must be facing backwards, and must not "skid" when landing. (His velocity at 0057 must be 24.) It happens seemingly randomly as soon as the button is pressed to jump. You can push any combinations of buttons in the air but must let go before the ground is hit. EDIT: I did the glitch falling off a pipe without jumping just now. EDIT2: To explain this a little better: 1.5 camera units/1 frame walking 0.5 camera units/1 frame moonwalking Traversing the same distance twice walking (0.75 camera units per one frame walking back and forth, if that makes sense) is 1.5 times faster the scrolling the camera by moonwalking (not counting time it takes to turn around.) The reason it is faster in HappyLee's movie is because it prevents the piranha from spawning in the particular pipe while still scrolling the screen. I have confirmed that HappyLee pulled this trick off with the least acceleration loss and latest subpixel landing possible. EDIT3: Possible improvements left if anyone wants to try: 1: Perfect fish manipulation could maybe save at most 7 frames. 2: As seen in one of the movies, moving forward as far as possible to scroll the screen without spawning the piranha, moving back, and moving forward again. Use moonwalking in conjunction with this. I haven't figured out how moonwalking can be done with momentum to the left. This is the movie this occurs in: http://tasvideos.org/2353S.html EDIT4: I don't think (2:) is possible unless someone can find out how to moonwalk at really low movement speed.
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
klmz said himself that his new trick was unoptimized, so this will probably be beatable.
klmz wrote:
This is unoptimized, people shouldn't copy & paste it onto their own movies.
In the future please just link to your updated movies so we don't need multiple threads within a few days by the same author. An admin can updated a submission with a faster movie. Link to your updated movies: Here Copied from other thread: I'm all about fast runs, but an obsoleted run shouldn't be taken so personally. Adelikat set out to improve the walkathon putting a lot of effort into entertainment. You found another small time improvement and threw a movie together to "keep your record." Adelikat was informed of another small technical improvement and put it into his movie. It's really not about who has the title, it's about having a good run on the site. I think adelikat's run is more entertaining mostly because you jump and face backwards too much. A faster movie is also better, so I want both. I vote for putting HappyLee's improvements in adelikat's movie and putting the result as Andrewg, HappyLee, klmz, Adelikat's NES Super Mario Bros in XX:XX.XX I don't care what order the authors are in. Someone roll dice or something to figure it out. It shouldn't matter. This site isn't about good Mario players, it's about good Mario movies. Giving recognition to the main contributors is important, but being "the record holder" is not. Adelikat made the most entertaining movie with Andrewg's trick, HappyLee found a trick to improve it. klmz contributed another trick. If anyone finds any improvements in the next week add their name to the list. Maybe do HappyLee's fortress and adelikat's rest of the movie, I don't really care. As it is, HappyLee's movie has way too much jumping, and adelikat's movie is currently slower. HappyLee, Adelikat, klmz and Andrewg would have to agree to this though. To further make this point, klmz provided the most recent improvement, so why should either of you deserve to have the publication to yourself. Can we reach some sort of agreement before anyone makes a new submission?
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
I'm all about fast runs, but an obsoleted run shouldn't be taken so personally. Adelikat set out to improve the walkathon putting a lot of effort into entertainment. You found another small time improvement and threw a movie together to "keep your record." Adelikat was informed of another small technical improvement and put it into his movie. It's really not about who has the title, it's about having a good run on the site. I think adelikat's run is better mostly because you jump and face backwards too much. A faster movie is also better, so I want both. I vote for putting HappyLee's improvements in adelikat's movie and putting the result as Andrewg, HappyLee, (klmz?), Adelikat's NES Super Mario Bros in XX:XX.XX I don't care what order the authors are in. Someone roll dice or something to figure it out. It shouldn't matter. This site isn't about good Mario players, it's about good Mario movies. Adelikat made the most entertaining movie with Andrewg's trick, HappyLee found a trick to improve it. klmz seems to have found an improvement, so add his name to that list. If anyone finds any improvements in the next week add their name to the list. Maybe do HappyLee's fortress and adelikat's rest of the movie, I don't really care. As it is, HappyLee's movie has way too much jumping, and adelikat's movie is currently slower. HappyLee, Adelikat, (klmz?) and Andrewg would have to agree to this though.
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
An any% would be alright, but I think it can mostly be inferred from the 100% run. You need 810 notes and 94 (I think?) Jiggies. So, you have to open all the worlds, and get all but 6 jiggies. So take out the slowest 6 jiggies, 90 notes that are out of your way, all the honeycomb pieces, and a couple stipulations made for a "100% run" and you have an any% run that amounts to about 10-15 minutes faster. It really isn't worth the effort to have such a similar lengthy run published. Half of the skipped jiggies and notes would probably be in Click Clock Wood, and you would probably either skip the jiggies in Freezeezy Peak requiring the running shoes or the jiggies in Gobi's Valley requiring the beak bomb. So really you aren't missing out on much. Go watch the 100% run and fast forward through the aforementioned portions. ;) If any cool glitches are found to bypass the requirements, I'd love to see it. Otherwise it's pretty much the same thing.
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
EDIT: Apparently the problem was a bad rom version, it still seems strange to me that it could occur on any rom unless the bad rom was accessing something in the emulator it should not have been. No further issues, but still an interesting predicament. When brute forcing an outcome by inserting idle frames in various locations, the RNG result obtained while using a script does not sync with the emulated result of the same input. There is a possibility I just suck at coding, but it really seems to be a functionality or game related issue. I was recently contacted for some assistance in lua scripting the first portion of Pokemon Red, where idle frames need to be inserted in various locations in order to make the Trainer ID Low Byte $76 for a glitch. I wrote the script, and I have checked the input thoroughly to see that it seems doing exactly what I want it to. If I manually interrupt the lua script during an outcome and play the movie back, it does not sync. The bytes on the screen do not match what they do when I make the movie by inserting waits manually, and I get a desync. I have done scripting similar to this for Megaman Battle Network and never had anything like this occur. Could it be a problem with lua not accurately saving/loading factors relating to the sporadic RNG of this game? The following is the optimal input: -Wait1 356:A -Wait2 (waiting one or more frames here will make the game lag for 1 frame on the next input) 376:A -Wait3 560:A 677:down -Wait4 680:A 704:left 705:down 706:right 707:down 708:right 709:B -Wait5 766:A The script is currently setup to place the savestate on frame zero. If the savestate is moved to another location, other incorrect values are achieved. The first iteration of no wait seems accurate all (most of?) the time. Any other value based on the loaded state is wrong. I have made it output to a file and display on the screen for convenience. The first four results should be 92, 51, 27, 23. Beyond 27 does not sync with the savestate in this position. This thread is not about how mediocre my coding skills are. My code is probably inefficiently written and much overstated. I did my best to make it presentable. I had the script running without so much beginning/end time, but it's easier to troubleshoot when watching this way. If there are any errors in my code causing problems please let me know, but I did do my best to troubleshoot any problems that could be occurring. Pokemon Red (Super Gameboy) starting from frame 0:
local tempstate = {}
local Maxframewait  --Most frames to wait.
local value
local i
local Currentframewait -- Frames waited by current loop.
local Bestframewait -- Frames waited by best solution so far.
local TrainerIDLowByte

local wait1
local wait2
local wait3
local wait4
local wait5

moviefile = "FrameDump.vbm"  --Output frame counts to a small text file.
dumpfile = moviefile..".dump"
io.output(dumpfile)

value = 0
tempstate[value] = savestate.create()  --tempstate0 = base state

value = 1
tempstate[value] = savestate.create()  --tempstate1 = optimal state

value = 0
savestate.save(tempstate[value])

value = 1
savestate.save(tempstate[value])

-------------------
TrainerIDLowByte = 0xD35A
Maxframewait = 3 -- change this to run longer.  If you go much higher than 10 or so, the script may take quite a while.
Bestframewait = 1000  --arbitrary high number, just used as a comparison to start with.
-------------------

for wait1 = 0,Maxframewait do
for wait2 = 0,Maxframewait do
for wait3 = 0,Maxframewait do
for wait4 = 0,Maxframewait do
for wait5 = 0,Maxframewait do

Currentframewait = (wait1 + wait2 + wait3 + wait4 + wait5)
if wait2 > 0 then
Currentframewait = Currentframewait + 1 --There is a lag frame if wait2>0
end


if Currentframewait <= Maxframewait then
-- Lots of arbitrary loops that get skipped
	value = 0
	savestate.load(tempstate[value])
	
	for i=1,351 do
	vba.frameadvance()
	end
	
	vba.frameadvance()
	vba.frameadvance()
	vba.frameadvance()
	vba.frameadvance()

	----Commands go here-----------

	for i=0,wait1 do
	vba.frameadvance()
	end
	
	joypad.set(1,{["A"]=true})  --356
	
	for i=1,19 do
	vba.frameadvance()
	end
	
	for i=0,wait2 do
	vba.frameadvance()
	end
	
	joypad.set(1,{["A"]=true})  --376

	if wait2>0 then           --There is a lag frame if wait2>0
	vba.frameadvance()
	end
	
	for i=1,183 do
	vba.frameadvance()
	end
	
	for i=0,wait3 do
	vba.frameadvance()
	end	
	
	joypad.set(1,{["A"]=true})  --560
	
	for i=1,117 do
	vba.frameadvance()
	end
	
	joypad.set(1,{["down"]=true}) --677
	
	for i=1,2 do
	vba.frameadvance()
	end
	
	for i=0,wait4 do
	vba.frameadvance()
	end
	
	joypad.set(1,{["A"]=true})  --680
	
	for i=1,24 do
	vba.frameadvance()
	end
	
	joypad.set(1,{["left"]=true})
	vba.frameadvance()
	joypad.set(1,{["down"]=true})
	vba.frameadvance()
	joypad.set(1,{["right"]=true})
	vba.frameadvance()
	joypad.set(1,{["down"]=true})
	vba.frameadvance()
	joypad.set(1,{["right"]=true})
	vba.frameadvance()
	joypad.set(1,{["B"]=true})  --709
	vba.frameadvance()
	
	for i=1,55 do
	vba.frameadvance()
	gui.text(0,0,"Best=" .. Bestframewait)
	end
	
	for i=0,wait5 do
	vba.frameadvance()
	end
	
	joypad.set(1,{["A"]=true})
	
	for i=1,200 do
	vba.frameadvance()
	gui.text(0,0,"ID=" .. memory.readbyte(TrainerIDLowByte))
	end	
	
	------------------------------------------------
	io.write(wait1)
	io.write(" ")
	io.write(wait2)
	io.write(" ")
	io.write(wait3)
	io.write(" ")
	io.write(wait4)
	io.write(" ")
	io.write(wait5)
	io.write(" ")
	io.write(memory.readbyte(TrainerIDLowByte))
	io.write("\n")
	
	
	
	if memory.readbyte(TrainerIDLowByte) == 118 then  --$76 converted to decimal
		--io.write(wait1, " ", wait2, " ", wait3, " ", wait4, " ", wait5, "\n")
		if Currentframewait < Bestframewait then
			Bestframewait = Currentframewait
			value = 1
			savestate.save(tempstate[value])
		end
	end
	
	
	
end --End "if Currentframewait <= Maxframewait"
	
end
end
end
end
end

	value = 1
        savestate.load(tempstate[value])
	gui.text(0,0,"Best Wait " .. Bestframewait)
	vba.pause()
--- --- --- (This is now being used as Kirkq's code dump.)
--Start on frame 31872

local tempstate = {}
local value
local BossHP = 0x7E2287
local TotalHP = 465
local Break
local Success

local a
local b
local x
local y
local st
local se
local u
local d
local l
local r
local lb
local rb

local at1  --temp variables
local bt1
local xt1
local yt1
local stt1
local set1
local ut1
local dt1
local lt1
local rt1
local lbt1
local rbt1

local at2
local bt2
local xt2
local yt2
local stt2
local set2
local ut2
local dt2
local lt2
local rt2
local lbt2
local rbt2

---------------------
moviefile = "FrameDump.smv"  --I'm going to have it output frame counts to a small text file.
dumpfile = moviefile..".dump"
io.output(dumpfile)
-- Makes a text file to output data.

value = 0
tempstate[value] = savestate.create()  --tempstate0 = base state

value = 1
tempstate[value] = savestate.create()  --tempstate1 = optimal state

value = 0
savestate.save(tempstate[value])

value = 1
savestate.save(tempstate[value])

Success = 0

snes9x.speedmode("maximum")

snes9x.pause()

---------------------
	
for st=1,3 do  --0 and 2 seem to do the same thing
for se=1,3 do
for lb=1,3 do
for rb=1,3 do
for u=1,3 do
for d=1,3 do
for l=1,3 do
for r=1,3 do
for a=1,3 do
for b=1,3 do
for x=1,3 do
for y=1,3 do

	value = 0
	savestate.load(tempstate[value])

--00
--01
--10
--11
	
	if a == 0 then
	at1 = nil
	at2 = nil
	elseif a == 1 then
	at1 = nil
	at2 = true
	elseif a == 2 then
	at1 = true
	at2 = nil
	elseif a == 3 then
	at1 = true
	at2 = true
	end
	
	if b == 0 then
	bt1 = nil
	bt2 = nil
	elseif b == 1 then
	bt1 = nil
	bt2 = true
	elseif b == 2 then
	bt1 = true
	bt2 = nil
	elseif b == 3 then
	bt1 = true
	bt2 = true
	end
	
	if x == 0 then
	xt1 = nil
	xt2 = nil
	elseif x == 1 then
	xt1 = nil
	xt2 = true
	elseif x == 2 then
	xt1 = true
	xt2 = nil
	elseif x == 3 then
	xt1 = true
	xt2 = true
	end
	
	if y == 0 then
	yt1 = nil
	yt2 = nil
	elseif y == 1 then
	yt1 = nil
	yt2 = true
	elseif y == 2 then
	yt1 = true
	yt2 = nil
	elseif y == 3 then
	yt1 = true
	yt2 = true
	end

	if stt == 0 then
	stt1 = nil
	stt2 = nil
	elseif st == 1 then
	stt1 = nil
	stt2 = true
	elseif st == 2 then
	stt1 = true
	stt2 = nil
	elseif st == 3 then
	stt1 = true
	stt2 = true
	end

	if se == 0 then
	set1 = nil
	set2 = nil
	elseif y == 1 then
	set1 = nil
	set2 = true
	elseif se == 2 then
	set1 = true
	set2 = nil
	elseif se == 3 then
	set1 = true
	set2 = true
        end	

	if u == 0 then
	ut1 = nil
	ut2 = nil
	elseif u == 1 then
	ut1 = nil
	ut2 = true
	elseif u == 2 then
	ut1 = true
	ut2 = nil
	elseif u == 3 then
	ut1 = true
	ut2 = true
	end

	if d == 0 then
	dt1 = nil
	dt2 = nil
	elseif d == 1 then
	dt1 = nil
	dt2 = true
	elseif d == 2 then
	dt1 = true
	dt2 = nil
	elseif d == 3 then
	dt1 = true
	dt2 = true
	end

	if l == 0 then
	lt1 = nil
	lt2 = nil
	elseif l == 1 then
	lt1 = nil
	lt2 = true
	elseif l == 2 then
	lt1 = true
	lt2 = nil
	elseif l == 3 then
	lt1 = true
	lt2 = true
	end

	if r == 0 then
	rt1 = nil
	rt2 = nil
	elseif r == 1 then
	rt1 = nil
	rt2 = true
	elseif r == 2 then
	rt1 = true
	rt2 = nil
	elseif r == 3 then
	rt1 = true
	rt2 = true
	end
	
	if lb == 0 then
	lbt1 = nil
	lbt2 = nil
	elseif lb == 1 then
	lbt1 = nil
	lbt2 = true
	elseif lb == 2 then
	lbt1 = true
	lbt2 = nil
	elseif lb == 3 then
	lbt1 = true
	lbt2 = true
	end
	
	if rb == 0 then
	rbt1 = nil
	rbt2 = nil
	elseif rb == 1 then
	rbt1 = nil
	rbt2 = true
	elseif rb == 2 then
	rbt1 = true
	rbt2 = nil
	elseif rb == 3 then
	rbt1 = true
	rbt2 = true
	end
	
	
	joypad.set(1,{["A"]=at1,["B"]=bt1,["X"]=xt1,["Y"]=yt1,["start"]=stt1,["select"]=set1,["up"]=ut1,["down"]=dt1,["left"]=lt1,["right"]=rt1,["L"]=lbt1,["R"]=rbt1})
	snes9x.frameadvance();
	joypad.set(1,{["A"]=at2,["B"]=bt2,["X"]=xt2,["Y"]=yt2,["start"]=stt2,["select"]=set2,["up"]=ut2,["down"]=dt2,["left"]=lt2,["right"]=rt2,["L"]=lbt2,["R"]=rbt2})
	snes9x.frameadvance();
        snes9x.frameadvance();

------2 Button presses are complete.
-----Start Turn 1
Break = 0

    for i=1,131 do
	snes9x.frameadvance()
    end
    
    joypad.set(1,{["A"]=true})
    snes9x.frameadvance()
    snes9x.frameadvance()
    joypad.set(1,{["A"]=true})
    snes9x.frameadvance()
    
     for i=1,43 do
	snes9x.frameadvance()
     end  

    joypad.set(1,{["A"]=true})
    snes9x.frameadvance()
    snes9x.frameadvance()
    joypad.set(1,{["A"]=true})
    snes9x.frameadvance()
    
    for i=1,160 do
    snes9x.frameadvance()
    end
    
if memory.readword(BossHP) > TotalHP - 130 then
	Break = 1
end

--Turn 2

if Break == 0 then
    
    for i=1,209 do
	snes9x.frameadvance()
    end
    
    joypad.set(1,{["A"]=true})
    snes9x.frameadvance()
    snes9x.frameadvance()
    joypad.set(1,{["A"]=true})
    snes9x.frameadvance()
    
     for i=1,45 do
	snes9x.frameadvance()
     end  
     
    joypad.set(1,{["A"]=true})
    snes9x.frameadvance()
    snes9x.frameadvance()
    joypad.set(1,{["A"]=true})
    snes9x.frameadvance()
    
    for i=1,230 do
    snes9x.frameadvance()
    end
    
    if memory.readword(BossHP) > TotalHP - 260 then
    Break = 2
    end
     
end

if Break == 0 then
    
    for i=1,27 do
    snes9x.frameadvance()
    end
    
    joypad.set(1,{["A"]=true})
    snes9x.frameadvance()
    snes9x.frameadvance()
    joypad.set(1,{["A"]=true})
    snes9x.frameadvance()
    
     for i=1,137 do
     snes9x.frameadvance()
     end  
     
    joypad.set(1,{["A"]=true})
    snes9x.frameadvance()
    snes9x.frameadvance()
    joypad.set(1,{["A"]=true})
    snes9x.frameadvance()
    
    for i=1,250 do
    snes9x.frameadvance()
    gui.text(0,0,"HP: " .. memory.readbyte(BossHP))
    gui.text(0,20,"Success: " .. Success)
    end

end    
 
    io.write(Break," ",memory.readword(BossHP)," ",a,b,x,y,st,se,u,d,l,r,lb,rb, "\n")
    
    if memory.readword(BossHP) == 0 then
    value = 1
    savestate.save(tempstate[value])
    Success = 1
    end
    

---------------------

end   --loop ends
end
end
end
end
end
end
end
end
end
end
end

value= 1
savestate.load(tempstate[value])
	
	snes9x.pause()
local tempstate = {}
local Maxframewait  --Most frames to wait.
local value
local i
local Currentframewait -- Frames waited by current loop.
local Bestframewait -- Frames waited by best solution so far.
local TrainerIDLowByte

local wait1 
local wait2
local wait3
local HoldTrigger
local HoldTime

moviefile = "FrameDump.vbm"  --I'm going to have it output frame counts to a small text file.
dumpfile = moviefile..".dump"
io.output(dumpfile)
-- Makes a text file.

value = 0
tempstate[value] = savestate.create()  --tempstate0 = base state

value = 1
tempstate[value] = savestate.create()  --tempstate1 = optimal state

value = 0
savestate.save(tempstate[value])

value = 1
savestate.save(tempstate[value])

-------------------
EnemyHPAddress = 0xCFE7  --Updated
HoldTime = 15  --Time to hold A button for each alternate attempt.
Maxframewait = 16 -- If you go much higher than 20 or so, the script may take quite a while.
Bestframewait = 1000  --arbitrary high number, just used as a comparison to start with.
GoalHP = 0
-------------------

vba.pause()

--Start this on the exact frame 1 before you can hit A for "but it failed"

for wait1 = 0,Maxframewait do
for wait2 = 0,Maxframewait do
for wait3 = 0,Maxframewait do
for HoldTrigger = 0,3 do  -- 0 = Just waits 1 = Hold  2 = Lag Mash  3 = Lag Mash and Hold

--You can change that to for HoldTrigger = 1,3 1,2 0,2 or whatever to not repeat searches you've already done.

Currentframewait = (wait1 + wait2 + wait3)

if Currentframewait < Bestframewait then
if Currentframewait <= Maxframewait then
-- Lots of arbitrary loops that get skipped
   value = 0
   savestate.load(tempstate[value])

   ----Commands go here-----------

   for i=0,wait1 do
   vba.frameadvance()
   end
   
   joypad.set(1,{["A"]=true})  --but it failed
   
   for i=1,8 do
   vba.frameadvance()
   end
   
   for i=0,wait2 do
   vba.frameadvance()
   end
   
   joypad.set(1,{["A"]=true})  --click fight

   for i=1,7 do
   vba.frameadvance()
   end
   
   for i=0,wait3 do
   vba.frameadvance()
   end
   
   joypad.set(1,{["A"]=true})  --select attack

   if HoldTrigger == 1 then
      for i=1,HoldTime do
      joypad.set(1,{["A"]=true})
      vba.frameadvance()
      end
   elseif HoldTrigger >= 2 then
      if Currentframewait < (Bestframewait - 2) then
      if Currentframewait <= (Maxframewait-2) then
      
         for i=1,7 do
         vba.frameadvance()
         end
      
         joypad.set(1,{["A"]=true})
         
         if HoldTrigger == 3 then
            for i=1,HoldTime do
            joypad.set(1,{["A"]=true})
            vba.frameadvance()
            end
         end
         
         Currentframewait = Currentframewait + 2
      end
      end
   end
   
   for i=1,150 do
   vba.frameadvance()
   gui.text(0,0,"HP=" .. memory.readbyte(EnemyHPAddress))
   gui.text(0,20,"Best=" .. Bestframewait)
   
   gui.text(0,10,wait1)
   gui.text(10,10,wait2)
   gui.text(20,10,wait3)
   gui.text(30,10,HoldTrigger)
   
   
   end   
   
   ------------------------------------------------
   io.write(wait1)
   io.write(" ")
   io.write(wait2)
   io.write(" ")
   io.write(wait3)
   io.write(" ")
   io.write(HoldTrigger)
   io.write(" ")
   io.write(memory.readbyte(EnemyHPAddress))
   io.write("\n")
   
   
   
   if memory.readword(EnemyHPAddress) == GoalHP then
      --io.write(wait1, " ", wait2, " ", wait3, " ", wait4, " ", wait5, "\n")
      if Currentframewait < Bestframewait then
         Bestframewait = Currentframewait
         value = 1
         savestate.save(tempstate[value])
      end
   end
   
   
   
end --End "if Currentframewait <= Maxframewait"
end   
   
end
end
end
end

   value = 1
        savestate.load(tempstate[value])
   gui.text(0,20,"Best Wait " .. Bestframewait)
   gui.text(0,0,"Enemy HP=" .. memory.readbyte(EnemyHPAddress))
   vba.pause() 
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
You must have missed the bit where I found out we can stack our folder in a certain order before every fight in order to manipulate chips.
Kirkq wrote:
If getting chips in battle is dependent on the particular frame the battle is accessed, and the folder positions are directly assigned to this battle, this will allow us to move chips around in the folder to get EXACTLY the chips we want. EDIT: Confirmed. Ensue folder stacking. This run is going to be quite broken.
Bag of Magic Food wrote:
Hey, I just got an in-game Delete Time of 18.00 seconds on NumberMan!
Roughly explained again: See what positions in folder come up in battle 2 seconds from savestate, reload savestate, stack chips in those folder positions, get everything you wanted. This can be accurately measured to the frame because the RNG doesn't increment in the menu.
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
mklip2001 wrote:
I'm annoyed that the game has only one main tune (I mean, the music of Bad Dudes was better than this)
Bad Dudes has two main tunes. One for the walking/jumping levels and one for the scrolling levels. They are divided about equally for the length of the game. =p I can't seem to download alden's encode, I keep getting a 0 byte file. It apparently is a problem on my end, since no one else has said anything. EDIT: Quite lethargic movement. Boss fights take forever and the character is just too slow to be impressive. It's not bad, but there's just nothing too exciting going on. It looked well done technically though and it is short enough to be watchable. Voting meh due to slow game mechanics.
Experienced Forum User, Published Author, Player (208)
Joined: 7/7/2006
Posts: 798
Location: US
Thanks for the side by side encode, Hoe. Both runs were well done, and HappyLee's is clearly faster. HappyLee: You jump too much. The sound gets annoying. Jumping on enemies, jumping to grab coins, and jumping to take a fun route are all good. Jumping to pass time gets annoying. Please consider this on your next submission. I did like adelikat's goal of most coins then highest score, but I don't think too much is lost without it. It is a good idea in the future. I'll give this a Yes vote if HappyLee will stop making me listen to so much jumping on his next run. I think we should give andrewg some time to try to beat this before it gets accepted though.
1 2
20 21 22
31 32