Posts for jlun2

Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
jlun2 wrote:
Just posting it here so hopefully more attention: Link to video I hope some gamebreaking glitch appears for this.
Now that I know the addresses for items/card combos, I rechecked the video. https://tasvideos.org/UserFiles/Info/638175722463215003 This was the input file for it, using BizHawk 1.11.5. In addition to giving me those glitched items, it also affected the card combo area in WRAM 0x6570 to 0x6576 This allowed me to get full enchantment before even beating the game: I mentioned 2 of the card combos weren't obtainable; I think they can be obtained now. Edit: Used BizHawk 2.8 Glitch item "The Boomslang is a venomous African" obtained: https://cdn.discordapp.com/attachments/698993369321308240/1099207356308525157/HP1_v4.bk2 All spells unlocked at lake: https://cdn.discordapp.com/attachments/698993369321308240/1099211279761145856/HP1_v4.bk2 Bot used:
memory.usememorydomain("System Bus")
local hp1_data = require 'hp1 data'
local Addresses = hp1_data.Addresses

local text
local read8
local read16
local read32
console.clear()
if vba then
	text = gui.text
	read8 = memory.readbyteunsigned
	read16 = memory.readwordunsigned 
	read32 = memory.readlongunsigned
else
	text = gui.pixelText
	memory.usememorydomain("System Bus")
	read8 = memory.read_u8
	read16 = memory.read_u16_le 
	read32 = memory.read_u32_le
end
local save_outer = 1
local save_inner = 2
function waitframe(frame)
	local game_state = read8(Addresses.game_state) % 128
	local story = read8(Addresses.story_flag, "WRAM")
	
	while (frame >= 0) do
		text(0, 10,'State: '.. game_state)	--Game state for debugging
		text(0, 17,'Story: '.. story)	--Game state for debugging
		emu.frameadvance()
		frame = frame-1
	end
end


function bot()
	local cond_outer = false
	local cond_inner = false
	local is_pause = false
	local changed = false
	local frame_start_inner = emu.framecount()
	local frame_dif_outer = 0	--difference between this frame and start frame
	local frame_dif_inner = 0	--difference between this frame and start frame
	local item_start = memory.hash_region(Addresses.item_start, Addresses.item_end - Addresses.item_start, "WRAM")
	local card_start = memory.hash_region(Addresses.card_start, Addresses.card_combo_end - Addresses.card_start, "WRAM")	--merge combos/cards
	local spell_start = memory.hash_region(Addresses.spells, 3)
	
	local item_now = ""
	local card_now = ""
	local spell_now = ""
	savestate.saveslot(save_inner)
	repeat 
		local frame_now_inner = emu.framecount()
		local game_state = read8(Addresses.game_state) % 128
		local story = read8(Addresses.story_flag,"WRAM")
		text(0, 10,'State: '.. game_state)	--Game state for debugging
		
		if (frame_dif_inner ~= (frame_now_inner - frame_start_inner)) then	--Check just in case
			savestate.saveslot(save_inner)
		end
			--1st menu, selecting Item
		-- joypad.set({Down=1})
		-- emu.frameadvance()
		joypad.set({A=1})
		emu.frameadvance()
		waitframe(10)
		item_now = memory.hash_region(Addresses.item_start, Addresses.item_end - Addresses.item_start, "WRAM")
		card_now = memory.hash_region(Addresses.card_start, Addresses.card_combo_end - Addresses.card_start, "WRAM")	--merge combos/cards
		spell_now = memory.hash_region(Addresses.spells, 3)
		frame_dif_inner = frame_dif_inner + 1
		game_state = read8(Addresses.game_state) % 128
		is_pause = (game_state ~=29 and game_state ~= 30) --and (story ~= 3)
		item_changed = item_now ~= item_start
		card_changed = card_now ~= card_start
		spell_changed = spell_now ~= spell_start
		if item_changed == true then
			console.log("ITEMS CHANGED")
			console.log(emu.framecount())
			-- changed = true
		end
		if card_changed == true then
			console.log("CARD CHANGED")
			changed = true
		end
		if spell_changed == true then
			console.log("SPELL CHANGED")
			changed = true
		end
		if changed == false then 
			savestate.loadslot(save_inner)
			emu.frameadvance()
		end
	until (frame_dif_inner > 250 or changed == true)

	-- client.pause()
	console.log("State:" .. read8(Addresses.game_state) % 128)
	console.log("Story:" .. read8(Addresses.story_flag,"WRAM"))
end

bot()
data:
local harry_potter_module = {}
harry_potter_module.Addresses = {
--WRAM, cant be found in System Bus outside bank swap
	yes = 0x607F,--item amount for "yes",
	item_start = 0x5FFA, --start, to 60FE
	item_end = 0x60FE, --start, to 60FE
	card_start = 0x650A,	--start, to 656E
	card_end = 0x656E,	--start, to 656E
	card_combo_start = 0x6570, --start, to 6576
	card_combo_end = 0x6576, --start, to 6576
	story_flag = 0x65D5,
	--System Bus
	monster = 
	{
		x = {0xC46A, 0xC50C, 0xC5AE},
		y = {0xC46D, 0xC50F, 0xC5B1},
		hp = {0xC4B8, 0xC55A, 0xC5FC}
	},
	deck_id = 0xCE03,	-- Which deck for names
	area_id = 0xCCEC,
	message_timer = 0xCD12,
	x = 0xCD30,
	y = 0xCD32,
	rng = 0xce04,
	boss_id = 0xCC05,
	spells = 0xCDFE,
	game_state = 0xFFD2,
	Start = 0xCAB8,
	-- Start = 0xC000,
	-- End_ = 0xC100
	End_ = 0xCB00
}
return harry_potter_module
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
I know a way to jump to almost any address in System Bus: https://cdn.discordapp.com/attachments/698993369321308240/1097261539280560158/HP1_v4.bk2 1. buy a chocolate frog 2. get to the upper left of the stage by pressing start as you enter a boss fight 3. move left until 0xCABC is a value where your payload is located 4. pause the game, use frog by Right + A to jump to 0xC970, nop slide to CABB, which jumps to wherever 0xCABC pointed to 5. Credits I guess? Haven't gotten anything interesting except not crash. Crashes almost all the time however. The input file uses BizHawk 2.8. I can't figure out where to jump to do anything interesting yet; stuff such as item, card amounts, etc are all located in WRAM, so I don't know where else to go. If anyone knows, please help.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Pokota wrote:
Of the three, the Folio Magi would probably be the easiest for me to find independently since the game tracks up to 9 copies of the same card (I think it stops at 9?), so all I have to do is buy a zillion chocolate frogs and see what addresses respond. If the Folios Bruti and Triplicus follow pokedex rules then the "seen but not scanned" list should be somewhere near the addresses already used for Bruti (Triplicus might be near Magi? But I can probably pin down the range for Triplicus just by bouncing between save states since Merlin and Morgana decks give different starting combos) Ideally I'd just reverse-engineer the in-game overview pages for the three folios but my ASM-fu is not that great. by which I mean it's non-existent.
I was asked to find out what drops certain cards. I decided to start documenting this game more: https://docs.google.com/spreadsheets/d/1gRnyF76VBs2jN3O-096Suhn961rbiCTRHbF9TVqTfik/edit?usp=sharing I documented the following so far: 1. Every single area, and their npcs that can appear. 2. Every single NPC, and their HPs. 3. Folio Magi addresses Folio Magi starts from 0x6C4D to 0x6CB1 WRAM. You cannot find them in System Bus. Change 0xCE38 in System Bus to get infinite sickles to buy stuff. Brunti starts from 0xCE4B to 0xCE56 in System Bus. I do not know why that isn't in WRAM like the others.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Does board glitch stack? What happens if you do it multiple times? How about on Emi twice? Are there any other addresses corruptable?
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
That's very fast of you making this! Nice work! 1. What happens if you get that item that makes you move faster as Emi? Does she move even faster? 2. What happens if you made Emi go out of bounds? 3. At 12:11, why was the name glitched up? 4. How come the fight music suddenly stopped at 12:30? 5. Can a duplicate party member die? What will happen? 6. Can you not skip the fight with your clone at 16:00? 7. I am curious on what you mean by a lot of possible improvements. Unless the bugs allow you to magically obtain the items needed for the statues and last boss (or skip statues/boss) I'm not sure how much more you can do. 8. Could you not glitch through the mandatory QTEs? Given the fact that the game is very hard to route without bugs due to XP constraints (I tried making a run of this too), and no one has bothered for a decade, I'm pretty fine with this obsoleting the current run. Or at least until someone actually makes a glitchless run. Like obsolete it for now, but leave the possibility of a new branch open for the far future.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Pokota wrote:
Of the three, the Folio Magi would probably be the easiest for me to find independently since the game tracks up to 9 copies of the same card (I think it stops at 9?), so all I have to do is buy a zillion chocolate frogs and see what addresses respond. If the Folios Bruti and Triplicus follow pokedex rules then the "seen but not scanned" list should be somewhere near the addresses already used for Bruti (Triplicus might be near Magi? But I can probably pin down the range for Triplicus just by bouncing between save states since Merlin and Morgana decks give different starting combos) Ideally I'd just reverse-engineer the in-game overview pages for the three folios but my ASM-fu is not that great. by which I mean it's non-existent.
Probably there's seen, not scanned addressees. Once you found one of them, I'm absolutely sure the rest are near each other. Probably should use System Bus for RAM search, since the original game at least uses 0XFF++ region that is missed in WRAM.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Pokota wrote:
We have the Folio Bruti addresses; do we have the addresses for the Folio Magi and Folio Triplicus as well? I'd prefer not to duplicate work already done if I can avoid it (I'm putting together a "casual" 100% helper/hud script; everything I need beyond the Folios I can find from simple memory searching)
Are you trying for 100%? Good luck! I never thought of getting those addresses, since unlike the 1st game, cards aren't as used during the run.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
https://tasvideos.org/UserFiles/Info/638141083055355705 Link to video Here's my plan for recruiting the rival's denjuu for a 100% run. Context: In order to get all evolution forms of the rival, you normally need to beat all the way to the 2nd last dungeon of the game, then he will give his monster to you. This takes 1 hour 45 minutes in the current published run. These are their forms: https://wiki.telefang.net/Angios https://wiki.telefang.net/Gymnos You cannot "devolve", so in order to encounter all evolutions, you must do this 3 times. By using the map bug, one can reduce the time needed to 17 minutes.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
https://docs.google.com/spreadsheets/d/1mUr0LNo1OBxqTQCaytURPADMgUjrj7FNGuRb2N6uWdg/edit?usp=sharing I found the addresses for achievements, and item/lap count for Top Ride In case the link dies:
HexCourse
805368D0?
805368D1?
805368D2?
805368D3?
805368D4Cross the goal 20 or more times!Any
805368D5Race over 300 laps!Any
805368D6Compete in more than 10 multiplayer races!Any
805368D7Compete in more than 50 multiplayer races!Any
805368D8Race more than 100 laps!Any
805368D9Cross the goal 30 or more times!Any
805368DATake 1st place on all courses!Any
805368DBRace one lap without hitting a wall and finish 1st!Any
805368DCDo 20 or more Quick Spins in one lap and finish 1st!Any
805368DD(No "Zero Items" rule) Complete all courses without using items!Any
805368DE(No "Zero Items" rule) Finish 1st on all courses using no items!Any
805368DFCollect 500 items or more!Any
805368E0Finish all courses without using Boost!Any
805368E1Finish 1st on all courses without Boost!Any
805368E2Get the same item 3 times in one race!Any
805368E3Take 1st place while doing a Quick Spin!Any
805368E4Take 1st place while holding the Hammer!Any
805368E5Finish 1st with 1 lap between you and #2!Any
805368E6Finish 1st with 2 lap between you and #2!Any
805368E7Get more than 20 Spinner items!Any
805368E8Get more than 20 Invincible Candy items!Any
805368E9Get more than 20 Walky Items!Any
805368EATorch 3 or more rivals using one Fire item!Any
805368EBSend 3 or more rivals sailing using one Buzz Saw item!Any
805368ECIn one game, hit enemies 3 times or more with Bomb items!Any
805368EDGet over 18 different types of items!Any
805368EE(No "Zero Items" rule) Take 1st place without using items!Grass
805368EFTake 1st place without using Boost!Grass
805368F0Finish 1st with CPUs set to level 5!Grass
805368F1Take 1st place 10 times or more!Grass
805368F2Finish 7 laps in under 00:43:00!Grass
805368F3Race more than 100 laps!Grass
805368F4Finish 1st and hit 5 or more Dash Panels!Grass
805368F5In one race, drop 30 or more tree bombs!Grass
805368F6Finish 1st 5 seconds faster than #2!Grass
805368F7(No "Zero Items" rule) Take 1st place without using items!Sand
805368F8Take 1st place without using Boost!Sand
805368F9Finish 1st with CPUs set to level 5!Sand
805368FATake 1st place 10 times or more!Sand
805368FBFinish 7 laps in under 00:52:00!Sand
805368FCRace more than 100 laps!Sand
805368FDTake 1st and catch the worm 3 or more times!Sand
805368FEDrop into Ant Doom 50 times or more!Sand
805368FFDrop into Ant Doom 20 times in one game!Sand
80536900Finish 1st 5 seconds faster than #2!Sand
80536901(No "Zero Items" rule) Take 1st place without using items!Sky
80536902Take 1st place without using Boost!Sky
80536903Finish 1st with CPUs set to level 5!Sky
80536904Take 1st place 10 times or more!Sky
80536905Finish 6 laps in under 01:02:00!Sky
80536906Race more than 100 laps!Sky
80536907Finish 1st and hit the Isle Knob 5 or more times!Sky
80536908Finish 1st without using the Jump Plate!Sky
80536909Finish 1st 5 seconds faster than #2!Sky
8053690A(No "Zero Items" rule) Take 1st place without using items!Fire
8053690BTake 1st place without using Boost!Fire
8053690CFinish 1st with CPUs set to level 5!Fire
8053690DTake 1st place 10 times or more!Fire
8053690EFinish 6 laps in under 00:53:00!Fire
8053690FRace more than 100 laps!Fire
80536910Cause a huge eruption 3 times or more!Fire
80536911Finish 1st while holding the Fire item.Fire
80536912Finish 1st 5 seconds faster than #2!Fire
80536913(No "Zero Items" rule) Take 1st place without using items!Water
80536914Take 1st place without using Boost!Water
80536915Finish 1st with CPUs set to level 5!Water
80536916Take 1st place 10 times or more!Water
80536917Finish 5 laps in under 01:02:00!Water
80536918Race more than 100 laps!Water
80536919Finish 1st and enter the falls 5 times or more!Water
8053691AFinish 1st 5 seconds faster than #2!Water
8053691B(No "Zero Items" rule) Take 1st place without using items!Light
8053691CTake 1st place without using Boost!Light
8053691DFinish 1st with CPUs set to level 5!Light
8053691ETake 1st place 10 times or more!Light
8053691FFinish 6 laps in under 00:43:00!Light
80536920Race more than 100 laps!Light
80536921Ride the grind rail 50 times or more!Light
80536922Take 1st and grind the rail 5 times or more!Light
80536923Finish 1st and bust 6 or more columns!Light
80536924Finish 1st 5 seconds faster than #2!Light
80536925(No "Zero Items" rule) Take 1st place without using items!Metal
80536926Take 1st place without using Boost!Metal
80536927Finish 1st with CPUs set to level 5!Metal
80536928Take 1st place 10 times or more!Metal
80536929Finish 5 laps in under 00:58:00!Metal
8053692ARace more than 100 laps!Metal
8053692BTake 1st without breaking any gear walls!Metal
8053692CTake 1st and hit the switch 10 times or more!Metal
8053692DTake 1st and break 5 or more gear walls!Metal
8053692EFinish 1st 5 seconds faster than #2!Metal
8053692FFinish in under 00:33:00!Grass Time Attack
80536930Finish in under 00:35:00!Sand Time Attack
80536931Finish in under 00:38:00!Light Time Attack
80536932Finish in under 00:57:00!Sky Time Attack
80536933Finish in under 01:06:00!Water Time Attack
80536934Finish in under 00:46:00!Fire Time Attack
80536935Finish in under 00:57:00!Metal Time Attack
80536936Finish in under 00:28:00!Grass Time Attack
80536937Finish in under 00:29:00!Sand Time Attack
80536938Finish in under 00:33:00!Light Time Attack
80536939Finish in under 00:47:00!Sky Time Attack
8053693AFinish in under 00:56:00!Water Time Attack
8053693BFinish in under 00:39:00!Fire Time Attack
8053693CFinish in under 00:51:00!Metal Time Attack
8053693DDo one lap in under 00:06:00!Grass Free Run
8053693EDo one lap in under 00:06:50!Sand Free Run
8053693FDo one lap in under 00:07:50!Light Free Run
80536940Do one lap in under 00:11:00!Sky Free Run
80536941Do one lap in under 00:12:00!Water Free Run
80536942Do one lap in under 00:08:00!Fire Free Run
80536943Do one lap in under 00:11:50!Metal Free Run
80536944Do one lap in under 00:04:50!Grass Free Run
80536945Do one lap in under 00:05:00!Sand Free Run
80536946Do one lap in under 00:06:00!Light Free Run
80536947Do one lap in under 00:09:00!Sky Free Run
80536948Do one lap in under 00:10:50!Water Free Run
80536949Do one lap in under 00:06:50!Fire Free Run
8053694ADo one lap in under 00:09:50!Metal Free Run
The for the rest of the table, it's item/lap counts:
8053694C?
8053694DWin Count
8053694E?
8053694F?
80536950Time Attack Wins
80536951Time Attack Wins
80536952Total laps
80536953Total laps
80536954Free Run Laps
80536955Grass Win Count
80536956Sand Win Count
80536957Sky Win Count
80536958Fire Win Count
80536959Light Win Count
8053695AWater Win Count
8053695BMetal Win Count
8053695CGrass Lap Count
8053695DSand Lap Count
8053695ESky Lap Count
8053695FFire Lap Count
80536960Light Lap Count
80536961Water Lap Count
80536962Metal Lap Count
80536963Hammer Count
80536964Cake Count
80536965Rocker Booster Count
80536966Tire Count
80536967Spinner Count
80536968Battery Count
80536969Candy Count
8053696ASaw Count
8053696BDrill Count
8053696CFrost Count
8053696DMissile Count
8053696EFire Count
8053696FPartyball Count
80536970Bomb Count
80536971Skull Mine Count
80536972?
80536973Walky Count
80536974Kracko Count
80536975Who? Paint Count
80536976Smoke Count
80536977Chickie Count
80536978?
80536979?
8053697A?
8053697B?
8053697CAnt Dome drop count
8053697DLight Rail count
8053697E?
8053697F?
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Some stuff On Yoodle a Seadle (3-4), you can clip out of bounds using those bones, but you instantly die. If you used the moustache, you can avoid instant death since you go through the bones: There's some addresses in EWRAM that is related to OoB tiles. Testing on 1-3, this spot At X: 7312, Y: 11775, corresponds to this address in EWRAM 0x02F7F1 values 0xF8-0xFF makes it a goal 0x10-0x17 is damage 0x20-0x27 is that secret passage reveal jingle if you press Up 0x30-0x37 - small 12 unit hill The addresses starting from 0x02D4A0 to 0x035490 seems to start from 0 on start, then gets slowly filled up with something. I don't understand what it is, but it changes to a different address once everything gets filled up. https://cdn.discordapp.com/attachments/537350250805985301/1058622153475493918/SpongeBob_SquarePants_Movie_The_USA_2-3_Oob.bk2 There's an OoB exit 17,000 units under the stage. it takes so long to the point by the time I reach there I would've beaten both 2-3, 2-4 normally. I wasn't able to replicate this using passwords to directly skip to the stage, so I suspect it's likely in the area above (0x02D4A0) There's an infinite shell spot in 1-1 OoB https://cdn.discordapp.com/attachments/537350250805985301/1057858832468037662/SpongeBob_SquarePants_Movie_The_USA_OoB_1-1.bk2 The 5-1 cutscene that gets skipped in EU actually exists translated: There are scenes in which EU (english) is actually slower than (U). For instance:
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
The following applies to gameboy. I found out that when you ground pound in certain areas below the stage, you can crash the game. I checked why, and it was because it jumped to 0xE200
4C62:  00        nop                 A:00 F:10 B:79 C:80 D:00 E:00 H:df L:8d LY:0f SP:dfe9  Cy:3776752168
4C63:  C4 00 E2  call nz, $E200      A:00 F:10 B:79 C:80 D:00 E:00 H:df L:8d LY:0f SP:dfe9  Cy:3776752170
E200:  00        nop                 A:00 F:10 B:79 C:80 D:00 E:00 H:df L:8d LY:0f SP:dfe7  Cy:3776752182
E201:  00        nop                 A:00 F:10 B:79 C:80 D:00 E:00 H:df L:8d LY:0f SP:dfe7  Cy:3776752184
0xC504, and thus 0xE504 is the treasure flags. So there's a small spot to manipulate for a credits warp. Specifically:
C503	Amount of times saved
C504	Treasure flags for stages 0-7
C505	Treasure flags for stages 8-15
C506	Treasure flags for stages 16-23
C507	Treasure flags for stages 24-31
C508	Treasure flags for stages 32-39
C509	Treasure flags for stages 40-47
C50A	Treasure flags for stages 48-49 (only bits 0,1 possible)
C50B	Coins bank (Displays decimal value as a hex value. eg. 40 coins in decimal becomes 0x40)
C50C	Coins bank
C50D	Coins bank
C50E	Coins overworld (Displays decimal value as a hex value. eg. 40 coins in decimal becomes 0x40)
C50F	Coins overworld
C510	Stage ID (Displays decimal value as a hex value. eg. Stage 10 in decimal becomes 0x10)
C511	
C512	Stage select flag (0 or 1)
C513	Puzzle flags for stages 0-7
C514	Puzzle flags for stages 8-15
C515	Puzzle flags for stages 16-23
C516	Puzzle flags for stages 24-31
C517	Puzzle flags for stages 32-39
C518	Puzzle flags for stages 40-47
C519	Puzzle flags for stages 48-49 (only bits 0,1 possible)
I couldn't figure out what to do to trigger the credits and avoid a crash however. I did find the following: 0xC004 - cutscene id 0 - none (skips cutscene) 1 - stage 0 (1-1) 2 - stage 5 (2-1) 3 - stage 10 (3-1) 4 - stage 15 (4-1) 5 - stage 20 (5-1) 6 - stage 25 (secret 2-1, you fell asleep) 7 - stage 30 (secret 2-1, you didnt fight snake) 8 - stage 35 (secret 3-1, you sunk the ship) 9 - stage 40 (mansion) 10 - stage 45 (factory) 11 - stage 50 (true final) 12 - crash 0xD6F3 - ending flag. If this is set to 1, and the ending id is a valid value, the ending is triggered at stage end. 0xD70A - ending id 0 - nothing 1 - normal 5-5 2 - secret 2-5 (you fell asleep) 3 - secret 3-5 (underwater) 4 - secret 5-5 (mansion) 5 - secret 5-5 (factory) 6 - true final 7 - reset game I know it's impractical time wise to set up, but it's a different route that uses ACE, so I'm still interested in it. Edit: 0xC000 to 0xFFFF area https://docs.google.com/spreadsheets/d/1x0ahgWoO948yNwCFYOYbA7bYH6OOarJgoSSVkF_hyB0/edit?usp=sharing most of it is undocumented however. Edit 2: ok
C503Number of times saved0x3Cinc aset a from 0 to 1; assumes a was 0
C504Treasure flags for stages 0-70xEAld [$D70A], aloads ending 1 to ending id
C505Treasure flags for stages 8-150x0A
C506Treasure flags for stages 16-230xD7
C507Treasure flags for stages 24-310x3Eld a, $0Bloads 0x0B to register A
C508Treasure flags for stages 32-390x0B
C509Treasure flags for stages 40-470x00nop
C50ATreasure flags for stages 48-49 (only bits 0,1 possible)0x00nop
C50BCoins bank0x00nop
C50CCoins bank0x18jr $05jump to C513 to avoid stage select opcode 0x01
C50DCoins bank0x05nop
C50ECoins overworld0x00nopSkipped
C50FCoins overworld0x00nopSkipped
C510Stage ID?VariesSkipped
C5110x00nopSkipped
C512Stage select flag0x01ld bc, _ _ _ _Skipped
C513Puzzle flags for stages 0-70xEAld [$D6D8], aChanges game state to 11
C514Puzzle flags for stages 8-150xD8
C515Puzzle flags for stages 16-230xD6
C516Puzzle flags for stages 24-31??Remaining bytes for avoiding crash
C517Puzzle flags for stages 32-39??
C518Puzzle flags for stages 40-47??
C519Puzzle flags for stages 48-49 (only bits 0,1 possible)??
I think C3 00 15 allowed me to survive a jump to WRAM. Additionally, if I can jump to C000, the area before, specifically C200, is related to the minigame. Maybe some way to get a payload there?
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Since CasualPokePlayer made a branch of BizHawk that has the dolphin core, I picked up this game again and made a display script for Top Ride: Download kirby air ride.lua
Language: lua

memory.usememorydomain("System Bus") --Top Ride only local Addresses = { stage_id = 0x80535D4C, total_laps = 0x00536952, --total run laps free_laps = 0x00536954, --free run laps grass_laps = 0x8053695C, sand_laps = 0x8053695D, sky_laps = 0x8053695E, fire_laps = 0x8053695F, light_laps = 0x80536960, water_laps = 0x80536961, metal_laps = 0x80536962, pointer1 = 0x805DDAB8, pointer4 = 0x805DDABC, --2 layers deep pointer2 = 0x80D13BD4, pointer3 = 0x80D13BD8, cam_x = 0x80D13620, cam_z = 0x80D13624, cam_y = 0x80D13628 } local Kirby1 = { ptr = Addresses.pointer1, x = 0x000000, y = 0x000000, z = 0x000000, x_speed = 0x000000, y_speed = 0x000000, z_speed = 0x000000, angle = 0x000000, charge = 0x000000 } local Kirby2 = { ptr = Addresses.pointer2, base = 0x000000, x = 0x000000, y = 0x000000, z = 0x000000, x_speed = 0x000000, y_speed = 0x000000, z_speed = 0x000000, angle = 0x000000, charge = 0x000000 } local Kirby3 = { ptr = Addresses.pointer3, base = 0x000000, x = 0x000000, y = 0x000000, z = 0x000000, x_speed = 0x000000, y_speed = 0x000000, z_speed = 0x000000, angle = 0x000000, charge = 0x000000 } local Kirby4 = { ptr = Addresses.pointer4, x = 0x000000, y = 0x000000, z = 0x000000, x_speed = 0x000000, y_speed = 0x000000, z_speed = 0x000000, angle = 0x000000, charge = 0x000000 } function update(this, depth, offset) --[[ ]]-- local base = memory.read_u32_be(this.ptr) if depth > 1 then -- console.log(bizstring.hex(base + offset)) base = base + offset this.base = base end -- console.log(bizstring.hex(base)) this.x = memory.readfloat(base + 0x88, true) this.z = memory.readfloat(base + 0x8C, true) this.y = memory.readfloat(base + 0x90, true) this.angle = memory.readfloat(base + 0x94, true) this.x_speed = memory.readfloat(base + 0xA0, true) this.z_speed = memory.readfloat(base + 0xA4, true) this.y_speed = memory.readfloat(base + 0xA8, true) this.charge = memory.readfloat(base + 0xB4, true) end --4062CEF63E4CCCCD4166664A while true do local pointer = memory.read_s32_be(Kirby1.ptr) if (pointer ~= 0) then --this will happen if changed rooms or just started script update(Kirby1,0,0) update(Kirby4,0,0) update(Kirby2,2,0xDC8) update(Kirby3,2,0xDC8) end local text_x = 0 -- local line = string.format('Kirby 1 X: %.6f Y: %.6f Z: %.6f', Kirby1.x, Kirby1.y, Kirby1.z) local line = string.format('Kirby 1 X: %8X 2X: %8X 3X: %8X 4X: %8X', memory.read_u32_be(Kirby1.ptr)+0x88, Kirby2.base+0x88, Kirby3.base+0x88, memory.read_u32_be(Kirby4.ptr)+0x88) gui.text(0, text_x + 15 * 0 ,line) local line = string.format('Kirby 1 A: %8X 2A: %8X 3A: %8X 4A: %8X', memory.read_u32_be(Kirby1.ptr)+0x94, Kirby2.base+0x94, Kirby3.base+0x94, memory.read_u32_be(Kirby4.ptr)+0x94) gui.text(0, text_x + 15 * 1 ,line) -- line = string.format('Kirby 1 X: %.6f Y: %.6f Z: %.6f', Kirby1.x_speed, Kirby1.y_speed, Kirby1.z_speed) -- gui.text(0, text_x + 15 * 1 , line) -- gui.text(0, text_x + 15 * 2 , bizstring.hex(memory.read_u32_be(Kirby1.ptr)) .. " XSpeed: " .. bizstring.hex(memory.read_u32_be(Kirby1.ptr)+0x88)) -- line = string.format('Kirby 4 X: %.6f Y: %.6f Z: %.6f', Kirby4.x, Kirby4.y, Kirby4.z) -- gui.text(0, text_x + 15 * 3 ,line) -- line = string.format('Kirby 4 X: %.6f Y: %.6f Z: %.6f', Kirby4.x_speed, Kirby4.y_speed, Kirby4.z_speed) -- gui.text(0, text_x + 15 * 4 , line) -- gui.text(0, text_x + 15 * 5 , bizstring.hex(memory.read_u32_be(Kirby4.ptr)) .. " XSpeed: " .. bizstring.hex(memory.read_u32_be(Kirby4.ptr)+0x88)) -- line = string.format('Kirby 2 X: %.6f Y: %.6f Z: %.6f', Kirby2.x, Kirby2.y, Kirby2.z) -- gui.text(0, text_x + 15 * 3 ,line) -- line = string.format('Kirby 2 X: %.6f Y: %.6f Z: %.6f', Kirby2.x_speed, Kirby2.y_speed, Kirby2.z_speed) -- gui.text(0, text_x + 15 * 4 , line) -- gui.text(0, text_x + 15 * 5 , bizstring.hex(memory.read_u32_be(Kirby2.ptr)) .. " Ptr2: " .. bizstring.hex(memory.read_u32_be(Kirby2.ptr)) .. " XSpeed: " .. bizstring.hex(memory.read_u32_be(Kirby2.base)+0x88)) emu.frameadvance() end
I found all 4 player addresses and their pointers.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
dekutony wrote:
So apparently the Spanish text is the fastest text in this game. https://www.speedrun.com/The_SpongeBob_SquarePants_Movie_GBA/thread/dafua I don't know if it's any faster on a TAS since you have to select the language first at the start of a TAS timed run. It seems a cutscene is missing on the non English versions as well.
So I went and timed every single cutscene + language select: https://docs.google.com/spreadsheets/d/1MDCpHPKPsZwSwkdnv0sDYyfh9pTGp5Zq5Zws9YJZXoo/edit#gid=0 At a glance, Spanish is fastest. There's 1 giant problem however. In the EU version, the game lags more than U. Which means in reality it's very possible the time difference is extremely close. I have to sync the game twice to truly find out. I managed to sync the game up to 1-4. I saved 60 frames so far on 1-1, so I need to check the other stages a bit. The fastest RTA run right now is 33 minutes compared to the TAS 28 minutes, so there's definitely more improvements. https://www.speedrun.com/tssmgba/run/yo7g380m
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Can someone please modify the neopets flash games to work offline, then TAS the following: https://www.jellyneo.net/?go=attack_of_the_marblemen https://www.jellyneo.net/?go=assignment_53 https://www.jellyneo.net/?go=the_buzzer_game https://www.jellyneo.net/?go=castle_of_eliv_thade https://www.jellyneo.net/?go=caves_and_corridors https://www.jellyneo.net/?go=dice_escape https://www.jellyneo.net/?go=ednas_shadow https://www.jellyneo.net/?go=escape_from_meridell_castle https://www.jellyneo.net/?go=escape_to_kreludor https://www.jellyneo.net/?go=faerie_caves_2 https://www.jellyneo.net/?go=hannah_and_the_ice_caves https://www.jellyneo.net/?go=hannah_and_the_kreludor_caves https://www.jellyneo.net/?go=hannah_and_the_pirate_caves https://www.jellyneo.net/?go=hubrids_hero_heist https://www.jellyneo.net/?go=jolly_jugglers https://www.jellyneo.net/?go=kiko_match_2 https://www.jellyneo.net/?go=korbats_lab https://www.jellyneo.net/?go=kreludan_mining_corp https://www.jellyneo.net/?go=lost_in_space_fungus https://www.jellyneo.net/?go=meepit_juice_break https://www.jellyneo.net/?go=moon_rock_rampage https://www.jellyneo.net/?go=mutant_graveyard_of_doom_ii https://www.jellyneo.net/?go=petpet_rescue https://www.jellyneo.net/?go=piper_panic https://www.jellyneo.net/?go=pterattack https://www.jellyneo.net/?go=raiders_of_maraqua https://www.jellyneo.net/?go=stowaway_sting https://www.jellyneo.net/?go=toy_box_escape https://www.jellyneo.net/?go=tyrannian_mini_golf https://www.jellyneo.net/?go=web_of_vernax https://www.jellyneo.net/?go=whirlpool https://www.jellyneo.net/?go=wingoball Probably forgot some, but...
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
For QTE games where it is mostly cutscenes, would that risk having copyright strikes in some cases if it were to be encoded and uploaded to Youtube? I would love to see a list of QTE games (actual games that get sold, not something made in an afternoon for a meme), to find out which one stretches the definition of a game the most. Something like if it had 1 single QTE, but hours and hours of cutscene. Does that exist?
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Hey, you mentioned my Wario Land 2 run! I'm actually working on it, and the any% improvement now. I have no idea how to improve "Yuu Hakusho: Makai no Tobira" route wise, but I made an display script, so I can revisit it? I also have no idea how to improve on "Tiny Toon Adventures 2: Montana's Movie Madness", but there's TAStudios now, so maybe something can be improved due to easier checking. I wish you luck on "Dragon Warrior Monsters 2: Tara's Adventure". I tried improving it, but it turned into a new branch. I have no idea if using the same glitch to get super powerful glitched monster like in that new run, but not using the glitched key, would be acceptable as a real improvement to the 58 minute TAS. Same applies to save/reset to skip NPCs. I might need to ask a judge on that.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
For the GBA game Monster House, after examining the savefile along with the game flags, 100% is technically impossible. The game, through normal play, reaches 97% (98% from an extra bottle, unobtainable). There exists 2 items however, that have no cap on the amount of percent it counts to the game counter, so with glitches, it's possible to reach the 100% goal and unlock this screen at start: Save file format: https://docs.google.com/spreadsheets/d/1geZ1gV5U3fqSEEmVxeVEbIDEfK8GEVM2xRUdVjIM_DI/edit?usp=sharing Would grabbing everything normally, then dupe the last requirement be fine for 100% completion? Or would it be a new category in playground? Additionally, that screen disappears after beating the game, since the counter resets to 0%. Would resetting the game before going to the final boss to show it off be fine?
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
On Discord, it was discussed on a place where one can post verification movies, along with requests for games that don't have one. So here's a thread to gather them up. Requests so far: Legend of Zelda: Skyward Sword: Verification .dtm up to the point hero mode is unlocked.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Posting it here so it doesn't get lost: The user "quakish" discovered that using the walkie talkie right before a chest or cutscene, you have a very small window where you can pause the game, then select "quit". Upon loading the file again, the event will playback. https://discord.com/channels/692615675369226330/693072038448988258/909107823022067773
Ok to summarize some things about the new glitches. Walkie-talkie glitch is easy and useful. If you are at any point where the character would pickup an item in the hand the moment you press 'r'. Then go into start select walkie-talkie and press b to cancel out into game, and hold a+r to trigger it. Can be used on key chests and key doors. So far I found a improved flashlight skip and first boss skip with it. but could be some more skips. I'll do a video about more detail I think.
Cutscene storage on the other hand... Is very difficult, hardest glitch to do in game. And sadly you only have 1 really try at it. But it is also very powerful. So there are 3 variations on it depending on what type of cutscene: 1. Chest cutscenes: Need to use start before the chest, then time a quick r input at a very precise timing as the game fades back, and directly press start again after, The timing window is very small and made harder by the fact that I think that start input don't work while 'r' is being held down. But if you get it you see see a short bit as the chest start opening, partway, before you get into start menu, then you just use it to quit to menu and load your save, and the cutscene will play after loading back in. 2. Grounded cutscenes: For most of them you have to start a dash at the trigger, then press start before the trigger. This makes it so the dash can go thro the trigger and the cutscene will start playing after the dash ends instead. And after that you just need to get a start input before the cutscene start, and do quit same as before. This works on all grounded cutscenes I think, but some are much much more difficulty to time it on then others, not sure why start inputs sometimes feels easier to get before cutscene starts on some cutscenes triggers compared to others. The cutscene storage can save massive amount of time since we never really have to worry about return trips, and also we don't need to spend keys to get somewhere, they will be returnd The key duplication can only, to my knowledge, be preformed on the first key chest since it has a textbox. And you need to get the save to use it, so that means we have to store it back to the start and redo the first 2 rooms, before we can use the stored key to unlock save. Makes it much less worth while, specially since we don't need that many keys for a run, specially with cutscene storage. But even without we can save a lot of keys to the point that it is only worth going for the fastest keys.
So how is this important? It means finally after all these years, a 100% run can actually be accomplished by getting the brass heart/peppermint 2-3 more times than normal! I realized that however, the only time the 100% screen would be displayed is on reset, so I'm not sure how would the run show it. A big thanks to "quakish" once again for discovering this!
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
I remember TASing this. I never expected 74 seconds saved to be even possible. Nice work! Any other ideas for potential saves? No way to warp in stage 2?
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
I'm not sure where to post this, but since it's somewhat related, regarding leaderboards: I just realized a leaderboard would be quite fun for things like those annual dream team contests, where groups compete with each other TASing a game they all (hopefully) never played before. I'm not sure how would a leaderboard work if trying to obsolete an existing movie, with input, strats, etc reused from potentially multiple different people though (unless each subsequent submission includes all the previous users, like those Sonic TASes? Would be interesting to see.) . Also a good place to throw all those SMB attempts there.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
This is probably more useful to post here than just on discord: RNG for encounters, items, and criticals is 0xCE04 System Bus While I'm not sure what exactly is this type of RNG, I do know that it seems to be the only determinant for criticals, so I recorded all 65,535 values possible for if it gave a critical or not, then made it display using lua: https://cdn.discordapp.com/attachments/698993369321308240/1004226153680211968/hp1_data.lua
Language: lua

memory.usememorydomain("System Bus") client.SetGameExtraPadding(0, 0, 60, 144) local Boss = {'Malfoy','Giant Rat v2','Troll','Ogre','Purple Rabbit','Chickens','Rook','Knight Piece','Knight Piece 2','Devils Snare','Quirrell','Voldermort','Giant Rat','Knight','Easy XP'} local hp1_data = require 'hp1 data' local Critical = hp1_data.RNG local Addresses = hp1_data.Addresses --[[ Monsters in battle are offset 0xA2 of each other 0xC4B8,0xC55A,0xC5FC is HP 0xC46A,0xC50C,0xC5AE is X 0xC46D,0xC50F,0xC5B1 is Y 0xC48A,0xC52C,0xC5CE is Sprite (not ID!) This is needed since they technically don't have a "fixed" location; monster 1 can appear in top middle or bottom. All little endian ]]-- local Deck = {'Gregory the Swarmy','Justus Pilliwickle','Merwyn the Malicious','Gulliver Pokeby'} local text local read8 local read16 local read32 console.clear() if vba then text = gui.text read8 = memory.readbyteunsigned read16 = memory.readwordunsigned read32 = memory.readlongunsigned else text = gui.pixelText memory.usememorydomain("System Bus") read8 = memory.read_u8 read16 = memory.read_u16_le read32 = memory.read_u32_le end while true do local boss_id = memory.readbyte(Addresses.boss_id) local boss_name = Boss[boss_id] local yes = memory.readbyte(Addresses.yes,"WRAM") local x = read16(Addresses.x) local y = read16(Addresses.y) local text_y = 17+130 local rng = read16(Addresses.rng) local deck_id = read8(Addresses.deck_id) local game_state = read8(Addresses.game_state) % 128 local message_timer = read8(Addresses.message_timer) local in_battle = game_state >= 25 and game_state <= 33 local color = "white" text(0, text_y + (7 * 5),'Yes: '..yes) for i = 0,40 do if Critical[rng+i] == "Yes" then color = "Green" else color = "white" end text(160, 0 + 7 * (i), (rng+i)%65535 .."\t"..Critical[(rng+i)%65535],color) end if in_battle then text(0, text_y,'State: '.. game_state) --Game state for debugging text(0, text_y + 7, 'RNG: '.. rng) text(0, text_y + (7 * 2), 'X: '.. x ..' Y: '.. y) for i = 1, 3 do local monster_x = read16(Addresses.monster.x[i]) local monster_y = read16(Addresses.monster.y[i]) local monster_hp = read16(Addresses.monster.hp[i]) text(monster_x, monster_y, monster_hp) end else text(0, text_y, 'X: '.. x ..' Y: '.. y) text(0, text_y + 7, 'RNG: '.. rng) text(0, text_y + (7 * 2), 'Msg: '.. message_timer) -- The player cannot press A to continue until the countdown is finished. text(0, text_y + (7 * 3),'Deck: '..Deck[(deck_id+1)%5]) if boss_name ~= nil then text(0,75, 'Boss: '..boss_name..'('..boss_id..')') end --[[ Game state for battles: 25 - Battle transit (includes using cards) 26 - Your turn 28 - Spells 29 - Items 30 - Item used 31 - Flee 32 - Enemy attacks 33 - Select enemies and attack 34 - Win screen 42 - Cards (same if you use not in battle) 68 - Debug end]]-- text(0, text_y + (7 * 4),'State: '..read8(0xFFD2)%128) end emu.frameadvance() end
Just attack when the upper right number is green and says "Yes"
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
For Harry Potter And The Sorcerer's Stone (GBC), there's a glitch where if you use a card combo out of battle, you can death warp anywhere any time. The previous run, due to lack of cards, the combo chosen causes the screen to flicker a lot. Like, from using the bug, to the rest of the game: https://cdn.discordapp.com/attachments/698993369321308240/1003722532307881984/SPOILER_HP1_Flicker.gif Warning: Flashing lights, do not click if sensitive. How long is this sequence? I'm ~15 minutes in to an hour long run, so 45 minutes of flicker. Choosing a different combo loses ~5 frames per use (so around 45-60 frames lost since I will death warp multiple times) , but does not cause the game to look like that. The current run has 4.8/10, clearly Vault material. Is this tradeoff fine?
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
I wish to resync the current run to BizHawk 2.8.1 https://cdn.discordapp.com/attachments/280808167993245707/998919177349910568/HP1.bk2 Here's what I got so far; I lost time from the giant rat boss however. If anyone can do better, please help. Unrelated, but it turns out the game jumps to WRAM (0xC0CE) every single frame in the overworld. Huh.
Experienced Forum User, Published Author, Skilled player (1709)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Showcase runs are given their own URL code, i.e xxxxM for Movies, xxxxS for Submissions, and xxxxG for Games. Some proposed codes are L (for Live), D (for Demonstration), and E (for Event). These would be added and maintained through an entirely separate UI from submissions, with the permissions to use it being locked to Admins and dwangoAC, potentially Senior staff as well. These would function identically to publications, just without the need to be processed through the submission system, and without the need for input files. Any formally published GDQ showcase would be moved over to this new system.
Just to clarify, it's specific to these events right? I mean, I'd support making codes L,D,E if it was for special events like this, and not some livestream of someone no one here has heard of, but has a massive following. Are there any requirements for what other showcases are allowed?