Users browsing this thread: 2 Guest(s)
Shock Ability
05-31-2018, 07:32 PM
So I got bored and coded up an MP-costing Shock. Only needed 70 bytes of space, even! (And I'm going to look at getting it into even less free space, but it's functional and, I think, not too shabbily done so far.)
With this code:
With this code:
- Shock costs 50MP (set by a !define at the start of the code)
- Shock's MP cost is adjusted by Gold Hairpin/Economizer.
- Shock is disabled when current MP is below 50MP
- Shock is disabled when muted
- Shock is properly enabled when MP goes back above 50, and when unmuted
Code:
hirom
; header
; Defines
!Freespace_1 = $c2A65A ; 26 bytes, or 70 total
;!Freespace_2 = $c2xxxx ; 27 bytes (if separate from above)
;!Freespace_3 = $c2xxxx ; 17 bytes (if separate from above)
!Shock_ID = $1B
!Shock_MP = $32 ; or 50d
;;; Flagging menu redraw on MP restore/loss
; These were all originally STA $3C08,Y (and one ,X).
; They now jump to new generic functions that update current MP,
; but also flag the attacker/target (as relevant) to have their
; menu updated for Shock's MP cost.
;
; Nothing needed to be done for Mute, as it already flagged the
; function appropriately, and Shock piggybacks on Magic/Lore/X-Magic
; for handling it.
org $C21365
JSR flagSTAY
org $c21375
JSR flagSTAY
org $c2137D
JSR flagSTAY
org $c232E0
JSR flagSTAX
org $c23CB4
JSR flagSTAY
org $c23F47
JSR flagSTAY
;;; Adding MP Cost to Shock
; Added a jump in the middle of the MP cost code; new code
; replicates the same check for Summon, then checks for Shock
; before jumping back to this codeblock as appropriate.
org $C24F14
JMP shockMP : NOP
;;; Disabling Shock at less than 50MP
; Adjusts some table pointers, and then includes new code includes
; the space opened up by moving the tables to freespace.
;
; New code checks current MP against cost of Shock and disables
; (greys out) the command if MP is too low.
org $c252C6
LDX #$0008
CMP.l c2_table1,X ; Moved table to free space because it's being expanded
org $c252D2
JSR (c2_table2,X) ; Moved table to free space because it's being expanded
org $c252E9 ; Code fits into the place freed by the moved tables
dis_Shock: REP #$20 ; Set 16-bit A
LDA.w #!Shock_MP ; LDA with $32/50d
CMP $3C08,Y ; Compare it to current MP and restore processor flags from stack
SEP #$20 ; Set 8-bit A
BCC c25314 ; If MP was over 50, carry is clear, so branch to Magic/Lore/X-Magic code to check for mute
RTS ; Else, return with carry set, which will grey out Shock
warnpc $c25300
org $c25314
c25314: ; Setting label for branch above
;;; New Code!
; This code (jumped to from MP cost function above) sets Shock's MP cost
; and adjusts it as necessary for Gold Hairpin/Economizer.
org !Freespace_1 ; (26 bytes)
shockMP: CMP #$19 ; Is the command Summon? (Moved check to make space for JMP to new code)
BNE .notSummon
JMP $4F24 ; If it is, jump back to where it would have BRA'd in the earlier code
.notSummon CMP #!Shock_ID ; Is it Shock?
BEQ .shockMP ; If it is, branch and set MP to deduct
JMP $4F18
.shockMP LDA #!Shock_MP
XBA ; Put Shock's MP cost in the top of A
LDA $3C45,X ; Get relic byte 2 (Gold Hairpin/Economizer)
JSR $5739 ; Adjust MP cost based on Gold Hairpin/Economizer
JMP $4F54
; Moved/expanded tables (from the disable CMDs function)
;org !Freespace_2 ; (27 bytes)
c2_table1: db $03, $0B, $07, $0C, $17, $02, $06, $00, !Shock_ID
c2_table2: dw $5326, $5322, $531D, $5314, $5314, $5314, $5310, $5310, dis_Shock
; Generic functions for flagging menu redraw on MP damage/restore (one for STA $3C08,Y, one for STA $3C08,X)
;org !Freespace_3 ; (17 bytes)
flagSTAY: STA $3C08,Y ; Stores updated current MP
PHX : TYX
INC $2F30,X
PLX
RTS
flagSTAX: STA $3C08,X ; Stores updated current MP
INC $2F30,X ; Flags actor/target (as relevant) to have menu updated
RTS
The following 4 users say Thank You to GrayShadows for this post:
• madsiur (06-01-2018), Robo Jesus (05-20-2019), Turbotastic (06-01-2018), Warrax (06-01-2018)
• madsiur (06-01-2018), Robo Jesus (05-20-2019), Turbotastic (06-01-2018), Warrax (06-01-2018)
« Next Oldest | Next Newest »
|
||||
Users browsing this thread: 2 Guest(s)