Allgemeine Hex- und ASM-Fragen

geschrieben am 12.02.2011 10:30:49
( Link )
Zitat von TheTim:
natürlich wird es von sprite tool angenommen, aber erst nachdem du "yes" eingegeben hast wenn da die errormeldung kommt dass iwas schiefgelaufen ist xD

Aber das mein ich ja mit nicht angenommen ... angenommen heißt für mich eig das es ohne probleme durchkommt
geschrieben am 13.02.2011 21:23:53
( Link )
Wie änder ich die Musik von LEvel C7 (title screen)? Also ich habs folgendermaßen gemacht:
Ich hab auf SMWcentral in der Rom map nachgeguckt. Da stand "$0096C4 (0x018C4) is music Bank Used for the Title Screen. 0E = Overworld Music, 48 = Level Music, 59 = Ending Music." Also hab ich das in Translhextion von 01 auf 48 geändert, weil meine Musik unter Level gespeichert ist.
Dann stand da: "$0096C7 (0x018C7) is the title screen (level C7) music." Das hab ich auf 23 geändert, weil da meine Musik gespeichert ist. Jetz kommt gar keine Musik mehr. Nurnoch sounds ich verstehs nicht... Ich dachte Hex-editing wäre einfach xD
I'm a Brony and I'm proud!



Hier gibt's nette 8bit Remixes, Klavierzeugs und Acapella: <!-- m --><a class="postlink" href="http://www.youtube.com/user/timmifutzelchen">http://www.youtube.com/user/timmifutzelchen</a><!-- m -->
geschrieben am 14.02.2011 13:40:15
( Link )
Falls du Carol's Addmusic nimmst, musst du eine Musik von 12-16 nehmen
geschrieben am 14.02.2011 16:53:10
( Link )
ich benutz romis addmusic
I'm a Brony and I'm proud!



Hier gibt's nette 8bit Remixes, Klavierzeugs und Acapella: <!-- m --><a class="postlink" href="http://www.youtube.com/user/timmifutzelchen">http://www.youtube.com/user/timmifutzelchen</a><!-- m -->
geschrieben am 14.02.2011 17:32:04
( Link )
Dafür braucht man doh keine Hex Edits, wenn du Romis Addmusic benutzt. Du musst die Musik einfach als ow music einfügen und die Zahl ganz oben bei title screen hinschreiben.

EDIT:

How many People can read Hex, if only you and DEAD can read it?

Answer anzeigen
DEAE
geschrieben am 14.02.2011 18:32:47
( Link )
Oh Danke ! Jetzt versteh ichs
Brutal Mario ist out.Spielt mal SMW FreedoMN,1Updudes-Hacks,The Devious Four Chronicles oder Chomps Attacke!
geschrieben am 14.02.2011 18:47:31
( Link )
WOW da merkt man mal wieder wie schlau ich bin... xD

DANKE
I'm a Brony and I'm proud!



Hier gibt's nette 8bit Remixes, Klavierzeugs und Acapella: <!-- m --><a class="postlink" href="http://www.youtube.com/user/timmifutzelchen">http://www.youtube.com/user/timmifutzelchen</a><!-- m -->
geschrieben am 14.02.2011 20:53:19
( Link )
Hallo, ich habe hier einen Code für level.asm, der einen Layer-3-Hintergrund langsamer scrollen lässt und ihn hinter dem Layer-2-Hintergrund verschwinden lässt:
Code
	REP #$20
LDA $1C
LSR A
LSR A
STA $24
LDA $1A ; Scroll four times as slow as Layer 1.
LSR A
LSR A
STA $22 ; Layer 3 X.
LDA #$1F1F
STA $212C
SEP #$20


Ich möchte hierzu die Priority ändern, also so, dass Layer 3 vor allem anderen ist, also auch vor Layer 1 und den Sprites. Was muss ich hier ändern?
geschrieben am 14.02.2011 22:22:32
( Link )
Wenn die "Force Layer 3 above all others layers"-Option bei "Change Properties in Header" in LM nicht funktioniert, probier mal diesen Code:

Code
		LDA.b #%00001100; \
STA.w $212C ; | Layer 3 in den Mainscreen,
STA.w $0D9D ; |
LDA.b #%00010011; | alles andere in den Subscreen
STA.w $212D ; |
STA.w $0D9E ; /


Dabei könnten allerdings die Prioritäten von Röhren und Pilzen aus?-Blöcken Schaden nehmen, weiß nicht genau.
geschrieben am 15.02.2011 11:08:38
( Link )
Ich antworte mal für Chris, da jener erst wieder zum Wochenende hin verfügbar sein wird.
Dein Code funktioniert, WYE. Nun gilt es, diesen Background zum scrollen zu bringen. Das Ganze soll ungefähr so ablaufen wie in den SMB3 Airships. Dazu müsste der Layer 3 Background auch transparent sein. Ich hatte dazu schon mit dem "Layer 3 Transparenz Generator" rumgespielt, allerdings bewirkt jener, dass einer der anderen Generatoren (Autoscrolling und Lightning) in dem Level nicht mehr funktioniert. Wichtig bei der Transparenz ist jedoch, dass wirklich alle anderen Layer und Sprite dadurch sichtbar sind. Zuerst hatte ich den Geisterhausnebel ausprobiert, welcher aber bewirkt, dass nur der Hintergrund sichtbar ist, wodurch es Cutoff gibt. Das wurde durch den "Layer 3 Transparenz Generator" behoben. Allerdings, wie oben beschrieben, hatte ich dann keinen Lightning Generator mehr. Gibt es da per level.asm irgendeine Möglichkeit?, den Hintergrund transparent zu machen UND ihn scrollen zu lassen?

Edit: Ich hab den Code aus dem Transparenz Generator mal in levelinitcode.asm gepackt. Das klappt auch hervorragend. Jetzt muss das Ding nur noch halbwegs authentisch scrollen und anschließend wird versucht, Multiscrolling für den Background zu aktivieren.

Edit2: Auch das Scrolling funktioniert mittlerweile, nachdem ich einen entsprechenenden Code gefunden habe. Danke trotzdem.

Kennt sich denn jemand mit Parallax Scrolling bzw. Multi Scroll des Layer 2 Backgroundes aus?
geschrieben am 17.02.2011 13:40:49
( Link )
Ich habe mir den "KillLeftOnly"-Block gedownloadet und würde gerne den gleichen Effekt haben aber stattdessen nach rechts...hier der normale Code
Code

MarioSide:
LDA $76
BNE Kill
RTL
Kill:
JSL $00F606
MarioAbove:
MarioBelow:
SpriteV:
SpriteH:
MarioCape:
MarioFireBall:
RTL


Hoffe mir kann da wer helfen.
geschrieben am 17.02.2011 20:33:28
( Link )
Probier mal so, aber der Code ist doch nicht vollständig :S da fehlt doch JML blabla : JML blablabla ...
Code

MarioSide:
LDA $76
STA #$01
BNE Kill
RTL
Kill:
JSL $00F606
MarioAbove:
MarioBelow:
SpriteV:
SpriteH:
MarioCape:
MarioFireBall:
RTL
geschrieben am 17.02.2011 20:43:06
( Link )
Zitat von MetalJo:
Probier mal so, aber der Code ist doch nicht vollständig :S da fehlt doch JML blabla : JML blablabla ...
Code

MarioSide:
LDA $76
STA #$01
BNE Kill
RTL
Kill:
JSL $00F606
MarioAbove:
MarioBelow:
SpriteV:
SpriteH:
MarioCape:
MarioFireBall:
RTL


Ja hab ich weggelassen weil das sowieso immer dabei steht. Ich versuch mal ob das geht...Danke
E: Blocktool mag dein STA #$01 nicht...
geschrieben am 17.02.2011 20:57:15
( Link )
xD Böses Blocktool du musst heute draußen schlafen =P Aber probiers mal mit CMP statt STA, ich hab schon ewig keinen BLK mehr geschrieben xP
geschrieben am 17.02.2011 21:02:16
( Link )
Niemand mag STA #$01. Man lädt erst mit LDA eine absolute Zahl und speichert sie dann mit STA in eine RAM-Adresse. STA #$irgendwas würde in eine Zahl speichern, was keinen Sinn ergibt.

Nein, ändere einfach das BNE zu BEQ, dann klappt's.
geschrieben am 17.02.2011 21:04:59
( Link )
Zitat von WYE:
Niemand mag STA #$01. Man lädt erst mit LDA eine absolute Zahl und speichert sie dann mit STA in eine RAM-Adresse. STA #$irgendwas würde in eine Zahl speichern, was keinen Sinn ergibt.

Nein, ändere einfach das BNE zu BEQ, dann klappt's.


Junge, da sieht man wie lang ich keine Blks mehr geschrieben hab, naja egal xD ich bleib lieber bei Sprites und Patches
geschrieben am 17.02.2011 21:12:07
( Link )
Zitat von WYE:
Niemand mag STA #$01. Man lädt erst mit LDA eine absolute Zahl und speichert sie dann mit STA in eine RAM-Adresse. STA #$irgendwas würde in eine Zahl speichern, was keinen Sinn ergibt.

Nein, ändere einfach das BNE zu BEQ, dann klappt's.


...Armes STA #$01 Trotzdem danke WYE ^^ (Auch wenn STA #$01 jetzt wegen dir heult )
geschrieben am 17.02.2011 21:15:24
( Link )
Na dann tröste das arme STA #$01 doch, dann gehts ihm gleich viel besser ^^
geschrieben am 17.02.2011 21:22:10
( Link )
Zitat von MetalJo:
Na dann tröste das arme STA #$01 doch, dann gehts ihm gleich viel besser ^^


Kann ich nicht es hat sich aus der asm datei verknufft

Edit: Ich hab noch eine Frage...gibt es irgendeine Möglichkeit nur in einem Level die Stausbar zu löschen ?
geschrieben am 20.02.2011 1:06:59
( Link )
Beim Airship verwenden wir Layer-3-Nebel. Doch wir haben folgendes Problem:

Bestimmte Sprites verschwinden hinter Layer 3, aber nur solche, die auch hinter Objekten verschwinden, wie Piranha-Pfl. oder halt Rocky Wrench. Und das, obwohl Layer 3 transparent ist. Alle anderen Sprites wie auch Mario sind hinter dem Nebel sichtbar.
Kann mir jemand einen Code entwerfen, der dafür sorgt, dass ALLE Sprites vor Layer 2 und Layer 3 zu sehen sind?


Noch eine Frage: Wie kann man die Priority des Schraubenschlüssels so einstellen, dass er nicht mehr hinter Layer-1-Objekten verschwindet:
Code
;rocky wrench projectile
;by smkdan

DIR = $03
PROPRAM = $04
TEMP = $09

SPEED dcb $10,$F0 ;yeah

dcb "INIT"
RTL

dcb "MAIN"
PHB
PHK
PLB
JSR Run
PLB
RTL


Run
JSR SUB_OFF_SCREEN_X0
JSR GET_DRAW_INFO
JSR GFX ;draw sprite

LDA $14C8,x
CMP #$08
BNE Return
LDA $9D ;locked sprites?
BNE Return
LDA $15D0,x ;yoshi eating?
BNE Return

LDY $157C,x
LDA SPEED,y
STA $B6,x

JSL $018022 ;no x gravity
JSL $01A7DC ;mario interact

Return
RTS

;=====

TILEMAP dcb $EC,$EE,$EE,$EC
PROP dcb $00,$00,$80,$40


GFX
LDA $15F6,x ;properties...
STA PROPRAM

LDA $14 ;frame counter
LSR A
LSR A ;every 4th frame
AND #$03 ;3 frames
STA TEMP ;frame index

OAM_Loop
LDA $00
STA $0300,y ;xpos
LDA $01
STA $0301,y ;ypos
LDX TEMP
LDA TILEMAP,x
STA $0302,y ;tilemap
LDA PROPRAM
ORA PROP,x ;properties
STA $0303,y

LDX $15E9 ;restore sprite index

LDY #$02 ;16x16
LDA #$00 ;1 tile
JSL $01B7B3 ;reserve

RTS

;=================
;BORROWED ROUTINES
;=================

;GET_DRAW_INFO
;==============

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; $B760 - graphics routine helper - shared
; sets off screen flags and sets index to OAM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SPR_T1 dcb $0C,$1C
SPR_T2 dcb $01,$02

GET_DRAW_INFO STZ $186C,x ; reset sprite offscreen flag, vertical
STZ $15A0,x ; reset sprite offscreen flag, horizontal
LDA $E4,x ; \
CMP $1A ; | set horizontal offscreen if necessary
LDA $14E0,x ; |
SBC $1B ; |
BEQ ON_SCREEN_X ; |
INC $15A0,x ; /

ON_SCREEN_X LDA $14E0,x ; \
XBA ; |
LDA $E4,x ; |
REP #$20 ; |
SEC ; |
SBC $1A ; | mark sprite invalid if far enough off screen
CLC ; |
ADC.W #$0040 ; |
CMP.W #$0180 ; |
SEP #$20 ; |
ROL A ; |
AND #$01 ; |
STA $15C4,x ; /
BNE INVALID ;

LDY #$00 ; \ set up loop:
LDA $1662,x ; |
AND #$20 ; | if not smushed (1662 & 0x20), go through loop twice
BEQ ON_SCREEN_LOOP ; | else, go through loop once
INY ; /
ON_SCREEN_LOOP LDA $D8,x ; \
CLC ; | set vertical offscreen if necessary
ADC SPR_T1,y ; |
PHP ; |
CMP $1C ; | (vert screen boundry)
ROL $00 ; |
PLP ; |
LDA $14D4,x ; |
ADC #$00 ; |
LSR $00 ; |
SBC $1D ; |
BEQ ON_SCREEN_Y ; |
LDA $186C,x ; | (vert offscreen)
ORA SPR_T2,y ; |
STA $186C,x ; |
ON_SCREEN_Y DEY ; |
BPL ON_SCREEN_LOOP ; /

LDY $15EA,x ; get offset to sprite OAM
LDA $E4,x ; \
SEC ; |
SBC $1A ; | $00 = sprite x position relative to screen boarder
STA $00 ; /
LDA $D8,x ; \
SEC ; |
SBC $1C ; | $01 = sprite y position relative to screen boarder
STA $01 ; /
RTS ; return

INVALID PLA ; \ return from *main gfx routine* subroutine...
PLA ; | ...(not just this subroutine)
RTS ; /


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; SUB_OFF_SCREEN
; This subroutine deals with sprites that have moved off screen
; It is adapted from the subroutine at $01AC0D
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SPR_T12 dcb $40,$B0
SPR_T13 dcb $01,$FF
SPR_T14 dcb $30,$C0,$A0,$C0,$A0,$F0,$60,$90 ;bank 1 sizes
dcb $30,$C0,$A0,$80,$A0,$40,$60,$B0 ;bank 3 sizes
SPR_T15 dcb $01,$FF,$01,$FF,$01,$FF,$01,$FF ;bank 1 sizes
dcb $01,$FF,$01,$FF,$01,$00,$01,$FF ;bank 3 sizes

SUB_OFF_SCREEN_X1 LDA #$02 ; \ entry point of routine determines value of $03
BRA STORE_03 ; | (table entry to use on horizontal levels)
SUB_OFF_SCREEN_X2 LDA #$04 ; |
BRA STORE_03 ; |
SUB_OFF_SCREEN_X3 LDA #$06 ; |
BRA STORE_03 ; |
SUB_OFF_SCREEN_X4 LDA #$08 ; |
BRA STORE_03 ; |
SUB_OFF_SCREEN_X5 LDA #$0A ; |
BRA STORE_03 ; |
SUB_OFF_SCREEN_X6 LDA #$0C ; |
BRA STORE_03 ; |
SUB_OFF_SCREEN_X7 LDA #$0E ; |
STORE_03 STA $03 ; |
BRA START_SUB ; |
SUB_OFF_SCREEN_X0 STZ $03 ; /

START_SUB JSR SUB_IS_OFF_SCREEN ; \ if sprite is not off screen, return
BEQ RETURN_35 ; /
LDA $5B ; \ goto VERTICAL_LEVEL if vertical level
AND #$01 ; |
BNE VERTICAL_LEVEL ; /
LDA $D8,x ; \
CLC ; |
ADC #$50 ; | if the sprite has gone off the bottom of the level...
LDA $14D4,x ; | (if adding 0x50 to the sprite y position would make the high byte >= 2)
ADC #$00 ; |
CMP #$02 ; |
BPL ERASE_SPRITE ; / ...erase the sprite
LDA $167A,x ; \ if "process offscreen" flag is set, return
AND #$04 ; |
BNE RETURN_35 ; /
LDA $13 ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZcHC:0756 VC:176 00 FL:205
AND #$01 ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0780 VC:176 00 FL:205
ORA $03 ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0796 VC:176 00 FL:205
STA $01 ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0820 VC:176 00 FL:205
TAY ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0844 VC:176 00 FL:205
LDA $1A ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0858 VC:176 00 FL:205
CLC ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZcHC:0882 VC:176 00 FL:205
ADC SPR_T14,y ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZcHC:0896 VC:176 00 FL:205
ROL $00 ;A:8AC0 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:eNvMXdizcHC:0928 VC:176 00 FL:205
CMP $E4,x ;A:8AC0 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:eNvMXdizCHC:0966 VC:176 00 FL:205
PHP ;A:8AC0 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:0996 VC:176 00 FL:205
LDA $1B ;A:8AC0 X:0009 Y:0001 D:0000 DB:01 S:01F0 P:envMXdizCHC:1018 VC:176 00 FL:205
LSR $00 ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F0 P:envMXdiZCHC:1042 VC:176 00 FL:205
ADC SPR_T15,y ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F0 P:envMXdizcHC:1080 VC:176 00 FL:205
PLP ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F0 P:eNvMXdizcHC:1112 VC:176 00 FL:205
SBC $14E0,x ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:1140 VC:176 00 FL:205
STA $00 ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:eNvMXdizCHC:1172 VC:176 00 FL:205
LSR $01 ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:eNvMXdizCHC:1196 VC:176 00 FL:205
BCC SPR_L31 ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZCHC:1234 VC:176 00 FL:205
EOR #$80 ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZCHC:1250 VC:176 00 FL:205
STA $00 ;A:8A7F X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:1266 VC:176 00 FL:205
SPR_L31 LDA $00 ;A:8A7F X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:1290 VC:176 00 FL:205
BPL RETURN_35 ;A:8A7F X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:1314 VC:176 00 FL:205
ERASE_SPRITE LDA $14C8,x ; \ if sprite status < 8, permanently erase sprite
CMP #$08 ; |
BCC KILL_SPRITE ; /
LDY $161A,x ;A:FF08 X:0007 Y:0001 D:0000 DB:01 S:01F3 P:envMXdiZCHC:1108 VC:059 00 FL:2878
CPY #$FF ;A:FF08 X:0007 Y:0000 D:0000 DB:01 S:01F3 P:envMXdiZCHC:1140 VC:059 00 FL:2878
BEQ KILL_SPRITE ;A:FF08 X:0007 Y:0000 D:0000 DB:01 S:01F3 P:envMXdizcHC:1156 VC:059 00 FL:2878
LDA #$00 ;A:FF08 X:0007 Y:0000 D:0000 DB:01 S:01F3 P:envMXdizcHC:1172 VC:059 00 FL:2878
STA $1938,y ;A:FF00 X:0007 Y:0000 D:0000 DB:01 S:01F3 P:envMXdiZcHC:1188 VC:059 00 FL:2878
KILL_SPRITE STZ $14C8,x ; erase sprite
RETURN_35 RTS ; return

VERTICAL_LEVEL LDA $167A,x ; \ if "process offscreen" flag is set, return
AND #$04 ; |
BNE RETURN_35 ; /
LDA $13 ; \
LSR A ; |
BCS RETURN_35 ; /
LDA $E4,x ; \
CMP #$00 ; | if the sprite has gone off the side of the level...
LDA $14E0,x ; |
SBC #$00 ; |
CMP #$02 ; |
BCS ERASE_SPRITE ; / ...erase the sprite
LDA $13 ;A:0000 X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:1218 VC:250 00 FL:5379
LSR A ;A:0016 X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:envMXdizcHC:1242 VC:250 00 FL:5379
AND #$01 ;A:000B X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:envMXdizcHC:1256 VC:250 00 FL:5379
STA $01 ;A:0001 X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:envMXdizcHC:1272 VC:250 00 FL:5379
TAY ;A:0001 X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:envMXdizcHC:1296 VC:250 00 FL:5379
LDA $1C ;A:001A X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0052 VC:251 00 FL:5379
CLC ;A:00BD X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0076 VC:251 00 FL:5379
ADC SPR_T12,y ;A:00BD X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0090 VC:251 00 FL:5379
ROL $00 ;A:006D X:0009 Y:0001 D:0000 DB:01 S:01F3 P:enVMXdizCHC:0122 VC:251 00 FL:5379
CMP $D8,x ;A:006D X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNVMXdizcHC:0160 VC:251 00 FL:5379
PHP ;A:006D X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNVMXdizcHC:0190 VC:251 00 FL:5379
LDA.W $001D ;A:006D X:0009 Y:0001 D:0000 DB:01 S:01F2 P:eNVMXdizcHC:0212 VC:251 00 FL:5379
LSR $00 ;A:0000 X:0009 Y:0001 D:0000 DB:01 S:01F2 P:enVMXdiZcHC:0244 VC:251 00 FL:5379
ADC SPR_T13,y ;A:0000 X:0009 Y:0001 D:0000 DB:01 S:01F2 P:enVMXdizCHC:0282 VC:251 00 FL:5379
PLP ;A:0000 X:0009 Y:0001 D:0000 DB:01 S:01F2 P:envMXdiZCHC:0314 VC:251 00 FL:5379
SBC $14D4,x ;A:0000 X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNVMXdizcHC:0342 VC:251 00 FL:5379
STA $00 ;A:00FF X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0374 VC:251 00 FL:5379
LDY $01 ;A:00FF X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0398 VC:251 00 FL:5379
BEQ SPR_L38 ;A:00FF X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0422 VC:251 00 FL:5379
EOR #$80 ;A:00FF X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0438 VC:251 00 FL:5379
STA $00 ;A:007F X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0454 VC:251 00 FL:5379
SPR_L38 LDA $00 ;A:007F X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0478 VC:251 00 FL:5379
BPL RETURN_35 ;A:007F X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0502 VC:251 00 FL:5379
BMI ERASE_SPRITE ;A:8AFF X:0002 Y:0000 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0704 VC:184 00 FL:5490

SUB_IS_OFF_SCREEN LDA $15A0,x ; \ if sprite is on screen, accumulator = 0
ORA $186C,x ; |
RTS ; / return