Allgemeine SMW Hacking Fragen
Mein Problem hat sich jetzt erledigt! Hab ne stunde ausprobiert und jetzt gehts
Wie ändere ich den Background (eingekreist)???
Wetten, dass ich nächste Woche nicht mehr hier online sein werde? :D
´s gibt badische
und unsymbadische 
und unsymbadische 
anzeigen
[...]
Rob: MARKUS <3
Rob: wie gehts dir grad so ?
RPG: Eigentlich ganz OK. Aber ich vermisse Stella! ;_;
Rob: Wen?
MFG: Dich :P
Rob: OK
Rob: OICH BIN DE STELLER
RPG: Meine Freundin :P
Rob: Stelle Steller ich stelle dinge her
Rob: MARKUUUUUS!
Rob: Warte mal xD
Rob: Deine freundin
Rob: müsste dich so betonen
Rob: Mar - KUSS
RPG: Yesh, meine Freundin.
Rob: beeem.
RPG: Hui! Das war selbst für dich ein niedriges Niveau, Roby! :D
RPG: Ich bin stolz auf dich!
[...]
Rob: MARKUS <3
Rob: wie gehts dir grad so ?
RPG: Eigentlich ganz OK. Aber ich vermisse Stella! ;_;
Rob: Wen?
MFG: Dich :P
Rob: OK
Rob: OICH BIN DE STELLER
RPG: Meine Freundin :P
Rob: Stelle Steller ich stelle dinge her
Rob: MARKUUUUUS!
Rob: Warte mal xD
Rob: Deine freundin
Rob: müsste dich so betonen
Rob: Mar - KUSS
RPG: Yesh, meine Freundin.
Rob: beeem.
RPG: Hui! Das war selbst für dich ein niedriges Niveau, Roby! :D
RPG: Ich bin stolz auf dich!
[...]
Zitat von SMW MARIO:
Ich hab ein Problem: ich hab meine rom gepatcht damit ich custom music hören kann so weit so gut aber wenn ich jetzt in der Overworld etwas verändere und speicher dann kann ich die rom nicht mehr mit nem emu starten und zsnes sagt dann stall detected... wie kann ich das problem beheben?
?
Würd mich auch tierich interessieren..;P
Zitat von DerKoppa:
Es gibt ein Programm namens "Terra Stripe". Damit kann man den besagten Border umgestalten:
SMWC Downloadlink


@ Skorme : Sänk ju <3
Danke vielmals Skrome,danke! 
EDIT: Ups
Danke vielmals Skorme!
EDIT: Ups
Wetten, dass ich nächste Woche nicht mehr hier online sein werde? :D
´s gibt badische
und unsymbadische 
und unsymbadische 
anzeigen
[...]
Rob: MARKUS <3
Rob: wie gehts dir grad so ?
RPG: Eigentlich ganz OK. Aber ich vermisse Stella! ;_;
Rob: Wen?
MFG: Dich :P
Rob: OK
Rob: OICH BIN DE STELLER
RPG: Meine Freundin :P
Rob: Stelle Steller ich stelle dinge her
Rob: MARKUUUUUS!
Rob: Warte mal xD
Rob: Deine freundin
Rob: müsste dich so betonen
Rob: Mar - KUSS
RPG: Yesh, meine Freundin.
Rob: beeem.
RPG: Hui! Das war selbst für dich ein niedriges Niveau, Roby! :D
RPG: Ich bin stolz auf dich!
[...]
Rob: MARKUS <3
Rob: wie gehts dir grad so ?
RPG: Eigentlich ganz OK. Aber ich vermisse Stella! ;_;
Rob: Wen?
MFG: Dich :P
Rob: OK
Rob: OICH BIN DE STELLER
RPG: Meine Freundin :P
Rob: Stelle Steller ich stelle dinge her
Rob: MARKUUUUUS!
Rob: Warte mal xD
Rob: Deine freundin
Rob: müsste dich so betonen
Rob: Mar - KUSS
RPG: Yesh, meine Freundin.
Rob: beeem.
RPG: Hui! Das war selbst für dich ein niedriges Niveau, Roby! :D
RPG: Ich bin stolz auf dich!
[...]
Zitat von TheSuperDomy™:
Skrome
*Skorme, wenn ich bitten darf :3
Und kein Problem ^.^
@SMW MARIO:
Sicher das die Rom nur dann nichtmehr Funktioniert wenn du auch was auf der OW änderst?
Alles andere klappt? :S
Und wo hast du die Custom Musik eingefügt?
Also in welchem Level/ Stelle/ whatever?


Zitat von Skorme:
*Skorme, wenn ich bitten darf :3
Und kein Problem ^.^
@SMW MARIO:
Sicher das die Rom nur dann nichtmehr Funktioniert wenn du auch was auf der OW änderst?
Alles andere klappt? :S
Und wo hast du die Custom Musik eingefügt?
Also in welchem Level/ Stelle/ whatever?
Zitat von TheSuperDomy™:
Skrome
*Skorme, wenn ich bitten darf :3
Und kein Problem ^.^
@SMW MARIO:
Sicher das die Rom nur dann nichtmehr Funktioniert wenn du auch was auf der OW änderst?
Alles andere klappt? :S
Und wo hast du die Custom Musik eingefügt?
Also in welchem Level/ Stelle/ whatever?
Ich hab die musik nur für level eingefügt. wenn ich im overworld editor was ändere sei es nur son pixelfeld und die änderung speicher dann startet die rom nich. Zum glück hab ich von der rom backups gemacht. is aber trotzdem mist das ich die overworld nich verändern kann. vieleicht hilft es ja was: ich hab die rom mit more.asm gepatcht.
Hab auch mal wieder ne Frage:
Wie kann ich das "Mario - Course Clear" ändern ? Mit dem SMWMTE geht es aufjedenfall nicht und mit dem SMWSBE auch nicht..;P
Wie kann ich das "Mario - Course Clear" ändern ? Mit dem SMWMTE geht es aufjedenfall nicht und mit dem SMWSBE auch nicht..;P
Wer von euch benutzt LM 1.80? ich hab nähmlich folgendes problem: ich wollte mich an ExGFX versuchen hat auch alles geklappt nur mit dem background nicht. im tutorial was ich gesehen hab hatte der LM 1.7 und da musste man auf Change Background Map16 page gehen und dann die seite angeben wo der background im16x16 Tile Map Editor ist. also ab seite 12. ( hoffe das war jetzt verständlich). nun bei LM 1.8 heißt das Change Background Map16 bank... und da kann ich keine seiten anwählen. geht das auch anders oder muss ich den background selber machen?
Ich hab auch ne schnelle Frage: Kann ich bei Addmusic einfach die Textdatei umbenennen, und in der AddMusic.ini den gleichen Namen wie vorhin eingebe, kommt die Musik, oder darf ich den Originalnamen nicht anrühren?
Geht. probier's doch aus.
Abiturklausuren (schamlos geklaut von spinatkuchen >_>):
Deutsch (26.3.): Alles reingebracht, was ich wollte, bereue nichts, insgesamt ganz gutes Gefühl (Ergebnis: 8 Punkte - Hm, hätte mit mehr gerechnet.)
Geschichte (1.4.): Fast nichts zum historischen Kontext gewusst, Rest war ganz okay, vielleicht noch 3, eher 4 (Ergebnis: 7 Punkte - Hey, das hätte schlechter sein können. Keine Nachprüfung!)
Mathe (2.4.): Viel besser als gedacht, bis auf 'nen kleinen Teil fast alles richtig, 1 ist gut möglich (Ergebnis: 14 Punkte - Yay!)
Englisch (9.4.): Sprachlich keine Sorgen, inhaltlich etwas mehr, gutes bis sehr gutes Gefühl (Ergebnis: 15 Punkte - Der Lehrer mag mich halt.)
Physik (mdl., 10.5.): Bis auf zwei winzige Wissenslücken sehr einfach und sehr gut gelaufen (Ergebnis: 13 Punkte - Sehr in Ordnung!)
Deutsch (26.3.): Alles reingebracht, was ich wollte, bereue nichts, insgesamt ganz gutes Gefühl (Ergebnis: 8 Punkte - Hm, hätte mit mehr gerechnet.)
Geschichte (1.4.): Fast nichts zum historischen Kontext gewusst, Rest war ganz okay, vielleicht noch 3, eher 4 (Ergebnis: 7 Punkte - Hey, das hätte schlechter sein können. Keine Nachprüfung!)
Mathe (2.4.): Viel besser als gedacht, bis auf 'nen kleinen Teil fast alles richtig, 1 ist gut möglich (Ergebnis: 14 Punkte - Yay!)
Englisch (9.4.): Sprachlich keine Sorgen, inhaltlich etwas mehr, gutes bis sehr gutes Gefühl (Ergebnis: 15 Punkte - Der Lehrer mag mich halt.)
Physik (mdl., 10.5.): Bis auf zwei winzige Wissenslücken sehr einfach und sehr gut gelaufen (Ergebnis: 13 Punkte - Sehr in Ordnung!)
Zitat von DerKoppa:
Hab auch mal wieder ne Frage:
Wie kann ich das "Mario - Course Clear" ändern ? Mit dem SMWMTE geht es aufjedenfall nicht und mit dem SMWSBE auch nicht..;P
Wie kann ich das "Mario - Course Clear" ändern ? Mit dem SMWMTE geht es aufjedenfall nicht und mit dem SMWSBE auch nicht..;P
;P
;P anzeigen
Gibt's kein Tool für. Da musst du schon die Tilemap-Daten direkt bearbeiten.
2CE16 $05:CC16 75 bytes Layer 3 Start of course clear message tilemap.
$05CC1A (2CE1A) (10 bytes) is 'MARIO' tiles and attributes used in the end-of-level scorecard
$05CC28 (2CE28) (12 bytes) is "COURSE" and attributes at end of level scorecard.
$05CC36 (2CE36) (10 bytes) is "CLEAR" and attributes at end of level scorecard.
2CE16 $05:CC16 75 bytes Layer 3 Start of course clear message tilemap.
$05CC1A (2CE1A) (10 bytes) is 'MARIO' tiles and attributes used in the end-of-level scorecard
$05CC28 (2CE28) (12 bytes) is "COURSE" and attributes at end of level scorecard.
$05CC36 (2CE36) (10 bytes) is "CLEAR" and attributes at end of level scorecard.
Abiturklausuren (schamlos geklaut von spinatkuchen >_>):
Deutsch (26.3.): Alles reingebracht, was ich wollte, bereue nichts, insgesamt ganz gutes Gefühl (Ergebnis: 8 Punkte - Hm, hätte mit mehr gerechnet.)
Geschichte (1.4.): Fast nichts zum historischen Kontext gewusst, Rest war ganz okay, vielleicht noch 3, eher 4 (Ergebnis: 7 Punkte - Hey, das hätte schlechter sein können. Keine Nachprüfung!)
Mathe (2.4.): Viel besser als gedacht, bis auf 'nen kleinen Teil fast alles richtig, 1 ist gut möglich (Ergebnis: 14 Punkte - Yay!)
Englisch (9.4.): Sprachlich keine Sorgen, inhaltlich etwas mehr, gutes bis sehr gutes Gefühl (Ergebnis: 15 Punkte - Der Lehrer mag mich halt.)
Physik (mdl., 10.5.): Bis auf zwei winzige Wissenslücken sehr einfach und sehr gut gelaufen (Ergebnis: 13 Punkte - Sehr in Ordnung!)
Deutsch (26.3.): Alles reingebracht, was ich wollte, bereue nichts, insgesamt ganz gutes Gefühl (Ergebnis: 8 Punkte - Hm, hätte mit mehr gerechnet.)
Geschichte (1.4.): Fast nichts zum historischen Kontext gewusst, Rest war ganz okay, vielleicht noch 3, eher 4 (Ergebnis: 7 Punkte - Hey, das hätte schlechter sein können. Keine Nachprüfung!)
Mathe (2.4.): Viel besser als gedacht, bis auf 'nen kleinen Teil fast alles richtig, 1 ist gut möglich (Ergebnis: 14 Punkte - Yay!)
Englisch (9.4.): Sprachlich keine Sorgen, inhaltlich etwas mehr, gutes bis sehr gutes Gefühl (Ergebnis: 15 Punkte - Der Lehrer mag mich halt.)
Physik (mdl., 10.5.): Bis auf zwei winzige Wissenslücken sehr einfach und sehr gut gelaufen (Ergebnis: 13 Punkte - Sehr in Ordnung!)
Wo kann ich in der deadweight_bro.asm datei ändern, wie viel mal man auf ihn draufspringen muss, bis er tot ist?
hier der code:
hier der code:
Code
EXTRA_BITS = $7FAB10
NEW_SPRITE_NUM = $7FAB9E ;0C bytes custom sprite number
JUMP_TIMER = $163E
RAM_ThrowTimer = $1504
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; sprite data
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIME_TO_LOCK = $28
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; init JSL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dcb "INIT"
JSR SUB_GET_DIR
TYA
STA $157C,x
LDA $1588,x
ORA #$04
STA $1588,x
STZ $1602,x
TXA
AND #$03
ASL A
ASL A
ASL A
ASL A
PHA
ASL A
ADC #$32
STA RAM_ThrowTimer,x
PLA
ADC #$FE
STA JUMP_TIMER,x
RTL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; main sprite JSL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dcb "MAIN"
HAMMER_BRO_JSL PHB ; \
PHK ; | main sprite function, just calls local subroutine
PLB ; |
JSR DecrementTimers
JSR START_HB_CODE ; |
PLB ; |
RTL ; /
DecrementTimers:
LDA $14C8,x
CMP #$08
BNE DoneDec
LDA $9D
BNE DoneDec
LDA RAM_ThrowTimer,x
BEQ DoneDec
DEC RAM_ThrowTimer,x
DoneDec:
RTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; main sprite routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIME_TO_SHOW = $22 ;time to display the boomerang before it is thrown
X_SPEED dcb $00,$FC,$00,$04 ;rest at bottom, moving up, rest at top, moving down
TIME_IN_POS dcb $48,$10,$48,$10 ;moving up, rest at top, moving down, rest at bottom
TIME_TILL_THROW dcb $F7,$D7
STAR INC RAM_ThrowTimer,x
RETURN RTS
START_HB_CODE JSR SUB_GFX ; draw hammer bro gfx
LDA $14C8,x ; \ if hammer bro status != 8...
CMP #$02 ; } ... not (killed with spin jump [4] or star[2])
BEQ STAR
CMP #$08
BNE RETURN ; / ... return
LDA $9D ; \ if sprites locked...
BNE RETURN ; / ... return
JSR SUB_GET_DIR ; \ always face mario
TYA ; |
STA $157C,x ; /
JSR SUB_OFF_SCREEN_X3 ; only process hammer bro while on screen
INC $1570,x ; increment number of frames hammer bro has been on screen
LDA $1570,x ; \ calculate which frame to show:
LSR A ; |
LSR A ; |
LSR A ; |
LSR A ; |
AND #$01 ; | update every 16 cycles if normal
STA $1602,x ; / write frame to show
LDA RAM_ThrowTimer,x ; \ if time until spit >= $10
CMP #TIME_TO_SHOW ; | just go to normal walking code
BCS JUMP_SPRITE ; /
INC $1602,x
INC $1602,x
LDA RAM_ThrowTimer,x ; \ throw hammer if it's time
BNE NO_RESET ; |
LDY $C2,x ; |
LDA TIME_TILL_THROW,y ; |
STA RAM_ThrowTimer,x ; |
NO_RESET CMP #$01 ; |
BNE JUMP_SPRITE ; |
LDA $C2,x ; |
EOR #$01 ; |
STA $C2,x ; |
JSR SUB_HAMMER_THROW ; /
JUMP_SPRITE LDA JUMP_TIMER,x
CMP #$40 ; | just go to normal walking code
BCS WALK_SPRITE ; /
LDA $1602,x ; \ lock image while jumping
ORA #$01 ; |
STA $1602,x ; /
INC $1540,x ; we didn't move the sprite this frame, so we don't want a decrement
; STZ $B6,x ; stop sprite from moving
LDA JUMP_TIMER,x
CMP #$38
BNE NO_JUMP2
LDA #$00 ; \ y speed (formerly B0)
STA $AA,x ; /
BRA APPLY_SPEED
NO_JUMP2 CMP #$00
BNE APPLY_SPEED
LDA #$FE
STA JUMP_TIMER,x
BRA APPLY_SPEED
WALK_SPRITE LDA $151C,x ; \
TAY ; |
LDA $1540,x ; |
BEQ CHANGE_SPEED ; |
LDA X_SPEED,y ; | set x speed
STA $B6,x ; /
BRA APPLY_SPEED
CHANGE_SPEED LDA TIME_IN_POS,y ;A:0001 X:0007 Y:0000 D:0000 DB:01 S:01F5 P:envMXdiZCHC:0654 VC:057 00 FL:24235
STA $1540,x ;A:0020 X:0007 Y:0000 D:0000 DB:01 S:01F5 P:envMXdizCHC:0686 VC:057 00 FL:24235
LDA $151C,x
INC A
AND #$03
STA $151C,x
APPLY_SPEED LDA $1588,x ; push ground status so we can compare later
PHA ;
JSL $01802A ; update position based on speed values
LDA $1588,x ; if on the ground now...
AND #04 ;
BEQ IN_AIR ;
PLA ; ...and not on the ground before
AND #04 ;
BNE CHECK_TOUCH ;
LDA #TIME_TO_LOCK ; \ shake ground
STA $1887 ; /
LDA #$09 ; \ play sound effect
STA $1DFC ; /
LDA $77
AND #$04
BEQ CHECK_TOUCH
LDA #TIME_TO_LOCK ; set timer to freeze mario
STA $18BD
BRA CHECK_TOUCH
IN_AIR PLA
CHECK_TOUCH LDA $1588,x ; \ if hammer bro is touching the side of an object...
AND #$03 ; |
BEQ DONT_CHANGE_DIR ; |
LDA $151C,x
INC A
AND #$03
STA $151C,x
DONT_CHANGE_DIR JSL $018032 ; interact with other sprites
JSL $01A7DC ; check for mario/hammer bro contact
NO_CONTACT RTS ; return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; hammer routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
X_OFFSET dcb $0C,$F4
X_OFFSET2 dcb $00,$FF
SUB_HAMMER_THROW LDA $15A0,x ; \ no egg if off screen
ORA $186C,x ; |
ORA $15D0,x ; |
BNE NO_CONTACT ; /
JSL $02A9DE ; \ get an index to an unused sprite slot, return if all slots full
BMI RETURN67 ; / after: Y has index of sprite being generated
LDA #$37 ; \ sound effect
STA $1DF9 ; /
LDA #$01 ; \ set sprite status for new sprite
STA $14C8,y ; /
PHX
LDA NEW_SPRITE_NUM,x
INC A
TYX
STA NEW_SPRITE_NUM,x
PLX
PHY
LDA $157C,x
TAY
LDA $E4,x ; \ set x position for new sprite
CLC ; |
ADC X_OFFSET,y ; |
PLY ; |
STA $00E4,y ; |
PHY ; |
LDA $157C,x ; |
TAY ; |
LDA $14E0,x ; |
ADC X_OFFSET2,y ; |
PLY ; |
STA $14E0,y ; /
LDA $D8,x ; \ set y position for new sprite
SEC ; | (y position of generator - 1)
SBC #$0E ; |
STA $00D8,y ; |
LDA $14D4,x ; |
SBC #$00 ; |
STA $14D4,y ; /
PHX ; \ before: X must have index of sprite being generated
TYX ; | routine clears *all* old sprite values...
JSL $07F7D2 ; | ...and loads in new values for the 6 main sprite tables
JSL $0187A7 ; | get table values for custom sprite
LDA #$08 ; |
STA EXTRA_BITS,x ; |
PLX ; /
LDA $157C,x
STA $157C,y
RETURN67 RTS ; return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; graphics routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TILEMAP dcb $A6,$A9,$E0,$E1,$A6,$A9,$E3,$E4,$A6,$A7,$E0,$E1,$A6,$A7,$E3,$E4
dcb $A6,$A9,$E0,$E1,$A6,$A9,$E3,$E4,$A6,$A7,$E0,$E1,$A6,$A7,$E3,$E4
HORIZ_DISP dcb $FC,$04,$FC,$04,$FC,$04,$FC,$04,$FC,$04,$FC,$04,$FC,$04,$FC,$04
dcb $04,$FC,$04,$FC,$04,$FC,$04,$FC,$04,$FC,$04,$FC,$04,$FC,$04,$FC
VERT_DISP dcb $F0,$F0,$00,$00,$F0,$F0,$00,$00,$F0,$F0,$00,$00,$F0,$F0,$00,$00
dcb $F0,$F0,$00,$00,$F0,$F0,$00,$00,$F0,$F0,$00,$00,$F0,$F0,$00,$00
PROPERTIES dcb $40,$00 ;xyppccct format
HAMMER_TILE = $A2
SUB_GFX JSR GET_DRAW_INFO ; after: Y = index to sprite tile map ($300)
; $00 = sprite x position relative to screen boarder
; $01 = sprite y position relative to screen boarder
LDA $1602,x ; \
ASL A ; | $03 = index to frame start (frame to show * 2 tile per frame)
ASL A
STA $03 ; /
LDA $157C,x ; \ $02 = sprite direction
STA $02 ; /
BNE NO_ADD
LDA $03
CLC
ADC #$10
STA $03
NO_ADD PHX ; push sprite index
LDX #$03 ; loop counter = (number of tiles per frame) - 1
LOOP_START PHX ; push current tile number
TXA ; \ X = index to horizontal displacement
ORA $03 ; / get index of tile (index to first tile of frame + current tile number)
FACING_LEFT TAX ; \
LDA $00 ; \ tile x position = sprite x location ($00)
CLC ; |
ADC HORIZ_DISP,x ; |
STA $0300,y ; /
LDA $01 ; \ tile y position = sprite y location ($01) + tile displacement
CLC ; |
ADC VERT_DISP,x ; |
STA $0301,y ; /
LDA TILEMAP,x ; \ store tile
STA $0302,y ; /
LDX $02 ; \
LDA PROPERTIES,x ; | get tile properties using sprite direction
LDX $15E9 ; |
ORA $15F6,x ; | get palette info
ORA $64 ; | put in level properties
STA $0303,y ; / store tile properties
PLX ; \ pull, X = current tile of the frame we're drawing
INY ; | increase index to sprite tile map ($300)...
INY ; | ...we wrote 1 16x16 tile...
INY ; | ...sprite OAM is 8x8...
INY ; | ...so increment 4 times
DEX ; | go to next tile of frame and loop
BPL LOOP_START ; /
PLX ; pull, X = sprite index
LDA RAM_ThrowTimer,x
CMP #$02
BCC NO_SHOW_HAMMER
CMP #30
BCS NO_SHOW_HAMMER
LDA $1602,x
CMP #$02
BCS SHOW_HAMMER_TOO
NO_SHOW_HAMMER LDY #$02 ; \ 02, because we didn't write to 460 yet
LDA #$03 ; | A = number of tiles drawn - 1
JSL $01B7B3 ; / don't draw if offscreen
RTS ; return
HAMMER_OFFSET dcb $F4,$0C
SHOW_HAMMER_TOO PHX
LDA $00
LDX $02
CLC
ADC HAMMER_OFFSET,x
STA $0300,y
LDA $01 ; \ tile y position = sprite y location ($01) + tile displacement
CLC ; |
ADC #$E8 ; |
STA $0301,y ; /
LDA #HAMMER_TILE ; \ store tile
STA $0302,y ; /
LDA #$03 ; the hammer palette is set to 09; use second gfx page
CPX #$00
BNE NO_FLIP_HAMMER
ORA #$40
NO_FLIP_HAMMER ORA $64 ; \ put in level properties
STA $0303,y ; / store tile properties
PLX
INY ; | increase index to sprite tile map ($300)...
INY ; | ...we wrote 1 16x16 tile...
INY ; | ...sprite OAM is 8x8...
INY ; | ...so increment 4 times
LDY #$02 ; \ 02, because we didn't write to 460 yet
LDA #$04 ; | A = number of tiles drawn - 1
JSL $01B7B3 ; / don't draw if offscreen
RTS ; return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; routines below can be shared by all sprites. they are ripped from original
; SMW and poorly documented
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; $B760 - graphics routine helper - shared
; sets off screen flags and sets index to OAM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;org $03B75C
TABLE1 dcb $0C,$1C
TABLE2 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 TABLE1,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 TABLE2,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 ; /
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; $B817 - horizontal mario/sprite check - shared
; Y = 1 if mario left of sprite??
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;org $03B817 ; Y = 1 if contact
SUB_GET_DIR LDY #$00 ;A:25D0 X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizCHC:1020 VC:097 00 FL:31642
LDA $94 ;A:25D0 X:0006 Y:0000 D:0000 DB:03 S:01ED P:envMXdiZCHC:1036 VC:097 00 FL:31642
SEC ;A:25F0 X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizCHC:1060 VC:097 00 FL:31642
SBC $E4,x ;A:25F0 X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizCHC:1074 VC:097 00 FL:31642
STA $0F ;A:25F4 X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizcHC:1104 VC:097 00 FL:31642
LDA $95 ;A:25F4 X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizcHC:1128 VC:097 00 FL:31642
SBC $14E0,x ;A:2500 X:0006 Y:0000 D:0000 DB:03 S:01ED P:envMXdiZcHC:1152 VC:097 00 FL:31642
BPL LABEL16 ;A:25FF X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizcHC:1184 VC:097 00 FL:31642
INY ;A:25FF X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizcHC:1200 VC:097 00 FL:31642
LABEL16 RTS ;A:25FF X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:1214 VC:097 00 FL:31642
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; $B85D - off screen processing code - shared
; sprites enter at different points
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;org $03B83B
TABLE3 dcb $40,$B0
TABLE6 dcb $01,$FF
TABLE4 dcb $30,$C0,$A0,$80,$A0,$40,$60,$B0
TABLE5 dcb $01,$FF,$01,$FF,$01,$00,$01,$FF
SUB_OFF_SCREEN_X0 LDA #$06 ; \ entry point of routine determines value of $03
BRA STORE_03 ; |
SUB_OFF_SCREEN_X1 LDA #$04 ; |
BRA STORE_03 ; |
SUB_OFF_SCREEN_X2 LDA #$02 ; |
STORE_03 STA $03 ; |
BRA START_SUB ; |
SUB_OFF_SCREEN_X3 STZ $03 ; /
START_SUB JSR SUB_IS_OFF_SCREEN ; \ if sprite is not off screen, return
BEQ RETURN_2 ; /
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_2 ; /
LDA $13 ; \
AND #$01 ; |
ORA $03 ; |
STA $01 ; |
TAY ; /
LDA $1A ;x boundry ;A:0101 X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:0256 VC:090 00 FL:16953
CLC ;A:0100 X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdiZcHC:0280 VC:090 00 FL:16953
ADC TABLE4,y ;A:0100 X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdiZcHC:0294 VC:090 00 FL:16953
ROL $00 ;A:01C0 X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizcHC:0326 VC:090 00 FL:16953
CMP $E4,x ;x pos ;A:01C0 X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizcHC:0364 VC:090 00 FL:16953
PHP ;A:01C0 X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizCHC:0394 VC:090 00 FL:16953
LDA $1B ;x boundry hi ;A:01C0 X:0006 Y:0001 D:0000 DB:03 S:01EC P:eNvMXdizCHC:0416 VC:090 00 FL:16953
LSR $00 ;A:0100 X:0006 Y:0001 D:0000 DB:03 S:01EC P:envMXdiZCHC:0440 VC:090 00 FL:16953
ADC TABLE5,y ;A:0100 X:0006 Y:0001 D:0000 DB:03 S:01EC P:envMXdizcHC:0478 VC:090 00 FL:16953
PLP ;A:01FF X:0006 Y:0001 D:0000 DB:03 S:01EC P:eNvMXdizcHC:0510 VC:090 00 FL:16953
SBC $14E0,x ;x pos high ;A:01FF X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizCHC:0538 VC:090 00 FL:16953
STA $00 ;A:01FE X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizCHC:0570 VC:090 00 FL:16953
LSR $01 ;A:01FE X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizCHC:0594 VC:090 00 FL:16953
BCC LABEL20 ;A:01FE X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdiZCHC:0632 VC:090 00 FL:16953
EOR #$80 ;A:01FE X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdiZCHC:0648 VC:090 00 FL:16953
STA $00 ;A:017E X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizCHC:0664 VC:090 00 FL:16953
LABEL20 LDA $00 ;A:017E X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizCHC:0688 VC:090 00 FL:16953
BPL RETURN_2 ;A:017E X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizCHC:0712 VC:090 00 FL:16953
ERASE_SPRITE LDA $14C8,x ; \ if sprite status < 8, permanently erase sprite
CMP #$08 ; |
BCC KILL_SPRITE ; /
LDY $161A,x ;A:FF08 X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdiZCHC:0140 VC:071 00 FL:21152
CPY #$FF ;A:FF08 X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizCHC:0172 VC:071 00 FL:21152
BEQ KILL_SPRITE ;A:FF08 X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:0188 VC:071 00 FL:21152
LDA #$00 ; \ mark sprite to come back A:FF08 X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:0204 VC:071 00 FL:21152
STA $1938,y ; / A:FF00 X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdiZcHC:0220 VC:071 00 FL:21152
KILL_SPRITE STZ $14C8,x ; erase sprite
RETURN_2 RTS ; return
VERTICAL_LEVEL LDA $167A,x ; \ if "process offscreen" flag is set, return
AND #$04 ; |
BNE RETURN_2 ; /
LDA $13 ; \ only handle every other frame??
LSR A ; |
BCS RETURN_2 ; /
AND #$01 ;A:0227 X:0006 Y:00EC D:0000 DB:03 S:01ED P:envMXdizcHC:0228 VC:112 00 FL:1142
STA $01 ;A:0201 X:0006 Y:00EC D:0000 DB:03 S:01ED P:envMXdizcHC:0244 VC:112 00 FL:1142
TAY ;A:0201 X:0006 Y:00EC D:0000 DB:03 S:01ED P:envMXdizcHC:0268 VC:112 00 FL:1142
LDA $1C ;A:0201 X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:0282 VC:112 00 FL:1142
CLC ;A:02BD X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizcHC:0306 VC:112 00 FL:1142
ADC TABLE3,y ;A:02BD X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizcHC:0320 VC:112 00 FL:1142
ROL $00 ;A:026D X:0006 Y:0001 D:0000 DB:03 S:01ED P:enVMXdizCHC:0352 VC:112 00 FL:1142
CMP $D8,x ;A:026D X:0006 Y:0001 D:0000 DB:03 S:01ED P:enVMXdizCHC:0390 VC:112 00 FL:1142
PHP ;A:026D X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNVMXdizcHC:0420 VC:112 00 FL:1142
LDA.W $001D ;A:026D X:0006 Y:0001 D:0000 DB:03 S:01EC P:eNVMXdizcHC:0442 VC:112 00 FL:1142
LSR $00 ;A:0200 X:0006 Y:0001 D:0000 DB:03 S:01EC P:enVMXdiZcHC:0474 VC:112 00 FL:1142
ADC TABLE6,y ;A:0200 X:0006 Y:0001 D:0000 DB:03 S:01EC P:enVMXdizCHC:0512 VC:112 00 FL:1142
PLP ;A:0200 X:0006 Y:0001 D:0000 DB:03 S:01EC P:envMXdiZCHC:0544 VC:112 00 FL:1142
SBC $14D4,x ;A:0200 X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNVMXdizcHC:0572 VC:112 00 FL:1142
STA $00 ;A:02FF X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizcHC:0604 VC:112 00 FL:1142
LDY $01 ;A:02FF X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizcHC:0628 VC:112 00 FL:1142
BEQ LABEL22 ;A:02FF X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:0652 VC:112 00 FL:1142
EOR #$80 ;A:02FF X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:0668 VC:112 00 FL:1142
STA $00 ;A:027F X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:0684 VC:112 00 FL:1142
LABEL22 LDA $00 ;A:027F X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:0708 VC:112 00 FL:1142
BPL RETURN_2 ;A:027F X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:0732 VC:112 00 FL:1142
BMI ERASE_SPRITE ;A:0280 X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizCHC:0170 VC:064 00 FL:1195
SUB_IS_OFF_SCREEN LDA $15A0,x ; \ if sprite is on screen, accumulator = 0
ORA $186C,x ; |
RTS ; / return
NEW_SPRITE_NUM = $7FAB9E ;0C bytes custom sprite number
JUMP_TIMER = $163E
RAM_ThrowTimer = $1504
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; sprite data
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIME_TO_LOCK = $28
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; init JSL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dcb "INIT"
JSR SUB_GET_DIR
TYA
STA $157C,x
LDA $1588,x
ORA #$04
STA $1588,x
STZ $1602,x
TXA
AND #$03
ASL A
ASL A
ASL A
ASL A
PHA
ASL A
ADC #$32
STA RAM_ThrowTimer,x
PLA
ADC #$FE
STA JUMP_TIMER,x
RTL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; main sprite JSL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dcb "MAIN"
HAMMER_BRO_JSL PHB ; \
PHK ; | main sprite function, just calls local subroutine
PLB ; |
JSR DecrementTimers
JSR START_HB_CODE ; |
PLB ; |
RTL ; /
DecrementTimers:
LDA $14C8,x
CMP #$08
BNE DoneDec
LDA $9D
BNE DoneDec
LDA RAM_ThrowTimer,x
BEQ DoneDec
DEC RAM_ThrowTimer,x
DoneDec:
RTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; main sprite routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIME_TO_SHOW = $22 ;time to display the boomerang before it is thrown
X_SPEED dcb $00,$FC,$00,$04 ;rest at bottom, moving up, rest at top, moving down
TIME_IN_POS dcb $48,$10,$48,$10 ;moving up, rest at top, moving down, rest at bottom
TIME_TILL_THROW dcb $F7,$D7
STAR INC RAM_ThrowTimer,x
RETURN RTS
START_HB_CODE JSR SUB_GFX ; draw hammer bro gfx
LDA $14C8,x ; \ if hammer bro status != 8...
CMP #$02 ; } ... not (killed with spin jump [4] or star[2])
BEQ STAR
CMP #$08
BNE RETURN ; / ... return
LDA $9D ; \ if sprites locked...
BNE RETURN ; / ... return
JSR SUB_GET_DIR ; \ always face mario
TYA ; |
STA $157C,x ; /
JSR SUB_OFF_SCREEN_X3 ; only process hammer bro while on screen
INC $1570,x ; increment number of frames hammer bro has been on screen
LDA $1570,x ; \ calculate which frame to show:
LSR A ; |
LSR A ; |
LSR A ; |
LSR A ; |
AND #$01 ; | update every 16 cycles if normal
STA $1602,x ; / write frame to show
LDA RAM_ThrowTimer,x ; \ if time until spit >= $10
CMP #TIME_TO_SHOW ; | just go to normal walking code
BCS JUMP_SPRITE ; /
INC $1602,x
INC $1602,x
LDA RAM_ThrowTimer,x ; \ throw hammer if it's time
BNE NO_RESET ; |
LDY $C2,x ; |
LDA TIME_TILL_THROW,y ; |
STA RAM_ThrowTimer,x ; |
NO_RESET CMP #$01 ; |
BNE JUMP_SPRITE ; |
LDA $C2,x ; |
EOR #$01 ; |
STA $C2,x ; |
JSR SUB_HAMMER_THROW ; /
JUMP_SPRITE LDA JUMP_TIMER,x
CMP #$40 ; | just go to normal walking code
BCS WALK_SPRITE ; /
LDA $1602,x ; \ lock image while jumping
ORA #$01 ; |
STA $1602,x ; /
INC $1540,x ; we didn't move the sprite this frame, so we don't want a decrement
; STZ $B6,x ; stop sprite from moving
LDA JUMP_TIMER,x
CMP #$38
BNE NO_JUMP2
LDA #$00 ; \ y speed (formerly B0)
STA $AA,x ; /
BRA APPLY_SPEED
NO_JUMP2 CMP #$00
BNE APPLY_SPEED
LDA #$FE
STA JUMP_TIMER,x
BRA APPLY_SPEED
WALK_SPRITE LDA $151C,x ; \
TAY ; |
LDA $1540,x ; |
BEQ CHANGE_SPEED ; |
LDA X_SPEED,y ; | set x speed
STA $B6,x ; /
BRA APPLY_SPEED
CHANGE_SPEED LDA TIME_IN_POS,y ;A:0001 X:0007 Y:0000 D:0000 DB:01 S:01F5 P:envMXdiZCHC:0654 VC:057 00 FL:24235
STA $1540,x ;A:0020 X:0007 Y:0000 D:0000 DB:01 S:01F5 P:envMXdizCHC:0686 VC:057 00 FL:24235
LDA $151C,x
INC A
AND #$03
STA $151C,x
APPLY_SPEED LDA $1588,x ; push ground status so we can compare later
PHA ;
JSL $01802A ; update position based on speed values
LDA $1588,x ; if on the ground now...
AND #04 ;
BEQ IN_AIR ;
PLA ; ...and not on the ground before
AND #04 ;
BNE CHECK_TOUCH ;
LDA #TIME_TO_LOCK ; \ shake ground
STA $1887 ; /
LDA #$09 ; \ play sound effect
STA $1DFC ; /
LDA $77
AND #$04
BEQ CHECK_TOUCH
LDA #TIME_TO_LOCK ; set timer to freeze mario
STA $18BD
BRA CHECK_TOUCH
IN_AIR PLA
CHECK_TOUCH LDA $1588,x ; \ if hammer bro is touching the side of an object...
AND #$03 ; |
BEQ DONT_CHANGE_DIR ; |
LDA $151C,x
INC A
AND #$03
STA $151C,x
DONT_CHANGE_DIR JSL $018032 ; interact with other sprites
JSL $01A7DC ; check for mario/hammer bro contact
NO_CONTACT RTS ; return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; hammer routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
X_OFFSET dcb $0C,$F4
X_OFFSET2 dcb $00,$FF
SUB_HAMMER_THROW LDA $15A0,x ; \ no egg if off screen
ORA $186C,x ; |
ORA $15D0,x ; |
BNE NO_CONTACT ; /
JSL $02A9DE ; \ get an index to an unused sprite slot, return if all slots full
BMI RETURN67 ; / after: Y has index of sprite being generated
LDA #$37 ; \ sound effect
STA $1DF9 ; /
LDA #$01 ; \ set sprite status for new sprite
STA $14C8,y ; /
PHX
LDA NEW_SPRITE_NUM,x
INC A
TYX
STA NEW_SPRITE_NUM,x
PLX
PHY
LDA $157C,x
TAY
LDA $E4,x ; \ set x position for new sprite
CLC ; |
ADC X_OFFSET,y ; |
PLY ; |
STA $00E4,y ; |
PHY ; |
LDA $157C,x ; |
TAY ; |
LDA $14E0,x ; |
ADC X_OFFSET2,y ; |
PLY ; |
STA $14E0,y ; /
LDA $D8,x ; \ set y position for new sprite
SEC ; | (y position of generator - 1)
SBC #$0E ; |
STA $00D8,y ; |
LDA $14D4,x ; |
SBC #$00 ; |
STA $14D4,y ; /
PHX ; \ before: X must have index of sprite being generated
TYX ; | routine clears *all* old sprite values...
JSL $07F7D2 ; | ...and loads in new values for the 6 main sprite tables
JSL $0187A7 ; | get table values for custom sprite
LDA #$08 ; |
STA EXTRA_BITS,x ; |
PLX ; /
LDA $157C,x
STA $157C,y
RETURN67 RTS ; return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; graphics routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TILEMAP dcb $A6,$A9,$E0,$E1,$A6,$A9,$E3,$E4,$A6,$A7,$E0,$E1,$A6,$A7,$E3,$E4
dcb $A6,$A9,$E0,$E1,$A6,$A9,$E3,$E4,$A6,$A7,$E0,$E1,$A6,$A7,$E3,$E4
HORIZ_DISP dcb $FC,$04,$FC,$04,$FC,$04,$FC,$04,$FC,$04,$FC,$04,$FC,$04,$FC,$04
dcb $04,$FC,$04,$FC,$04,$FC,$04,$FC,$04,$FC,$04,$FC,$04,$FC,$04,$FC
VERT_DISP dcb $F0,$F0,$00,$00,$F0,$F0,$00,$00,$F0,$F0,$00,$00,$F0,$F0,$00,$00
dcb $F0,$F0,$00,$00,$F0,$F0,$00,$00,$F0,$F0,$00,$00,$F0,$F0,$00,$00
PROPERTIES dcb $40,$00 ;xyppccct format
HAMMER_TILE = $A2
SUB_GFX JSR GET_DRAW_INFO ; after: Y = index to sprite tile map ($300)
; $00 = sprite x position relative to screen boarder
; $01 = sprite y position relative to screen boarder
LDA $1602,x ; \
ASL A ; | $03 = index to frame start (frame to show * 2 tile per frame)
ASL A
STA $03 ; /
LDA $157C,x ; \ $02 = sprite direction
STA $02 ; /
BNE NO_ADD
LDA $03
CLC
ADC #$10
STA $03
NO_ADD PHX ; push sprite index
LDX #$03 ; loop counter = (number of tiles per frame) - 1
LOOP_START PHX ; push current tile number
TXA ; \ X = index to horizontal displacement
ORA $03 ; / get index of tile (index to first tile of frame + current tile number)
FACING_LEFT TAX ; \
LDA $00 ; \ tile x position = sprite x location ($00)
CLC ; |
ADC HORIZ_DISP,x ; |
STA $0300,y ; /
LDA $01 ; \ tile y position = sprite y location ($01) + tile displacement
CLC ; |
ADC VERT_DISP,x ; |
STA $0301,y ; /
LDA TILEMAP,x ; \ store tile
STA $0302,y ; /
LDX $02 ; \
LDA PROPERTIES,x ; | get tile properties using sprite direction
LDX $15E9 ; |
ORA $15F6,x ; | get palette info
ORA $64 ; | put in level properties
STA $0303,y ; / store tile properties
PLX ; \ pull, X = current tile of the frame we're drawing
INY ; | increase index to sprite tile map ($300)...
INY ; | ...we wrote 1 16x16 tile...
INY ; | ...sprite OAM is 8x8...
INY ; | ...so increment 4 times
DEX ; | go to next tile of frame and loop
BPL LOOP_START ; /
PLX ; pull, X = sprite index
LDA RAM_ThrowTimer,x
CMP #$02
BCC NO_SHOW_HAMMER
CMP #30
BCS NO_SHOW_HAMMER
LDA $1602,x
CMP #$02
BCS SHOW_HAMMER_TOO
NO_SHOW_HAMMER LDY #$02 ; \ 02, because we didn't write to 460 yet
LDA #$03 ; | A = number of tiles drawn - 1
JSL $01B7B3 ; / don't draw if offscreen
RTS ; return
HAMMER_OFFSET dcb $F4,$0C
SHOW_HAMMER_TOO PHX
LDA $00
LDX $02
CLC
ADC HAMMER_OFFSET,x
STA $0300,y
LDA $01 ; \ tile y position = sprite y location ($01) + tile displacement
CLC ; |
ADC #$E8 ; |
STA $0301,y ; /
LDA #HAMMER_TILE ; \ store tile
STA $0302,y ; /
LDA #$03 ; the hammer palette is set to 09; use second gfx page
CPX #$00
BNE NO_FLIP_HAMMER
ORA #$40
NO_FLIP_HAMMER ORA $64 ; \ put in level properties
STA $0303,y ; / store tile properties
PLX
INY ; | increase index to sprite tile map ($300)...
INY ; | ...we wrote 1 16x16 tile...
INY ; | ...sprite OAM is 8x8...
INY ; | ...so increment 4 times
LDY #$02 ; \ 02, because we didn't write to 460 yet
LDA #$04 ; | A = number of tiles drawn - 1
JSL $01B7B3 ; / don't draw if offscreen
RTS ; return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; routines below can be shared by all sprites. they are ripped from original
; SMW and poorly documented
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; $B760 - graphics routine helper - shared
; sets off screen flags and sets index to OAM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;org $03B75C
TABLE1 dcb $0C,$1C
TABLE2 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 TABLE1,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 TABLE2,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 ; /
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; $B817 - horizontal mario/sprite check - shared
; Y = 1 if mario left of sprite??
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;org $03B817 ; Y = 1 if contact
SUB_GET_DIR LDY #$00 ;A:25D0 X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizCHC:1020 VC:097 00 FL:31642
LDA $94 ;A:25D0 X:0006 Y:0000 D:0000 DB:03 S:01ED P:envMXdiZCHC:1036 VC:097 00 FL:31642
SEC ;A:25F0 X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizCHC:1060 VC:097 00 FL:31642
SBC $E4,x ;A:25F0 X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizCHC:1074 VC:097 00 FL:31642
STA $0F ;A:25F4 X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizcHC:1104 VC:097 00 FL:31642
LDA $95 ;A:25F4 X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizcHC:1128 VC:097 00 FL:31642
SBC $14E0,x ;A:2500 X:0006 Y:0000 D:0000 DB:03 S:01ED P:envMXdiZcHC:1152 VC:097 00 FL:31642
BPL LABEL16 ;A:25FF X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizcHC:1184 VC:097 00 FL:31642
INY ;A:25FF X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizcHC:1200 VC:097 00 FL:31642
LABEL16 RTS ;A:25FF X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:1214 VC:097 00 FL:31642
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; $B85D - off screen processing code - shared
; sprites enter at different points
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;org $03B83B
TABLE3 dcb $40,$B0
TABLE6 dcb $01,$FF
TABLE4 dcb $30,$C0,$A0,$80,$A0,$40,$60,$B0
TABLE5 dcb $01,$FF,$01,$FF,$01,$00,$01,$FF
SUB_OFF_SCREEN_X0 LDA #$06 ; \ entry point of routine determines value of $03
BRA STORE_03 ; |
SUB_OFF_SCREEN_X1 LDA #$04 ; |
BRA STORE_03 ; |
SUB_OFF_SCREEN_X2 LDA #$02 ; |
STORE_03 STA $03 ; |
BRA START_SUB ; |
SUB_OFF_SCREEN_X3 STZ $03 ; /
START_SUB JSR SUB_IS_OFF_SCREEN ; \ if sprite is not off screen, return
BEQ RETURN_2 ; /
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_2 ; /
LDA $13 ; \
AND #$01 ; |
ORA $03 ; |
STA $01 ; |
TAY ; /
LDA $1A ;x boundry ;A:0101 X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:0256 VC:090 00 FL:16953
CLC ;A:0100 X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdiZcHC:0280 VC:090 00 FL:16953
ADC TABLE4,y ;A:0100 X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdiZcHC:0294 VC:090 00 FL:16953
ROL $00 ;A:01C0 X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizcHC:0326 VC:090 00 FL:16953
CMP $E4,x ;x pos ;A:01C0 X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizcHC:0364 VC:090 00 FL:16953
PHP ;A:01C0 X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizCHC:0394 VC:090 00 FL:16953
LDA $1B ;x boundry hi ;A:01C0 X:0006 Y:0001 D:0000 DB:03 S:01EC P:eNvMXdizCHC:0416 VC:090 00 FL:16953
LSR $00 ;A:0100 X:0006 Y:0001 D:0000 DB:03 S:01EC P:envMXdiZCHC:0440 VC:090 00 FL:16953
ADC TABLE5,y ;A:0100 X:0006 Y:0001 D:0000 DB:03 S:01EC P:envMXdizcHC:0478 VC:090 00 FL:16953
PLP ;A:01FF X:0006 Y:0001 D:0000 DB:03 S:01EC P:eNvMXdizcHC:0510 VC:090 00 FL:16953
SBC $14E0,x ;x pos high ;A:01FF X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizCHC:0538 VC:090 00 FL:16953
STA $00 ;A:01FE X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizCHC:0570 VC:090 00 FL:16953
LSR $01 ;A:01FE X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizCHC:0594 VC:090 00 FL:16953
BCC LABEL20 ;A:01FE X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdiZCHC:0632 VC:090 00 FL:16953
EOR #$80 ;A:01FE X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdiZCHC:0648 VC:090 00 FL:16953
STA $00 ;A:017E X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizCHC:0664 VC:090 00 FL:16953
LABEL20 LDA $00 ;A:017E X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizCHC:0688 VC:090 00 FL:16953
BPL RETURN_2 ;A:017E X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizCHC:0712 VC:090 00 FL:16953
ERASE_SPRITE LDA $14C8,x ; \ if sprite status < 8, permanently erase sprite
CMP #$08 ; |
BCC KILL_SPRITE ; /
LDY $161A,x ;A:FF08 X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdiZCHC:0140 VC:071 00 FL:21152
CPY #$FF ;A:FF08 X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizCHC:0172 VC:071 00 FL:21152
BEQ KILL_SPRITE ;A:FF08 X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:0188 VC:071 00 FL:21152
LDA #$00 ; \ mark sprite to come back A:FF08 X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:0204 VC:071 00 FL:21152
STA $1938,y ; / A:FF00 X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdiZcHC:0220 VC:071 00 FL:21152
KILL_SPRITE STZ $14C8,x ; erase sprite
RETURN_2 RTS ; return
VERTICAL_LEVEL LDA $167A,x ; \ if "process offscreen" flag is set, return
AND #$04 ; |
BNE RETURN_2 ; /
LDA $13 ; \ only handle every other frame??
LSR A ; |
BCS RETURN_2 ; /
AND #$01 ;A:0227 X:0006 Y:00EC D:0000 DB:03 S:01ED P:envMXdizcHC:0228 VC:112 00 FL:1142
STA $01 ;A:0201 X:0006 Y:00EC D:0000 DB:03 S:01ED P:envMXdizcHC:0244 VC:112 00 FL:1142
TAY ;A:0201 X:0006 Y:00EC D:0000 DB:03 S:01ED P:envMXdizcHC:0268 VC:112 00 FL:1142
LDA $1C ;A:0201 X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:0282 VC:112 00 FL:1142
CLC ;A:02BD X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizcHC:0306 VC:112 00 FL:1142
ADC TABLE3,y ;A:02BD X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizcHC:0320 VC:112 00 FL:1142
ROL $00 ;A:026D X:0006 Y:0001 D:0000 DB:03 S:01ED P:enVMXdizCHC:0352 VC:112 00 FL:1142
CMP $D8,x ;A:026D X:0006 Y:0001 D:0000 DB:03 S:01ED P:enVMXdizCHC:0390 VC:112 00 FL:1142
PHP ;A:026D X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNVMXdizcHC:0420 VC:112 00 FL:1142
LDA.W $001D ;A:026D X:0006 Y:0001 D:0000 DB:03 S:01EC P:eNVMXdizcHC:0442 VC:112 00 FL:1142
LSR $00 ;A:0200 X:0006 Y:0001 D:0000 DB:03 S:01EC P:enVMXdiZcHC:0474 VC:112 00 FL:1142
ADC TABLE6,y ;A:0200 X:0006 Y:0001 D:0000 DB:03 S:01EC P:enVMXdizCHC:0512 VC:112 00 FL:1142
PLP ;A:0200 X:0006 Y:0001 D:0000 DB:03 S:01EC P:envMXdiZCHC:0544 VC:112 00 FL:1142
SBC $14D4,x ;A:0200 X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNVMXdizcHC:0572 VC:112 00 FL:1142
STA $00 ;A:02FF X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizcHC:0604 VC:112 00 FL:1142
LDY $01 ;A:02FF X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizcHC:0628 VC:112 00 FL:1142
BEQ LABEL22 ;A:02FF X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:0652 VC:112 00 FL:1142
EOR #$80 ;A:02FF X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:0668 VC:112 00 FL:1142
STA $00 ;A:027F X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:0684 VC:112 00 FL:1142
LABEL22 LDA $00 ;A:027F X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:0708 VC:112 00 FL:1142
BPL RETURN_2 ;A:027F X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:0732 VC:112 00 FL:1142
BMI ERASE_SPRITE ;A:0280 X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizCHC:0170 VC:064 00 FL:1195
SUB_IS_OFF_SCREEN LDA $15A0,x ; \ if sprite is on screen, accumulator = 0
ORA $186C,x ; |
RTS ; / return

Zitat von SMW MARIO:
Wer von euch benutzt LM 1.80? ich hab nähmlich folgendes problem: ich wollte mich an ExGFX versuchen hat auch alles geklappt nur mit dem background nicht. im tutorial was ich gesehen hab hatte der LM 1.7 und da musste man auf Change Background Map16 page gehen und dann die seite angeben wo der background im16x16 Tile Map Editor ist. also ab seite 12. ( hoffe das war jetzt verständlich). nun bei LM 1.8 heißt das Change Background Map16 bank... und da kann ich keine seiten anwählen. geht das auch anders oder muss ich den background selber machen?
?
Lade dir LM 1.82 runter. LM 1.80 ist veraltet. Der Author hatte aus Versehen einige Funktionen deaktiviert und vergessen, sie wieder zu aktivieren. Diese ist glaube ich eine davon.
-Das quadratische Rad neu erfinden-
Mit das quadratische Rad neu erfinden (englisch Reinventing the square wheel) bezeichnet man die Bereitstellung einer schlechten Lösung, wenn eine gute Lösung bereits existiert.
-Slowsort-
Slowsort (von engl. slow: langsam) ist ein langsamer, rekursiver Sortieralgorithmus, der nach dem Prinzip Vervielfache und kapituliere (engl. Multiply and surrender, eine Parodie auf Teile und herrsche) arbeitet.
Mit das quadratische Rad neu erfinden (englisch Reinventing the square wheel) bezeichnet man die Bereitstellung einer schlechten Lösung, wenn eine gute Lösung bereits existiert.
-Slowsort-
Slowsort (von engl. slow: langsam) ist ein langsamer, rekursiver Sortieralgorithmus, der nach dem Prinzip Vervielfache und kapituliere (engl. Multiply and surrender, eine Parodie auf Teile und herrsche) arbeitet.
Zitat von SMW MARIO:
?
Zitat von SMW MARIO:
Ich hab ein Problem: ich hab meine rom gepatcht damit ich custom music hören kann so weit so gut aber wenn ich jetzt in der Overworld etwas verändere und speicher dann kann ich die rom nicht mehr mit nem emu starten und zsnes sagt dann stall detected... wie kann ich das problem beheben?
?
mein problem hat sich erledigt. ich idiot hab doch tatsächlich ne extended rom gepatcht

