Language…
7 users online: AntonioBaptista, Foxy_9000_, gemstonezVA, iforogt, MarsAmPear, PixelFhacks, UTF - Guests: 112 - Bots: 119
Users: 70,234 (2,555 active)
Latest user: kior

Trying to change the palette of the SMB3 Brown Platform...please help

Hello,

Among the new custom sprites I recently inserted into my hack, one of them was the brown platform from SMB3 that moves to the left (usually) but falls when the player jumps on it.

Anyway, I'm having some difficulty changing the palette of this custom sprite, since it uses palette 8, the sprite seems to be refusing to let me change its palette in the cfg editor, no matter how many times I change it and save.

The reason I wanted to change its palette is, I'm making a new level where it has these platforms, and the SMB3 moving clouds (from 6-2) in one of the areas, and I want to have them looking the same (basically, a moving cloud which stays in the air, and one that falls if it's jumped on), just so that even an alert player will be unable to tell the difference without jumping on one of the moving clouds.

I'm wondering if the palette of the brown platform has to be changed in the ASM file in order for it to be changed? If so, could someone point it out to me, please?

Thanks in advance.
It's possible that it's hardcoded into the sprite.


First off, what do you mean it won't save when you change the palette in the CFG editor? Does it stay 8 when you open the CFG again?


If the sprite stays palette 8 in-game regardless of what the CFG editor says, then the palette is hardcoded. Not hard to fix if you know where you're looking. Each tile can have a different palette, and it's set in the GFX routine. It will look similar to this, but not necessarily exactly the same.
Code
               	LDA $15F6,x             ; get sprite palette info
              	ORA $64                 ; add in the priority bits from the level settings
             	STA $0303,y             ; set properties

The LDA $15F6,x is what's important. That pulls the palette value from what's in the CFG. If that's not there, then the palette is determined somehow else. Do you know enough ASM to change it yourself? If not, you'll have to post the code in the sprite so we can fix it for you.
I guess I should have worded things slightly better, anyway, the cfg editor saves the palette change whenever I save the cfg, even if I close the cfg editor and re-open it up with the cfg file for the brown platform, so I'm starting to think it must be hardcoded, as it seems that changing its palette in the cfg editor has no effect in LM unless I manually change at least one of the colours in palette 8.

Usually I'm good at minor tweaks with sprites in their asm files, but in this case, I'm going to have to post the contents of the ASM file. On a side note, I did find something similar to the small bit of code you mentioned.

EXTRA_PROP_1 = $7FAB28
Xspeed db $00,$00,$F8,$F8

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

dcb "INIT"
PHY
JSR SUB_HORZ_POS
TYA
STA $157C,x
PLY
LDA $1588,x ; if on the ground, reset the turn

counter
ORA #$04
STA $1588,x ; if on the ground, reset the turn

counter
RTL


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

dcb "MAIN"
PHB ; \
PHK ; | main sprite function, just calls

local subroutine
PLB ; |
JSR SPRITE_CODE_START ; |
PLB ; |
RTL ; /


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

SPRITE_GRAVITY = $20

RETURN RTS
SPRITE_CODE_START JSR SPRITE_GRAPHICS ;

graphics routine
LDA $14C8,x ; \
CMP #$08 ; | if status != 8, return
BNE RETURN ; /
LDA $9D ; \ if sprites locked, return
BNE RETURN ; /

JSR SUB_OFF_SCREEN_X0 ; handle off screen

situation
JSL $018022 ; Update x

position, no gravity
LDA $7FAB10,x
AND #$04
LSR A
ORA $157C,x
TAY
LDA Xspeed,y
STA $B6,x
LDA $AA,x
BEQ CODE_038476
STZ $B6,x
LDA $1540,x
BNE CODE_038472
LDA $AA,x
CMP #$40
BPL CODE_038472
CLC
ADC #$02
STA $AA,x
CODE_038472 JSL $01801A
CODE_038476 JSL $01B44F
BCC RETURN2
STZ $B6,x
LDA $AA,x
BNE RETURN2
LDA #$03
STA $AA,x
LDA #$18
STA $1540,x
RETURN2 RTS



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; sprite graphics routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


FallingPlatDispX dcb $00,$10,$10,$20

FallingPlatTiles dcb $85,$86,$86,$88

SPRITE_GRAPHICS JSR GET_DRAW_INFO
PHX
LDX #$03
CODE_038498 LDA $00
CLC
ADC FallingPlatDispX,X
STA $0300,Y
LDA $01
STA $0301,Y
LDA FallingPlatTiles,X
STA $0302,Y
LDA #$01 ;Sprite PAL/GFX

Page
ORA $64
STA $0303,Y
INY
INY
INY
INY
DEX
BPL CODE_038498
PLX
LDY.B #$02
LDA.B #$03
JSL $01B7B3
RTS ; Return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; routines below can be shared by all sprites. they are ripped from

original
; SMW and poorly documented
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

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

;org $03B75C

TABLE1 dcb $0C,$1C
TABLE2 dcb $01,$02

GET_DRAW_INFO STZ $186C,x ; reset sprite

offscreen flag, vertical
STZ $15A0,x ; reset sprite offscreen flag,

horizontal
LDA $E4,x ; \
CMP $1A ; | set horizontal offscreen if

necessary
LDA $14E0,x ; |
SBC $1B ; |
BEQ ON_SCREEN_X ; |
INC $15A0,x ; /

ON_SCREEN_X LDA $14E0,x ; \
XBA ; |
LDA $E4,x ; |
REP #$20 ; |
SEC ; |
SBC $1A ; | mark sprite invalid if far

enough off screen
CLC ; |
ADC.W #$0040 ; |
CMP.W #$0180 ; |
SEP #$20 ; |
ROL A ; |
AND #$01 ; |
STA $15C4,x ; /
BNE INVALID ;

LDY #$00 ; \ set up loop:
LDA $1662,x ; |
AND #$20 ; | if not smushed (1662 &

0x20), go through loop twice
BEQ ON_SCREEN_LOOP ; | else, go through

loop once
INY ; /
ON_SCREEN_LOOP LDA $D8,x ; \
CLC ; | set vertical offscreen if necessary
ADC TABLE1,y ; |
PHP ; |
CMP $1C ; | (vert screen boundry)
ROL $00 ; |
PLP ; |
LDA $14D4,x ; |
ADC #$00 ; |
LSR $00 ; |
SBC $1D ; |
BEQ ON_SCREEN_Y ; |
LDA $186C,x ; | (vert offscreen)
ORA TABLE2,y ; |
STA $186C,x ; |
ON_SCREEN_Y DEY ; |
BPL ON_SCREEN_LOOP ; /

LDY $15EA,x ; get offset to sprite OAM
LDA $E4,x ; \
SEC ; |
SBC $1A ; | $00 = sprite x position relative

to screen boarder
STA $00 ; /
LDA $D8,x ; \
SEC ; |
SBC $1C ; | $01 = sprite y position relative

to screen boarder
STA $01 ; /
RTS ; return

INVALID PLA ; \ return from *main gfx

routine* subroutine...
PLA ; | ...(not just this subroutine)
RTS ; /


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; $B829 - vertical mario/sprite position check - shared
; Y = 1 if mario below sprite??
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;org $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
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 $0F ;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 LABEL11 ;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
LABEL11 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

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


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; $B85D - off screen processing code - shared
; sprites enter at different points
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;org $03B83B

TABLE3 dcb $40,$B0
TABLE6 dcb $01,$FF
TABLE4 dcb $30,$C0,$A0,$80,$A0,$40,$60,$B0
TABLE5 dcb $01,$FF,$01,$FF,$01,$00,$01,$FF

SUB_OFF_SCREEN_X0 LDA #$06 ; \ entry point of

routine determines value of $03
BRA STORE_03 ; |
SUB_OFF_SCREEN_X1 LDA #$04 ; |
BRA STORE_03 ; |
SUB_OFF_SCREEN_X2 LDA #$02 ; |
STORE_03 STA $03 ; |
BRA START_SUB ; |
SUB_OFF_SCREEN_X3 STZ $03 ; /

START_SUB JSR SUB_IS_OFF_SCREEN ; \ if sprite is

not off screen, return
BEQ RETURN_2 ; /
LDA $5B ; \ goto VERTICAL_LEVEL if

vertical level
AND #$01 ; |
BNE VERTICAL_LEVEL ; /
LDA $D8,x ; \
CLC ; |
ADC #$50 ; | if the sprite has gone off the

bottom of the level...
LDA $14D4,x ; | (if adding 0x50 to the sprite

y position would make the high byte >= 2)
ADC #$00 ; |
CMP #$02 ; |
BPL ERASE_SPRITE ; / ...erase the sprite
LDA $167A,x ; \ if "process offscreen" flag is

set, return
AND #$04 ; |
BNE RETURN_2 ; /
LDA $13 ; \
AND #$01 ; |
ORA $03 ; |
STA $01 ; |
TAY ; /
LDA $1A ;x boundry ;A:0101 X:0006

Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:0256 VC:090 00

FL:16953
CLC ;A:0100 X:0006 Y:0001 D:0000

DB:03 S:01ED P:envMXdiZcHC:0280 VC:090 00 FL:16953
ADC TABLE4,y ;A:0100 X:0006 Y:0001

D:0000 DB:03 S:01ED P:envMXdiZcHC:0294 VC:090 00

FL:16953
ROL $00 ;A:01C0 X:0006 Y:0001 D:0000

DB:03 S:01ED P:eNvMXdizcHC:0326 VC:090 00 FL:16953
CMP $E4,x ;x pos ;A:01C0 X:0006 Y:0001

D:0000 DB:03 S:01ED P:eNvMXdizcHC:0364 VC:090 00

FL:16953
PHP ;A:01C0 X:0006 Y:0001 D:0000

DB:03 S:01ED P:eNvMXdizCHC:0394 VC:090 00 FL:16953
LDA $1B ;x boundry hi ;A:01C0 X:0006

Y:0001 D:0000 DB:03 S:01EC P:eNvMXdizCHC:0416 VC:090

00 FL:16953
LSR $00 ;A:0100 X:0006 Y:0001 D:0000

DB:03 S:01EC P:envMXdiZCHC:0440 VC:090 00 FL:16953
ADC TABLE5,y ;A:0100 X:0006 Y:0001

D:0000 DB:03 S:01EC P:envMXdizcHC:0478 VC:090 00

FL:16953
PLP ;A:01FF X:0006 Y:0001 D:0000

DB:03 S:01EC P:eNvMXdizcHC:0510 VC:090 00 FL:16953
SBC $14E0,x ;x pos high ;A:01FF X:0006

Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizCHC:0538 VC:090

00 FL:16953
STA $00 ;A:01FE X:0006 Y:0001 D:0000

DB:03 S:01ED P:eNvMXdizCHC:0570 VC:090 00 FL:16953
LSR $01 ;A:01FE X:0006 Y:0001 D:0000

DB:03 S:01ED P:eNvMXdizCHC:0594 VC:090 00 FL:16953
BCC LABEL20 ;A:01FE X:0006 Y:0001

D:0000 DB:03 S:01ED P:envMXdiZCHC:0632 VC:090 00

FL:16953
EOR #$80 ;A:01FE X:0006 Y:0001

D:0000 DB:03 S:01ED P:envMXdiZCHC:0648 VC:090 00

FL:16953
STA $00 ;A:017E X:0006 Y:0001 D:0000

DB:03 S:01ED P:envMXdizCHC:0664 VC:090 00 FL:16953
LABEL20 LDA $00 ;A:017E X:0006 Y:0001

D:0000 DB:03 S:01ED P:envMXdizCHC:0688 VC:090 00

FL:16953
BPL RETURN_2 ;A:017E X:0006 Y:0001

D:0000 DB:03 S:01ED P:envMXdizCHC:0712 VC:090 00

FL:16953
ERASE_SPRITE LDA $14C8,x ; \ if sprite status < 8,

permanently erase sprite
CMP #$08 ; |
BCC KILL_SPRITE ; /
LDY $161A,x ;A:FF08 X:0006 Y:0001

D:0000 DB:03 S:01ED P:envMXdiZCHC:0140 VC:071 00

FL:21152
CPY #$FF ;A:FF08 X:0006 Y:0001

D:0000 DB:03 S:01ED P:envMXdizCHC:0172 VC:071 00

FL:21152
BEQ KILL_SPRITE ;A:FF08 X:0006 Y:0001

D:0000 DB:03 S:01ED P:envMXdizcHC:0188 VC:071 00

FL:21152
LDA #$00 ; \ mark sprite to come back

A:FF08 X:0006 Y:0001 D:0000 DB:03 S:01ED

P:envMXdizcHC:0204 VC:071 00 FL:21152
STA $1938,y ; / A:FF00

X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdiZcHC:0220

VC:071 00 FL:21152
KILL_SPRITE STZ $14C8,x ; erase sprite
RETURN_2 RTS ; return

VERTICAL_LEVEL LDA $167A,x ; \ if "process

offscreen" flag is set, return
AND #$04 ; |
BNE RETURN_2 ; /
LDA $13 ; \ only handle every other

frame??
LSR A ; |
BCS RETURN_2 ; /
AND #$01 ;A:0227 X:0006 Y:00EC

D:0000 DB:03 S:01ED P:envMXdizcHC:0228 VC:112 00

FL:1142
STA $01 ;A:0201 X:0006 Y:00EC D:0000

DB:03 S:01ED P:envMXdizcHC:0244 VC:112 00 FL:1142
TAY ;A:0201 X:0006 Y:00EC D:0000

DB:03 S:01ED P:envMXdizcHC:0268 VC:112 00 FL:1142
LDA $1C ;A:0201 X:0006 Y:0001 D:0000

DB:03 S:01ED P:envMXdizcHC:0282 VC:112 00 FL:1142
CLC ;A:02BD X:0006 Y:0001 D:0000

DB:03 S:01ED P:eNvMXdizcHC:0306 VC:112 00 FL:1142
ADC TABLE3,y ;A:02BD X:0006 Y:0001

D:0000 DB:03 S:01ED P:eNvMXdizcHC:0320 VC:112 00

FL:1142
ROL $00 ;A:026D X:0006 Y:0001 D:0000

DB:03 S:01ED P:enVMXdizCHC:0352 VC:112 00 FL:1142
CMP $D8,x ;A:026D X:0006 Y:0001

D:0000 DB:03 S:01ED P:enVMXdizCHC:0390 VC:112 00

FL:1142
PHP ;A:026D X:0006 Y:0001 D:0000

DB:03 S:01ED P:eNVMXdizcHC:0420 VC:112 00 FL:1142
LDA.W $001D ;A:026D X:0006 Y:0001

D:0000 DB:03 S:01EC P:eNVMXdizcHC:0442 VC:112 00

FL:1142
LSR $00 ;A:0200 X:0006 Y:0001 D:0000

DB:03 S:01EC P:enVMXdiZcHC:0474 VC:112 00 FL:1142
ADC TABLE6,y ;A:0200 X:0006 Y:0001

D:0000 DB:03 S:01EC P:enVMXdizCHC:0512 VC:112 00

FL:1142
PLP ;A:0200 X:0006 Y:0001 D:0000

DB:03 S:01EC P:envMXdiZCHC:0544 VC:112 00 FL:1142
SBC $14D4,x ;A:0200 X:0006 Y:0001

D:0000 DB:03 S:01ED P:eNVMXdizcHC:0572 VC:112 00

FL:1142
STA $00 ;A:02FF X:0006 Y:0001 D:0000

DB:03 S:01ED P:eNvMXdizcHC:0604 VC:112 00 FL:1142
LDY $01 ;A:02FF X:0006 Y:0001 D:0000

DB:03 S:01ED P:eNvMXdizcHC:0628 VC:112 00 FL:1142
BEQ LABEL22 ;A:02FF X:0006 Y:0001

D:0000 DB:03 S:01ED P:envMXdizcHC:0652 VC:112 00

FL:1142
EOR #$80 ;A:02FF X:0006 Y:0001

D:0000 DB:03 S:01ED P:envMXdizcHC:0668 VC:112 00

FL:1142
STA $00 ;A:027F X:0006 Y:0001 D:0000

DB:03 S:01ED P:envMXdizcHC:0684 VC:112 00 FL:1142
LABEL22 LDA $00 ;A:027F X:0006 Y:0001

D:0000 DB:03 S:01ED P:envMXdizcHC:0708 VC:112 00

FL:1142
BPL RETURN_2 ;A:027F X:0006 Y:0001

D:0000 DB:03 S:01ED P:envMXdizcHC:0732 VC:112 00

FL:1142
BMI ERASE_SPRITE ;A:0280 X:0006 Y:0001

D:0000 DB:03 S:01ED P:eNvMXdizCHC:0170 VC:064 00

FL:1195

SUB_IS_OFF_SCREEN LDA $15A0,x ; \ if sprite is on

screen, accumulator = 0
ORA $186C,x ; |
RTS ; / return

Sorry if this is too big for anyone, but I'm thinking the area I need to make the palette change is somewhere where it says PAL/GFX page.


Usually the palette of any sprite is in the GFX routine, like the one from your sprite:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; sprite graphics routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


FallingPlatDispX dcb $00,$10,$10,$20

FallingPlatTiles dcb $85,$86,$86,$88

SPRITE_GRAPHICS JSR GET_DRAW_INFO
PHX
LDX #$03
CODE_038498 LDA $00
CLC
ADC FallingPlatDispX,X
STA $0300,Y
LDA $01
STA $0301,Y
LDA FallingPlatTiles,X
STA $0302,Y
LDA #$01 ;Sprite PAL/GFX(this line is not seen in the original ASM file)

Page
ORA $64
STA $0303,Y
INY
INY
INY
INY
DEX
BPL CODE_038498
PLX
LDY.B #$02
LDA.B #$03
JSL $01B7B3
RTS ; Return

Changing most of those values only affect the positioning of the GFX and the graphics of the moving platform itself. So, I'm guess it's somewhere I or anyone wouldn't look.

I'm certain the area I'd have to change is within that smaller bit of code there, anyway, since Koyuki made this sprite, hopefully I'll be able to get some input from her on this one.

Extras



I should have something witty to put here (even if it's just to update dated info), shouldn't I?

Advertising Space

After looking at the sprite, I assume that you don't want the palette to be 9. So the value you would want to change should be $x2 or $x3 (grey palettes, 1st and 2nd page respectively), which is usually placed near the tilemap info in the ASM.

But I can't exactly find the damn thing myself, thanks to my limited ASM knowledge. However, the following list are values you can replace the x in $yx, for example to change its palette in the case something is hardcoded.

0 = Gold palette (first page)
1 = Gold palette (second page)
2 = Grey palette (first page)
3 = Grey palette (second page)
4 = Yellow palette (first page)
5 = Yellow palette (second page)
6 = Blue palette (first page)
7 = Blue palette (second page)
8 = Red palette (first page)
9 = Red palette (second page)
A = Green palette (first page)
B = Green palette (second page)
C = Palette E (first page)
D = Palette E (second page)
E = Palette F (first page)
F = Palette F (second page)

Also in the case with some sprites, you may need to change the hardcoded palette value and it's CFG palette. I hope that info is of some use to you.

LDA #$01 ;Sprite PAL/GFX

I think you need to change that. It's YXPPCCCT in binary.

Y = Y Flip.
X = X Flip.
PP = Prority (00 being lowest, 11 being highest).
CCC = Palette;

Palette 8 - 000
Palette 9 - 001
Palette A - 010
Palette B - 011
Palette C - 100
Palette D - 101
Palette E - 110
Palette F - 111


T = Sprite graphics page. 1 makes it use SP3/SP4.

So you finally get your 8-bit value, e.g.:

01010010

And convert that to hexadecimal using your Windows Calculator. You would then add that instead of 01. For example, I would use 52.

If you don't want it to be hardcoded though, make it load $15F6,x instead.
Thanks MrDeePay and IceYoshi, with your combined help, I got the palette I wanted for the cloud I tweaked that falls when jumped on. Even though the grey areas are slightly different than that of the SMB3 equivalent moving cloud, I think these two platforms will work well for the element of surprise.