From 14437d653f9f90f8bbc6b9398aca6426bdca3293 Mon Sep 17 00:00:00 2001 From: el-u <109771707+el-u@users.noreply.github.com> Date: Tue, 9 Apr 2024 00:33:34 +0200 Subject: [PATCH] lufia2ac: ability to swap party members mid-run and option to gain EXP while inactive (#2800) --- worlds/lufia2ac/Options.py | 17 +++- worlds/lufia2ac/__init__.py | 1 + worlds/lufia2ac/basepatch/basepatch.asm | 85 +++++++++++++++++- worlds/lufia2ac/basepatch/basepatch.bsdiff4 | Bin 8652 -> 8836 bytes .../lufia2ac/docs/en_Lufia II Ancient Cave.md | 5 +- 5 files changed, 101 insertions(+), 7 deletions(-) diff --git a/worlds/lufia2ac/Options.py b/worlds/lufia2ac/Options.py index 5f33d0bd..1b3a39dd 100644 --- a/worlds/lufia2ac/Options.py +++ b/worlds/lufia2ac/Options.py @@ -593,6 +593,20 @@ class HealingFloorChance(Range): default = 16 +class InactiveExpGain(Choice): + """The rate at which characters not currently in the active party gain EXP. + + Supported values: disabled, half, full + Default value: disabled (same as in an unmodified game) + """ + + display_name = "Inactive character EXP gain" + option_disabled = 0 + option_half = 50 + option_full = 100 + default = option_disabled + + class InitialFloor(Range): """The initial floor, where you begin your journey. @@ -805,7 +819,7 @@ class ShufflePartyMembers(Toggle): false — all 6 optional party members are present in the cafe and can be recruited right away true — only Maxim is available from the start; 6 new "items" are added to your pool and shuffled into the multiworld; when one of these items is found, the corresponding party member is unlocked for you to use. - While cave diving, you can add newly unlocked ones to your party by using the character items from the inventory + While cave diving, you can add or remove unlocked party members by using the character items from the inventory Default value: false (same as in an unmodified game) """ @@ -838,6 +852,7 @@ class L2ACOptions(PerGameCommonOptions): goal: Goal gold_modifier: GoldModifier healing_floor_chance: HealingFloorChance + inactive_exp_gain: InactiveExpGain initial_floor: InitialFloor iris_floor_chance: IrisFloorChance iris_treasures_required: IrisTreasuresRequired diff --git a/worlds/lufia2ac/__init__.py b/worlds/lufia2ac/__init__.py index 9bd436fa..561429c8 100644 --- a/worlds/lufia2ac/__init__.py +++ b/worlds/lufia2ac/__init__.py @@ -232,6 +232,7 @@ class L2ACWorld(World): rom_bytearray[0x280018:0x280018 + 1] = self.o.shuffle_party_members.unlock.to_bytes(1, "little") rom_bytearray[0x280019:0x280019 + 1] = self.o.shuffle_capsule_monsters.unlock.to_bytes(1, "little") rom_bytearray[0x28001A:0x28001A + 1] = self.o.shop_interval.value.to_bytes(1, "little") + rom_bytearray[0x28001B:0x28001B + 1] = self.o.inactive_exp_gain.value.to_bytes(1, "little") rom_bytearray[0x280030:0x280030 + 1] = self.o.goal.value.to_bytes(1, "little") rom_bytearray[0x28003D:0x28003D + 1] = self.o.death_link.value.to_bytes(1, "little") rom_bytearray[0x281200:0x281200 + 470] = self.get_capsule_cravings_table() diff --git a/worlds/lufia2ac/basepatch/basepatch.asm b/worlds/lufia2ac/basepatch/basepatch.asm index f9c48a5f..f25d4dea 100644 --- a/worlds/lufia2ac/basepatch/basepatch.asm +++ b/worlds/lufia2ac/basepatch/basepatch.asm @@ -309,6 +309,12 @@ org $8EFD2E ; unused region at the end of bank $8E DB $1E,$0B,$01,$2B,$05,$1A,$05,$00 ; add dekar DB $1E,$0B,$01,$2B,$04,$1A,$06,$00 ; add tia DB $1E,$0B,$01,$2B,$06,$1A,$07,$00 ; add lexis + DB $1F,$0B,$01,$2C,$01,$1B,$02,$00 ; remove selan + DB $1F,$0B,$01,$2C,$02,$1B,$03,$00 ; remove guy + DB $1F,$0B,$01,$2C,$03,$1B,$04,$00 ; remove arty + DB $1F,$0B,$01,$2C,$05,$1B,$05,$00 ; remove dekar + DB $1F,$0B,$01,$2C,$04,$1B,$06,$00 ; remove tia + DB $1F,$0B,$01,$2C,$06,$1B,$07,$00 ; remove lexis pullpc SpecialItemUse: @@ -328,11 +334,15 @@ SpecialItemUse: SEP #$20 LDA $8ED8C7,X ; load predefined bitmask with a single bit set BIT $077E ; check against EV flags $02 to $07 (party member flags) - BNE + ; abort if character already present - LDA $07A9 ; load EV register $11 (party counter) + BEQ ++ + LDA.b #$30 ; character already present; modify pointer to point to L2SASM leave script + ADC $09B7 + STA $09B7 + BRA +++ +++: LDA $07A9 ; character not present; load EV register $0B (party counter) CMP.b #$03 BPL + ; abort if party full - LDA.b #$8E ++++ LDA.b #$8E STA $09B9 PHK PEA ++ @@ -340,7 +350,6 @@ SpecialItemUse: JML $83BB76 ; initialize parser variables ++: NOP JSL $809CB8 ; call L2SASM parser - JSL $81F034 ; consume the item TSX INX #13 TXS @@ -490,6 +499,73 @@ pullpc +; allow inactive characters to gain exp +pushpc +org $81DADD + ; DB=$81, x=0, m=1 + NOP ; overwrites BNE $81DAE2 : JMP $DBED + JML HandleActiveExp +AwardExp: + ; isolate exp distribution into a subroutine, to be reused for both active party members and inactive characters +org $81DAE9 + NOP #2 ; overwrites JMP $DBBD + RTL +org $81DB42 + NOP #2 ; overwrites JMP $DBBD + RTL +org $81DD11 + ; DB=$81, x=0, m=1 + JSL HandleInactiveExp ; overwrites LDA $0A8A : CLC +pullpc + +HandleActiveExp: + BNE + ; (overwritten instruction; modified) check if statblock not empty + JML $81DBED ; (overwritten instruction; modified) abort ++: JSL AwardExp ; award exp (X=statblock pointer, Y=position in battle order, $00=position in menu order) + JML $81DBBD ; (overwritten instruction; modified) continue to next level text + +HandleInactiveExp: + LDA $F0201B ; load inactive exp gain rate + BEQ + ; zero gain; skip everything + CMP.b #$64 + BCS ++ ; full gain + LSR $1607 + ROR $1606 ; half gain + ROR $1605 +++: LDY.w #$0000 ; start looping through all characters +-: TDC + TYA + LDX.w #$0003 ; start looping through active party +--: CMP $0A7B,X + BEQ ++ ; skip if character in active party + DEX + BPL -- ; continue looping through active party + STA $153D ; inactive character detected; overwrite character index of 1st slot in party battle order + ASL + TAX + REP #$20 + LDA $859EBA,X ; convert character index to statblock pointer + SEP #$20 + TAX + PHY ; stash character loop index + LDY $0A80 + PHY ; stash 1st (in menu order) party member statblock pointer + STX $0A80 ; overwrite 1st (in menu order) party member statblock pointer + LDY.w #$0000 ; set to use 1st position (in battle order) + STY $00 ; set to use 1st position (in menu order) + JSL AwardExp ; award exp (X=statblock pointer, Y=position in battle order, $00=position in menu order) + PLY ; restore 1st (in menu order) party member statblock pointer + STY $0A80 + PLY ; restore character loop index +++: INY + CPY.w #$0007 + BCC - ; continue looping through all characters ++: LDA $0A8A ; (overwritten instruction) load current gold + CLC ; (overwritten instruction) + RTL + + + ; receive death link pushpc org $83BC91 @@ -1226,6 +1302,7 @@ pullpc ; $F02018 1 party members available ; $F02019 1 capsule monsters available ; $F0201A 1 shop interval +; $F0201B 1 inactive exp gain rate ; $F02030 1 selected goal ; $F02031 1 goal completion: boss ; $F02032 1 goal completion: iris_treasure_hunt diff --git a/worlds/lufia2ac/basepatch/basepatch.bsdiff4 b/worlds/lufia2ac/basepatch/basepatch.bsdiff4 index 664e197c4a1929f6958c1245b11750716b7a9d7e..1dfade445e14a4e01e4f5fc1c598f1ffbab67f2d 100644 GIT binary patch literal 8836 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 UE4fl8%Fh4KJCBge7@z(B05Kt5NB{r; literal 8652 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 diff --git a/worlds/lufia2ac/docs/en_Lufia II Ancient Cave.md b/worlds/lufia2ac/docs/en_Lufia II Ancient Cave.md index 1080a77d..4b5bf3f3 100644 --- a/worlds/lufia2ac/docs/en_Lufia II Ancient Cave.md +++ b/worlds/lufia2ac/docs/en_Lufia II Ancient Cave.md @@ -53,8 +53,9 @@ Your Party Leader will hold up the item they received when not in a fight or in - Randomize enemy movement patterns, enemy sprites, and which enemy types can appear at which floor numbers - Option to make shops appear in the cave so that you have a way to spend your hard-earned gold - Option to shuffle your party members and/or capsule monsters into the multiworld, meaning that someone will have to - find them in order to unlock them for you to use. While cave diving, you can add newly unlocked members to your party - by using the character items from your inventory + find them in order to unlock them for you to use. While cave diving, you can add or remove unlocked party members by + using the character items from your inventory. There's also an option to allow inactive characters to gain some EXP, + so that new party members added during a run don't have to start off at a low level ###### Quality of life: