Beiträge von Chris

geschrieben am 07.01.2011 23:18:40 in GFX zusammenpacken?
( Link )
Wenn du die asm-Datei eines Sprites öffnest, findest du häufig unter der Graphics Routine die Tilemap, in der festgelegt ist, welche Tiles (Felder) einer ExGFX-Datei dieser Sprite benutzt. Diese Tiles änderst du einfach nach deinen Bedürfnissen, speicherst die Änderungen in der asm-Datei und fügst den Sprite mit Spritetool nochmal neu ein.
geschrieben am 07.01.2011 23:27:37 in Smw Mystic island
( Link )
Schau dir mal die rot umrandeten Stellen an:


Dort befinden sich Lücken, durch die man den Hintergrund sehen kann. Ich empfehle dir, diese Lücken zu füllen, das sieht dann besser aus.
Hast du, um diese SMB3-Grafik zu rippen, ein Savestate aus SMB3 benutzt? In diesem befinden sich nämlich sowohl mit Wasser als auch mit Grün gefüllte Böden/Seitenränder.

Außerdem hat deine Statusbar so seltsame Farben...du solltest für das Hintergrundbild eine andere Palette als 0 oder 1 wählen, damit die Statusbar in den Originalfarben weiterexistieren kann.
geschrieben am 08.01.2011 12:51:49 in Du suchst Custom Sprites/Blocks/Music oder Graphics? Hier!
( Link )
Dann fügst du die animierte Brick-Grafik eben in eine neue ExGFX-Datei ein und benutzt in LM Exanimation, damit die animierte Brick-Grafik aus dieser ExGFX-Datei im 8x8-Editor erscheint. Dann musst du bei deinem Custom-Brickblock im 16x16-Editor nur noch einstellen, dass er die entsprechenden animierten Felder des 8x8-Editor benutzt. Ich weiß jetzt allerdings nicht, ob man das für jedes Level erneut animieren muss oder ob man das auch mittels Global Exanimation machen kann.

Es gibt allerdings ein anderes Problem, wenn du beide Blöcke parallel benutzen möchtest: beide benutzen die selbe Block-Sprite-Grafik aus GFX00, wenn Mario von unten gegenspringt. Ich weiß nicht, ob bzw. wie man das beim Brickblock ändern kann.
geschrieben am 08.01.2011 18:19:38 in Screen Scrolling Pipes Problem
( Link )
Ich hab genau das selbe Problem, egal welchen Freespace ich angebe. Wie kann das sein, wenn keine vorhandenen Daten überschrieben werden? In einigen Levels fallen alle Animationen aus, auch die SMW-Animationen. In anderen nur die Exanimations und in wieder anderen Levels funktionieren alle Animationen.

Ich habe die unangenehme Vermutung, dass dieser Patch nur mit Lunar Magic 1.6 funktioniert (Patch wurde 2008 veröffentlicht), da ab Version 1.7 die Animationen komplett überarbeitet wurden und hierdurch möglicherweise Komplikationen entstehen.

Aber vielleicht hat ja doch jemand von euch eine Lösung parat...?
geschrieben am 08.01.2011 18:25:09 in Chris' SMB3-styled Hack
( Link )
Danke. Aber ich denke, SMB4 würde wieder ganz anders sein. SMB3 - The Lost Levels wäre vielleicht angebrachter .

Den P-Block, der On - Off aktiviert, habe ich in meinem Hack aber noch nicht entdeckt
geschrieben am 08.01.2011 19:57:41 in Chris' SMB3-styled Hack
( Link )
Zitat von wertzedu:
je mehr ich sehe desto grössere Augen krieg ich, darf ich deinen Hack auch testen? da hätte ich extrem bock drauf

Schauen wir mal. Das entscheide ich, wenn der Hack fertig ist. Dauert nicht mehr allzu lange.

Zitat von Ricicir:
Oder SMAS Fusion(Weil auch andere Elemente eingebracht sind)

Sind diese ungefuellten teile Yellow Switch Blocks?


SMAS Fusion würde durchaus Sinn machen, da auch SMB2-styled Levels bzw. Mischlevels (SMB2-SMB3) vorkommen werden, wie ihr bald sehen werdet. Leider ist mir bis heute kein vernünftiger Name eingefallen. Es sollen halt einfach nur weitere SMB3-Levels sein ohne viel Story...Im Titel-Screen steht bislang nur "SMB"...

Diese ungefüllten Blöcke sind Custom Blocks und werden nur fest und gefüllt, wenn und solange ein P-Switch aktiv ist. Wie in Yoshi's Island, diese roten !-Blöcke.
geschrieben am 08.01.2011 21:03:15 in Screenshots/Videos Thread - Zeige dein Zeug h(i)er!
( Link )
Sehr gut! Der Boden gefällt mir. Und das mit dem Schneien ist auch toll. Ich denke mal, dass du eine Sprite-Statusbar verwendest, oder? Sieht alles wirklich gut aus.
Wie hast du das mit dem Schneien hinbekommen? Layer 3? HDMA?
geschrieben am 08.01.2011 23:15:18 in Screen Scrolling Pipes Problem
( Link )
Weiß jemand, wo ich in dem folgenden Patch die RAM-Daten finde, die möglicherweise für Animationen verwendet werden und die ich dann durch freien RAM ersetzen kann:

Code
HEADER
LOROM

;;;;;;;;;;;;;;;;;;;;
;;
;; Definitions of stuff
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;

incsrc defs.asm

!CodeLength = CodeEnd-CodeStart ;The length of the code for a RATS tag and byte fill ($FF)

!BJump = !DataLocation+$40 ;Spot for loading the Block code for the "below" offset
!AJump = !DataLocation+$60 ;Code for "above" offset
!SJump = !DataLocation+$80 ;I think you get it ...
!CJump = !DataLocation+$C0 ;What!? You've never heard of the center offset?!

!NumBlocksB = $00A0 ;Number of blocks (doubled) for "below" offset coding
!NumBlocksA = $000C ;For "above" offset coding
!NumBlocksS = $0010 ;I think you get it ...
!NumBlocksC = $0004 ;Hmm ... what ever could the center offsets do?

!BTiles = !DataLocation+$01A0 ;Location of the Map16 tile numbers for "below" offset
!BCode = !BTiles+!NumBlocksB ;Location of the pointers to the code for "below" offset
!ATiles = !BCode+!NumBlocksB
!ACode = !ATiles+!NumBlocksA
!STiles = !ACode+!NumBlocksA
!SCode = !STiles+!NumBlocksS
!CTiles = !SCode+!NumBlocksS
!CCode = !CTiles+!NumBlocksC

!MiscData = $3FE00 ;Change this to where you want a tiny ASM hack (~60 bytes)
!P = !Map16Page*$0100 ;A short little name to speed up the writing of Map16 tiles
!Speed = $0004 ;Not recommended to change unless you know what you're doing
!DSpeed = !Speed*$02 ;Used once
!HSpeed = !Speed/$02 ;Used once

!Status1 = $7FFFE6
!Image = $7FFFE8 ;#$0042 makes him disappear and #$0043 is a peace sign
!Travel = $7FFFEA ;#$01 means vertical and #$00 means horizontal
!Vertical = $7FFFEC ;#$01 goes up and #$00 goes down
!Horizontal = $7FFFEE ;#$01 goes right and #$00 goes left
!PowerupHold = $7FFFF0 ;A holder of Mario's current powerup
!Status = $7FFFF2 ;#$0042 if Mario is in a pipe and #$0000 if he isn't
!MarioXPos = $7FFFF4 ;Mario's X position in a pipe
!MarioYPos = $7FFFF6 ;Mario's Y position in a pipe



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Map16 Tiles and their respective code pointers
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; The naming is designed to first name whether it is top
;; or bottom or left or right piece (T,B,L,R). Then whether it is
;; horizontal or vertical (H,V). Then entrance, exit, continuous,
;; or a reappear tile (E,X,C,R). And finally if it's moving left,
;; right, or horizontal or up, down, or vertical (L,R,H,U,D,V). Other
;; certain tiles may be given special names if they do not fit this
;; criteria. A description of what it does will be included. For
;; code pointers, it will start with a B, A, S, or C (offset related).
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

!BHER = !P+$FC ;The "B"ottom part of a "H"orizontal "E"ntrance pipe going "R"ight
!BHCR = !P+$FD
!BHXR = !P+$FE
!THER = !P+$EC
!THCR = !P+$ED
!THXR = !P+$EE
!AHRR = !P+$FF ;An "A"ir reappear tile
!WHRR = !P+$EF ;A "W"ater reappear tile (part of the naming system now)
!BHXL = !P+$F9
!BHCL = !P+$FA
!BHEL = !P+$FB
!THXL = !P+$E9
!THCL = !P+$EA
!THEL = !P+$EB
!AHRL = !P+$F8
!WHRL = !P+$E8
!BHLH = !P+$F4 ;Here, the entrance/exit letter is replaced with an L or R, meaning the
!BHCH = !P+$F5 ;entrance/exit is on the left or right side of the pipe. Sorry if this
!BHRH = !P+$F6 ;is confusing, but I really can't think of a better way to write this.
!THLH = !P+$E4
!THCH = !P+$E5
!THRH = !P+$E6
!AHRH = !P+$F7 ;Since you are probably lost in the naming system, please take solace
!WHRH = !P+$E7 ;in the fact that I will be giving a description before the coding of
!AHLH = !P+$F3 ;of every pipe in the ASM file, so you'll have a better time knowing
!WHLH = !P+$E3 ;what it means the. ;)
!SHER = !P+$F0 ;"S"mall Mario only pipe
!SHCR = !P+$F1
!SHXR = !P+$F2
!SHXL = !P+$E0
!SHCL = !P+$E1
!SHEL = !P+$E2
!SHLH = !P+$D0
!SHCH = !P+$D1
!SHRH = !P+$D2
!RVEU = !P+$9F
!RVCU = !P+$8F
!RVXU = !P+$7F
!WVRU = !P+$6F
!LVEU = !P+$9E
!LVCU = !P+$8E
!LVXU = !P+$7E
!AVRU = !P+$6E
!WVRD = !P+$DF
!RVXD = !P+$CF
!RVCD = !P+$BF
!RVED = !P+$AF
!AVRD = !P+$DE
!LVXD = !P+$CE
!LVCD = !P+$BE
!LVED = !P+$AE
!WVDV = !P+$5F
!RVDV = !P+$4F
!RVCV = !P+$3F
!RVUV = !P+$2F
!WVUV = !P+$1F
!AVDV = !P+$5E
!LVDV = !P+$4E
!LVCV = !P+$3E
!LVUV = !P+$2E
!AVUV = !P+$1E
!SVEU = !P+$C2
!SVCE = !P+$B2
!SVXU = !P+$A2
!SVXD = !P+$C1
!SVCD = !P+$B1
!SVED = !P+$A1
!SVDV = !P+$C0
!SVCV = !P+$B0
!SVUV = !P+$A0
!BU = !P+$B4 ;A "B"ottom piece of pipe which will change the direction to "U"p for the next turn
!TU = !P+$A4
!BD = !P+$B3
!TD = !P+$A3
!LF = !P+$D3 ;A "L"eft piece of pipe making the next turn go "F"orward (right).
!RF = !P+$D4
!LB = !P+$C3
!RB = !P+$C4
!N = !P+$0F ;A null pipe piece (mario travels unaltered)
!T = !P+$00 ;The blue Turn piece (which way it turns Mario depends on the two letter values)

!TRB = !P+$21 ;This and the following are only used once for special cases
!TLB = !P+$20


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Minor ASM Hack to make SMB3 Pipes actually work
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

ORG $CD8b
JSL MovementCode ;A few tweaks to fix what couldn't be done in Map16 coding
ORG $ED20
JSL PageCode1 ;Modifies the page for the SMB3 Pipes. No other custom blocks
ORG $ED37
JSL PageCode2 ;can be put in this page without bad things happening to them

ORG !MiscData
MovementCode:
JSL $00CEB1
PHP
REP #$30
LDA !Image
CMP #$0043
BEQ OtherImage
CMP #$0042
BNE EndMovementCode
SEP #$20
LDA #$40 ;Not visible
StoreImage:
STA $13E0 ;Mario Image
EndMovementCode:
PLP
RTL
OtherImage:
SEP #$20
LDA #$26 ;Peace sign
BRA StoreImage

PageCode1:
STA $77
LDA $04
CMP #!Map16Page
BEQ PageCodeEnd1
LDA $77
ORA #$09
STA $77
PageCodeEnd1:
RTL

PageCode2:
LDA $04
CMP #!Map16Page
BEQ StoreCoord
LDA #$08
TSB $77
RTL
StoreCoord:
LDA #$04
STA $77
PHP
REP #$20
LDA !MarioXPos
STA $94 ;Mario's X position (level, next frame)
LDA !MarioYPos
STA $96 ;Mario's Y position (level, next frame)
PLP
RTL



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Jump Routines to the custom block code
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

ORG $6F66F ;This code adds an extra offset needed to fix a few bugs
CMP #$B1 ;Center offset
BEQ Center ;Code for center offset
JMP $F602 ;Standard ending JMP found in the ROM

ORG $6F698
JSL !BJump ;"Touched the bottom" code
ORG $6F6A8
JSL !AJump ;"Touched the top" code
ORG $6F6B8
JSL !SJump ;"Touched the sides" code
ORG $6F6D0
Center:
JSL !CJump ;"Touched the center" code

ORG !DataLocation
fillbyte $FF : fill $1000

ORG !DataLocation
CodeStart:
db "STAR" ;The bytefill that came before this serves as an extra way of
dw !CodeLength-$09 ;preserving data. Lunar Magic doesn't write anything in the
dw !CodeLength-$09^$FFFF ;ROM unless it's $00 throughout. Technically, you don't need RATS.
incbin info.bin

ORG !BJump
PHP
REP #$30
PHB
PHX
PHK
PLB
LDA $03 ;Map16 tile number in Lunar Magic
LDX #!NumBlocksB ;Note the value is doubled because a tile number is two bytes long
IncorrectTileB:
DEX
DEX
BMI EndBCode ;Once we go below zero, we're out of blocks, so end the loop
CMP.w !BTiles,x ;Spot where we write the Map16 tiles we'll be changing
BNE IncorrectTileB ;That just means the current Map16 doesn't match the one we want to code
JSR (!BCode,x) ;Spot where we write the pointers to the custom block code
EndBCode:
REP #$30
PLX
PLB
PLP
RTL

ORG !AJump
PHP
REP #$30
PHB
PHX
PHK
PLB
LDA $03 ;Map16 tile number in Lunar Magic
LDX #!NumBlocksA ;Note the value is doubled because a tile number is two bytes long
IncorrectTileA:
DEX
DEX
BMI EndACode ;Once we go below zero, we're out of blocks, so end the loop
CMP.w !ATiles,x ;Spot where we write the Map16 tiles we'll be changing
BNE IncorrectTileA ;That just means the current Map16 doesn't match the one we want to code
JSR (!ACode,x) ;Spot where we write the pointers to the custom block code
EndACode:
REP #$30
PLX
PLB
PLP
RTL

ORG !SJump
PHP
REP #$30
PHB
PHX
PHK
PLB
LDA $03 ;Map16 tile number in Lunar Magic
LDX #!NumBlocksS ;Note the value is doubled because a tile number is two bytes long
IncorrectTileS:
DEX
DEX
BMI EndSCode ;Once we go below zero, we're out of blocks, so end the loop
CMP.w !STiles,x ;Spot where we write the Map16 tiles we'll be changing
BNE IncorrectTileS ;That just means the current Map16 doesn't match the one we want to code
JSR (!SCode,x) ;Spot where we write the pointers to the custom block code
EndSCode:
REP #$30
PLX
PLB
PLP
RTL

ORG !CJump
PHP
REP #$30
PHB
PHX
PHK
PLB
LDA $03 ;Map16 tile number in Lunar Magic
LDX #!NumBlocksC ;Note the value is doubled because a tile number is two bytes long
IncorrectTileC:
DEX
DEX
BMI EndCCode ;Once we go below zero, we're out of blocks, so end the loop
CMP.w !CTiles,x ;Spot where we write the Map16 tiles we'll be changing
BNE IncorrectTileC ;That just means the current Map16 doesn't match the one we want to code
JSR (!CCode,x) ;Spot where we write the pointers to the custom block code
EndCCode:
REP #$30
PLX
PLB
PLP
RTL

ORG !BTiles
dw !BHER,!BHCR,!BHXR,!THER,!THCR,!THXR,!AHRR,!WHRR
dw !BHXL,!BHCL,!BHEL,!THXL,!THCL,!THEL,!AHRL,!WHRL
dw !BHLH,!BHCH,!BHRH,!THLH,!THCH,!THRH,!AHRH,!WHRH
dw !AHLH,!WHLH,!SHER,!SHCR,!SHXR,!SHXL,!SHCL,!SHEL
dw !SHLH,!SHCH,!SHRH,!RVEU,!RVCU,!RVXU,!WVRU,!LVEU
dw !LVCU,!LVXU,!AVRU,!WVRD,!RVXD,!RVCD,!RVED,!AVRD
dw !LVXD,!LVCD,!LVED,!WVDV,!RVDV,!RVCV,!RVUV,!WVUV
dw !AVDV,!LVDV,!LVCV,!LVUV,!AVUV,!SVEU,!SVCE,!SVXU
dw !SVXD,!SVCD,!SVED,!SVDV,!SVCV,!SVUV,!BU,!TU,!BD
dw !TD,!LF,!RF,!LB,!RB,!N,!T

ORG !BCode
dw EnterRight,StandardRight,ExitRight,EnterRight
dw ActiveRight,ExitRight,RightExitTile,RightExitTile
dw ExitLeft,StandardLeft,EnterLeft,ExitLeft
dw ActiveLeft,EnterLeft,LeftExitTile,LeftExitTile
dw LeftHBlue,StandardHBlue,RightHBlue,LeftHBlue
dw ActiveHBlue,RightHBlue,BlueRHExitTile,BlueRHExitTile
dw BlueLHExitTile,BlueLHExitTile,EnterRight,StandardRight
dw ExitRight,ExitLeft,StandardLeft,EnterLeft
dw LeftHBlue,StandardHBlue,RightHBlue,RightEnterUp
dw StandardUp,StandardUp,TopExitTile,LeftEnterUp
dw StandardUp,StandardUp,TopExitTile,BottomExitTile
dw StandardDown,StandardDown,StandardDown,BottomExitTile
dw StandardDown,StandardDown,StandardDown,BlueBVExitTile
dw RightBVBlue,StandardVBlue,StandardVBlue,BlueTVExitTile
dw BlueBVExitTile,LeftBVBlue,StandardVBlue,StandardVBlue
dw BlueTVExitTile,SmallEnterUp,StandardUp,StandardUp
dw StandardDown,StandardDown,StandardDown,SmallBVBlue
dw StandardVBlue,StandardVBlue,SHBlueUp,AHBlueUp
dw SHBlueDown,AHBlueDown,SVBlueRight,SVBlueRight
dw SVBlueLeft,SVBlueLeft,NoDirectionChange,CrazyBlueCorner

ORG !ATiles
dw !LVED,!RVED,!LVUV,!RVUV,!SVED,!SVUV

ORG !ACode
dw LeftDownEnterPress,RightDownEnterPress,LeftBluePressDown
dw RightBluePressDown,SmallDownEnterPress,SmallBluePressDown

ORG !STiles
dw !BHER,!BHEL,!SHER,!SHEL,!BHLH,!BHRH,!SHLH,!SHRH

ORG !SCode
dw RightEnterPress,LeftEnterPress,SmallLeftEnterPress,SmallRightEnterPress
dw RightEnterPress,LeftEnterPress,SmallLeftEnterPress,SmallRightEnterPress

ORG !CTiles
dw !AVUV,!WVUV

ORG !CCode
dw BlueTVExitTile,BlueTVExitTile



;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Status-related code
;;
;;;;;;;;;;;;;;;;;

PipeSound:
PHP
SEP #$20
LDA #$04 ;Pipe noise
STA $1DF9 ;SPC700 I/O
PLP
RTS

Cement:
PHP
REP #$20
LDA #$0130 ;Cement Block
STA $03 ;Block # from LM Map16 Editor
PLP
RTS

NoYoshiSound:
PHP
SEP #$20
LDA #$20 ;Yoshi spit out an object
STA $1DF9 ;SPC700 I/O
PLP
RTS

Entered:
PHP
REP #$20
LDA #$0042 ;Give him the peace sign as he enters the pipe
STA !Image
SEP #$20
LDA $19 ;Powerup
BEQ NoPowerup
STA !PowerupHold
STZ $19
NoPowerup:
PLP
RTS

SavePowerup:
PHP
SEP #$20
LDA $19
STA !PowerupHold
PLP
RTS

Exited:
PHP
REP #$20
LDA #$0000 ;Resets his "entrance" flag
STA !Image
STA !Status1
SEP #$20
LDA !PowerupHold
STA $19
PLP
RTS

BehindStuff:
PHP
SEP #$20
LDA #$02
STA $13F9 ;"Mario goes behind stuff" flag
STA $1419 ;"Sprites go behind stuff" flag
REP #$20
LDA #$0042
STA !Status
PLP
RTS

NotBehind:
PHP
SEP #$20
LDA #$00
STA $13F9
STA $1419
REP #$20
LDA #$0000
STA !Status
PLP
RTS



;;;;;;;;;;;;;;;;;;
;;
;; Directional codes
;;
;;;;;;;;;;;;;;;;;;;;;;;

GoUp:
LDA #$0001
STA !Vertical
RTS

GoDown:
LDA #$0000
STA !Vertical
RTS

GoRight:
LDA #$0001
STA !Horizontal
RTS

GoLeft:
LDA #$0000
STA !Horizontal
RTS



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Change (or no change) movement pipes
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SHBlueUp:
JSR GoUp
JMP StandardHBlue

AHBlueUp:
JSR GoUp
JMP ActiveHBlue

SHBlueDown:
JSR GoDown
JMP StandardHBlue

AHBlueDown:
JSR GoDown
JMP ActiveHBlue

SVBlueRight:
JSR GoRight
JMP StandardVBlue

SVBlueLeft:
JSR GoLeft
JMP StandardVBlue

NoDirectionChange:
LDA !Travel
BEQ VerticalChosen
JMP StandardHBlue
VerticalChosen:
JMP StandardVBlue

CrazyBlueCorner:
LDA !Travel
BEQ TakeTheVertical
JSR StandardVBlue
JMP SetHorizontal
TakeTheVertical:
JSR StandardHBlue
JMP SetVertical



;;;;;;;;;;;;;;;;;;;;;;;
;;
;; More status-related code
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

ModY:
LDA $03
CMP #!BHCR ;All the pieces it checks for are bottom horizontal pipe pieces
BEQ LowerHorizontalPiece
CMP #!BHCL
BEQ LowerHorizontalPiece
CMP #!BHCH
BEQ LowerHorizontalPiece
RTS
LowerHorizontalPiece:
LDA !MarioYPos
AND #$000F
CMP #$0008
BEQ HalfwayUp
RTS
HalfwayUp:
LDA !MarioYPos
AND #$FFF7
STA !MarioYPos
RTS

AddY:
LDA $03
CMP #!SHEL
BEQ Special
CMP #!SHXL
BEQ Special
CMP #!TRB
BEQ Special
CMP #!TLB
BEQ Special
RTS
Special:
LDA !MarioYPos
AND #$000F
CMP #$000C
BEQ ThreeQuarters
RTS
ThreeQuarters:
LDA !MarioYPos
CLC
ADC #$0006
STA !MarioYPos
RTS

FaceLeft:
LDA #$0000
BEQ Direction
FaceRight:
LDA #$0001
Direction:
SEP #$20
STA $76 ;Mario's left or right status
REP #$20
RTS

LockControls:
LDA $15 ;Controller Data 1
AND #$4040 ;Only saves the Y/X button status
STA $15
STZ $17 ;Controller Data 2
RTS

SetStatus1:
LDA #$0042
STA !Status1
RTS

SetStatus2:
LDA #$0043 ;Makes Mario invisible
STA !Image
RTS

SetVertical:
LDA #$0000
STA !Travel
RTS

SetHorizontal:
LDA #$0001
STA !Travel
RTS



;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Full code of blocks
;;
;;;;;;;;;;;;;;;;;;;

StandardRight:
LDA !Status
CMP #$0042
BEQ ActiveRight
JSR Cement
RTS
ActiveRight:
JSR Entered
MoveRight:
LDA !MarioXPos
CLC
ADC #!Speed
STA !MarioXPos
STA $94
JSR ModY
LDA !MarioYPos
STA $96
JSR SetHorizontal
JSR GoRight
JSR LockControls
RTS

EnterRight:
JSR MoveRight
JSR BehindStuff
JSR SavePowerup
JSR PipeSound
RTS

ExitRight:
JSR AddY
JSR ActiveRight
JSR Exited
JSR FaceRight
JSR PipeSound
RTS

RightExitTile:
LDA !Status
CMP #$0042
BNE StopRight
JSR MoveRight
JSR NotBehind
StopRight:
RTS

StandardLeft:
LDA !Status
CMP #$0042
BEQ ActiveLeft
JSR Cement
RTS
ActiveLeft:
JSR Entered
MoveLeft:
LDA !MarioXPos
SEC
SBC #!Speed
STA !MarioXPos
STA $94
JSR ModY
LDA !MarioYPos
STA $96
JSR SetHorizontal
JSR GoLeft
JSR LockControls
RTS

EnterLeft:
JSR MoveLeft
JSR BehindStuff
JSR SavePowerup
JSR PipeSound
RTS

ExitLeft:
JSR AddY
JSR MoveLeft
JSR Exited
JSR FaceLeft
JSR PipeSound
RTS

LeftExitTile:
LDA !Status
CMP #$0042
BNE StopLeft
JSR NotBehind
StopLeft:
RTS

StandardHBlue:
LDA !Horizontal
BNE SGoingRight
JMP StandardLeft
SGoingRight:
JMP StandardRight

ActiveHBlue:
LDA !Horizontal
BNE AGoingRight
JMP ActiveLeft
AGoingRight:
JMP ActiveRight

LeftHBlue:
LDA !Horizontal
BNE ERight
JMP ExitLeft
ERight:
JMP EnterRight

RightHBlue:
LDA !Horizontal
BNE XRight
JMP EnterLeft
XRight:
JMP ExitRight

BlueLHExitTile:
LDA !Horizontal
BNE StopHMove
JMP LeftExitTile

BlueRHExitTile:
LDA !Horizontal
BEQ StopHMove
JMP RightExitTile
StopHMove:
RTS

LeftBVBlue:
LDA !Status
CMP #$0042
BEQ VerticalDecision
JMP LeftEnterUp
VerticalDecision:
JMP DecideVertical

RightBVBlue:
LDA !Status
CMP #$0042
BEQ VerticalDecision
JMP RightEnterUp

LeftBluePressDown:
LDA !Status
CMP #$0042
BEQ CowardsWayOut
JMP LeftDownEnterPress
CowardsWayOut:
RTS

RightBluePressDown:
LDA !Status
CMP #$0042
BEQ CowardsWayOut
JMP RightDownEnterPress

SmallBVBlue:
LDA !Status
CMP #$0042
BEQ VerticalDecision
JMP SmallEnterUp

SmallBluePressDown:
LDA !Status
CMP #$0042
BEQ CowardsWayOut
JMP SmallDownEnterPress

StandardVBlue:
LDA !Vertical
BNE GoingUp
JMP StandardDown
GoingUp:
JMP StandardUp

BlueTVExitTile:
LDA !Vertical
BNE DisableExit
JMP TVExitDisable
DisableExit:
JMP TopExitTile

DecideVertical:
LDA !Vertical
BNE ChooseUp
JMP StandardDown
ChooseUp:
JMP MoveUp

BlueBVExitTile:
LDA !Vertical
BNE NotLeaving
JMP BottomExitTile
NotLeaving:
JMP BVEnterConfirm

LongBranch:
BRL MoveUp

LeftEnterUp:
LDA !Status1
CMP #$0042
BEQ NoUp
LDA !Status
CMP #$0042
BEQ LongBranch
LDA $15
AND #$0008 ;Pressing Up
BEQ NoUp
LDA $187A ;Riding Yoshi flag
BNE NoUpYoshi
LDA $94
AND #$000F
CMP #$0008
BCS NoUp

EnterUp:
LDA $94
AND #$FFF0
ORA #$0008
STA !MarioXPos
RegularUp:
LDA $96
SEC
SBC #!Speed
STA $96
AND #$FFFC
STA !MarioYPos
JSR GoUp
JSR GoRight
JSR BehindStuff
JSR SavePowerup
JSR SetStatus2
JSR PipeSound
RTS
NoUpYoshi:
JSR NoYoshiSound
NoUp:
JSR Cement
RTS

RightEnterUp:
LDA !Status1
CMP #$0042
BEQ NoUp
LDA !Status
CMP #$0042
BEQ StandardUp
LDA $15
AND #$0008
BEQ NoUp
LDA $187A
BNE NoUpYoshi
LDA $94
AND #$000F
CMP #$0008
BCC NoUp
JMP EnterUp

StandardUp:
LDA !Status
CMP #$0042
BEQ ActiveUp
JSR Cement
RTS
ActiveUp:
JSR Entered
MoveUp:
LDA !MarioYPos
SEC
SBC #!Speed
STA !MarioYPos
STA $96
LDA !MarioXPos
STA $94
JSR SetVertical
JSR GoUp
JSR LockControls
RTS

BVEnterConfirm:
LDA !Status1
CMP #$0042
BEQ NoUp
LDA !Status
CMP #$0042
BEQ MoveUp
RTS

TopExitTile:
LDA !Status
CMP #$0042
BNE StopUp
JSR MoveUp
LDA !MarioYPos
AND #$FFF0
STA $96
JSR NotBehind
JSR Exited
JSR PipeSound
StopUp:
RTS

SmallEnterUp:
LDA $19
AND #$00FF
BNE SmallCement
LDA !Status1
CMP #$0042
BEQ SmallCement
LDA !Status
CMP #$0042
BEQ MoveUp
LDA $15
AND #$0008
BEQ SmallCement
LDA $187A
BNE SmallNoYoshi
LDA $94
AND #$000F
CMP #$0008
BCS SmallCement
LDA $94
AND #$FFF0
STA !MarioXPos
JMP RegularUp
SmallNoYoshi:
JSR NoYoshiSound
SmallCement:
JSR Cement
RTS

TVExitDisable:
LDA !Status
CMP #$0042
BEQ MoveDown
RTS

BottomExitTile:
LDA !Status
CMP #$0042
BNE lawlnvm
JSR MoveDown
JSR NotBehind
JSR Exited
JSR PipeSound
lawlnvm:
RTS

StandardDown:
LDA !Status
CMP #$0042
BEQ ActiveDown
JSR Cement
RTS
ActiveDown:
JSR Entered
MoveDown:
LDA !MarioYPos
CLC
ADC #!Speed
STA !MarioYPos
STA $96
LDA !MarioXPos
STA $94
JSR SetVertical
JSR GoDown
JSR LockControls
RTS

LeftDownEnterPress:
LDA !Status
CMP #$0042
BEQ MoveDown
LDA $15
AND #$0004
BEQ TalkToCement
LDA $187A
BNE DGAFYoshi
LDA $94
AND #$000F
CMP #$0008
BCS TalkToCement
AboveOffsetDown:
LDA $94
AND #$FFF0
ORA #$0008
STA !MarioXPos
DownwardSpiral:
LDA $96
CLC
ADC #!Speed
STA $96
AND #$FFFC
STA !MarioYPos
JSR GoDown
JSR GoLeft
JSR BehindStuff
JSR SavePowerup
JSR SetStatus1
JSR SetStatus2
JSR PipeSound
RTS
DGAFYoshi:
JSR NoYoshiSound
TalkToCement:
JSR Cement
RTS

RightDownEnterPress:
LDA !Status
CMP #$0042
BEQ MoveDown
LDA $15
AND #$0004
BEQ TalkToCement
LDA $187A
BNE DGAFYoshi
LDA $94
AND #$000F
CMP #$0008
BCC TalkToCement
JMP AboveOffsetDown

SmallDownEnterPress:
LDA $19
AND #$00FF
BNE TinyCementSmack
LDA !Status
CMP #$0042
BEQ MovinOnDown
LDA $15
AND #$0004
BEQ TinyCementSmack
LDA $187A
BNE TinyYoshiBlock
LDA $94
INC A
AND #$000F
CMP #$0008
BCS TinyCementSmack
LDA $94
INC A
AND #$FFF0
STA !MarioXPos
JMP DownwardSpiral
MovinOnDown:
JMP MoveDown
TinyYoshiBlock:
JSR NoYoshiSound
TinyCementSmack:
JSR Cement
RTS

RightEnterPress:
LDA $15
AND #$0001
BEQ ItsTheEnd
LDA $187A
BNE ByeByeYoshi
LDA $96
AND #$000F
BNE ItsTheEnd
LDA $96
STA !MarioYPos
LDA $94
AND #$FFFC
CLC
ADC #!Speed
STA !MarioXPos
CLC
ADC #!HSpeed
STA $94
JSR GoRight
JSR GoUp
ItsTheEnd:
RTS
ByeByeYoshi:
JSR NoYoshiSound
RTS

LeftEnterPress:
LDA $15
AND #$0002
BEQ ItsALongRoad
LDA $187A
BNE ByeByeYoshi
LDA $96
AND #$000F
BNE ItsALongRoad
LDA $96
STA !MarioYPos
LDA $94
AND #$FFFC
SEC
SBC #!Speed
STA !MarioXPos
SEC
SBC #!HSpeed
STA $94
JSR GoLeft
JSR GoUp
ItsALongRoad:
RTS

SmallLeftEnterPress:
LDA $19
AND #$00FF
BNE ItsALongRoad
JMP RightEnterPress

SmallRightEnterPress:
LDA $19
AND #$00FF
BNE ItsALongRoad
JMP LeftEnterPress
CodeEnd:
geschrieben am 09.01.2011 15:17:21 in Chris' SMB3-styled Hack
( Link )
zu 1. Es wird keine eigene Story geben. Hierzu fehlt mir zudem die Kreativität. Stories in Hacks sind für mich eher
uninteressant. Entscheidend sind Levels und Overworld.
zu 2. Richtig.
zu 3. Ja.
zu 4. Noch sind sie nicht geordnet, aber ich will versuchen, sie nach Schwierigkeit zu ordnen.
zu 5. Meiner Meinung nach bisschen lang.
geschrieben am 09.01.2011 15:24:35 in ExGFX Problem
( Link )
Zitat von benvvv:
...villeicht gibt es auch ne grenze weil ich in meinem hack schon 32 exgfx drin hab
...

Daran liegt es nicht. Ich habe 229 ExGFX drin und es werden noch mehr.

Zitat von MarcelLp:
Ich denke wenn das bei jeder anderen Rom klappt aber bei deinem Hack nicht. ( so ist es ja zumindest bei benvvv )
Liegt es wohl an irgend einen Patch.
Vermute ich mal (wenns wirklich so ist musst du halt alles auf ne neue Rom porten)

Das glaube ich auch. Deshalb ist es ja so wichtig, immer ein Backup zu machen, bevor man etwas patcht.
geschrieben am 09.01.2011 20:46:06 in ExGFX Problem
( Link )
Hat das mit den ExGFX denn direkt nach dem Patchen noch geklappt?

Mit Expanden ist gemeint, ob du deine Rom mit Lunar Expand schon vergrößert hast (auf 4 MB)? Dann haste mehr Platz in der Rom.
geschrieben am 14.01.2011 19:38:21 in Du suchst Custom Sprites/Blocks/Music oder Graphics? Hier!
( Link )
Kann mir jemand einen Block kreieren, der für Mario wie Luft ist (025), aber für Sprites wie eine Ranke (006)?


@MarcelLp:
Du hast den richtigen Generator erwischt. Leider beschreibst du nicht, was damit nicht stimmt. Hast du dem Generator in der Sprite-Liste auch eine Nummer von D0 bis DF gegeben?
Da der Bildschirm trotz des Generators manchmal nach rechts/links scrollte, habe ich zusätzlich noch diesen Sprite (kein Generator) eingefügt: http://www.smwcentral.net/download.php? ... pe=sprites
geschrieben am 15.01.2011 13:29:19 in Screenshots/Videos Thread - Zeige dein Zeug h(i)er!
( Link )
Sehr schön, Seuchensoldat. Sieht sehr gut und interessant aus.
geschrieben am 15.01.2011 13:50:29 in Allgemeine Hex- und ASM-Fragen
( Link )
Ich benutze den Custom-Lemmy-Boss. Der produziert Bälle, die im Raum umherfliegen und mit denen man ihn treffen muss. Sobald 5 Bälle im Screen sind, baut er keine weiteren Bälle.
Wie kann ich bei Lemmy einstellen, dass er schon bei einer Anzahl von 3 Bällen im Screen aufhört, mit Bällen zu werfen:
Code

EXTRA_BITS = $7FAB10
NEW_SPRITE_NUM = $7FAB9E ;08 bytes custom sprite number

JUMP_TIMER = $163E
RAM_ThrowTimer = $1504

Hit_Counter = $1528 ; The hit counter for any sprite that takes lots of hits to kill
GetSpriteClippingA = $03B69F
CheckForContact = $03B72B


GetSpriteClippingB = $03B6E5
;CheckForContact = $03B72B
ShowSprContactGfx = $01AB72
HurtMario = $00F5B7
GivePoints = $02ACE5
GetRand = $01ACF9
SPRITE_STATE = $C2

Invuln_Timer = $1564 ; The RAM address for Lemmy's stun duration
Lemmy_Hits = $05 ; This is how many hits it takes to kill Lemmy (default == 3)

RAM_HitCount = $1534
SPRITE_TO_GEN dcb $4C,$4C,$4C
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; sprite data
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


PROPERTIES dcb $40,$00 ;xyppccct format

BOOMERANG_TILE = $CA
TIME_TO_EXPLODE = $A0

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; init JSL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

dcb "INIT"

JSR SUB_GET_DIR
TYA
STA $157C,x

TXA
AND #$03
ASL A
ASL A
ASL A
ASL A
ASL A
STA JUMP_TIMER,x
CLC
ADC #$32
STA RAM_ThrowTimer,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 = $10 ;time to display the boomerang before it is thrown

X_SPEED dcb $F8,$F8,$08,$08 ;rest at bottom, forward speed, rest at top, backwards speed
TIME_IN_POS dcb $37,$18,$37,$18 ;moving forward, rest, moving backwards, rest ($48,$10,$48,$10)
TIME_TILL_THROW dcb $68,$69

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_HB ; only process hammer bro while on screen

LDA Invuln_Timer,x ; \
BEQ No_Inv ; | Decrement Invuln timer if necessary
DEC Invuln_Timer,x ; /

No_Inv:
INC $1570,x ; increment number of frames hammer bro has been on screen
LDA $151C,x
AND #$01
BEQ LABEL3B
LDA $1570,x ; \ calculate which frame to show:
LSR A ; |
LSR A ; |
LSR A ; |
AND #$01 ; | update every 16 cycles if normal
BRA LABEL3

LABEL3B LDA $151C,x
BEQ LABEL3
LDA #$01
LABEL3 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_BIRDO ; /
INC $1602,x
INC $1602,x

LDA Invuln_Timer,x
CMP #$00
BEQ Go_Throw
LDA TIME_TILL_THROW,y
STA RAM_ThrowTimer,x
Go_Throw:
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_BIRDO
LDA $C2,x
EOR #$01
STA $C2,x
JSR SUB_HAMMER_THROW ; /

JUMP_BIRDO LDA JUMP_TIMER,x
CMP #$28 ; | just go to normal walking code
BCS WALK_BIRDO ; /

LDA Invuln_Timer,x
CMP #$00
BNE WALK_BIRDO

LDA JUMP_TIMER,x
CMP #$21
BNE NO_JUMP2
LDA $1570,x
LSR A
AND #01
BEQ NO_JUMP2
;STZ $B6,x ; x speed = 0
LDA #$D0 ; \ y speed
STA $AA,x ; /

BRA APPLY_SPEED
NO_JUMP2 CMP #$00
BNE WALK_BIRDO
LDA #$7F
STA JUMP_TIMER,x

WALK_BIRDO LDA Invuln_Timer,x ; \ If in stunned state...
CMP #$00 ; |
BEQ Walk_Normal ; |
STZ $B6,x ; | ...halt motion...
INC $1540,x ; | ...and freeze movement timer by incrementing it.
BRA APPLY_SPEED ; /
Walk_Normal:
LDA $151C,x ;
TAY ;
LDA $1540,x ;
BEQ CHANGE_SPEED ;
LDA X_SPEED,y ; | set y 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 JSL $01802A ; update position based on speed values

LDA Invuln_Timer,x ; \
CMP #$00 ; | Ignore if Lemmy is still immune to bombs
BEQ Jump_to_Weapon ; |
BRA No_Jump_to ; /

Jump_to_Weapon:
JSR HIT_ROUTINE

No_Jump_to:
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
BCC NO_CONTACT ; No Contact
LDA $1490 ; \ if mario star timer > 0 ...
BNE HAS_STAR ; / ... goto HAS_STAR

NO_CONTACT JSR KILL_BOOMERANGS
RTS ; return
KILL_BOOMERANGS
RTS

HAS_STAR LDA #$02 ; \ sprite status = 2 (being killed by star)
STA $14C8,x ; /
STZ $B6 ; Freeze X speed
LDA #$D0 ; \ set y speed
STA $AA,x ; /
;JSR SUB_HORZ_POS ; get new sprite direction
;LDA KILLED_X_SPEED,y ; \ set x speed based on sprite direction
;STA $B6,x ; /
;INC $18D2 ; increment number consecutive enemies killed
LDA $18D2 ; \
CMP #$08 ; | if consecutive enemies stomped >= 8, reset to 8
BCC NO_RESET2 ; |
LDA #$08 ; |
STA $18D2 ; /
NO_RESET2 JSL $02ACE5 ; give mario points
LDY $18D2 ; \
CPY #$08 ; | if consecutive enemies stomped < 8 ...
BCS NO_SOUND2 ; |
LDA STAR_SOUNDS,y ; | ... play sound effect
STA $1DF9 ; /
NO_SOUND2 RTS ; final return


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; hammer routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

X_OFFSET dcb $06,$FA
X_OFFSET2 dcb $00,$FF

SUB_HAMMER_THROW
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

PHX
TYX

LDA #$20 ; \ sound effect
STA $1DF9

LDA #$08
STA $14C8,x

PHX
LDA #$02
JSL RANDOM
TAX
LDA SPRITE_TO_GEN,x ; \ set sprite number for new sprite
PLX

;LDA #$3A
STA $7FAB9E,x
JSL $07F7D2
JSL $0187A7
LDA #$08
STA $7FAB10,x
PLX

PHY
LDA $157C,x
TAY
LDA $E4,x ; \ set xlo position for new sprite
CLC
ADC X_OFFSET,y
PLY
STA $00E4,y

PHY
LDA $157C,x
TAY
LDA $14E0,x ; | set xhi position for new sprite
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 #$88
STA EXTRA_BITS,x
PLX ; /

LDA $157C,x
STA $157C,y

RETURN67 RTS ; return

RANDOM PHX
PHP
SEP #$30
PHA
JSL $01ACF9 ; Random number generation routine
PLX
CPX #$FF ;\ Handle glitch if max is FF
BNE NORMALRT ;|
LDA $148B ;|
BRA ENDRANDOM ;/
NORMALRT INX ; Amount in plus 1
LDA $148B ;\
STA $4202 ;| Multiply with hardware regsisters
STX $4203 ;|
NOP ;|
NOP ;|
NOP ;|
NOP ;/
LDA $4217
ENDRANDOM PLP
PLX
RTL

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Be killed by shells
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HIT_ROUTINE:

HITPOINTS ;TXA ; \ Process every 4 frames
;EOR $13 ; |
;AND #$03 ; |
;BNE RETURN_BOB ; /
LDY #$09 ; \ Loop over sprites:


KILLED_X_SPEED:
dcb $FF,$00
STUNNED_X_SPEED:
dcb $10,$EF

SpriteInteract:
ldy #$0b
InteractLoop:
lda $14c8,y
cmp #$09
bcs ProcessSprite
NextSprite:
dey
bpl InteractLoop
rts

ProcessSprite:
PHX
TYX
JSL GetSpriteClippingB
PLX
JSL GetSpriteClippingA
JSL CheckForContact
bcc NextSprite

PHX
TYX

JSL ShowSprContactGfx

lda $14C8,x
CMP #$0A
BEQ NoKill

LDA #$02 ; Kill thrown sprite
STA $14C8,x

LDA #$D0 ; Set killed Y speed
STA $AA,x

LDY #$00 ; Set killed X speed
LDA $B6,x
BPL SetSpeed
INY
SetSpeed:
LDA KILLED_X_SPEED,y
STA $B6,x
NoKill:
PLX
HandleBirdoHit:
LDA #$28 ; Play sound effect
STA $1DFC

LDA #$30 ; Set stunned timer
STA $1564,x

INC $1528,x

LDA $1528,x

cmp #Lemmy_Hits
bcc Return3

LDA #$02 ; Kill Lemmy
STA $14C8,x
STZ $B6,x ; Set X speed
LDA #$F0 ; Set Y speed
STA $AA,x

GOAL DEC $13C6 ; prevent Mario from walking at the level end
LDA #$FF ; \ set goal
STA $1493 ; /
LDA #$0B ; \ set ending music
STA $1DFB ; /
RTS ; return

LDA #$03
STA $1602,x ; / write frame to show
Return3:
rts


ProcessCachedHit:
LDA $1528,x

BPL Return3
AND #$7F
STA $1528,x

BRA HandleBirdoHit


(Die Graphics Routine usw. hab ich mal weggelassen...)
geschrieben am 16.01.2011 15:30:00 in The Snowman Invasion
( Link )
Das Spielen des Levels hat mir sehr viel Spaß gemacht. Die Grafik ist dir sehr gut gelungen. Es gibt einige Dinge, die mich besonders beeindruckten:
- Es fällt Schnee von den Bäumen im Hintergrund, wenn Mario die Äste berührt.
- Der HDMA-Effekt in der Höhle, mit beweglichen Farbverläufen, sehr gut!
- Die verschiedenen Schneemänner finde ich auch toll. Ich würde den hin- und herhüpfenden Schneemann aber so ändern, dass er immer Mario hinterherhüpft.
- Der Text am Ende, der sogar genau "weiß", wie viele Stern-Taler man gesammelt hat.

Wenn Mario stirbt, steht immer "Time out" (oder so) da, das würde ich entfernen, wenn das geht.

Du hast da ein sehr eindrucksvolles und aufwändiges Level gebaut. Planst du, einen ganzen Hack mit mehreren oder gar vielen Levels draus zu machen? Dann würde ich das Projekt auf jeden Fall im Auge behalten.
geschrieben am 16.01.2011 18:33:47 in Allgemeine SMW Hacking Fragen
( Link )
Weiß jemand, ob man den Bouce-Sound des Noteblocks ändern kann? Konnte in der ROM-Map dazu nichts finden.
geschrieben am 04.02.2011 20:59:51 in Du suchst Custom Sprites/Blocks/Music oder Graphics? Hier!
( Link )
Es gibt doch diesen Sprite/Generator, der dafür sorgt, dass Mario, wenn er am unteren Ende des Screens verschwindet, oben wieder auftaucht und umgekehrt.
Weiß jemand, wie dieser Sprite heißt und wo ich ihn finden kann (wenn er jemals veröffentlicht wurde)?
geschrieben am 05.02.2011 14:23:00 in Du suchst Custom Sprites/Blocks/Music oder Graphics? Hier!
( Link )
Der zweite ist es, vielen Dank.
geschrieben am 11.02.2011 23:34:15 in Allgemeine Diskussionen
( Link )
Goethe würde sich im Grabe umdrehen, wenn er wüsste, was für Schindluder an eurer Schule getrieben wurde...den Klassiker "Faust" einfach gegen zwei Schnulli-Bücher abzuwählen. Zu unserer Zeit war Faust noch Pflicht .
Ich gebe aber zu, dass Deutsch in den späteren Schuljahren eines meiner Hass-Fächer war...dieses ewige Interpretieren und Analysieren, furchtbar!
geschrieben am 12.02.2011 12:40:32 in Screenshots/Videos Thread - Zeige dein Zeug h(i)er!
( Link )
Gefällt mir alles gut. Allerdings würde ich versuchen, den Farbübergang von der Sonne und der letzten "HDMA"-Farbe zum normalen Himmel "flüssiger" zu gestalten, also so, dass die Abgrenzungen nicht so klar erkennbar sind.