Allgemeine SMW Hacking Fragen

geschrieben am 10.06.2015 0:18:35
( Link )
Ich glaube, ich stell hier die so ziemlich einfachste Frage, die man eigentlich so stellen kann, aber wie stellt man in einem Vertikalem Level das horizontale Scrollen ab? Ich glaub, das ist seit 2 Jahren das erste verikale Level, was ich wieder mache...
Zitat von Robju am 22.11.2013:
ICH BRING EUCH ALLE UM!!
Zitat von Dominik am 07.08.2013:
Fick dich Rob, ich wusste dass das kommt!

anzeigen
MFG: Wieso binn ich als Ideot genannt?Das ist net nett.
Robbinn, ideot, Satzstellung, Grammatik.
MFGSchonn gut, schon gut, das mit "binn" und "Idoet" ist ein Typo.
RobDas e und i sind 4 tasten voneinander entfernt.
MFGschnelle Finger?
Rob Nein.
MFG *facepalm*
Rob Wenn man Idiot schreibt kommt man nichtmal in die Nähe eines "e" s
MFG Doch, warum hat man denn sonst zwei Finger?
Rob Das hat mir der ANzahl der Finger nichts zu tun.
MFG Ich meine Hände.
Bro ich hab 3 stück
Rob Hat auch kit der Anzahl der Händer nichts zu tun
MFG Und es hat mit der Anzahl der Hände zu tun.
Rob Nein.
MFG Ich schreibe doch mit beiden.
Rob YOU ARE AN IDIOT, AH HAHAHAHAHA HAAAAHAAA HAHAHAHAAAAA!

DIE KONFI
DIE andere KONFI
JJJAAAAAAAH
geschrieben am 10.06.2015 22:03:23
( Link )
Einfach den Sprite EF (Layer 2 Scroll S [...]) einfügen, so merkwürdig auch das klingen mag.

Tutorials: ExAnimation | YouTube: W4mp3 | Twitter: https://twitter.com/SMWW4mp3
geschrieben am 11.06.2015 0:13:09
( Link )
Hab's inzwischen auch anders gelöst, aber danke, das werde ich mir merken. Wirkt echt eigenartig.
Zitat von Robju am 22.11.2013:
ICH BRING EUCH ALLE UM!!
Zitat von Dominik am 07.08.2013:
Fick dich Rob, ich wusste dass das kommt!

anzeigen
MFG: Wieso binn ich als Ideot genannt?Das ist net nett.
Robbinn, ideot, Satzstellung, Grammatik.
MFGSchonn gut, schon gut, das mit "binn" und "Idoet" ist ein Typo.
RobDas e und i sind 4 tasten voneinander entfernt.
MFGschnelle Finger?
Rob Nein.
MFG *facepalm*
Rob Wenn man Idiot schreibt kommt man nichtmal in die Nähe eines "e" s
MFG Doch, warum hat man denn sonst zwei Finger?
Rob Das hat mir der ANzahl der Finger nichts zu tun.
MFG Ich meine Hände.
Bro ich hab 3 stück
Rob Hat auch kit der Anzahl der Händer nichts zu tun
MFG Und es hat mit der Anzahl der Hände zu tun.
Rob Nein.
MFG Ich schreibe doch mit beiden.
Rob YOU ARE AN IDIOT, AH HAHAHAHAHA HAAAAHAAA HAHAHAHAAAAA!

DIE KONFI
DIE andere KONFI
JJJAAAAAAAH
geschrieben am 26.06.2015 18:21:21
( Link )
Jo Guys, nach langer Zeit hat mich mal wieder die Lust zum Hacken gepackt und wollte endlich mal meinen kleinen Anfangshack zumindest teilweise vollenden, sodass es wenigstens eine spielbare Version gibt. Jedoch habe ich ein kleines Problem.
So dumm es auch klingen mag, aber die violetten Dreiecke (die, die es Mario ermöglichen an Wänden hochzulaufen) funktionieren nicht richtig. Habe extra drauf geachtet, dass unter den Dreiecken die Tile 1EB ist, dennoch funktionieren sie nicht.
Habe ich etwas übersehen?
Work in progress:
Super Mario- Just a little warmup

So, Titel wäre erledigt. Fehlt nurnoch der Hack.
geschrieben am 26.06.2015 19:51:45
( Link )
Was genau klappt denn nicht? So sagt das nicht viel aus.
Mein Hack: <!-- l --><a class="postlink-local" href="http://www.smwhacking.de/forum/viewtopic.php?f=21&t=1077">viewtopic.php?f=21&t=1077</a><!-- l -->
Mein Kanal: <!-- m --><a class="postlink" href="https://www.youtube.com/channel/UCvzukxSgP3DY7m8XCQ5KLBQ">https://www.youtube.com/channel/UCvzukx ... m8XCQ5KLBQ</a><!-- m -->
geschrieben am 26.06.2015 22:30:06
( Link )
Das einzige, was mir dazu einfallen könnte, ist, dass du vielleicht ne' Ledge oder irgendeinen anderen Block über 1EB gesetzt hast. Das Tile muss auf der obersten Schicht liegen.
Zitat von Robju am 22.11.2013:
ICH BRING EUCH ALLE UM!!
Zitat von Dominik am 07.08.2013:
Fick dich Rob, ich wusste dass das kommt!

anzeigen
MFG: Wieso binn ich als Ideot genannt?Das ist net nett.
Robbinn, ideot, Satzstellung, Grammatik.
MFGSchonn gut, schon gut, das mit "binn" und "Idoet" ist ein Typo.
RobDas e und i sind 4 tasten voneinander entfernt.
MFGschnelle Finger?
Rob Nein.
MFG *facepalm*
Rob Wenn man Idiot schreibt kommt man nichtmal in die Nähe eines "e" s
MFG Doch, warum hat man denn sonst zwei Finger?
Rob Das hat mir der ANzahl der Finger nichts zu tun.
MFG Ich meine Hände.
Bro ich hab 3 stück
Rob Hat auch kit der Anzahl der Händer nichts zu tun
MFG Und es hat mit der Anzahl der Hände zu tun.
Rob Nein.
MFG Ich schreibe doch mit beiden.
Rob YOU ARE AN IDIOT, AH HAHAHAHAHA HAAAAHAAA HAHAHAHAAAAA!

DIE KONFI
DIE andere KONFI
JJJAAAAAAAH
geschrieben am 27.06.2015 1:11:23
( Link )
Zitat
Was genau klappt denn nicht? So sagt das nicht viel aus.


Wenn ich auf das Dreieck zulaufe oder renne laufe ich nicht die Wand hoch, sondern laufe quasi in das Dreieck. Erst wenn ich im Rennen auf das Dreieck springe laufe ich die Wand hinauf. Also quasi wie als würde ich nicht 1EB als Tile darunter haben.

Zitat
Das einzige, was mir dazu einfallen könnte, ist, dass du vielleicht ne' Ledge oder irgendeinen anderen Block über 1EB gesetzt hast. Das Tile muss auf der obersten Schicht liegen.


Hab ich bereits mehrmals überprüft. Jedoch ist Tile 1EB an oberster Stelle, dennoch funktioniert es nicht.


Edit: Habe meinen äußerst peinlichen Fehler entdeckt. In Map16 war eingestellt, dass Tile 1EB wie Tile 100 funktioniert. Wieso auch immer. Habe es nun umgestellt. Kann immer noch nicht fassen, dass es so ein dummer und einfacher Fehler war.
Bedanke mich dennoch an fpmlp und Reggiamoto, dass sie mir versucht haben zu helfen.
Work in progress:
Super Mario- Just a little warmup

So, Titel wäre erledigt. Fehlt nurnoch der Hack.
geschrieben am 04.08.2015 22:35:34
( Link )
So, ich bastel auch seit längerer Zeit wiedermal ein Level zusammen, aber ich möchte wiederum einen Patch einfügen, was mir leider nicht so gelingt, wie ich es haben möchte:

Undzwar ich möchte den NoSpriteTileLimits Patch mit asar einfügen, dennoch schmiert mir die ROM nach dem Nintendo Presents gleich ab, muss ich was berücksichtigen oder ähnliches?

Mfg Patrick
geschrieben am 05.08.2015 18:10:38
( Link )
Eigenartig, ich hatte mit Asar-Patches noch keine Probleme. Den von dir genannten hatte ich aber noch nicht verwendet. Vielleicht liegt der Fehler auch nicht am Patch, sondern an deiner ROM. Vielleicht verträgt der Patch sich mit einem anderen, bereits installierten Patch nicht? Hast du den NMST-Patch mal an einem älteren Backup deiner ROM getestet?
Oder du probierst es mal mit der xkas-Version des Patches, auch wenn diese überholt sein mag und man Freespace festlegen muss. Aber besser als gar nichts.
geschrieben am 20.08.2015 13:31:36
( Link )
Ich habe eine Frage zu einem Code.
Und zwar möchte ich den Powerup sprite von Ersanio/ICB benutzen. Aleerdings möchte ich, dass er das Powerup behält selbst wenn er getroffen wird.
Hier ist der Code (das ist das wichtige) ^^:
Code
LDA $19			;\If Mario's powerup
CMP #$01 ;|is Big
BEQ GETPOWER ;|then continue
LDA #$00 ;|but if he gets hit or gets another powerup
STA $0DC6 ;/then reset the powerup RAM to Zero.
GETPOWER
JSR SPRITE_CODE_START
PLB
RTL

Was muss entfernt/geändert werden, damit ich das Powerup behalten kann? Kann sein, dass es dann irgendwelche Komplikationen gibt.
Danke im Voraus ^^
geschrieben am 20.08.2015 22:01:48
( Link )
Auch wenn mir der Sprite nichts sagt - die Zeile, neben der steht "reset the powerup RAM to zero" wird wahrscheinlich dafür verantwortlich sein. Und wenn die weg ist, dann ist die Häfte des Codes, den du gepostet hast, auch sinnlos - heißt im Klartext, entferne alle Zeilen außer den letzten drei, und probier mal, ob das geht.
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!)
geschrieben am 24.08.2015 16:30:49
( Link )
Ich kann ja mal den kompletten Code posten, da man sowohl Sprite als auch Generator einfügen muss und sich das ja irgendwie beeinflusst (die readme sagt, dass alles vom Generator ausgeht und das deswegen da geändert werden muss). Hier ist der komplette Code für den Generator und den Sprite:
Generator:
Code
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;flutter/wall jump generator
;based on generator by ICB
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Uses first extra bit: NO
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

RAM_IsDucking = $73
RAM_OnYoshi = $187A

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; sprite code JSL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

dcb "INIT" ;generators don't have an init routine
dcb "MAIN"
PHB
PHK
PLB
LDA $19 ;\If Mario's powerup
CMP #$01 ;|is Big
BEQ GETPOWER ;|then continue
LDA #$00 ;|but if he gets hit or gets another powerup
STA $0DC6 ;/then reset the powerup RAM to Zero.
GETPOWER
JSR SPRITE_CODE_START
PLB
RTL

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; main sprite code
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Return_A RTS

SPRITE_CODE_START
LDA $19 ;only let generator process
CMP #$01 ;if big mario
BNE Return_A ;other end
LDA $0DC6
CMP #$03 ;if mode = 3, let mario wallkick
BEQ SET_WALL
CMP #$04 ;if mode = 4, let mario flutter
BEQ SET_FLUTTER
BNE Return_A ;otherwise return
LDA RAM_IsDucking ;if ducking
ORA RAM_OnYoshi ;or on yoshi
BNE Return_A ;end
SET_WALL
LDA $76
BEQ Right
BRA Left

Left LDA $77
AND #$03
BEQ Return6
LDA $15
AND #$80
BEQ Return6

LDA #$E0 ;Horizontal speed
STA $7B ;

LDA #$A7 ;
STA $7D ;Vertical Speed

LDA #$02 ;
STA $1DF9 ;"Click" Sound effect

STZ $76 ;Direction left

BRA Return6 ;Always Return

Right LDA $77
AND #$03
BEQ Return6
LDA $16
AND #$80
BEQ Return6
LDA #$20 ;Horizontal Speed
STA $7B ;
LDA #$A7 ;Vertical Speed
STA $7D ;
LDA #$02 ;
STA $1DF9 ;Click sound effect
LDA #$01 ;Direction Right
STA $76
BRA Return6

Return6 RTS ;return

Return_Again RTS

SET_FLUTTER
LDA $19 ;recheck
CMP #$01
BNE Return_Again
LDA $0DC6
CMP #$04 ;mode = 4
BNE Return_Again
LDA $77
AND #$04
BNE Reset ;won't work while swimming, on air, yoshi
LDA $75
BNE Reset
LDA $74
BNE Reset
LDA $187A
BNE Reset
LDA $140D ;spin jump flutter
BNE Check
LDA $0660
BEQ Check
LDA $1499
BNE Return

LDA $7D
CMP #$7F
BCC Rest
LDA $1470
BNE Carry
LDA $148F
BNE Carry
LDA $0660
CMP #$02
BCS Stand
LDA #$05
STA $13E0
INC $0660
BRA Return
Check
LDA $16 ;button to push
CMP #$80
BNE Return
STZ $140D
LDA #$BF
STA $7D
INC $0660
LDA #$01
STA $1DFA
BRA Return
Stand
LDA #$04
STA $13E0

DEC $0660

BRA Return
Reset
STZ $0660
BRA Return
Rest
LDA $0660
CMP #$15 ;To stop the advantage(or to increase rest time,) increase this hexidecimal number
BNE Rest1
STZ $0660
BRA Check
Rest1
INC $0660 ;continues rest time
BRA Return
Carry
LDA $0660 ;same as above
CMP #$02
BCS Run
LDA #$08
STA $13E0
INC $0660
BRA Return
Run
LDA #$07
STA $13E0
DEC $0660
BRA Return
Return RTS

Sprite:
Code
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Wall jump powerup, by Iceguy
;; Based on wall jump block by Ersanio
;;
;;
;; Description: This sprite, when collected by Mario, will make him turn big and give
;; him the ability to wall jump! If he gets hit, he loses the powerup. For the sprite
;; to work, place the generator at all secondary entrances.
;;
;; This sprite does not use the extra bit.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; sprite init JSL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

dcb "INIT"
RTL

dcb "MAIN"
PHB
PHK
PLB
JSR SPRITE_ROUTINE
PLB
RTL

SPRITE_ROUTINE LDA $14C8,x ; return if sprite status != 8
CMP #$08
BNE RETURNED
JSR SUB_GFX
LDA $9D ; return if sprites locked
BNE RETURNED
JSR SUB_OFF_SCREEN_X0 ; only process sprite while on screen

LDA $187A ;if on yoshi
BNE RETURNED ;end code
JSL $01A7DC ;mario/sprite contact..
BCC RETURNED
LDA #$04 ;play flower animation
STA $71
LDA #$30 ;cycle through palettes
STA $149B
LDA #$01 ;make mario big
STA $19
LDA #$0A ;play SFX
STA $1DF9
LDA #$03 ;set new mode
STA $0DC6
STZ $14C8,x ;and erase sprite
BRA Check_Whole ;then check main code
RETURNED RTS

;This part of the code is not executed by the sprite
;it is executed by the generator
;the code below will do nothing if you change it
;except for the graphics routine

Check_Whole STZ $7D
LDA $76
BEQ JumpRight
BRA JumpLeft

JumpLeft LDA $15 ;
AND #$80 ;If you dont press the jump button, return.
BEQ Return ;

LDA #$E0 ;Horizontal speed
STA $7B ;

LDA #$A7 ;
STA $7D ;Vertical Speed

LDA #$02 ;
STA $1DF9 ;"Click" Sound effect

STZ $76 ;Direction left

BRA Return ;Always Return

JumpRight
LDA $16
AND #$80 ;If you dont press the jump button, return.
BEQ Return
LDA #$20 ;Horizontal Speed
STA $7B ;
LDA #$A7 ;Vertical Speed
STA $7D ;
LDA #$02 ;
STA $1DF9 ;Click sound effect
LDA #$01 ;Direction Right
STA $76

Return RTS

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; GRAPHICS ROUTINE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SUB_GFX JSR GET_DRAW_INFO ; after: Y = index to sprite OAM ($300)
; $00 = sprite x position relative to screen boarder
; $01 = sprite y position relative to screen boarder

LDA $157C,x ; $02 = sprite direction
STA $02

LDA $00 ; set x position of the tile
STA $0300,y

LDA $01 ; set y position of the tile
STA $0301,y

LDA #$C2 ; set tile number
STA $0302,y

LDA $15F6,x ; get sprite palette info
PHX
LDX $02 ; flip the tile if the sprite direction is 0
BNE NO_FLIP_1
ORA #$40
NO_FLIP_1 PLX
ORA $64 ; add in the priority bits from the level settings
STA $0303,y ; set properties

INY ; get the index to the next slot of the OAM
INY ; (this is needed if you wish to draw another tile)
INY
INY

LDY #$02 ; #$02 means the tiles are 16x16
LDA #$00 ; This means we drew one tile
JSL $01B7B3
RTS



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ROUTINES FROM THE LIBRARY ARE PASTED BELOW
; You should never have to modify this code
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; GET_DRAW_INFO
; This is a helper for the graphics routine. It sets off screen flags, and sets up
; variables. It will return with the following:
;
; Y = index to sprite OAM ($300)
; $00 = sprite x position relative to screen boarder
; $01 = sprite y position relative to screen boarder
;
; It is adapted from the subroutine at $03B760
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

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


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; SUB_HORZ_POS
; This routine determines which side of the sprite Mario is on. It sets the Y register
; to the direction such that the sprite would face Mario
; It is ripped from $03B817
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
geschrieben am 03.11.2015 8:30:06
( Link )
Hey hey,

habe letztens in der Status Bar einige Sachen verschieben wollen. Dachte, ich könnte den Bonus Star Counter auch etwas verschieben, wo sich aber nur die größere Box im Status Bar Editor verschieben lies, also habe ich es letztendlich wieder an die original Position verschoben und seitdem zählt er die Punkte nicht mehr ab.

Habe das mal für die Verdeutlichung aufgenommen

Klick!
geschrieben am 03.11.2015 11:26:20
( Link )
Vielleicht wurde die Routine überschrieben? Guck mal, ob die drei Bytes ab $05CF1B "EA" sind. Ist aber auch nur 'ne Vermutung.

Der einfachste Weg ist wahrscheinlich, alles auf eine neue ROM zu übertragen und es dann besser zu machen. Welchen Status Bar Editor hast du eigentlich genommen? Ich würde Status Effect empfehlen.
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!)
geschrieben am 03.11.2015 16:31:36
( Link )
Zitat von WYE:
Vielleicht wurde die Routine überschrieben? Guck mal, ob die drei Bytes ab $05CF1B "EA" sind. Ist aber auch nur 'ne Vermutung.

Der einfachste Weg ist wahrscheinlich, alles auf eine neue ROM zu übertragen und es dann besser zu machen. Welchen Status Bar Editor hast du eigentlich genommen? Ich würde Status Effect empfehlen.


Ich hatte den ganz alten SMW SB Editor noch im Ordner, den habe ich benutzt. Ich glaube, dass ich alles auf eine neue ROM übertrage. für einen cleanen, organisierten Start. Danke für das Programm übrigens, ist super!
geschrieben am 05.11.2015 18:56:55
( Link )
So peinlich, dass mir das gerade passiert ist...

Also, ich hab' den "Add Sprites Window" geöffnet und hab' dann irgendeine Taste gedrückt und nun sieht das ganze so aus.
Weiß jemand wie man das ganze wieder rückgängig machen kann, damit es so aussieht wie im "Add Objects Window"?

Hach, schön Back to the Roots im typischen Noobmodus
´s gibt badische und unsymbadische


Was?! Die Signaturlänge wurde auf 1024 Zeichen beschränkt? #notmysignaturelength
geschrieben am 05.11.2015 19:12:22
( Link )
Das wird der Zoom sein, der geht in neuen Versionen bis 800%. Strg+ bzw. Strg- oder Strg-Mausrad.

Und falls das keine Absicht war, kannst du auch das "Vertical Layout" wieder deaktivieren, und zwar mit dem, äh, "Vine-Button".
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!)
geschrieben am 05.11.2015 19:16:09
( Link )
Ich hasse mich selbst so sehr...
Nichtsdestotrotz ist das ja echt ein klasse Feature! Danke für's erklären, WYE!
´s gibt badische und unsymbadische


Was?! Die Signaturlänge wurde auf 1024 Zeichen beschränkt? #notmysignaturelength
geschrieben am 05.11.2015 19:53:41
zuletzt bearbeitet von Wysey am 05.11.2015 23:38:58.
( Link )
Zitat von WYE:
Das wird der Zoom sein, der geht in neuen Versionen bis 800%. Strg+ bzw. Strg- oder Strg-Mausrad.

Und falls das keine Absicht war, kannst du auch das "Vertical Layout" wieder deaktivieren, und zwar mit dem, äh, "Vine-Button".


Vielleicht kommen in nächster Zeit noch mehr Fragen von uns beiden...
Ihr habt keine Ahnung was wir planen! *MUAHAHAHAHAHAHAHAHHAHAHAHAHAHHAHAHAHHAHAH*
>we live in a society
geschrieben am 05.11.2015 23:38:30
( Link )
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!)