Ich habe den Reverse-Spiny (von Romi) zu einem Ceiling-Buzzy-Beetle weiterentwickelt. Er läuft an der Decke entlang und fällt kurz vor Mario herunter, um im Panzer schnell den Boden entlangzugleiten:
Wenn Mario draufhüpft, soll er sich in einen Buzzy-Beetle verwandeln, der sich zunächst in seinem Panzer befindet.
Nun die Probleme:
a) Wenn Mario draufspringt, liegt der Beetle wirklich als Panzer rum, aber er bleibt so und erwacht leider nicht. Diesen Code verwende ich, um einen Buzzy-Beetle draus zu machen:
Code
SUB_SPAWN_SPRITE LDA #$11 ; lade Sprite-Nummer, Sprite = Buzzy Beetle
STA $9E,x ; hier wird Sprite-Nummer gespeichert (normale Sprites)
LDA #$0A ; lade #$0A = kicked
STA $14C8,x ; Sprite Status Table
JSL $07F7D2 ; Reset sprite tables.
RETURN4 RTS
Was muss ich tun, um den Stun-Timer zu aktivieren?
b) Wenn Mario auf ihn draufspringt, liegt er umgedreht da, statt wie vorher mit dem Panzerboden nach oben:
Ich habe es schon hiermit versucht (im obigen Code gleich unter STA $14C8,x), klappt aber nicht:
Code
LDA $15F6,x
ORA #$80
STA $15F6,x
c) Wie kann ich dafür sorgen, dass sich der ankommende Panzer auch in einen "stunned" Buzzy-Beetle verwandelt, wenn Mario ihn seitlich mit dem Cape attakiert?
Ich habe auf SMW-Central diesen "Cape collision detection"-Code gefunden:
Code
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Spinning Cape Contact Routine by Bio(mostly ripped from the original wich start at $93BE);
;If contact is found, $01 is returned, if it isn't, $00 is returned ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SCCR
LDA $13E8
BEQ SCCRNOCONTACT
LDA $15D0,x
ORA $154C,x
ORA $1FE2,x
BNE SCCRNOCONTACT
LDA $1632,x
PHY
LDY $74
BEQ SCCRLABEL1
EOR #$01
SCCRLABEL1 PLY
EOR $13F9
BNE SCCRNOCONTACT
JSL $03B69F
LDA $13E9
SEC
SBC #$02
STA $00
LDA $13EA
SBC #$00
STA $08
LDA #$14
STA $02
LDA $13EB
STA $01
LDA $13EC
STA $09
LDA #$10
STA $03
SCCRFINNISH JSL $03B72B
BCC SCCRNOCONTACT
LDA #$01
RTS
SCCRNOCONTACT
LDA #$00
RTS
Ich muss also zum Code unter a) springen, wenn tatsächlich eine Cape-Berührung stattfindet, wie mache ich das genau?