Banner
Views: 772,199,307
Time:
17 users online: BlueZy, BreadEater, GbreezeSunset, h.carrell, Infinity, KabanFriends, levelengine,  Major Flare, Mogu94,  Ninja Boy, ReaLifePlumber,  Samuel, Sancles, SimFan96, TheZ, Yetibucca, Yung Gotenks - Guests: 50 - Bots: 187Users: 40,560 (1,857 active)
Latest: HeroSamurai
Tip: Don't place Yoshi coins near a goal post because they keep glowing when a level fades out.Not logged in.
Posts by BulzomeGuides
BulzomeGuides' Profile - Posts by BulzomeGuides
Pages: « 1 2 3 »
I'm still sort of a noob at this, so bare with me... I downloaded some of the background files. I took all the needed steps (extract files, insert ExGFX, etc.) I made sure the Map 16 page was in the same folder as the ROM. I set the background image to the ExGFX file and loaded the palette. I hit Ctrl+Shift+Delete (to clear the original level) and also deleted the original background. I opened up the 16*16 tile editor, made sure I was at least at page 4, then hit F3. I made myself a nice little background. When I was done, I made sure to hit F5 and F9. Success! However, when I used the exact same process for a second level, nothing would paste into the background. It kept telling me "(tile number) is not a valid Map 16 tile". I tried 6 different pages and still got the same result. I tried a back-up of the ROM that was made before any backgrounds were designed. I even tried a new ROM and still had the problem. What am I doing wrong? Do I need to re-install LM? Am I missing a step here? Any help is greatly appreciated. Thanks for your time.

--------------------
Your layout is on vacation.
That was exactly where I went wrong the second time. I imported the Map 16 file to the wrong page. Thanks for the help. From now on, I'll keep in mind to use pages 40 and after for the background. Thanks again.

--------------------
Your layout is on vacation.
I wanted to have a boss that acted like the SMB1 Bowser Sprite, had a set amount of HP and ended the level when it dies. The only problem is that the Bowser Sprite always seems to die from one fireball. I played around with the cfg file and eventually ended up with an invincible sprite.

I then decided to play around with nOOb boss sprite. The problem with this is that I can't use ExGFX with it (or at least I haven't figured out how). The other problem is that I can't make it jump, throw hammers, or spit fire. I played with every setting, but I can only make it walk and do nothing else.

The only other thing I could think of was to combine bits and pieces of both sprites to create a new sprite altogether. It doesn't work. All I want to do is make a "Bowser" that is only vulnerable to throw blocks, koopa shells, etc. I just can't seem to quite figure it out. Anyway, here is what the sprite looks like



This is the combination of the two:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;THE NOOB'S BOSS 1.3
; By Maxx
; A 32x32 sprite that will walk or sit there. It's a boss, ending the level when his hitpoints reach 0.
; No Extra Byte.
; haha... who knows when I'll document this thing!
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;




; VVVVVVVVVVVVVVVVVVVVVVV CHANGE THAT VVVVVVVVVVVVVVVVVVVVVVVVVVVVV

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;CHANGE THIS!
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;
; DO NOT GO OVER 100 OR USE 3-DIGIT NUMBERS!
;;;;
HAMMER_TIMER = $15AC

FIRE_TIMER = $1528

DIR_TIMER = $1540

SPRITE_DIR = $157C

SPRITE_IMG = $1602

HITPOINTS = $15 ; How much health the boss has

ENDOPTION = $01 ; When boss is beaten: 00 = end level, 01 = warp using the screen exit, like when you go through a door

STATUSSHOW = $01 ; 00 - Won't say "BOSS:(HP)" on the status bar. 01 = Will.


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;VVVVVVVVVVVVVVVVVVV DO NOT MESS WITH ANYTHNG DOWN HERE! VVVVVVVVVVVVVVVVVVVV;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Tables
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TBL_B2D0 dcb $F0,$FF
TBL_B2D2 dcb $FF,$00
TBL_B2D4 dcb $10,$F0


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; INIT and MAIN JSL targets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

dcb "INIT"
LDA #HITPOINTS
STA $7F8888
RTL


dcb "INIT"
JSR SUB_GET_DIR
TYA
STA SPRITE_DIR,x

STZ SPRITE_IMG,x

LDA EXTRA_BITS,x
AND #$04
BEQ NO_SET_TIME
LDA #$48
STA HAMMER_TIMER,x
NO_SET_TIME
TXA
AND #$03
ASL A
ASL A
ASL A
ASL A
PHA
ASL A
ADC #$4
STA FIRE_TIMER,x

PLA
ADC #$00
STA JUMP_TIMER,x

RTL



dcb "MAIN"
PHB
PHK
PLB
JSR SPRITE_ROUTINE
LDA $157C,x
CMP #$01
BEQ SetXswitch
LDA #$00
STA $7F9877
BRA afterXset
SetXswitch:
LDA #$10
STA $7F9877
afterXset
LDA #STATUSSHOW
BEQ noshow
LDA #$0B
STA $0F09
LDA #$18
STA $0F0A
LDA #$1C
STA $0F0B
STA $0F0C
LDA #$78
STA $0F0D
LDA $7F8888
STA $0F0E
noshow:
LDA $157C,x ; $02 = sprite direction
STA $02
PLB
RTL


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 FIRE_TIMER,x
BEQ DoneDec
DEC FIRE_TIMER,x
DoneDec:
RTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; SPRITE_ROUTINE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

TIME_TO_LOCK = $28
TIME_TO_JUMP = $88
TIME_TO_SHOW = $12 ;time to display the boomerang before it is thrown

X_SPEED dcb $00,$FA,$00,$06 ;rest at bottom, moving up, rest at top, moving down
TIME_IN_POS dcb $78,$14,$74,$14 ;moving up, rest at top, moving down, rest at bottom
TIME_TILL_THROW dcb $78,$A8
TIME_TILL_HAMMER dcb $0C,$0C,$0C,$0C,$0C,$43,$0C,$0C
dcb $0C,$0C,$0C,$0C,$73,$0C,$0C,$0C
dcb $0C,$0C,$63,$0C,$0C,$0C,$0C,$0C
dcb $0C,$83,$0C,$0C,$0C,$0C,$0C,$53

STAR INC HAMMER_TIMER,x
RETURN RTS
START_HB_CODE JSR SUB_GFX ; draw sprite gfx
LDA SPRITE_STATUS,x ; \ if sprite 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 SPRITE_DIR,x ; /


JSR SUB_OFF_SCREEN_X3 ; only process sprite while on screen
INC $1570,x ; increment number of frames sprite has been on screen

LDA $1570,x ; \ calculate which frame to show:
LSR A ; |
LSR A ; |
LSR A ; |
LSR A ; |
AND #$01 ; | update every 16 cycles if normal
STA SPRITE_IMG,x ; / write frame to show

LDA FIRE_TIMER,x ; \ if time until spit >= $10
CMP #TIME_TO_SHOW ; | just go to normal walking code
BCS TRY_HAMMER ; /
INC SPRITE_IMG,x
INC SPRITE_IMG,x

LDA FIRE_TIMER,x ; throw fire if it's time
BNE NO_RESET
LDY $C2,x
LDA TIME_TILL_THROW,y
STA FIRE_TIMER,x
NO_RESET CMP #$01
BNE TRY_HAMMER
LDA $C2,x
EOR #$01
STA $C2,x
JSR SUB_FIRE_THROW

TRY_HAMMER LDA EXTRA_BITS,x ; only throw hammers if first extra bit is set
AND #$04
BEQ JUMP_SPRITE
LDA HAMMER_TIMER,x ; throw hammer if it's time
BNE NO_RESET2
LDA $1504,x
TAY
LDA TIME_TILL_HAMMER,y
STA HAMMER_TIMER,x
NO_RESET2 CMP #$01
BNE JUMP_SPRITE
LDA $1504,x
INC A
AND #$1F
STA $1504,x
JSR SUB_HAMMER_THROW

JUMP_SPRITE LDA JUMP_TIMER,x
CMP #$40 ; | just go to normal walking code
BCS WALK_SPRITE ; /
LDA SPRITE_IMG,x ; \ lock image while jumping
ORA #$01 ; |
STA SPRITE_IMG,x ; /
INC DIR_TIMER,x ; we didn't move the sprite this frame, so we don't want a decrement
STZ $B6,x ; stop sprite from moving
LDA JUMP_TIMER,x
CMP #$38
BNE NO_JUMP2
LDA #$B0 ; \ y speed
STA $AA,x ; /
BRA APPLY_SPEED
NO_JUMP2 CMP #$00
BNE APPLY_SPEED
LDA #TIME_TO_JUMP
STA JUMP_TIMER,x

BRA APPLY_SPEED

WALK_SPRITE LDA $151C,x ;
TAY ;
LDA DIR_TIMER,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 DIR_TIMER,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

CHECK_TOUCH LDA $1588,x ; \ if sprite 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/sprite contact

NO_CONTACT RTS ; return


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;generate sprite routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
general:
LDA $7F8888
normie:
LDA #$00
CMP $7F8888
BEQ dead
BRA notdead
dead:
LDA #$04
STA $14C8,x
LDA #ENDOPTION
CMP #$01
BEQ Screenend
LDA #$FF
STA $1493
LDA #$0B
STA $1DFB
LDA #$3B
STA $1DFC
RTS
Screenend:
LDA #$06
STA $71
STZ $89
STZ $88
RTS

notdead:

SPRITE_INTERACT LDY #$0B ;
LOOP LDA $14C8,y ; \ if the sprite status is..
CMP #$09 ; | ...shell-like
BEQ PROCESS_SPRITE ; /
CMP #$0A ; \ ...throwned shell-like
BEQ PROCESS_SPRITE ; /
NEXT_SPRITE DEY ;
BPL LOOP ; ...otherwise, loop
RTS ; return

PROCESS_SPRITE PHX ; push x
TYX ; transfer x to y
JSL $03B6E5 ; get sprite clipping B routine
PLX ; pull x
JSL $03B69F ; get sprite clipping A routine
JSL $03B72B ; check for contact routine
BCC NEXT_SPRITE ;

LDA #$03 ; \ set sprite state
STA $C2,x ; /
LDA #$40 ; \ set timer
STA $1540,x ; /

PHX ; push x
TYX ; transfer x to y

STZ $14C8,x ; destroy the sprite

BLOCK_SETUP LDA $E4,x ; \ setup block properties
STA $9A ; |
LDA $14E0,x ; |
STA $9B ; |
LDA $D8,x ; |
STA $98 ; |
LDA $14D4,x ; |
STA $99 ; /

EXPLODING_BLOCK PHB ; \ set the exploding block routine
LDA #$02 ; |
PHA ; |
PLB ; |
LDA #$FF ; | $FF = set flashing palette
JSL $028663 ; |
LDA $7F8888
DEC A
STA $7F8888
LDA #STATUSSHOW
CMP #$00
BEQ aftershowthing
STA $7E0F0E
aftershowthing:
PLB ; /

PLX ; pull x
LDA #$28 ; \ sound effect
STA $1DFC ; /
RTS

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; fire routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

XF_OFFSET dcb $13,$FC
XF_OFFSET2 dcb $00,$FF

RETURN68 RTS
SUB_FIRE_THROW ;LDA $15A0,x ; no fire if off screen
LDA $186C,x
ORA $15D0,x
BNE RETURN68

JSL $02A9DE ; \ get an index to an unused sprite slot, return if all slots full
BMI RETURN68 ; / after: Y has index of sprite being generated

LDA #$01 ; \ set sprite status for new sprite
STA SPRITE_STATUS,y ; /

LDA #$B3
STA $9E,y

PHY ; set x position for new sprite
LDA SPRITE_DIR,x
TAY
LDA $E4,x
CLC
ADC XF_OFFSET,y
PLY
STA $00E4,y

PHY ; set x position for new sprite
LDA SPRITE_DIR,x
TAY
LDA $14E0,x
ADC XF_OFFSET2,y
PLY
STA $14E0,y

LDA $D8,x ; \ set y position for new sprite
SEC ; | (y position of generator - 1)
SBC #$03 ; |
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
PLX ; /

LDA #$17
STA $1DFC

RETURN67 RTS ; return



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

X_OFFSET dcb $02,$0C
X_OFFSET2 dcb $00,$00
X_SPEED_HAMMER dcb $12,$EE

SUB_HAMMER_THROW LDY #$E8 ;A:0218 X:0009 Y:0009 D:0000 DB:03 S:01E8 P:envMXdizcHC:0522 VC:104 00 FL:19452
LDA SPRITE_DIR,x ;A:0218 X:0009 Y:00E8 D:0000 DB:03 S:01E8 P:eNvMXdizcHC:0538 VC:104 00 FL:19452
BNE LABEL9 ;A:0201 X:0009 Y:00E8 D:0000 DB:03 S:01E8 P:envMXdizcHC:0570 VC:104 00 FL:19452
LDY #$18 ;A:0200 X:0009 Y:00E8 D:0000 DB:03 S:01E8 P:envMXdiZcHC:0210 VC:098 00 FL:21239
LABEL9 STY $00 ;A:0201 X:0009 Y:00E8 D:0000 DB:03 S:01E8 P:envMXdizcHC:0592 VC:104 00 FL:19452
LDY #$07 ;A:0201 X:0009 Y:00E8 D:0000 DB:03 S:01E8 P:envMXdizcHC:0616 VC:104 00 FL:19452
LABEL8 LDA $170B,y ;A:0201 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:envMXdizcHC:0632 VC:104 00 FL:19452
BEQ LABEL7 ;A:0200 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:envMXdiZcHC:0664 VC:104 00 FL:19452
DEY ;A:0204 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:envMXdizcHC:0088 VC:103 00 FL:19638
BPL LABEL8 ;A:0204 X:0009 Y:0006 D:0000 DB:03 S:01E8 P:envMXdizcHC:0102 VC:103 00 FL:19638
RTS ;
LABEL7 LDA #$04 ;A:0200 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:envMXdiZcHC:0686 VC:104 00 FL:19452
STA $170B,y ;A:0204 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:envMXdizcHC:0702 VC:104 00 FL:19452

PHY
LDA SPRITE_DIR,x
TAY
LDA $E4,x ;A:0204 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:envMXdizcHC:0734 VC:104 00 FL:19452
CLC
ADC X_OFFSET,y
PLY
STA $171F,y ;A:02C9 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:eNvMXdizcHC:0764 VC:104 00 FL:19452

PHY
LDA SPRITE_DIR,x
TAY
LDA $14E0,x ; |
ADC X_OFFSET2,y
PLY
STA $1733,y ;A:0204 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:envMXdizcHC:0828 VC:104 00 FL:19452

LDA $D8,x ;A:0204 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:envMXdizcHC:0860 VC:104 00 FL:19452
CLC
ADC #$F0
STA $1715,y ;A:0270 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:envMXdizcHC:0890 VC:104 00 FL:19452
LDA $14D4,x ;A:0270 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:envMXdizcHC:0922 VC:104 00 FL:19452
ADC #$FF
STA $1729,y ;A:0201 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:envMXdizcHC:0954 VC:104 00 FL:19452

LDA #$D0 ;A:0201 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:envMXdizcHC:0986 VC:104 00 FL:19452
STA $173D,y ;A:02C8 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:eNvMXdizcHC:1002 VC:104 00 FL:19452
PHY
LDA SPRITE_DIR,x
TAY
LDA X_SPEED_HAMMER,y
;LDA #$F0 ;A:02C8 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:eNvMXdizcHC:1034 VC:104 00 FL:19452
PLY
STA $1747,y ;A:02E8 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:eNvMXdizcHC:1058 VC:104 00 FL:19452
BRA LABEL10 ;A:02E8 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:eNvMXdizcHC:1090 VC:104 00 FL:19452
LABEL6 RTS ;A:0101 X:0009 Y:0009 D:0000 DB:03 S:01E8 P:envMXdizcHC:0248 VC:086 00 FL:19396
LABEL10 LDA $1715,y ;A:02E8 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:eNvMXdizcHC:1112 VC:104 00 FL:19452
ADC #$F7 ;A:0270 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:envMXdizcHC:1144 VC:104 00 FL:19452
STA $1715,y ;A:0267 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:envMXdizCHC:1160 VC:104 00 FL:19452
BCC LABEL11 ;A:0267 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:envMXdizCHC:1192 VC:104 00 FL:19452
LDA $1729,y ;A:0267 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:envMXdizCHC:1208 VC:104 00 FL:19452
ADC #$FF ;A:0201 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:envMXdizCHC:1240 VC:104 00 FL:19452
STA $1729,y ;A:0201 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:envMXdizCHC:1256 VC:104 00 FL:19452
LABEL11 RTS ;A:0220 X:0009 Y:0007 D:0000 DB:03 S:01E8 P:envMXdizCHC:1336 VC:104 00 FL:19452



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; graphics routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

TILEMAP dcb $00,$02,$27,$29,$00,$06,$4C,$4E,$04,$02,$27,$29,$04,$06,$4C,$4E
dcb $00,$02,$27,$29,$00,$06,$4C,$4E,$04,$02,$27,$29,$04,$06,$4C,$4E
HORIZ_DISP dcb $00,$10,$00,$10,$00,$10,$00,$10,$00,$10,$00,$10,$00,$10,$00,$10
dcb $10,$00,$10,$00,$10,$00,$10,$00,$10,$00,$10,$00,$10,$00,$10,$00
VERT_DISP dcb $F0,$F0,$00,$00,$F0,$F0,$00,$00,$F0,$F0,$00,$00,$F0,$F0,$00,$00
dcb $F0,$F0,$00,$00,$F0,$F0,$00,$00,$F0,$F0,$00,$00,$F0,$F0,$00,$00
PROPERTIES dcb $40,$00 ;xyppccct format

HAMMER_TILE = $6D


SUB_GFX JSR GET_DRAW_INFO ; after: Y = index to sprite tile map ($300)
; $00 = sprite x position relative to screen boarder
; $01 = sprite y position relative to screen boarder
LDA SPRITE_IMG,x ; \
ASL A ; | $03 = index to frame start (frame to show * 2 tile per frame)
ASL A
STA $03 ; /
LDA SPRITE_DIR,x ; \ $02 = sprite direction
STA $02 ; /
BNE NO_ADD
LDA $03
CLC
ADC #$10
STA $03
NO_ADD PHX ; push sprite index

LDX #$03 ; loop counter = (number of tiles per frame) - 1
LOOP_START PHX ; push current tile number
TXA ; \ X = index to horizontal displacement
ORA $03 ; / get index of tile (index to first tile of frame + current tile number)
FACING_LEFT TAX ; \

LDA $00 ; \ tile x position = sprite x location ($00)
CLC ; |
ADC HORIZ_DISP,x ; |
STA $0300,y ; /

LDA $01 ; \ tile y position = sprite y location ($01) + tile displacement
CLC ; |
ADC VERT_DISP,x ; |
STA $0301,y ; /

LDA TILEMAP,x ; \ store tile
STA $0302,y ; /

LDX $02 ; \
LDA PROPERTIES,x ; | get tile properties using sprite direction
LDX $15E9 ; |
ORA $15F6,x ; | get palette info
ORA $64 ; | put in level properties
STA $0303,y ; / store tile properties

PLX ; \ pull, X = current tile of the frame we're drawing
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 ; | go to next tile of frame and loop
BPL LOOP_START ; /

PLX ; pull, X = sprite index

LDA HAMMER_TIMER,x
CMP #$02
BCC NO_SHOW_HAMMER
CMP #30
BCS NO_SHOW_HAMMER
LDA SPRITE_IMG,x
CMP #$00
BCS SHOW_HAMMER_TOO

NO_SHOW_HAMMER LDY #$02 ; \ 02, because we didn't write to 460 yet
LDA #$03 ; | A = number of tiles drawn - 1
JSL $01B7B3 ; / don't draw if offscreen
RTS ; return

SHOW_HAMMER_TOO PHX

LDA $00
LDX $02
CLC
ADC X_OFFSET,x
STA $0300,y

LDA $01 ; \ tile y position = sprite y location ($01) + tile displacement
CLC ; |
ADC #$E8
STA $0301,y ; /

LDA #HAMMER_TILE ; \ store tile
STA $0302,y ; /

LDA #$07
CPX #$00
BNE NO_FLIP_HAMMER
ORA #$40
NO_FLIP_HAMMER ORA $64 ; | put in level properties
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

LDY #$02 ; \ 02, because we didn't write to 460 yet
LDA #$04 ; | A = number of tiles drawn - 1
JSL $01B7B3 ; / don't draw if offscreen
RTS ; return



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; $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 ; /


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


SUB_SMOKE LDY #$03 ; \ find a free slot to display effect
FINDFREE LDA $17C0,y ; |
BEQ FOUNDONE ; |
DEY ; |
BPL FINDFREE ; |
RTS ; / return if no slots open

FOUNDONE LDA #$01 ; \ set effect graphic to smoke graphic
STA $17C0,y ; /
LDA #$1B ; \ set time to show smoke
STA $17CC,y ; /
LDA $D8,x ; \ smoke y position = generator y position
STA $17C4,y ; /
LDA $E4,x ; \ load generator x position and store it for later
STA $17C8,y ; /
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_OFF_SCREEN
; This subroutine deals with sprites that have moved off screen
; It is adapted from the subroutine at $01AC0D
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SPR_T12 dcb $40,$B0
SPR_T13 dcb $01,$FF
SPR_T14 dcb $30,$C0,$A0,$C0,$A0,$F0,$60,$90 ;bank 1 sizes
dcb $30,$C0,$A0,$80,$A0,$40,$60,$B0 ;bank 3 sizes
SPR_T15 dcb $01,$FF,$01,$FF,$01,$FF,$01,$FF ;bank 1 sizes
dcb $01,$FF,$01,$FF,$01,$00,$01,$FF ;bank 3 sizes

SUB_OFF_SCREEN_X1 LDA #$02 ; \ entry point of routine determines value of $03
BRA STORE_03 ; | (table entry to use on horizontal levels)
SUB_OFF_SCREEN_X2 LDA #$04 ; |
BRA STORE_03 ; |
SUB_OFF_SCREEN_X3 LDA #$06 ; |
BRA STORE_03 ; |
SUB_OFF_SCREEN_X4 LDA #$08 ; |
BRA STORE_03 ; |
SUB_OFF_SCREEN_X5 LDA #$0A ; |
BRA STORE_03 ; |
SUB_OFF_SCREEN_X6 LDA #$0C ; |
BRA STORE_03 ; |
SUB_OFF_SCREEN_X7 LDA #$0E ; |
STORE_03 STA $03 ; |
BRA START_SUB ; |
SUB_OFF_SCREEN_X0 STZ $03 ; /

START_SUB JSR SUB_IS_OFF_SCREEN ; \ if sprite is not off screen, return
BEQ RETURN_35 ; /
LDA $5B ; \ goto VERTICAL_LEVEL if vertical level
AND #$01 ; |
BNE VERTICAL_LEVEL ; /
LDA $D8,x ; \
CLC ; |
ADC #$50 ; | if the sprite has gone off the bottom of the level...
LDA $14D4,x ; | (if adding 0x50 to the sprite y position would make the high byte >= 2)
ADC #$00 ; |
CMP #$02 ; |
BPL ERASE_SPRITE ; / ...erase the sprite
LDA $167A,x ; \ if "process offscreen" flag is set, return
AND #$04 ; |
BNE RETURN_35 ; /
LDA $13 ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZcHC:0756 VC:176 00 FL:205
AND #$01 ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0780 VC:176 00 FL:205
ORA $03 ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0796 VC:176 00 FL:205
STA $01 ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0820 VC:176 00 FL:205
TAY ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0844 VC:176 00 FL:205
LDA $1A ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0858 VC:176 00 FL:205
CLC ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZcHC:0882 VC:176 00 FL:205
ADC SPR_T14,y ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZcHC:0896 VC:176 00 FL:205
ROL $00 ;A:8AC0 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:eNvMXdizcHC:0928 VC:176 00 FL:205
CMP $E4,x ;A:8AC0 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:eNvMXdizCHC:0966 VC:176 00 FL:205
PHP ;A:8AC0 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:0996 VC:176 00 FL:205
LDA $1B ;A:8AC0 X:0009 Y:0001 D:0000 DB:01 S:01F0 P:envMXdizCHC:1018 VC:176 00 FL:205
LSR $00 ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F0 P:envMXdiZCHC:1042 VC:176 00 FL:205
ADC SPR_T15,y ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F0 P:envMXdizcHC:1080 VC:176 00 FL:205
PLP ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F0 P:eNvMXdizcHC:1112 VC:176 00 FL:205
SBC $14E0,x ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:1140 VC:176 00 FL:205
STA $00 ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:eNvMXdizCHC:1172 VC:176 00 FL:205
LSR $01 ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:eNvMXdizCHC:1196 VC:176 00 FL:205
BCC SPR_L31 ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZCHC:1234 VC:176 00 FL:205
EOR #$80 ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZCHC:1250 VC:176 00 FL:205
STA $00 ;A:8A7F X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:1266 VC:176 00 FL:205
SPR_L31 LDA $00 ;A:8A7F X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:1290 VC:176 00 FL:205
BPL RETURN_35 ;A:8A7F X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:1314 VC:176 00 FL:205
ERASE_SPRITE LDA $14C8,x ; \ if sprite status < 8, permanently erase sprite
CMP #$08 ; |
BCC KILL_SPRITE ; /
LDY $161A,x ;A:FF08 X:0007 Y:0001 D:0000 DB:01 S:01F3 P:envMXdiZCHC:1108 VC:059 00 FL:2878
CPY #$FF ;A:FF08 X:0007 Y:0000 D:0000 DB:01 S:01F3 P:envMXdiZCHC:1140 VC:059 00 FL:2878
BEQ KILL_SPRITE ;A:FF08 X:0007 Y:0000 D:0000 DB:01 S:01F3 P:envMXdizcHC:1156 VC:059 00 FL:2878
LDA #$00 ;A:FF08 X:0007 Y:0000 D:0000 DB:01 S:01F3 P:envMXdizcHC:1172 VC:059 00 FL:2878
STA $1938,y ;A:FF00 X:0007 Y:0000 D:0000 DB:01 S:01F3 P:envMXdiZcHC:1188 VC:059 00 FL:2878
KILL_SPRITE STZ $14C8,x ; erase sprite
RETURN_35 RTS ; return

VERTICAL_LEVEL LDA $167A,x ; \ if "process offscreen" flag is set, return
AND #$04 ; |
BNE RETURN_35 ; /
LDA $13 ; \
LSR A ; |
BCS RETURN_35 ; /
LDA $E4,x ; \
CMP #$00 ; | if the sprite has gone off the side of the level...
LDA $14E0,x ; |
SBC #$00 ; |
CMP #$02 ; |
BCS ERASE_SPRITE ; / ...erase the sprite
LDA $13 ;A:0000 X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:1218 VC:250 00 FL:5379
LSR A ;A:0016 X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:envMXdizcHC:1242 VC:250 00 FL:5379
AND #$01 ;A:000B X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:envMXdizcHC:1256 VC:250 00 FL:5379
STA $01 ;A:0001 X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:envMXdizcHC:1272 VC:250 00 FL:5379
TAY ;A:0001 X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:envMXdizcHC:1296 VC:250 00 FL:5379
LDA $1C ;A:001A X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0052 VC:251 00 FL:5379
CLC ;A:00BD X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0076 VC:251 00 FL:5379
ADC SPR_T12,y ;A:00BD X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0090 VC:251 00 FL:5379
ROL $00 ;A:006D X:0009 Y:0001 D:0000 DB:01 S:01F3 P:enVMXdizCHC:0122 VC:251 00 FL:5379
CMP $D8,x ;A:006D X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNVMXdizcHC:0160 VC:251 00 FL:5379
PHP ;A:006D X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNVMXdizcHC:0190 VC:251 00 FL:5379
LDA.W $001D ;A:006D X:0009 Y:0001 D:0000 DB:01 S:01F2 P:eNVMXdizcHC:0212 VC:251 00 FL:5379
LSR $00 ;A:0000 X:0009 Y:0001 D:0000 DB:01 S:01F2 P:enVMXdiZcHC:0244 VC:251 00 FL:5379
ADC SPR_T13,y ;A:0000 X:0009 Y:0001 D:0000 DB:01 S:01F2 P:enVMXdizCHC:0282 VC:251 00 FL:5379
PLP ;A:0000 X:0009 Y:0001 D:0000 DB:01 S:01F2 P:envMXdiZCHC:0314 VC:251 00 FL:5379
SBC $14D4,x ;A:0000 X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNVMXdizcHC:0342 VC:251 00 FL:5379
STA $00 ;A:00FF X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0374 VC:251 00 FL:5379
LDY $01 ;A:00FF X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0398 VC:251 00 FL:5379
BEQ SPR_L38 ;A:00FF X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0422 VC:251 00 FL:5379
EOR #$80 ;A:00FF X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0438 VC:251 00 FL:5379
STA $00 ;A:007F X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0454 VC:251 00 FL:5379
SPR_L38 LDA $00 ;A:007F X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0478 VC:251 00 FL:5379
BPL RETURN_35 ;A:007F X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0502 VC:251 00 FL:5379
BMI ERASE_SPRITE ;A:8AFF X:0002 Y:0000 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0704 VC:184 00 FL:5490

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


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; SUB_HORZ_POS
; This routine determines which side of the sprite Mario is on. It sets the Y register
; to the direction such that the sprite would face Mario
; It is ripped from $03B817
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

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 SPR_L16 ;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
SPR_L16 RTS ;A:25FF X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:1214 VC:097 00 FL:31642



Does anybody know where I am going wrong?

NOTE: THIS IS NOT MY SPRITE. IT IS A COMBINATION OF TWO SPRITES MADE BY OTHER PEOPLE.

--------------------
Your layout is on vacation.
I know this is a really old thread, but thank you for the help. I was able to fix the issue by removing an extra cycle. I am actually still working on this hack. It's coming along quite well. I've even started importing music from midi files (still a bit tricky, but there are some awesome new tools here that I can't wait to try out). There aren't any complete worlds yet. I've been mainly developing stages as the ideas come, so there are stages in almost every world that are completed. The overworld looks quite nice so far. However, before I can post a demo, I need to finish world 1, as well as go through the game's music and stages, so I can get permission and give credit to the appropriate people. I'm sorry for the run-on sentence.

Again, thank you for the help and advice.

--------------------
Your layout is on vacation.
Game : Shining Force
Song : Ship Battle
SPC/MP3/Youtube: YouTube
MIDI : midi
Addmusic : AMK
Sampled : Yes

Comment : I wanted to update my request. I have tried just about everything, but can't get it to sound right. I love this song and would very much like to see a port of it. I appreciate everyone that reads this and I give my gratitude toward the person that answers this request. Thank you.


EDIT: Request Cancelled

--------------------
Your layout is on vacation.
I have a few questions. What is the highest note that is able to be played in each octave? Are there limits on how high of a note an instrument can play? I know the highest octave is o6, but it's better to use o5 for certain instruments. I'm just not sure of the highest note SMW allows. Is there a chart that might help?

--------------------
Your layout is on vacation.
Thank you very much. All replies are a big help.

--------------------
Your layout is on vacation.
I'm very excited to present a Shining Force II port! I'm quite please with how well it turned out.

Here

I await some constructive criticism. :)

Fixed

--------------------
Your layout is on vacation.
Thank you! You were right #2 sounds pretty good @0. I kind of like #5 @14 as well. I'll have another look at it for the conflicting sounds.

--------------------
Your layout is on vacation.
My apologies. Everything has been being fixed today.

EDIT: Everything is fixed now. The song sounds excellent! I've edited the link in the first post. All future song updates will be posted in the appropriate thread.

--------------------
Your layout is on vacation.
Shining Force - Goddess Mitula's Theme is fixed! And sounding great!

Have a listen

EDIT: I have been working on several ports from the Shining Series for the past few months. I was able to finish another port today. This one is from Shining Force III. It's called Din and Bustle of the Wilderness (or something to that effect). It has a bit of a western/cowboy feel to it.

Check it out

--------------------
Your layout is on vacation.
@Mini-Tech: I'll give that a try. It may sound good that way. Also, very nice port!

On another note, I have just finished another port. This one is from Phantasy Star IV. The song is called "Laughter". It's the theme that plays during the Zio and Lashiec battles. It's very dark and would definitely fit a final boss.

Here it is.


Enjoy!

--------------------
Your layout is on vacation.
Originally posted by Mini-Tech
Originally posted by BulzomeGuides
@Mini-Tech: I'll give that a try. It may sound good that way. Also, very nice port!

On another note, I have just finished another port. This one is from Phantasy Star IV. The song is called "Laughter". It's the theme that plays during the Zio and Lashiec battles. It's very dark and would definitely fit a final boss.

Here it is.


Enjoy!


Sounds sweet I will say this when using @17 becarefull of low octave.
One minute your strolling in your levelusic is p;aying decently, next minute you hit a enemie with a bomb or something explodes or bump into a charging chuck.
The distortian guitar gets glitchy as hell let alone crash the music with the rom. :/

r1^1
o1
e1^1^1^2^4^8^16
r8
e1^1^1^2^4^8
r8/
o1

Yo might want to up the octave to o2 just thought I might point that out.

Also thanks for the feedback I finished off that port last week.
This one here is from Zelda Twigh light princess Lake Hylia.
The original had a synthesizer string 2 instrument.
Limited to smw craptastic instrument set I used nylon guitar instead for it.

Enjoy.

http://bin.smwcentral.net/u/103/76%2BLakeHylia.spc


The instrument does start low, but only for those first two notes, before the loop starts. Right after that, when the loop starts, it slides up into o2. #0 can't go up an octave, as it then conflicts with #2. I don't really want to raise #2, because @17 sounds terrible in the higher octaves. You are right, usually @17 is a bad instrument altogether, but in this case it works - and it works surprisingly well. As far as conflicting with sound effects, it's been my experience that the only real "danger zones" are channels 4, 6 and 7. I can say that I've been using this song in my own hack for a few boss fights without any issues, but then again, said bosses aren't using bombs. I can test it in a Mouser fight just to be sure. If it causes an issue with bombs, I'll just change the instrument for the two notes that are in o1.

--------------------
Your layout is on vacation.
I finally made the switch to AMK. There were just too many good songs to pass up. I actually ended up doing an almost complete cleanout of my original music. Anyway, the problem I was having was after I ran AMK, my hack went to a blank screen after displaying the Nintendo Presents screen. I was able to fix this by running the old AddMusic for just the overworld and submap portion. The problem is that, by doing this, I am no longer able to change the music played during the "princess is rescued" scene or the end credits. Is there a way around this? Could I possibly just change a bit in hex? If so, what would I change it to? Now that I think about it, I think I change a bit somewhere in order to change the title screen music... Is there any solution without starting from scratch? I would rather not have to start over as I have been working on this for over four years. Thank you for the help in advance.

--------------------
Your layout is on vacation.
Actually, I am mistaken. It was one of my backups that had different music. I ran AMK on a different backup and still got the black screen. Running the old AddMusic doesn't fix it, it makes it worse. The ROM becomes unusable.

EDIT: I think I'd be better off changing that bit back. I just can't remember what bit or what it was set at...

--------------------
Your layout is on vacation.
That's probably what I'll have to do. Is there any way I can save my overworld? I just finished everything on layer 2 like a week ago.

--------------------
Your layout is on vacation.
I don't think I understand what you mean. If I'm using a fresh ROM, I give it the same name as the other? Or, do you mean having two lunar magics open, then doing as you said?

I was asking because I can't get it to work. I've tried it like 10 times.

--------------------
Your layout is on vacation.
Thank you so much. Worked like I charm. I apologize about my previous comment. I misunderstood what was said. Now I can enjoy some AWESOME AMK music in my hack!

--------------------
Your layout is on vacation.
Hello. I am having trouble creating .BRR samples for song I've been working on. I am making a MIDI file of the instrument I want to use. I always make sure that the MIDI is no longer than 2 seconds. I am then opening the file with OpenMPT. Here, I set the loop length, making sure that both the start and end of the loop are both multiples of 16. I am saving my loop as a wave. Then, I am using snesbrr to convert the wave into a .BRR file. The .brr is never any bigger than 4kb. The .brr is playable, but amk won't insert it. I keep getting an error stating that the BRR file was of an invalid length. I don't understand what I am doing wrong. Can someone point me in the right direction? Thank you in advance.

--------------------
Your layout is on vacation.
Sorry for the delayed response. I got sidetracked. From the responses, I think I know where I'm going wrong. I haven't been implementing the loop header when converting to .brr. My process for converting wav to brr is as follows. After placing cmd, snesbrr, and my wav in the same folder, I open cmd. I then type the following: snesbrr.exe -e sample.wav sample.brr. I think I'm going to retrace my steps, using the information everyone has provided. I'm pretty sure the loop header is where my problem lies. Although, I am going to make sure I am measuring in samples when exporting my wav. Also, I never thought to use Audacity to edit my wav file. I love that program. Thanks everyone for the responses. I'll get to work and post my results here tomorrow. :)

--------------------
Your layout is on vacation.
Pages: « 1 2 3 »
BulzomeGuides' Profile - Posts by BulzomeGuides

The purpose of this site is not to distribute copyrighted material, but to honor one of our favourite games.

Copyright © 2005 - 2019 - SMW Central
Legal Information - Privacy Policy - Link To Us


Total queries: 9

Menu

Follow Us On

  • YouTube
  • Twitch
  • Twitter

Affiliates

  • Talkhaus
  • SMBX Community
  • GTx0
  • Super Luigi Bros
  • ROMhacking.net
  • MFGG
  • Gaming Reinvented