Views: 639,323,800
7 users online: o 1UPdudes, buggy789, Feistygandhi, ggamer77, GreenHammerBro, maddiethehedgie, RussianMan - Guests: 48 - Bots: 334Users: 34,915 (1,380 active)
Latest: William644
Tip: You can insert custom sprites on the overworld by using Overworld SpriteTool.Not logged in.
Posts by Magmadon92
Magmadon92's Profile - Posts by Magmadon92
Pages: « 1 »
Hi, everyone! #tb{:j}

My name's Magmadon92. I'm italian and I'm a proud Mario-player since I was 3 years old. Super Mario World was my first videogame of my life and it still the best that I've ever played! I love platform games, mazes and hard challenges; so you don't know the happiness I've felt, to know that I can customize my favourite game! #tb{:DD} I'm using Lunar Magic and other SMW tools taken from this site since 2010 and I've already built some levels and created a Demo Version with very rough results: initially, it was just a pastime for a few hours a day... but now I'm studying to be a general programmer and, with this new experience, I want to update my knowledge in ASM coding and all my tools to build a very challenging but funny SMW game, with a lot of amazing things; so, I've now decided to join this community! #tb{^V^} Anyway, my experience is not so advanced yet: some parts of "SMW Hacking Art" are still so hard for me; #tb{:(} so, I hope that we can do this together, also only with a little help in coding or something like that; me too, I'll try to help within my abilities limits. Thanks for all, guys! #tb{:j} See ya!

P.S.: Sorry for my bad english, if you find it bad... #tb{XD}
Hi, everyone! ^^

I'm trying to build some super-perfect boost blocks and I've some problems. I want to start with a simple "jump block".

db $42
JMP Return : JMP Mario : JMP Mario
JMP Sprite : JMP Sprite
JMP Return : JMP Return
JMP Mario : JMP Mario : JMP Mario

	LDA #$80
	STA $7D

	LDA #$D0
	STA $AA,x


As you can see, I've made this to be interactable only if touched from above and both sides. Mario is perfect but I don't understand what's wrong with sprites: only some sprites interact perfectly with it, like POWs, moving coins and not-kicked shells. Koopas, Mushrooms, kicked shells, Yoshis (baby and not) and others doesn't jump! There's something I missed? How can I make at least ALL standard sprites to interact with it correctly? I've spent days to search different RAM/ROM memory addresses for sprites Y speed table but I had not found nothing similar to $7E:00AA address. I've seen that the block in the "SMW Central Production 2" base rom (level 7, Map16 tile: 2DFE) is just the block I want to build... but its ASM files in .zip archive I downloaded from its thread is protected and I cannot study it! Please, can you help me? Thanks a lot! :)
Wow, thank you very much, it works fine, finally! I'll remember this for all future blocks, if them don't work properly. ^^
Finally, after too long time, I've restarted to hack my SMW rom, so... Hi! But, checking the site, I've read about SA-1... I know that's not an essential patch, but I would use it to improve my rom, also if it means that I must redo all. My BIG problem is about blocks/sprites/patches compatibility; I know that there's a converter for blocks and sprites... but patches needs to be modified manually, aren't them?
Let me start by saying that I've taken a new clean unmodified SMW rom (U), expanded to 2MB and patched with SA-1 (v1.25) through the last version of Asar; so, I've expanded the rom to 8MB (I don't think that's a problem, isn't that?); all right, until now.
Simply, for example, I want to make the Alcaro's classicfire.asm file compatible with SA-1 but... epic fail. I've read all tutorials about manually RAM convertion and tried to modify the code, tried to change freespace address too, tried to use the converter... but nothing, the patch freezes rom unavoidably. Please, how I can edit this ultra-simple ASM file?

This is the original Alcaro's classicfire.asm file:

;Ignore the comments, they're left over from the old version and have been moved around a bit.

org $02A129
LDA #$02    ; / Make sprite fall down...
STA $14C8,x ; \ ... or disappear in smoke (depends on its settings)
autoclean JSL Mycode
JSL $02ACEF ; Jump to the score routine handler.


LDY $185E
LDA $1747,y
LDA #$20
BRA ++
LDA #$E0
STA $B6,x

LDA #$05    ; Change the score you get (1=10,2=20,3=40,4=80,5=100,6=200,7=400,8=800,9=1000,A=2000,B=4000,C=8000,D=1up)

I'm not an ASM advanced programmer, but I learned something about it until a few months ago (I'm already refreshing my ASM knowledge), so I ask this directly to you also to learn something new to apply to more complex codes too. Thanks a lot. :)
Your code is the same that I've tried, but it won't work... #smw{:(} however, now I've seen that it works only if the rom is not expanded to 8MB (at the end, the step I thought was not a problem, it was #smw{-_-2} ). Thanks a lot for your help, I wanted to be sure if I was coding correctly or not. #smw{:TUP:}

P.S.: Sorry for my (very probably) bad english... #smw{9.9}
Hi! I have a problem with SA-1 that I don't understand; I restart to hack my old custom SMW rom after months and I would to improve it applying the SA-1 patch on it (yes, I must redo all) and I don't think that expand a clean rom to 2MB is sufficient, since I've applied lots of things on my old non-SA-1 one; so, I've just patched sa1.asm (v1.25) on a 2MB unmodified rom and applied a simply patch that allows to kill enemies in SMB style when hitted by a fireball (Alcaro's "classicfire.asm"); but it works only if my rom is expanded to 2MB! So, if I expand a rom to more than 2MB, the game freezes when I hit an enemy with a fireball! Applying sa1.asm and/or classicfire.asm before or after rom expansion from 2MB to 3MB and more, it won't change anything, I've tried all! Please, can you help me? If it happens with a simple patch like that, what can happen with complex ones like "Multi-Midway Points" patch?!? #w{x(} Thanks a lot. #smw{:TUP:}

P.S.: Sorry for my (very probably) bad english... #smw{-_-;}
New problem: the previous patch works only if my rom is expanded to 2MB! If I expand it to more than 2MB, the game freezes when I hit an enemy with a fireball! I know I could be a noob about ASM, but this has no sense (maybe)... 2MB aren't sufficient, since lots of things in my old rom, so I must expand it at least to 4MB! Any ideas, please? #smw{T_T}
I've no ideas, I'm trying to work on a 2MB SA-1 rom without problems but I already think that 2MB are not enough for all stuff that I've installed in my old rom... and expand it, before or after patching SA-1, will crash all only testing a simple patch like "Fireball SMB Style"?! Totally no-sense...
Problem solved!!! Thanks, Vitor, I'll pay more attention, next time. #tb{:j}
Hi! Can you help me, please? I would use "Ladida's Minimal Status Bar Patch" on my SA-1 rom; there was a small bug, but I fixed it, and now the patch works fine, if applied on a 2MB rom (SA-1). The problem is obviously the same of last one: why on heart the rom crashes when I use it in a 4MB rom?!? Before this, it was because I've not changed all addresses and/or there wasn't the "sa1rom" code; now I've checked all, but where's the error?! Here's the code:

;$0F13-$0F2F should be unused, use them for more counters or w/e

!base1 = $0000
!base2 = $0000
!base3 = $000000

if read1($00FFD5) == $23
!base1 = $3000
!base2 = $6000
!base3 = $800000

!statusloc = $0EF9	;do not change
!bgcolor = $0000	;status bar background color (default=black)

;below = location of counters in status bar
!playerVRAM	= 5001
!livesVRAM	= 5007
!bonusVRAM	= 500C
!itemboxVRAM	= 5010
!yicoinsVRAM	= 5014
!timeVRAM	= 501C
!coinsVRAM	= 5403
!scoreVRAM	= 5418

!player = !statusloc
!lives = !statusloc+$5
!bonus = !statusloc+$7
!itembox = !statusloc+$9
!yicoins = !statusloc+$A
!time = !statusloc+$F
!coins = !statusloc+$12
!score = !statusloc+$14

macro vramwrite(j, k, vram, loc, bank, byte)
LDX <j> : STX $2115
LDA #$<vram> : STA $2116
LDA <k> : STA $4310
LDA.w #<loc> : STA $4312
LDX.b #<bank> : STX $4314
LDA <byte> : STA $4315
STY $420B

header : lorom

org $008292|!base3
LDY #$09		;top status bar scanline length

org $0082A4|!base3
autoclean JML NMI
NOP #2

org $00838F|!base3
autoclean JML IRQ

org $008CFF|!base3
autoclean JML StatusHijack

org $008DAC|!base3
autoclean JML DrawStatusHijack

org $028052|!base3
db $78			;item box X drop ($78)

org $028060|!base3
db $09			;item box Y drop ($0F)

org $008E6F|!base3		;Time hijack
LDA $0F31|!base2
STA !time
LDA $0F32|!base2
STA !time+$1
LDA $0F33|!base2
STA !time+$2
LDX #$00
org $008E8C|!base3
STA !time,x

org $008F55|!base3		;Lives hijack
STX !lives
STA !lives+$1

org $008F7E|!base3		;Coins hijack
STA !coins+$1
STX !coins

org $008EE0|!base3		;Score hijacks
org $008EE0|!base3
LDA !score,x
org $008F0E|!base3
LDA !score,x
org $008EE7|!base3
STA !score,x
org $008F15|!base3
STA !score,x
org $008ED7|!base3
LDX #$00
org $008F05|!base3
LDX #$00
org $009014|!base3
STZ !score,x
org $009034|!base3
INC !score,x

org $008F86|!base3
autoclean JML MiscCounters


NMI:			;top status bar
LDA $0D9B|!base2
LDA $0100|!base2
CMP #$0B
LDA #$00 : STA $2111
LDA #$00 : STA $2111
LDA #$FF : STA $2112
LDA #$01 : STA $2112
LDA #$04 : STA $212C	;layer 3 on main+sub
STZ $212D
STZ $212E
STZ $2130
STZ $2131
STZ $2121
LDA.b #!bgcolor : STA $2122
LDA.b #!bgcolor>>8 : STA $2122
LDA #$09 : STA $2105	;gfx mode 1 + layer 3 priority
JML $0082B0|!base3
STZ $2111
STZ $2111
STZ $2112
STZ $2112
JML $0082B0|!base3

LDA $11
BNE +			;regular screen (IRQ #1)
LDY #$D7
STY $4209
LDA #$A1 : STA $4200
INC $11
BIT $4212 : BVC $FB	;wait for h-blank
LDA #$80 : STA $2100	;f-blank the scanline
LDA $22 : STA $2111	;static layer 3
LDA $23 : STA $2111
LDA $24 : STA $2112
LDA $25 : STA $2112
LDA $3E : STA $2105
LDA $0D9D|!base2 : STA $212C	;main screen
STA $212E
LDA $0D9E|!base2 : STA $212D	;sub screen
STA $212F
LDA $40 : STA $2131	;color math
LDA $44 : STA $2130
STZ $2121
STZ $2122 : STZ $2122	;color 0 back to black
BIT $4212 : BVC $FB	;wait for h-blank again
LDA $0DAE|!base2 : STA $2100	;restore brightness
JML $0083B2|!base3

+			;bottom status bar (IRQ #2)
BIT $4212 : BVC $FB	;wait for h-blank
LDA #$80 : STA $2100	;f-blank the scanline
LDA #$00 : STA $2111
LDA #$01 : STA $2111
LDA #$27 : STA $2112
LDA #$01 : STA $2112
LDA #$04 : STA $212C	;layer 3 on main+sub
STZ $212E
STZ $2130
STZ $2131
STZ $2121
LDA.b #!bgcolor : STA $2122
LDA.b #!bgcolor>>8 : STA $2122
LDA #$09 : STA $2105	;gfx mode 1 + layer 3 priority


LDX $0DC2|!base2		;Item Box Item
LDA .statuspowerup,x
STA !itembox

LDY $0DB3|!base2 : TYA
LDA #$10
STA $00
LDX #$04
LDA .playertable,x	;Current Player
CLC : ADC $00
STA !player,x

LDA $0F48|!base2,x		;Bonus Stars
PEA.w .jslrtsreturn-1
PEA.w $0084CF-1
JML $009045|!base3
STX !bonus
STA !bonus+$1

LDX #$00		;Yoshi Coins
LDA $1422|!base2
DEC A : STA $00
LDA #$2E		;full yoshi coin tile
LDY $00 : BPL +
LDA #$FC		;blank yoshi coin tile
STA !yicoins,x
DEC $00 : INX
CPX #$05 : BCC -	;# of yoshi coins needed to stop display

PLB : JML $008FF9|!base3

db $FC,$95,$97,$96,$28
;none, mushroom, flower, star, feather

db $30,$31,$32,$33,$34
;$10 is added for luigi's tiles

;Status Bar upload routine

StatusHijack:		;initialize status bar
REP #$20
LDY #$02
%vramwrite(#$00, #$1800, 5000, TopTiles, TopTiles>>16, #$0020)
%vramwrite(#$80, #$1900, 5000, TopPal, TopPal>>16, #$0020)
%vramwrite(#$00, #$1800, 5400, BottomTiles, BottomTiles>>16, #$0020)
%vramwrite(#$80, #$1900, 5400, BottomPal, BottomPal>>16, #$0020)
SEP #$20
JML $008D8A|!base3

DrawStatusHijack:	;draw counters onto status bar
REP #$20
LDY #$02
%vramwrite(#$00, #$1800, !playerVRAM, !player, $7E, #$0005)
%vramwrite(#$00, #$1800, !livesVRAM, !lives, $7E, #$0002)
%vramwrite(#$00, #$1800, !bonusVRAM, !bonus, $7E, #$0002)
%vramwrite(#$00, #$1800, !itemboxVRAM, !itembox, $7E, #$0001)
%vramwrite(#$00, #$1800, !yicoinsVRAM, !yicoins, $7E, #$0005)
%vramwrite(#$00, #$1800, !timeVRAM, !time, $7E, #$0003)
%vramwrite(#$00, #$1800, !coinsVRAM, !coins, $7E, #$0002)
%vramwrite(#$00, #$1800, !scoreVRAM, !score, $7E, #$0006)
SEP #$20
JML $008DE6|!base3

;_MARIOx--_*x--_[_]__OOOOO_T=---_	<-- TOP VISUAL. _ is $FC

;_@x--````_______________SSSSSSS_	<-- BOTTOM VISUAL. _ is $FC

db $FC,$30,$31,$32,$33,$34,$26,$27
db $27,$FC,$64,$26,$27,$27,$FC,$5B
db $FC,$5C,$FC,$FC,$FC,$FC,$FC,$FC
db $FC,$FC,$76,$77,$27,$27,$27,$FC

db $38,$28,$28,$28,$28,$28,$38,$38
db $38,$38,$28,$38,$38,$38,$38,$39
db $28,$39,$38,$38,$3C,$3C,$3C,$3C
db $3C,$38,$38,$38,$3C,$3C,$3C,$38

db $FC,$2E,$26,$27,$27,$FC,$FC,$FC
db $FC,$FC,$FC,$FC,$FC,$FC,$FC,$FC
db $FC,$FC,$FC,$FC,$FC,$FC,$FC,$FC
db $00,$00,$00,$00,$00,$00,$00,$FC

db $38,$3C,$38,$38,$38,$38,$38,$38
db $38,$38,$38,$38,$38,$38,$38,$38
db $38,$38,$38,$38,$38,$38,$38,$38
db $38,$38,$38,$38,$38,$38,$38,$38

Anyone can help me? It's rather urgent...
Problem solved by myself. Thanks anyway... #w{:<}
Please, help me, I'm going crazy on this code since 2 weeks!!!

;	Kill sprite
;	HuFlungDu
;	This block will kill cause every one of one specific NON CUSTOM sprite to disapear in a puff of smoke
;	when mario touches it. To choose which sprite, just change !spritenum to the sprites number. Currently
;	kills regular boos, but you can make it kill whatever you like.
;	It doesn't really matter how it acts, just make it act like whatever you place it as.
;	No credit necessary

db $42
JMP Mario : JMP Mario : JMP Mario : JMP Return : JMP Return : JMP Return : JMP Return
JMP Mario : JMP Mario : JMP Mario

!spritenum = $37		;The number of the sprite you want to disapear. You can find this on the wiki or in LM

print "This block will kill all of a certain sprite (0x",hex(!spritenum),") that is on screen when the player touch it."

	PHX					;Push the X register
	LDX #$00			;innitiate the counter
	LDA $3242,x
        CMP #$08
        BCC notkill
        LDA $3200,x			;Load the sprite numbers of all the sprites on screen (one at a time)
	CMP #!spritenum		;\If it's not the one you specified, don't kill it
	BNE notkill			;/
	LDA #$04			;\ Make the sprite dissapear in a puff of smoke
	STA $3242,x			;/
	LDA #$08
        STA $7DF9
	LDA #$1F
	STA $32C6,x

	INX					;Move on to the next slot
	CPX #$0C			;\If they haven't all been checked, go back to the beginning
	BCC loop			;/
	PLX					;Pull the X register from the stack

I want to use a block that, when touched by Mario, ALL Boos on screen will killed; it works correctly on a normal rom, but when I convert the code to install the block on a SA-1 rom, it kills only one Boo!!! And worse still, when it kills the Boo, touching again the block, nothing happens! It's not an emulator problem, I've tested the block with different emulators with SA-1 support! So where's the error? Maybe, the looping method for SA-1 Mod has something different? Please, help!!!
It was just that?!? I had not idea of meaning of that #$0C, I thought it was a constant value for looping; now it works correctly, finally! Thanks a lot!!! #tb{:)}

Another question: we assume that I want a block that will make disappear a key or a springboard when touched by one of them:

db $42
JMP Return : JMP Return : JMP Return : JMP Sprite : JMP Sprite : JMP Return : JMP Return
JMP Return : JMP Return : JMP Return

	LDA $3200,x	;\ Check if the sprite is a key...
	CMP #$2F	;/
	BEQ Remove
	LDA $3200,x	;\ ... or a springboard
	CMP #$80	;/
	BEQ Remove
	STZ $3242,x	;\ Make disappearing the sprite
	%create_smoke() ;/ with a puff of smoke

... is there a better code to list sprites (like an array or something similar) instead of using

LDA $3200,x
BEQ Label

for each sprite I need to interact with block? The more compact code, the better.
Sorry for the delay of this reply, I was busy for job and other codes for my rom... howerer, thanks a lot for your help, I'll test that code soon. ^^
Pages: « 1 »
Magmadon92's Profile - Posts by Magmadon92

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

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

Total queries: 21


Follow Us On

  • Facebook
  • Twitter
  • YouTube


  • Talkhaus
  • SMBX Community
  • GTx0
  • Super Luigi Bros
  • MFGG
  • Gaming Reinvented