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.
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.
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.
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.
Hey everyone, it was found that using Bizhawk for HP2GBC seems to save time on text mashing (my assumption is less lag), the exact amount it saves is unknown but it seems to be between 10 to 15 seconds throughout the run.
Tegron mentioned this version of Gambatte https://github.com/pokemon-speedrunning/gambatte-speedrun/releases and after testing, this seems to be way more accurate than using Bizhawk and text mashing seemed to be about the same as console.
This version will now be required for 1GBC and 2GBC runs, any other emulator is banned, all the existing emulator runs on the boards will get a 15 seconds penalty, 1GBC does not get a penalty since text mashing seemed to be the same as console.
(GBA will still use Bizhawk for emulator runs and DS DeSmuME until a more accurate version is found)
I am uncertain of the cause, but I do know that GBC mode is slightly faster than GBA mode. You can even tell the 2 apart due to GBA being brighter. Not sure if that is the case.
3. Flo203 discovered 2 different ways to change Harry's deck. 0E3D in WRAM is deck. 0 is Merlin. 1 is Morgan.
Method 1: https://www.youtube.com/watch?v=ijCH76WnzmM
Select Merlin deck (0)
Get Harry Potter Card from Lockheart.
Unlock all spells.
Go to Filch's office.
Unlock Skurge again.
This will change deck id to Morgan (1). This does not change if your deck was already at Morgan.
Method 2:
Beat the game once to get Harry.
Unlock all spells.
Go to the dueling room and fight Malfoy to unlock expeliarmus again.
If your deck was Merlin (0), it becomes Morgan (1).
If your deck was Morgan (1), it becomes some other thing (3).
I documented each area's card, along with deck.
https://docs.google.com/spreadsheets/d/1gRnyF76VBs2jN3O-096Suhn961rbiCTRHbF9TVqTfik/edit?gid=619101748#gid=619101748
The main 2 cards preventing a faster 100% are
Card 69: Queen Maeve (Morgan deck)
Card 76: Musidora Barkwith (Merlin deck)
Those are only dropped by card 3 NPCs, which I recorded as Lockheart and Basilisk using cheats. However, it was reported that they couldn't get Basilisk to drop anything during normal gameplay, since the results screen doesn't appear. This means normally, a 100% run would at the very least reach up to Lockheart twice. Deck 3 has Queen Maeve appear at 5th Floor Hallway, but it really isn't useful, since at that point in the run, you will have to be at your 2nd playthrough to unlock expeliarmus again. If your 1st playthrough was Morgan, then you would already have Queen Maeve. If your 1st playthrough was Merlin, then your 2nd playthrough must be at Morgan anyways.
You can skip the footman boss at Gringotts by leaving Gringotts, then re-entering again with select right before you enter. This allows you to walk past the boss. You would be fighting Willow at level 1 however.
Joined: 8/30/2020
Posts: 154
Location: Sydney, Australia
jlun2 wrote:
Hey everyone, it was found that using Bizhawk for HP2GBC seems to save time on text mashing (my assumption is less lag), the exact amount it saves is unknown but it seems to be between 10 to 15 seconds throughout the run.
Tegron mentioned this version of Gambatte https://github.com/pokemon-speedrunning/gambatte-speedrun/releases and after testing, this seems to be way more accurate than using Bizhawk and text mashing seemed to be about the same as console.
[...]
I am uncertain of the cause, but I do know that GBC mode is slightly faster than GBA mode. You can even tell the 2 apart due to GBA being brighter. Not sure if that is the case.
Gambatte-Speedrun is the very same as our Gambatte core, so unless they'd been systematically switching to GBHawk for some reason (or there's a host framerate difference?), I suspect you're right. In any case they might be interested in CPP's newer iteration of a speedrunners' emulator.
I contribute to BizHawk as Linux/cross-platform lead, testing and automation lead, and UI designer. This year, I'm experimenting with streaming BizHawk development on Twitch. nope
Links to find me elsewhere and to some of my side projects are on my personal site. I will respond on Discord faster than to PMs on this site.
Hey look buddy, I'm an engineer. That means I solve problems. Not problems like "What is software," because that would fall within the purview of your conundrums of philosophy. I solve practical problems. For instance, how am I gonna stop some high-wattage thread-ripping monster of a CPU dead in its tracks? The answer: use code. And if that don't work? Use more code.
Joined: 7/18/2016
Posts: 117
Location: United States
Is there an HP2 100% TAS in the works? If so, that is really, really exciting! I put so many hours into this game as a kid and was never able to fill the Folio Magi completely.
Is there an HP2 100% TAS in the works? If so, that is really, really exciting! I put so many hours into this game as a kid and was never able to fill the Folio Magi completely.
I have no idea even how to approach. While one can just follow the 100% RTA route, I finally got some breakthrough regarding pressing select right before leaving dormitory. By manipulating values at CB31, CB32, and CB49, CB4A, CB4B, I can get different scripts to run. I can skip ahead story wise, and unlock spells early. I need to check thousands of values manually to find what does what however.
Edit:
https://tasvideos.org/UserFiles/Info/638856191736840479
Bizhawk 2.10 used
Proof of concept that select bug can be used to skip to near the end of the game, if you could somehow beat the Basilisk. This glitch has 3 steps
1. Reset the game, then wait at the opening menu so that CB49, CB4A, CB4B are FA 80 FC
2. Enter the game, then select 6 items in store. This changes CC0B, CC0C, CC0D to 7F 00 06
3. Select bug at the dormitory by basically pressing select and leaving the dorm at the same time. This causes CB2C to decrement by 3. Do this until it's value is 241, or F1. This means the script now points to addess CC0B, CC0C, CC0D.
4. Select bug one more time, then wait. CB2C will now increment by 3 repeatedly, while overwriting anything it points to with 7F 03 06. We need it to go through everything at least once, to glitch up text box. Then end dialogue after it reaches 130, or 0x82, so it is at the middle.
5. Select bug 44 more times, so it loops back to 254, an offset of 1. Due to the text bug, the music will speed up every single attempt, increasing the amount of lag. You need to either get an item, or pause, to reset the music speed every now and then.
6. Do the select bug 69 times until CB2C is at 47, or 0x2F. This should now be pointing at CB49, CB4A, CB4B.
7. Select bug one more time, then wait. Be sure to use the start menu rather than select, since the lack of lag means the values run down faster. CB31, CB32 should now change to 90 7A, then decrement by 1 every frame. Wait until it reaches 73 FD 00, then leave the start menu.
8. Do the select bug 7 more times until it reaches 23, or 0x17.
9. Select bug one more time, using start menu. Now the game would run the script starting at "Well, it didn't work! Everyone's still here! And when the Mandrake potions are".
10. After "and come down here. I knew you would follow", CB31 will change to C9 62. Normally, this is where you softlock. However, due to text bug from step 4, after 51,554 frames, (or C9 62), you will advance the script.
11. After Tom says "ha ha!", CB31 will change to C9 62 again. Wait another 51,554 frames. Then after some dialogue, the Basilisk fight will start. If you could somehow beat them, you basically skip most of the game.
Edit 2: Script that basically goes and briefly checks values. Be sure to stop at the frame before CB2C changes
Download hpcs script check.lua
Language: lua
memory.usememorydomain("System Bus")
function waitframe(frame)
while (frame >= 0) do
emu.frameadvance()
frame = frame-1
end
end
--[[
Quickly record select bug story changes
Set CB2C to 23
Go to the frame before event triggers
1. Set CB31, CB32, CB33 with the 3 values to check; CB33 will be the one changing
2. Advance 25 frames
3. Check if story changed
4. Repeat 255 times
Checked so far
F0FF00
8EFF00
84FF00 --nothing at all?
80FF00 --might be battle here?
7EFF00
7CFF00
7BFF00
79FF00
Found
85FF00 2 at 69
83FF00 2 at 69
82FF00 229 3 times, 223 2 times, 96 3 times, 100 8 times
81FF00 53 4 times
7FFF00 193 9 times, 209 once
7DFF00 0, twice at 91, 01
7AFF00 33 twice
00F0FF - 240 at F8, 7 at 1F
00EFFF - 62 at FA, 12 at F8, 40 at E6, 221 at D3
00EEFF - 51 at F0, 0 at 1F
00CDFF - 62 at F9, 221 at F3, 205 at EC CE, 45 at 28
00CCFF - 165 at E8, D0, 0 at B3 93, 21 at 35, 7 at 1F
00CBFF - 165 at E8, D0, 0 at B3 93, 21 at 35, 7 at 1F
00CAFF - 0 at FB, 62 at F9, 169 at DD, 2225 at CE, 21 at 35, 45 at 28, 183 at 03
00C9FF - 165 at D0, 7 at 1F
00C8FF - 12 at FA
00C7FF - 62 at F9, 169 at DD, 107 at D2, 45 at 28, 183 at 03
00C6FF - 165 at D0, 0 at B9, 99, 2B, 7 at 1F
00C5FF - 12 at FA
00C4FF - 62 at F9, 107 at D2, 224 at B9, 99, 45 at 28
00C3FF - 165 at D0, 7 at 1F, 51 at 18
00C2FF - 12 at FA, 15 at 22
00C1FF - 62 at F9, 107 at D2, 45 at 28
00C0FF - 221 at E8, 7 at 1F
00BFFF - 12 at FA
005EFF - 0 at 17
005DFF - 24 at EA, 221 at E9, 32 at 20
005CFF - NA
005BFF - 21 at 35
005AFF - 24 at EA, 221 at E9, E6, 236 at C8, 32 at 20, 1 at 0F
0059FF - 0 at A9, 89, 5 at 1B
0058FF - 21 at 35
0057FF - 24 at EA, 221 at E6, 236 at C8, 1 at 0F
0024FF - 166 at D8, 0 at 34
0023FF - 5 at DD
0022FF - 221 at F2
0005FF - 36 at AF, 8F, 7 at 20
0004FF - 9 at C4, 21 at 35
0000FF - 21 at 35
]]--
console.clear()
local slot = 2
memory.writebyte(0xCB2C,22)
--[[from 2nd pass
local start = 0x85FF00
local l_end = start - 0xFF00
local decrement = -0x100
]]--
--from 1st pass
local start = 0x00BEFF
local l_end = 0
local decrement = -0x1
local story = 0
console.log(string.format("START AT %06X", start))
memory.write_u24_be(0xCB30,start)
function bot(save)
savestate.saveslot(save)
for i = start, l_end, decrement do
memory.write_u24_be(0xCB30,i)
waitframe(25)
story = memory.readbyte(0x6CC8,"WRAM")
if story ~= 13 then --current story at this point is 13
console.log(string.format("STORY CHANGED TO %d AT %06X", story, i))
elseif story == 66 then
console.log(string.format("STORY CHANGED TO %d AT %06X", story, i))
break
end
savestate.loadslot(save)
end
end
bot(slot)
client.pause()