Beiträge von Mawwo7

geschrieben am 16.12.2010 15:13:02 in Automatic walk
( Link )
hey weiß zufällig jemand wie ich es in dem code hier einbaue , dass mario auch springen kann und dass mario auch langsamer läuft ?
Code
;================================;
;Autowalk, version 99999.9999999 ;
;Made by Iceguy ;
;================================;

;Uses Extra bit: YES
;If set, you'll walk left instead.

!Speed = $18 ; Speed to walk at.
; 00 = Stationary.
; 01 = HORRIBLY slow.
; 08ish = standard walking.
; 20ish = really fast.
; Don't go beyond 25 or so, might glitch through walls.

!DisableControls = $01 ; Disable spin-jumping, jumping etc. (00 = No, 01 = Yes)

;===========================================================================================================================================

print "INIT ",pc
LDY #$00
LDA $7FAB10,x
AND #$04
STA $1588,x ; Store the extra bit in $1588,x so we can use it later.
LDA $1588,x
BEQ LOLno ; If bit = clear, use left.
INY
LOLno:
STY $76
RTL

print "MAIN ",pc
PHB
PHK
PLB
JSR LOOOOOL
PLB
RTL

;==========;
; Main ;
;==========;
LOOOOOL:
LDA #!DisableControls
BEQ Lol
LDA #$FF
STA $0DAA
STA $0DAC
Lol:
LDA $1588,x
BEQ LOLOLOLOL
STZ $76
LDA #!Speed
EOR #$FF
INC A
BRA ROFLCOPTERS
LOLOLOLOL:
LDA #$01
STA $76
LDA #!Speed
ROFLCOPTERS:
STA $7B
LDA $77
AND #$03
BEQ ROFLOL
LDA $1588,x
EOR #$04
STA $1588,x
STZ $77
BRA Lol
ROFLOL:
RTS
#
geschrieben am 16.12.2010 15:37:08 in Automatic walk
( Link )
ach tatsächlich .. danke
#
geschrieben am 20.12.2010 15:34:14 in Custom Block problem
( Link )
HEy leute ich habe den custom block runtergeladen , welcher Mario nur durclässt wenn man 50 münzen hat ....er funktioniert auch.... nun wollte ich die asm datei aber so ändern , dass man nur 8 Münzen braucht um durchzukommen ..und ich habe hier nun die beiden codes ..oben der normale mit 50 münzen und unten der geänderte .... wobei der von mir geänderte , sich aber genau so verhält wie der obere originale ...
Code
JMP MarioBelow : JMP MarioAbove : JMP MarioSide : JMP SpriteV : JMP SpriteH : JMP MarioCape : JMP MarioFireBall

MarioBelow:
MarioAbove:
MarioSide:

;Be like 130 until mario has 50 coins then let him pass

LDX #$29 ; save correct sound effect for later
LDA $0660
CMP #$01 ; if $0660 = 1.., block = passable with SFX
BEQ Correct
CMP #$02 ; if $0660 = 2.., block = passable with no SFX
BEQ MarioFireBall
LDA $0DBF
CMP #$32 ; if coins aren't 50
BCC Wrong ; jump to Wrong
SEC
SBC #$32 ; subtract 50
STA $0DBF
LDA #$01
STA $0660 ; set flag to indicate that the block is passable
BRA Correct
Wrong:
LDA #$30
LDY #$01 ; cement
STA $1693
LDX #$2A ; wrong sfx
STX $1DFC
RTL
Correct:
STX $1DFC ; store correct sound effect which was preserved earlier
LDA #$02 ; set flag to 02 to indicate it's been passed already
STA $0660
SpriteV:
SpriteH:
MarioCape:
MarioFireBall:
RTL


Und das ist mein geänderter code
Code
JMP MarioBelow : JMP MarioAbove : JMP MarioSide : JMP SpriteV : JMP SpriteH : JMP MarioCape : JMP MarioFireBall

MarioBelow:
MarioAbove:
MarioSide:

;Be like 130 until mario has 8 coins then let him pass

LDX #$29 ; save correct sound effect for later
LDA $0660
CMP #$01 ; if $0660 = 1.., block = passable with SFX
BEQ Correct
CMP #$02 ; if $0660 = 2.., block = passable with no SFX
BEQ MarioFireBall
LDA $0DBF
CMP #$32 ; if coins aren't 8
BCC Wrong ; jump to Wrong
SEC
SBC #$32 ; subtract 8
STA $0DBF
LDA #$01
STA $0660 ; set flag to indicate that the block is passable
BRA Correct
Wrong:
LDA #$30
LDY #$01 ; cement
STA $1693
LDX #$2A ; wrong sfx
STX $1DFC
RTL
Correct:
STX $1DFC ; store correct sound effect which was preserved earlier
LDA #$02 ; set flag to 02 to indicate it's been passed already
STA $0660
SpriteV:
SpriteH:
MarioCape:
MarioFireBall:
RTL


jetzt versteh ich aber nciht , warum beide blöcke noch 50 münzen fordern
#
geschrieben am 20.12.2010 16:30:27 in Custom Block problem
( Link )
achso ja verstehe, dankeschön
#
geschrieben am 10.03.2011 1:43:52 in Boss Sprite etwas verändern
( Link )
Hallo Leute. Ich hätte gerne gewusst wie ich bei diesem Sprite hier ausschalte , dass er nach seiner Niederlage das Ziel aktiviert :/ Hoffe man kann mir weiterhelfen!


Code
; Kirby Boss
; HuFlungDu
; This is just a boss I created for a hack I made and converted to be usable
; in normal mario hacks in an attemt to expand the available boss pool here
; Assembles with xkas, so use Romi's sprite tool.
; For once I was too lazy to comment my code. Sorry.
; Thanks to TLMB for most of the kirby graphics.
; Extra bit: I put it in there, but it doesn' work for some reason and I'm too lazy
; to figure out why. It should use the secret exit if the bit is set though...
; No credit necessary

!Action = $1510
!FrameNum = $1570
!FrameTimer = $163E
!DontDo = $151C
!WalkTimer = $1540
!HP = $C2
!HPCountDown = $1528
!Flashing = $1558

!FlashTimer = $2F ;How long Kirby flashes and is invincible after being hit
!TotalHP = $10 ;How much HP kirby has
!HPTaken = $02 ;How much HP he takes when hit
!FireSpriteNum = $07 ;The sprite number you inserted his projectile as




print "INIT ",pc
JSR SUB_HORZ_POS
TYA
STA $157C,x
STZ !FrameNum,x
LDA #$01
STA !DontDo,x
LDA #$03
STA !Action,x
LDA #$30
STA !FrameTimer,x
LDA #!TotalHP
STA !HP,x
RTL
print "MAIN ",pc
PHB
PHK
PLB
JSR SPRITE_ROUTINE ;Jump to the routine to keep organized
PLB
RTL


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; SPRITE_ROUTINE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
speed:
db $10,$F0
Yflip:
db $00,$00,$00,$01,$01,$01,$01,$00
Xflip:
db $01,$01,$01,$01,$00,$00,$00,$00
t_BOUNCE:
db $E4,$1C ;x speed to give mario when he stomps the sprite
SPRITE_ROUTINE:
LDA $9D
BEQ +
.JumpReturn
JMP Return
+
LDA $14C8,x
CMP #$08
BNE .JumpReturn
LDA !HPCountDown,x
BEQ +
DEC !HPCountDown,x
DEC !HP,x
+
LDA !HP,x
BNE +
LDA !Action,x
CMP #$0A
BCS +
LDA #$0A
STA !Action,x
LDA #$20
STA !FrameTimer,x
+
LDA !Action,x
CMP #$0A
BCS +
JSL $019138
+
JSR SUB_OFF_SCREEN_X0
LDA !Action,x
CMP #$0A
BCS .NoContact
JSL $01A7DC ; \ check for mario/sprite contact
BCC .NoContact ; / do nothing if no contact

.Contact
JSR SUB_VERT_POS ; \
LDA $0E ; | if mario isn't above sprite, and there's vertical contact...
CMP #$E6 ; | ... sprite wins
BPL .SpriteWins ; /
LDA $7D ; \ if mario speed is upward, return
BMI .NoContact ; /

LDA #!FlashTimer ; \ prevent the Double-Edge glitch from happening
STA !Flashing,x ; /
LDA #!HPTaken
STA !HPCountDown,x

LDA $15 ; Save controller state
PHA
ORA #$C0 ; Set holding X/Y and A/B
STA $15
JSL $01AA33 ; set mario speed
PLA
STA $15

JSR SUB_HORZ_POS
TYA
EOR #$01
TAY
LDA t_BOUNCE,y ; | bounce away horizontally
STA $7B ; /

JSL $01AB99 ; display contact graphic
LDA #$20
STA $1DF9
JMP .NoContact

.SpriteWins
LDA $154C,x ; \ if disable interaction set...
ORA $15D0,x ; | ...or sprite being eaten...
BNE .NoContact ; / ...return
LDA $1490 ; \ Branch if Mario has a star
BNE .NoContact ; /
JSL $00F5B7 ; damage Mario
.NoContact
LDA !Action,x
ASL
TAY
REP #$20
LDA ActionPointers,y
PHA
SEP #$20
RTS

Dieing:
LDA #$09
STA !FrameNum,x
LDA !FrameTimer,x
BNE +
LDA #$C0
STA $AA,x
LDA #$0B
STA !Action,x
LDA #$23 ; \ sound effect
STA $1DF9 ; /
+
JMP Return

Spinning:
LDA !FrameNum,x
CMP #$0A
BCS +
LDA #$0A
STA !FrameNum,x
+
LDA $13
BIT #$03
BNE +
INC !FrameNum,x
LDA !FrameNum,x
CMP #$12
BCC +
LDA #$0A
STA !FrameNum,x
+
LDA !FrameNum,x
SEC
SBC #$0A
PHX
TAX
LDA Yflip,x
XBA
LDA Xflip,x
PLX
STA $157C,x
XBA
STA $1534,x
STZ $B6,x
LDA #$88
STA $1686,x
JSL $01802A
JMP Return



Walkleft:
LDA #$E0
STA $B6,x
LDA #$01
STA $157C,x
JMP BothWRL
Walkright:
LDA #$20
STA $B6,x
LDA #$00
STA $157C,x
BothWRL:
LDA !FrameNum,x
BNE +
LDA #$01
STA !FrameNum,x
+
LDA !WalkTimer,x
BNE +
LDA #$08
STA !WalkTimer,x
INC !FrameNum,x
LDA !FrameNum,x
CMP #$05
BCC +
LDA #$01
STA !FrameNum,x
+

JSL $01802A
LDA !Action,x
BEQ ++
LDA $E4,x
CMP #$10
BCS +
LDA #$10
STA $E4,x
LDA #$02
STA !Action,x
+
BRA +
++
LDA $E4,x
CMP #$E0
BCC +
LDA #$E0
STA $E4,x
LDA #$03
STA !Action,x
+
LDA #$30
STA !FrameTimer,x
;JMP Return
;RTS ;End the routine

Return:
LDA !Flashing,x
LSR
BIT #$01
BNE +
JSR SUB_GFX
+
RTS

Waitingright:
STZ $157C,x
LDA #$00
STA !FrameNum,x
LDA !FrameTimer,x
BNE +
PHX
JSR GetRand
TAX
LDA RightActions,x
PLX
STA !Action,x
LDA #$10
STA !FrameTimer,x
+
JMP Return


Waitingleft:
LDA #$01
STA $157C,x
LDA #$00
STA !FrameNum,x
LDA !FrameTimer,x
BNE +
PHX
JSR GetRand
TAX
LDA LeftActions,x
PLX
STA !Action,x
LDA #$10
STA !FrameTimer,x
+
JMP Return

Jumpingright:
LDA #$10
STA $B6,x
LDA #$06
STA !FrameNum,x
STZ $157C,x
STZ !DontDo,x
LDA $E4,x
CMP #$E0
BCC +
LDA #$02
STA !DontDo,x
LDA #$E0
STA $E4,x
+
JMP BothJLR


Jumpingleft:
LDA #$F0
STA $B6,x
LDA #$06
STA !FrameNum,x
LDA #$01
STA $157C,x
STZ !DontDo,x
LDA $E4,x
CMP #$10
BCS +
LDA #$01
STA !DontDo,x
LDA #$10
STA $E4,x
+
BothJLR:
LDA $1588,x
BIT #$04
BEQ +
LDA !DontDo,x
BEQ ++
CMP #$01
BNE +++
LDA #$02
STA !Action,x
LDA #$30
STA !FrameTimer,x
STZ !DontDo,x
BRA ++
+++
LDA #$03
STA !Action,x
LDA #$30
STA !FrameTimer,x
STZ !DontDo,x
++
LDA !WalkTimer,x
BNE ++
LDA #$10
STA !WalkTimer,x
++
STZ $B6,x
LDA #$08
STA !FrameNum,x
+
LDA !WalkTimer,x
CMP #$01
BNE +
LDA #$C0
STA $AA,x
LDA #$01
STA $1DFA
+
JSL $01802A
JMP Return
;RTS
Kickright:
LDA #$40
STA $B6,x
STZ $157C,x
LDA $E4,x
CMP #$E0
BCC +
LDA #$E0
STA $E4,x
LDA #$03
STA !Action,x
LDA #$30
STA !FrameTimer,x
+
JMP BothKLR
Kickleft:
LDA #$C0
STA $B6,x
LDA #$01
STA $157C,x
LDA $E4,x
CMP #$10
BCS +
LDA #$10
STA $E4,x
LDA #$02
STA !Action,x
LDA #$30
STA !FrameTimer,x
+
BothKLR:
LDA #$07
STA !FrameNum,x
JSL $01802A
JMP Return

Fireright:
STZ $157C,x
LDA #$50
STA $0D
LDA #$08
STA $0E
LDA !FrameTimer,x
BNE +
LDA #$02
STA !Action,x
LDA #$30
STA !FrameTimer,x
+
JMP BothFRL
Fireleft:
LDA #$01
STA $157C,x
LDA #$B0
STA $0D
LDA #$F8
STA $0E
LDA !FrameTimer,x
BNE +
LDA #$03
STA !Action,x
LDA #$30
STA !FrameTimer,x
+
BothFRL:
LDA #$05
STA !FrameNum,x
LDA !FrameTimer,x
CMP #$06
BNE +
LDA #$01
STA $07
LDA #!FireSpriteNum
STA $06
LDA $E4,x
CLC
ADC $0E
STA $08
LDA $14E0,x
STA $09
LDA $D8,x
SEC
SBC #$05
STA $0A
LDA $14D4,x
STA $0B
LDA $157C,x
STA $0C
JSR SpawnCust
LDA #$06
STA $1DFC
+
JMP Return


ActionPointers:
dw Walkright-1
dw Walkleft-1
dw Waitingright-1
dw Waitingleft-1
dw Jumpingright-1
dw Jumpingleft-1
dw Kickright-1
dw Kickleft-1
dw Fireright-1
dw Fireleft-1
dw Dieing-1
dw Spinning-1

RightActions:
db $00,$02,$04,$06,$08

LeftActions:
db $01,$03,$05,$07,$09

GetRand:
LDA $7F9C40 ;This is an address used to store your seed value
STA $4202 ;\Multiplication
LDA $94 ;|This could be a static number or could be generated
;|By another routine, your choice
STA $4203 ;/
NOP #4 ;Wait for it to finish
REP #$20 ;\Get the result back out and
LDA $4216 ;|add in your "b" value
CLC ;|
ADC $13 ;/(This works same as !Multiplicand earlier, but it's 16bit)
STA $4204 ;\Set up division
SEP #$20 ;|(Used as MOD in this case)
LDA #$05 ;|This is the value you want to do MOD with
STA $4206 ;/Can also be static or generated
NOP #8 ;Wait for it to finish
LDA $4216 ;\Get back the low byte of remainder
STA $7F9C40 ;/And make it your new seed
RTS

SpawnCust:
JSL $02A9DE
BMI Return1
PHX
TYX
LDA $07
STA $14C8,x
LDA $06
STA $7FAB9E,x
JSL $07F7D2
JSL $0187A7
LDA #$08
STA $7FAB10,x
LDA #$0E
STA $163E,x

;Store it to Mario's position.
LDA $08
STA $E4,x
LDA $09
STA $14E0,x
LDA $0A
STA $D8,x
LDA $0B
STA $14D4,x
LDA $0C
STA $157C,x
LDA $0D
STA $B6,x
PLX
Return1:
RTS

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

TilePointers:
dw Tile1,Tile2,Tile3,Tile4,Tile5,Tile6,Tile7,Tile8,Tile9,Tile10
dw Tile11,Tile12,Tile13,Tile14,Tile15,Tile16,Tile17,Tile18
Tile1:
db $00,$02,$20,$22
Tile2:
db $04,$06,$24,$26
Tile3:
db $08,$0A,$28,$2A
Tile4:
db $0C,$0E,$2C,$2E
Tile5:
db $08,$0A,$28,$2A
Tile6:
db $40,$42,$60,$62
Tile7:
db $44,$46,$64,$66
Tile8:
db $48,$4A,$68,$6A
Tile9:
db $4C,$4E,$6C,$6E
Tile10:
db $88,$8A,$A8,$AA
Tile11:
db $8C,$8E,$AC,$AE
Tile12:
db $C0,$C2,$E0,$E2
Tile13:
db $C4,$C6,$E4,$E6
Tile14:
db $C0,$C2,$E0,$E2
Tile15:
db $8C,$8E,$AC,$AE
Tile16:
db $C0,$C2,$E0,$E2
Tile17:
db $C4,$C6,$E4,$E6
Tile18:
db $C0,$C2,$E0,$E2
YOff:
db $F0,$F0,$00,$00
XOff:
db $08,$F8,$08,$F8


SUB_GFX: JSR GET_DRAW_INFO ;Get all the drawing info, duh
LDA $157C,x
STA $06
LDA $1534,x
STA $07
PHX
LDA !FrameNum,x
ASL
TAX
REP #$20
LDA TilePointers,x
STA $04
SEP #$20
LDX #$03
loop:
LDA $00
PHX
LDX $06
BNE +
PLX
CLC
ADC XOff,x
BRA ++
+
PLX
SEC
SBC XOff,x
++
STA $0300,y
LDA $01
PHX
LDX $07
BNE +
PLX
CLC
ADC YOff,x
BRA ++
+
PLX
SEC
SBC YOff,x
SEC
SBC #$08
++
STA $0301,y
;PHX
PHY
TXY
LDA ($04),y
PLY
STA $0302,y
PHX
LDX $15E9
LDA $15F6,x
ORA $64
LDX $06
BNE +
ORA #$40
+
LDX $07
BEQ +
ORA #$80
+
PLX
STA $0303,y
INY
INY
INY
INY
;DEC $05
DEX
BPL loop
PLX
LDA #$03
LDY #$02 ;|they were all 16x16 tiles
JSL $01B7B3 ;/and then draw em
EndIt:
RTS



SUB_HORZ_POS: LDY #$00
LDA $94
SEC
SBC $E4,x
STA $0F
LDA $95
SBC $14E0,x
BPL SPR_L16
INY
SPR_L16:
RTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 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: db $0C,$1C
SPR_T2: db $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: db $40,$B0
SPR_T13: db $01,$FF
SPR_T14: db $30,$C0,$A0,$C0,$A0,$F0,$60,$90 ;bank 1 sizes
db $30,$C0,$A0,$80,$A0,$40,$60,$B0 ;bank 3 sizes
SPR_T15: db $01,$FF,$01,$FF,$01,$FF,$01,$FF ;bank 1 sizes
db $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
AND #$01
ORA $03
STA $01
TAY
LDA $1A
CLC
ADC SPR_T14,y
ROL $00
CMP $E4,x
PHP
LDA $1B
LSR $00
ADC SPR_T15,y
PLP
SBC $14E0,x
STA $00
LSR $01
BCC SPR_L31
EOR #$80
STA $00
SPR_L31: LDA $00
BPL RETURN_35
ERASE_SPRITE: LDA $14C8,x ; \ if sprite status < 8, permanently erase sprite
CMP #$08 ; |
BCC KILL_SPRITE ; /
LDY $161A,x
CPY #$FF
BEQ KILL_SPRITE
LDA #$00
STA $1938,y
KILL_SPRITE: STZ $14C8,x ; erase sprite
LDA $7FAB10,x ; \ set secret exit if the extra bit is set
BIT #$04 ; |
BEQ + ; /
LDA #$01 ; \ set secret exit
STA $141C ; /
+
INC $13C6 ; prevent Mario from walking at the level end
LDA #$FF ; \ set goal
STA $1493 ; /
LDA #$0B ; \ set ending music
STA $1DFB ; /
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
LSR A
AND #$01
STA $01
TAY
LDA $1C
CLC
ADC SPR_T12,y
ROL $00
CMP $D8,x
PHP
LDA.w $001D
LSR $00
ADC SPR_T13,y
PLP
SBC $14D4,x
STA $00
LDY $01
BEQ SPR_L38
EOR #$80
STA $00
SPR_L38:
LDA $00
BPL RETURN_35
BMI ERASE_SPRITE

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

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; SUB_VERT_POS
; This routine determines if Mario is above or below the sprite. It sets the Y register
; to the direction such that the sprite would face Mario
; It is ripped from $03B829
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SUB_VERT_POS:
LDY #$00
LDA $96
SEC
SBC $D8,x
STA $0F
LDA $97
SBC $14D4,x
BPL SPR_L11
INY
SPR_L11:
RTS
#
geschrieben am 10.03.2011 13:39:00 in Boss Sprite etwas verändern
( Link )
Danke dass du dir die Mühe gemacht hast , werde es dann gleich mal ausprobiern ;P Kann den Sprite ja natürlich vorher kopiern falls was schief geht (:
#
geschrieben am 10.03.2011 14:38:57 in Boss Sprite etwas verändern
( Link )
Ich habs nun probiert und es hat leider nicht geklappt :l
#
geschrieben am 10.03.2011 16:49:53 in Boss Sprite etwas verändern
( Link )
Also ich habe das hier gelöscht
Code
               LDA $7FAB10,x        ; \ set secret exit if the extra bit is set
BIT #$04 ; |
BEQ + ; /
LDA #$01 ; \ set secret exit
STA $141C ; /
+
INC $13C6 ; prevent Mario from walking at the level end
LDA #$FF ; \ set goal
STA $1493 ; /
LDA #$0B ; \ set ending music
STA $1DFB ; /


Und dieser Boss löst trotzdem noch das ziel aus nachdem ich ihn besiegt habe :/
#
geschrieben am 30.03.2011 15:12:24 in Status Bar
( Link )
Hallo zusammen, wollte mal fragen wie man eigentlich die Status Bar ändert. also ich kann die gfx irgendwie nciht finden :/
#
geschrieben am 30.03.2011 19:55:07 in Status Bar
( Link )
also den Status bar editor kenn ich aber das mit gfx 28 und dem yychr versuch ich ma ;D danke soweit (:
#
geschrieben am 31.03.2011 19:35:09 in -se / MORE.ASM
( Link )
hallo zusammen. ich habe in der More.asm gelesen dass man sie nur benutzen soll wenn man nciht die -se Funktion verwendet hat. aber ich habe jetzt schon in der Rom die -se Funktion verwendet und bräuchte trotzdem noch den MORE.ASM patch :/ was würde den jetzt passiern wenn ich beides verwende sowohl -se als auch more.asm ?
#
geschrieben am 07.04.2011 14:55:50 in Layer 3 Nebel
zuletzt bearbeitet von Mawwo7 am 07.04.2011 20:06:36.
( Link )
Hallo zusammen. ihr kennt wahrscheinlich alle diesen rand , der im emulator um der overworld rum zu sehen ist, also dieser braune rand wo mario drin ist , die anzahl der leben und einige pilze und sterne etc. Nun wollte ich mal fragen wie ich die farben davon verändere. hab gehört dass es 6-7 farben sind und das diese ganz komisch auf der palette verteilt sind :/
#
geschrieben am 07.04.2011 20:05:43 in Layer 3 Nebel
( Link )
hat sich erledigt , hab ne andere Frage : Wie kann man die gfx von dem layer 3 nebel ändern :/ ?
#
geschrieben am 14.04.2011 16:15:36 in Sprite Änderung
( Link )
Hallo zusammen , kann mir jemand verraten was ich in diesen Sprite schreiben muss , damit er sich auf der Stelle auf und ab bewegt ? also er soll wirklich nur ganz leicht auf und ab schwanken.
Code
		EXTRA_BITS = $7FAB10
NEW_SPRITE_NUM = $7FAB9E ;08 bytes custom sprite number
EXTRA_PROP_1 = $7FAB28

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 Larry's stun duration
Hits = $08 ; This is how many hits it takes to kill Larry (default == 3)

RAM_HitCount = $1534
SPRITE_TO_GEN dcb $5A,$5A,$5A ;magie,shells,magie ...
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 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

SPRITE_GRAVITY = $00

X_SPEED dcb $08,$F8,$08,$F8,$0C,$F4,$10,$F0,$14,$EC
KILLED_X_SPEED dcb $F0,$10
TIME_TILL_THROW dcb $68,$69

STAR INC RAM_ThrowTimer,x
RETURN RTS
START_HB_CODE JSR SUB_GFX ; graphics routine
LDA $14C8,x ; \
CMP #$02 ; } ... not (killed with spin jump [4] or star[2])
BEQ STAR
CMP #$08 ; | if status != 8, return
BNE RETURN ; /
LDA $9D ; \ if sprites locked, return
BNE RETURN ; /
LDA #SPRITE_GRAVITY
STA $AA,x ;Gravity update if zero.
BNE RETURN

JSR SUB_OFF_SCREEN_HB ; handle off screen situation

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 $1588,x ; \ if sprite is in contact with an object...
AND #$03 ; |
BEQ NO_OBJ_CONTACT ; |
LDA $157C,x ; | flip the direction status
EOR #$01 ; |
STA $157C,x ; /

NO_OBJ_CONTACT LDA EXTRA_PROP_1,x ; don't stay on ledges if bit is set
AND #$02 ;
BEQ FALLING ;

LDA $1588,x ; run the subroutine if the sprite is in the air...
ORA $151C,x ; ...and not already turning
BNE ON_GROUND ;
JSR SUB_CHANGE_DIR ;
LDA #$01 ; set that we're already turning
STA $151C,x ;

ON_GROUND LDA $1588,x ; if on the ground, reset the turn counter
AND #$04
BEQ IN_AIR
STZ $151C,x
STZ $AA,x
BRA X_TIME

FALLING LDA $1588,x ; if on the ground, reset the turn counter
AND #$04
BEQ IN_AIR
LDA #$10 ; \ y speed = 10
STA $AA,x ; /

Walk_Normal:
LDA $151C,x ;
TAY ;
LDA $1540,x ;
BEQ X_TIME ;
LDA X_SPEED,y ; | set y speed
STA $B6,x ; /
BRA IN_AIR

X_TIME
LDA $1528,x ; \ set x speed based on total HP
ASL
CLC
ADC $157C,x ; and direction
TAY

;LDY $157C,x ; \ set x speed based on direction
LDA X_SPEED,y ; |
STA $B6,x ; /

IN_AIR JSL $01802A ; update position based on speed values

LDA Invuln_Timer,x ; \
CMP #$00 ; | Ignore if Larry 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 DONE_WITH_SPEED ; |
LDA $151C,x
INC A
AND #$03
STA $151C,x

DONE_WITH_SPEED JSL $018032 ; interact with sprites
JSL $01A7DC ; check for mario/sprite contact (carry set = contact)

LDA $1490 ; \ if mario star timer > 0, goto HAS_STAR
BNE HAS_STAR ; / NOTE: branch to RETURN_24 to disable star killing

NO_CONTACT JSR KILL_BOOMERANGS
RTS ; return
KILL_BOOMERANGS
RTS

RETURN_24 RTS ; final return

HAS_STAR LDA #$02 ; \ status = 2 (being killed by star)
STA $14C8,x ; /
LDA #$D0 ; \ set y speed
STA $AA,x ; /
JSR SUB_HORZ_POS ; get new direction
LDA KILLED_X_SPEED,y ; \ set x speed based on 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 #$10 ; \ sound effect (can also be $20)
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 #$50
JSR CODE_01BF6A
LDX $15E9
LDA $00
STA $00AA,y
LDA $01
STA $00B6,y
;RETURN1 RTS
; 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

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; aiming routine
; input: accumulator should be set to total speed (x+y)
; output: $00 = y speed, $01 = x speed
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

CODE_01BF6A: STA $01
PHX ;\ preserve sprite indexes of Magikoopa and magic
PHY ;/
JSR SUB_VERT_POS ; $0E = vertical distance to Mario
STY $02 ; $02 = vertical direction to Mario
LDA $0E ;\ $0C = vertical distance to Mario, positive
BPL CODE_01BF7C ; |
EOR #$FF ; |
CLC ; |
ADC #$01 ; |
CODE_01BF7C: STA $0C ;/
JSR SUB_HORZ_POS ; $0F = horizontal distance to Mario
STY $03 ; $03 = horizontal direction to Mario
LDA $0F ;\ $0D = horizontal distance to Mario, positive
BPL CODE_01BF8C ; |
EOR #$FF ; |
CLC ; |
ADC #$01 ; |
CODE_01BF8C: STA $0D ;/
LDY #$00
LDA $0D ;\ if vertical distance less than horizontal distance,
CMP $0C ; |
BCS CODE_01BF9F ;/ branch
INY ; set y register
PHA ;\ switch $0C and $0D
LDA $0C ; |
STA $0D ; |
PLA ; |
STA $0C ;/
CODE_01BF9F: LDA #$00 ;\ zero out $00 and $0B
STA $0B ; | ...what's wrong with STZ?
STA $00 ;/
LDX $01 ;\ divide $0C by $0D?
CODE_01BFA7: LDA $0B ; |\ if $0C + loop counter is less than $0D,
CLC ; | |
ADC $0C ; | |
CMP $0D ; | |
BCC CODE_01BFB4 ; |/ branch
SBC $0D ; | else, subtract $0D
INC $00 ; | and increase $00
CODE_01BFB4: STA $0B ; |
DEX ; |\ if still cycles left to run,
BNE CODE_01BFA7 ;/ / go to start of loop
TYA ;\ if $0C and $0D was not switched,
BEQ CODE_01BFC6 ;/ branch
LDA $00 ;\ else, switch $00 and $01
PHA ; |
LDA $01 ; |
STA $00 ; |
PLA ; |
STA $01 ;/
CODE_01BFC6: LDA $00 ;\ if horizontal distance was inverted,
LDY $02 ; | invert $00
BEQ CODE_01BFD3 ; |
EOR #$FF ; |
CLC ; |
ADC #$01 ; |
STA $00 ;/
CODE_01BFD3: LDA $01 ;\ if vertical distance was inverted,
LDY $03 ; | invert $01
BEQ CODE_01BFE0 ; |
EOR #$FF ; |
CLC ; |
ADC #$01 ; |
STA $01 ;/
CODE_01BFE0: PLY ;\ retrieve Magikoopa and magic sprite indexes
PLX ;/
RTS ; return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 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 $20,$DF

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 #$F0 ; Set stunned timer
STA $1564,x

INC $1528,x

LDA $1528,x

cmp #Hits
bcc Return3

LDA #$02 ; Kill Larry
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

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; graphics routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TILEMAP: db $84,$82,$80 ; facing right
db $A4,$A2,$A0
db $C4,$C2,$C0

db $80,$82,$84 ; facing left
db $A0,$A2,$A4
db $C0,$C2,$C4

db $8A,$88,$86 ; facing right
db $AA,$A8,$A6
db $CA,$C8,$C6

db $86,$88,$8A ; facing left
db $A6,$A8,$AA
db $C6,$C8,$CA

X_OFFSET: db $00,$10,$20
db $00,$10,$20
db $00,$10,$20

Y_OFFSET: db $E0,$E0,$E0
db $F0,$F0,$F0
db $00,$00,$00

PROPERTIES: db $40,$40,$40
db $40,$40,$40
db $40,$40,$40

db $00,$00,$00
db $00,$00,$00
db $00,$00,$00

SUB_GFX: JSR GET_DRAW_INFO ; sets y = OAM offset
LDA $157C,x
STA $04
ASL A
ASL A
ASL A
CLC
ADC $04
STA $02

PHX
LDX #$08
LOOP_START: PHX
LDA X_OFFSET,x
CLC
ADC $00 ; \ tile x position = sprite y location ($01)
STA $0300,y ; /

LDA Y_OFFSET,x
CLC
ADC $01 ; \ tile y position = sprite x location ($00)
STA $0301,y ; /

TXA
CLC
ADC $02
TAX

PHX
LDA $14
LSR A
LSR A
LSR A
AND #$01
BNE SKIP
TXA
CLC
ADC #$12
TAX
SKIP: LDA TILEMAP,x
STA $0302,y
PLX

PHX
LDX $15E9
LDA $15F6,x ; tile properties xyppccct, format
PLX
ORA PROPERTIES,x
ORA $64 ; add in tile priority of level
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
DEX
BPL LOOP_START

PLX
LDY #$02 ; \ 460 = 2 (all 16x16 tiles)
LDA #$08 ; | A = (number of tiles drawn - 1)
JSL $01B7B3 ; / don't draw if offscreen
RTS ; return




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; SUB_CHANGE_DIR
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;org $019098

SUB_CHANGE_DIR ;LDA $15AC,x
;BNE LABEL41
;LDA #$08
;STA $15AC,x
LDA $B6,x
EOR #$FF
INC A
STA $B6,x
LDA $157C,x
EOR #$01
STA $157C,x
LABEL41 RTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; routines below can be shared by all sprites. they are ripped from original
; SMW and poorly documented
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

STAR_SOUNDS dcb $00,$13,$14,$15,$16,$17,$18,$19

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; $B760 - graphics routine helper - shared
; sets off screen flags and sets index to OAM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 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: db $0C,$1C
SPR_T2: db $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 ; /

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; $B817 - horizontal mario/sprite check - shared
; Y = 1 if mario left of sprite??
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;org $03B817

SUB_HORZ_POS 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

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; SUB_VERT_POS
; This routine determines if Mario is above or below the sprite. It sets the Y register
; to the direction such that the sprite would face Mario
; It is ripped from $03B829
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SUB_VERT_POS LDY #$00 ;A:25A1 X:0007 Y:0001 D:0000 DB:03 S:01EA P:envMXdizCHC:0130 VC:085 00 FL:924
LDA $96 ;A:25A1 X:0007 Y:0000 D:0000 DB:03 S:01EA P:envMXdiZCHC:0146 VC:085 00 FL:924
CLC
ADC #$18
SEC ;A:2546 X:0007 Y:0000 D:0000 DB:03 S:01EA P:envMXdizCHC:0170 VC:085 00 FL:924
SBC $D8,x ;A:2546 X:0007 Y:0000 D:0000 DB:03 S:01EA P:envMXdizCHC:0184 VC:085 00 FL:924
STA $0E ;A:25D6 X:0007 Y:0000 D:0000 DB:03 S:01EA P:eNvMXdizcHC:0214 VC:085 00 FL:924
LDA $97 ;A:25D6 X:0007 Y:0000 D:0000 DB:03 S:01EA P:eNvMXdizcHC:0238 VC:085 00 FL:924
SBC $14D4,x ;A:2501 X:0007 Y:0000 D:0000 DB:03 S:01EA P:envMXdizcHC:0262 VC:085 00 FL:924
BPL SPR_L11 ;A:25FF X:0007 Y:0000 D:0000 DB:03 S:01EA P:eNvMXdizcHC:0294 VC:085 00 FL:924
INY ;A:25FF X:0007 Y:0000 D:0000 DB:03 S:01EA P:eNvMXdizcHC:0310 VC:085 00 FL:924
SPR_L11 RTS ;A:25FF X:0007 Y:0001 D:0000 DB:03 S:01EA P:envMXdizcHC:0324 VC:085 00 FL:924
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; $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_MOLE 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_HB 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
#
geschrieben am 15.04.2011 0:51:00 in Sprite Änderung
( Link )
Ah Danke klappt super (:
#
geschrieben am 15.04.2011 0:53:19 in Allgemeine SMW Hacking Fragen
( Link )
mal ne Frage , ich habe mir nun ein custom block Pack runtergeladen nud irgendwie waren da nur .Bin dateien :S wie füge ich die denn mit BTSD ein ;P ?
#
geschrieben am 15.04.2011 17:16:54 in Allgemeine SMW Hacking Fragen
( Link )
Ach das hätt ich doch sehen müssen :/ danke jungs (:
#
geschrieben am 16.04.2011 1:04:50 in Allgemeine SMW Hacking Fragen
( Link )
was mach ich bei den offsets :l ? im readme stand: setze den offset bei mario above and mario below aber wie setzt man den ? einfach ne 1 reinschreiben oder wie :S ?
#
geschrieben am 16.04.2011 12:21:17 in Allgemeine SMW Hacking Fragen
( Link )
ok also in der readme stand setzte mario below and mario above .. das heißt ich mach überall -1 außer bei below und above ? ;P
#
geschrieben am 08.02.2012 9:32:14 in Marios Treasure Hunt 2
zuletzt bearbeitet von Mawwo7 am 12.02.2012 1:48:10.
( Link )
Nachdem ich MTH1 nach 13 Monaten beendet habe , habe ich seit neuem mit dem Nachfolger beschäftigt.
Hier mal ein klitzekleiner Vorgeschmack von dem, was schon zu zeigen ist.



Hier habe ich vielleicht eine doofe Stelle gescreent, aber ich kam mit dem Grafiken doch gut klar.


Der weiße Diamant gibt 10 Münzen und der pinke gibt 3. Am Anfang jedes Levels werden die Münzen auf 0 gesetzt, da man in jedem Level die Möglichkeit hat, 100 oder mehr zu sammeln.


Der gelbe diamant gibt 1 Münze und der blaue zwei. Nirgens zu sehen ist der grüne, welcher 5 Münzen gibt. Die Mauer im Hintergrund habe ich mit Terra Stripe als Custom Layer 3 eingefügt.


Das im Vordergrund ist selbstgezeichneter Layer 3 - auch der gesamte FG (außer der wasserfall) ist von mir gezeichnet - wie auch der "mushroom"


Die bäume im Vodergrnud sind ebenso selbsgezeichneter Layer 3 , dann sind auch bäume im normalen Layer 1 FG und auch die selben bäume (nur dunkler) im BG. Sprich - 3 mal die selben bäume auf 3 layer.


die beiden löcher sind eine art von verbindung
#