SHOW:
|
|
- or go back to the newest paste.
| 1 | ; ALTTP One-Mind hack: causes the current player in control of Link to switch every so often. | |
| 2 | ; In places where this does not occur (e.g. title screen), both controllers are registered. | |
| 3 | ; Save this text file as an ASM file and patch it to your rom with Asar. | |
| 4 | ; A few extra options for adjusting timing are below. | |
| 5 | ||
| 6 | ;;;; Timing | |
| 7 | ||
| 8 | !count_silent = $08 ; Number of silent ticks before audible ones | |
| 9 | !count_audible = $04 ; Number of audible ticks before the controller switches | |
| 10 | !tickTiming = $1F ; Number of frames between ticks (valid: 01, 03, 07, 0F, 1F, 3F, 7F, FF) | |
| 11 | ||
| 12 | ; Hard mode: set silent to 1, audible to 1. | |
| 13 | ||
| 14 | ;;;; SFX | |
| 15 | ||
| 16 | !SFX_Tick = $06 ; SFX values for the tick noise. | |
| 17 | !SFXIO_Tick = $012E | |
| 18 | !SFX_Switch = $25 ; SFX values for when the players switch. | |
| 19 | !SFXIO_Switch = $012F | |
| 20 | ||
| 21 | ||
| 22 | ;;;; Technical | |
| 23 | ||
| 24 | !freeram = $7F9000 ; 2 bytes of free ram to use. | |
| 25 | ||
| 26 | ||
| 27 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
| 28 | ;; Code begins; don't touch it unless you know what you're doing. | |
| 29 | ||
| 30 | !active = !freeram ; 1 byte - currently active player | |
| 31 | !ticks = !freeram+1 ; 1 byte - counter for the number of ticks so far | |
| 32 | ||
| 33 | ||
| 34 | org $0083D1 | |
| 35 | autoclean JSL OneMind | |
| 36 | BRA $05 | |
| 37 | ||
| 38 | freecode | |
| 39 | OneMind: | |
| 40 | PHB : PHK : PLB | |
| 41 | JSR Main | |
| 42 | PLB | |
| 43 | RTL | |
| 44 | ||
| 45 | Main: | |
| 46 | ; Check whether in a mode we allow switching in. | |
| 47 | ; If not, register both controllers. | |
| 48 | LDA $10 | |
| 49 | CMP #$07 ; normal play - interior | |
| 50 | BEQ .acceptable | |
| 51 | CMP #$09 ; normal play - exterior | |
| 52 | BEQ .acceptable | |
| 53 | CMP #$0E ; normal play - text box, pause screen, map screen | |
| 54 | BEQ .acceptable | |
| 55 | BRA SetBothControllers | |
| 56 | .acceptable | |
| 57 | ||
| 58 | ; Good to go. | |
| 59 | LDA $1A | |
| 60 | AND #!tickTiming | |
| 61 | BNE SetControllers | |
| 62 | LDA !ticks | |
| 63 | INC | |
| 64 | CMP #!count_silent | |
| 65 | BCC .silentTick | |
| 66 | CMP #!count_silent+!count_audible | |
| 67 | BCC .tick | |
| 68 | JSR SwitchPlayers | |
| 69 | BRA SetControllers | |
| 70 | .tick | |
| 71 | LDY #!SFX_Tick | |
| 72 | STY !SFXIO_Tick | |
| 73 | .silentTick | |
| 74 | STA !ticks | |
| 75 | ||
| 76 | SetControllers: | |
| 77 | LDA !active | |
| 78 | AND #$01 | |
| 79 | BNE .c2 | |
| 80 | .c1 | |
| 81 | LDA $4218 | |
| 82 | STA $00 | |
| 83 | LDA $4219 | |
| 84 | RTS | |
| 85 | .c2 | |
| 86 | LDA $421A | |
| 87 | STA $00 | |
| 88 | LDA $421B | |
| 89 | RTS | |
| 90 | ||
| 91 | SetBothControllers: | |
| 92 | LDA $4218 | |
| 93 | ORA $421A | |
| 94 | STA $00 | |
| 95 | LDA $4219 | |
| 96 | ORA $421B | |
| 97 | RTS | |
| 98 | ||
| 99 | ||
| 100 | ||
| 101 | SwitchPlayers: | |
| 102 | LDA #$00 | |
| 103 | STA !ticks | |
| 104 | LDA !active | |
| 105 | INC | |
| 106 | STA !active | |
| 107 | LDA #!SFX_Switch | |
| 108 | STA !SFXIO_Switch | |
| 109 | ||
| 110 | REP #$30 | |
| 111 | LDA $7EF35B | |
| 112 | AND #$00FF | |
| 113 | TAX | |
| 114 | LDA !active | |
| 115 | AND #$0001 | |
| 116 | BNE .p2pal | |
| 117 | LDA $1BEC06,x | |
| 118 | AND #$00FF | |
| 119 | ASL | |
| 120 | ADC #$D308 | |
| 121 | STA $00 | |
| 122 | LDA #$001B | |
| 123 | STA $02 | |
| 124 | BRA .paletteUpload | |
| 125 | .p2pal | |
| 126 | TXA | |
| 127 | ASL | |
| 128 | TAX | |
| 129 | LDA P2Palettes,x | |
| 130 | STA $00 | |
| 131 | LDA.w #P2PalA>>16 | |
| 132 | STA $02 | |
| 133 | ||
| 134 | .paletteUpload | |
| 135 | LDY #$000E | |
| 136 | LDX #$01E2 | |
| 137 | ||
| 138 | - LDA [$00] | |
| 139 | STA $7EC300,X | |
| 140 | STA $7EC500,X | |
| 141 | INC $00 | |
| 142 | INC $00 | |
| 143 | INX | |
| 144 | INX | |
| 145 | DEY | |
| 146 | BPL - | |
| 147 | SEP #$30 | |
| 148 | INC $15 | |
| 149 | RTS | |
| 150 | ||
| 151 | ||
| 152 | P2Palettes: | |
| 153 | dw P2PalA,P2PalB,P2PalC | |
| 154 | ||
| 155 | ; Player 2 palette data. Feel free to mess with it if you know how. | |
| 156 | P2PalA: ; green mail | |
| 157 | dw $7FFF,$237E,$11B7,$369E,$14A5 | |
| 158 | dw $01FF,$1078,$599D,$1CF3,$2CFC | |
| 159 | dw $0415,$101C,$2A5C,$1571,$7A18 | |
| 160 | P2PalB: ; blue mail | |
| 161 | dw $7FFF,$237E,$11B7,$369E,$14A5 | |
| 162 | dw $01FF,$1078,$599D,$0A1D,$2B3D | |
| 163 | dw $6132,$7E17,$2A5C,$1199,$7A18 | |
| 164 | P2PalC: ; red mail | |
| 165 | dw $7FFF,$237E,$11B7,$369E,$14A5 | |
| 166 | dw $01FF,$1078,$599D,$62C2,$73EB | |
| 167 | dw $2B28,$3FCB,$2A5C,$2227,$7A18 |