Skip to content

Faxanadu Internals - Wing Boots


When playing Faxanadu the wing boots allow a player to fly. Let's have a closer look at how they work under the hood. Wing boots are an item the player can buy or find and once it's in the player's inventory the player can select the item and use it. For a brief amount of time the player can fly then.

The code responsible for equipping wing boots can be found between the offsets $C579 and $C598.





CODE:
<br />$C579->    A9 83:        LDA #$83     ; Message ID <br />$C57B->    20 59 F8:     JSR $F859    ; Shows "I've used Wing Boots." <br />$C57E->    C:            #UNDEFINED <br />$C57F->    41 82:        #UNDEFINED <br />$C581->    20 BF C4:     JSR $C4BF    ; Removes selected item <br />$C584->    A9 1A:        LDA #$1A <br />$C586->    20 E4 D0:     JSR $D0E4    ; Unexplored <br />                                      ; (probably changes player's state) <br />$C589->    AD 37 4:      LDA $437     ; Player's title. <br />$C58C->    4A:           LSR A        ; The two MSB bits of the <br />$C58D->    4A:           LSR A        ; player's title are used to index <br />$C58E->    AA:           TAX          ; an array where the duration <br />$C58F->    BD 99 C5:     LDA $C599,X  ; of the wing boots is stored. <br />$C592->    8D 29 4:      STA $429     ; Wing boot duration. <br />$C595->    20 90 F9:     JSR $F990 <br />$C598->    60:           RTS <br />


The message is shown, the wing boots are removed from the selected item slot and afterwards the duration of the wing boots is initialized. This duration depends on the player's title. There are 16 different titles therefore the titles 0 - 3, 4 - 7, 8 - 11 and 12 - 15 will get the same wing boot duration. The array at $C599 contains the four values $28, $1E, $14 and $0A which are the duration in seconds for the four title categories (in reverse order).

We've already seen that the duration of equipped wing boots is stored in $429. The value in that byte is counted down until zero at which point the functionality of the wing boots expires as the next code snippet (offset $C59D - C5C7)shows.

CODE:
<br />$859D->    AD 29 4:     LDA $429    ; Time left <br />$85A0->    30 25:       BMI $85C7   ; Jump if the wing boots <br />                                    ; are inactive. <br />$85A2->    A5 A5:       LDA $A5 <br />$85A4->    9 80:        ORA #$80 <br />$85A6->    85 A5:       STA $A5 <br />$85A8->    A5 1A:       LDA $1A <br />$85AA->    29 3F:       AND #$3F <br />$85AC->    D0 19:       BNE $85C7   ; Jump if the wing boots <br />                                    ; are inactive. <br />$85AE->    CE 29 4:     DEC $429    ; Decrease time left. <br />$85B1->    AD 29 4:     LDA $429 <br />$85B4->    30 3:        BMI $85B9   ; Jump if wing boots expired. <br />$85B6->    4C 90 F9:    JMP $F990 <br />$85B9->    A5 A5:       LDA $A5 <br />$85BB->    29 7F:       AND #$7F <br />$85BD->    85 A5:       STA $A5 <br />$85BF->    A9 96:       LDA #$96    ; Message ID <br />$85C1->    20 59 F8:    JSR $F859   ; Show expiration message <br />$85C4->    C:           #UNDEFINED <br />$85C5->    41 82:       #UNDEFINED <br />$85C7->    60:          RTS <br />

Trackbacks

No Trackbacks

Comments

Display comments as Linear | Threaded

MA on :

Can someone tell me what I should do to fly using the wing boots. I use them but he only jumps does not fly up?

sp on :

Press the jump button and UP at the same time and keep both pressed.

Add Comment

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.
BBCode format allowed
Form options

Submitted comments will be subject to moderation before being displayed.