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
https://cdn.discordapp.com/attachments/352025773537755137/1101475665359945808/HPSS_Card.tasproj
I checked the timing for the lightning bug using default combos.
Gulliver Pokeby's deck is the fastest so far.
The following combos do not flicker the screen:
Sickle Seek
Snitch Streak
The following combos causes flicker:
Deflect
Poison Immunity
Summon Umbrella
Conjure Snack
Drone
Tempest
To prevent myself from accidentally losing it:
https://cdn.discordapp.com/attachments/280808167993245707/1155706332301774869/HP1_v7.bk2
Sanqui realized using the Chocolate Frog puts you to WRAM bank 6, which is where items are located. They came up with a payload that took 47k sickles worth of items to setup, which gradually got bought down to 8k.
Rather than use Hogwarts dungeon, I realized I can leave battles using "yes" item, so I warped to the forbidden forest to get OoB, then executed the payload to credits warp.
It beats the game in 36,122 frames, or 10:02.03. I need to check something a bit more before submitting.
https://cdn.discordapp.com/attachments/280808167993245707/1156653184710889542/HP1_v7.bk2
I was trying to improve it, and managed to get a whole bunch of glitched items without crashing.
Some discoveries:
1. It turns out that getting OoB from the troll in washroom doesn't mess with position address, so it can be used for ACE. This means RTA-wise, there's more items available for payload.
2. I investigated the stores. Weasley Twins Bargain stocks the following when you first arrive at Hogwarts:
Superior Work Robe
Superior Gloves
Dragonclaw Gloves
Superior Pointed Hat
Lined Hat
Fine Fettle Belt
Stamina Belt
Superior Boots
Hardened Boots
Copper Cauldron
Brass Cauldron
After one of the 5 classses post potions is done, it changes to
Superior Work Robe
Buckram Robe
Dragonclaw Gloves
Sorcerous Gloves
Lined Hat
High Hard Hat
Stamina Belt
Robust Belt
Hardened Boots
Brass Cauldron
Silver Cauldron
That means there's only a short opportunity to obtain Superior Gloves, Superior Pointed Hat, Fine Fettle Belt, Superior Boots.
On the 2nd visit to Diagon Alley, Potage's Cauldrons stocks the following:
Brass Cauldron
Self-stirring Cauldron
Madamn Malkin's stock the following:
Leather Belt
Plain Boots
Superior Winter Cloak
Nimble Gloves
Superlative Hat
Vigorous Belt
Superlative Boots
This makes it very difficult to stock them before you can't buy them again. I'm thinking duping money drops from blue turtle in 6th Floor Secret Hallway https://alpha.vgatlas.net/hp1/enemies/49
These drop 250-500 sickles per fight.
3. You can't sell Bastion Belts to stores. Wandwaving Gloves, Optimum Hat, Blizzard Cloak, Optimum Boots only appear as drop near the very end.
4. You can grind herbs by pausing right infront of respawn points for it. There's 16 herbs, so 16 bytes for payload.
5. 0E01 WRAM is recipies flag
6. 0DDF WRAM is minigames
7. House points are strange. It appears while there are certain points it awards all houses randomly, by the end, it is hardcoded so that either Ravenclaw would be ahead, or Hufflepuff. It doesn't seem possible for Slytherin to win. The shortest dialogue for any% no ACE would be to have Ravenclaw still be ahead after rewarded 170 points at the end.
The current RTA 100% category allows ACE and no ACE. For ACE, the current route is:
Then it was discovered that you can pick up cards before grabbing the wand. This allows you to get green deck's sole exclusive card, "Salazar Slytherin", by buying a chocolate frog, then hoping it gives you it.
So I got curious on if that's possible. Here's my notes on attempting to get all cards/combos using ACE.
All in WRAM:
Minigames = 0DDF
Recipes = 0E01
Card 1 = 650A
Card 100 = 656E
Card combo 1 = 6570
Card combo 7 = 6576
I don't think it's feasible to get minigames/recipes using items (yet). However, it should be possible to at least get all cards and combos in 1 go.
1st payload attempt
3E 64
LD A, $64
100 cards, so use A as both the amount to give + loop. 62 Dragonskin Gloves at 3844, 100 Superior Gloves at 11,000
21 0A D5
LD HL, $D50A
33 Pointed Hats at 1914, 10 Superior Pointed Hats at 1250, 213 Lined Hats at 426,000
22
LDI [HL], A
34 Plain Work Robes at 2720
3D
DEC A
61 Winter Cloaks at 9150
20 FC
JRZ, $F01B
can be modified to jump more, since gaps in items; 32 Leather Belts at 96, 236+ Fine Fettle Belts at 23,600+
3D
DEC A
change A to FF; 61 Plain Boots at 305
06 09
LD B, $09
6 Superior Boots at 540, 9 Hardened Boots at 4050
22
LDI [HL], A
34 Pack of Name Tags at 340
05
DEC B
5 Antidotes at 750
20 FC
JRZ, $F022
can be modified to jump more, since gaps in items; 32 Potion Kit Bags at 320. At least 234+ Collapsible Cauldrons at 11,934+
0E D2
LD C, $D2
14 Copper Cauldrons at 1414, 210 Brass Cauldrons at 31,710
7A
LD A, D
D was $41; 122 Silver Cauldrons at 30,622
E2
LDH C, A
Puts $41 into FFD2; 226 Self-stirring Cauldrons at 30,622
31 F9 CF
LD SP, $CFF9
Fixes stack; 49 Best Blowing Gum at 196, 249 Pumpkin Pasties at 2490, 207 Cauldron Cakes at 1656
C8
RET
201 Licorice Wands at 402
This took 25 items, and costed 634,329 sickles. The main contributor of this is D5 in "21 0A D5". This forces me to buy 213 Lined Hats at the cost of 426,000 sickles. This is completely impractical, so I modified to the following
3D
DEC A
255 cards will crash the game on view, so subtract 1
24
INC H
H starts out at $d1, so do this 4 times
24
INC H
24
INC H
24
INC H
22
LDI [HL], A
05
DEC B
B starts at $71
20 FC
JRZ, $F01B
can be modified to jump more, since gaps in items
0E D2
LD C, $D2
7A
LD A, D
E2
LDH C, A
31 F9 CF
LD SP, $CFF9
C8
RET
This now takes only 17 items, while removing the need for Lined Hats. Now it costs ~100k sickles. Unfortunately, since A was FE, the combos are now missing the following:
Create Potion (Red/Purple)
Extra Credit (Purple)
Sleep (Blue)
Slow (All)
Telegraph Punch (Red/Blue/Green)
Level Up (All, Club after Deliver Norbert)
Blasting Curse (All)
This is really bad, since that means you have to beat the game twice using Blue/Purple deck.
3D
DEC A
255 cards will crash the game on view, so subtract 1
24
INC H
H starts out at $d1, so do this 4 times
24
INC H
24
INC H
24
INC H
06 6A
LD B, $6A
This makes the loop stop at $D570
22
LDI [HL], A
05
DEC B
20 FC
JRZ, $F01B
can be modified to jump more, since gaps in items
3C
INC A
Make A FF again
06 09
LD B, $09
22
LDI [HL], A
05
DEC B
20 FC
JRZ, $F022
0E D2
LD C, $D2
7A
LD A, D
E2
LDH C, A
31 F9 CF
LD SP, $CFF9
C8
RET
I tried replacing 3E 64 with a much smaller 06 6A
H is now obtained in 4 batches of 36 items ($24).