Language…
19 users online:  AmperSam, AnkisethTheMonk, Araylea, Daniel30sp, Eggroll27, FedoraFriday, Green, isaix,  Java, kurtistrydiz, Lumy, mason, MercuryPenny, MM102, pedro1994, Scags, signature_steve, thatwaterblockrk,  YouFailMe - Guests: 101 - Bots: 187
Users: 69,706 (2,535 active)
Latest user: Daniel30sp

Posts by Knight of Time

Knight of Time's Profile → Posts

I'm happy enough with my username. As such, I'd never want to change it.

Alright, it's been a few weeks since I released my final demo, now even though the final product isn't here yet, I wanted to ask a couple of new questions if I may, please.

1. How many completed are there right now that have dynamic sprites in them? I've seen several completed on here with at least 80 exits or so, but I never saw one with any dynamic sprites, so I was wondering out of curiosity what the odds would be of my hack being the first completed one with dynamic sprites (when it's all done, that is)?

2. Whenever I do get my hack completely done, would I be able to post it and even more new screens here, or would I be better off making a new topic for it altogether? At the rate I'm going, I'm not so sure I'll have my hack done before the end of the year (I just began working on my second level in my sixth world), in the occasion I don't, I'm very sure I'll have it all done in 2010 sometime.
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.
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.


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.
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.

I recently began to think about the custom sprites that make a certain sprite appear when all the enemies on the screen are killed, and there's something about these sprites that has me curious (not a request), would it be theoretically possible to have a sprite which spawns only when all the enemies in the level are killed (not just the screen any current enemies are shown on, but enemies in that single area, regardless of how many screens are used)?

In a way, it would be like the "Destroy Them All!" and "Bash The Baddies!" bonus rooms in Donkey Kong Country 2 and 3 respectively, where you can't get the Kremkoin or Bonus Coin until every enemy is killed, regardless of the length of the bonus room.

Wouldn't such a sprite be able to keep track of how many enemies are left in an individual section of a level? I wish I had a little input on this concept, please.

Anyway, thanks in advance.
Yeah, I've heard of that sprite...but what about the possibility of having a sprite be spawned on the condition that all enemies, near and far away, have to be killed first? In a sense, it probably wouldn't work so well on an auto-scroll level if such a sprite was placed at the start, and even more ineffective if there were hard-to-kill sprites, or ones that come from launchers, shooters, or generators.
Hello,

I recently finished building a new level in my hack, but I found an unusual problem.

Whenever the goal post is crossed, and the game cuts to the new path I made to lead to my next level, a few of the event tiles for the event this level triggers upon completion end up messing up on me, going black initially at first, but when I go to a sub-map and back to the main OV map (that's where my current world's levels are, that are not in the recent demo I released), those tiles are shown to be wrong, and also in the wrong colours.

Strangely enough though, if I save game data by going to a ghost house, and resetting the game, the event tiles I mentioned above are back to normal.

Anyway, can anyone help me with this strange occurence, please?

My thanks in advance.
Hello,

I recently inserted HyperHacker's boost blocks with sound (they were included with the original Block Tool) into my hack via BTSD, but I wanted to ask a question on them.

In the bin file that they all use (boost.bin if anyone is wondering), where in the file do I change what sound they make? I noticed they currently make the sound of a Dragon Coin being collected, but anyway, here are the values in the file:

A9 7F 8F 7B 00 7E 60 A9 80 8F 7B 00 7E 60 A9 00 8F 7B 00 7E 60 A9 80 8F 7D 00 7E 60 A9 7F 8F 7D 00 7E 60 AF 04 C0 7F 29 0F C9 04 90 E8 C9 08 90 CF C9 0C 90 E7 80 D0 A9 00 8F 7D 00 7E 60 A9 00 8F 7B 00 7E 8F 7D 00 7E 60 20 62 00 80 B2 20 62 00 80 B4 20 62 00 80 BD 20 62 00 80 BF 20 62 00 80 C1 A9 50 8D FC 1D 60

Just as a side note, but if I had to choose an alternate sound for the blocks, what other sound would be good? I seem to recall that Reading used the classic stomp sound with these blocks when he used them in one of his , Reading, if you end up reading this, can you please tell me if am I right?

Anyway, thanks in advance.
Thanks for your help, guys.

As it turns out, the sound I went to replace the Yoshi Coin sound with isn't in the same rom bank, the one I want there, which is the spin jump 1 sound, is in rom bank $1DF9, so I'm assuming I have to change one of the "00" values in the bin file to "02" or "03" while changing that "50" value Alcaro mentioned to "00", am I right?
Sorry for double-posting, but I wanted to ask another question, if it's okay.

Going back to the issue on what things are incompatible with dynamic sprites, is there any custom blocks that are incompatible with them?

I just tried inserting HyperHacker's boost blocks (the ones with sound), and they appeared to make the dynamic sprites I used in two of my levels partially invisible (e.g. Blowhard), or completely invisible (e.g. Chomp Rock, Arrow Lift), and it makes me wonder if these blocks are an example of one that interfere with dynamic sprites.
Hmm, I know it isn't the latter, because when I was playing with the boost blocks and getting some tricks done with them (just for experimental purposes; to see if I could come up with something), I only used up to two sprites, a message block which I didn't define yet, and one dynamic sprite (I first tried a Chomp Rock, then an Arrow Lift, and finally a Blowhard).

But on the subject of the sprite header, I've been using setting 10 (aka the one you have to use with the No More Sprite Tile Limits patch), as I figured that one would be the best setting for if I was using more than one dynamic sprite in a small area, such as the three Blowhards I used in one spot in a previous level in my sixth world; so the only thing I can think of right now is, if you ally insert some custom blocks that don't work right, what would cause a rom to not load the title screen if those faulty custom blocks were removed?
Hi,

I just found myself caught in a situation regarding Block Tool Super Deluxe.

Whenever I try to re-insert any custom blocks I have in my hack (e.g. ones that have a new bin file, or an asm file), and go to play it, it crashes before the title screen.

How can I get over this?

I'm really nervous about having to transfer all my stuff from my hack to an unmodified SMW rom, because among the sprites I have, there are some dynamic sprites I'd have to re-insert the graphics for manually (Blowhard, YI Piranha Plant, and YI Wild Ptooie Plant). Not to mention I have a few patches on it, too.

Anyway, thanks in advance.
I can help you with getting the definition for a custom sprite, you have to go into a text editor and make a file with the .ssc extension, and it has to match the name of your rom (e.g. if your rom was SMW.smc, the file has to be named SMW.ssc).

After you do that, you have to put in the custom sprites in one of the two ways below (your way is pretty close):

11 20 This is Birdo. She was seen in SMB2. And now finally in SMW. She can spit out eggs. And can be killed when jumped on.

/\ That's if the extra bit for the custom sprite is set to 2.

11 30 This is Birdo. She was seen in SMB2. And now finally in SMW. She can spit out eggs. And can be killed when jumped on.

/\ That's if the extra bit for the custom sprite is set to 3.

Basically, if you do it in either of these two ways, you have to refresh your rom in order for the saved change to appear in LM.
I think Ladida is right about the glitching thing, when I locked a copy of my hack I had used for the final demo, I ended up having a minor setback one day where I lost a bonus room that is in the demo (it's in my first snow level if anyone saw it; there's a Chomp Rock and a YI P-Switch inside), so I had to go to the locked rom and take various screens from the bonus room, the pipe that leads to the bonus room, and the pipe the player comes out of when they exit the bonus room.

So long story short, don't attempt to unlock a locked hack if there's a lot of ExGFX files used in it (I have just over 200).
Hello,

I recently got the SMB3 elevator blocks working again 100% in my hack, thanks to Davros, who made a BTSD version of them, anyway, I'm trying to change the sound the directional elevator makes each time it changes direction, can anyone help me, please?

The sound it currently makes here is 0B in bank 1DF9 (the sound of a switch being activated), but I want to make it sound like that familiar beep sound that you hear when you touch a level tile; in other words, get it to sound exactly like its SMB3 counterpart.

STA SPRITE_STATE,x

LDA #$15
STA $1DFC

/\ That's where I need to make the edit, right?

Anyway, thanks in advance.
Sorry for bumping, but I'm looking for a sound I couldn't find in one of the banks, does anyone know which bank the beep sound (you know, the one that comes up when you touch a level tile on the overworld map) is in? I've been looking for it, but haven't found it yet.
It's okay, Davros helped me find the correct value I was looking for in the sound effect thread in the Data Repository forum, so this thread has pretty much served its purpose, I don't need it to stay open.