Language…
10 users online:  Anorakun,  bebn legg, Daniel30sp,  idol, Jaozin712, katun24, Natsuz2, Pink Gold Peach, RicardoDeMelo, TheSpreee333 - Guests: 101 - Bots: 202
Users: 69,709 (2,536 active)
Latest user: Spudd_4343

Posts by SmashNcrab

SmashNcrab's Profile → Posts

  • Pages:
  • 1
  • 2
  • 3
Hi there! I'm using the Magikoopa Boss in my hack, and I was wondering if I could get some help to control its possible spawn locations. In its current form, it can result in some pretty janky spawning in my boss arena (a one-screen, Level mode 08 verticle layer 2 level). I would like the sprite to only spawn on specific tiles, these being: "2-7 & 9-D, A:25". See the image below to visualize what I mean:





Anything I can do to make this happen?
Could someone make me a block (or point me in the direction of) a block that will allow you to grab as many throw blocks from as you'd like? I've seen these used, but don't see the resource available. It would be nice if you could only grab one so many frames so you can't spawn too many rapidly. Thank you!
Hello there.

I'm using the Unlimited Throw Block from the block pack linked. Would there be an easy way to add a cooldown for spawning the throw block sprite from this block? Right now you grab as many as you want rapidly, leading to some annoying results. I was thinking changing it to once every in-game second or so many frames might solve this. How might one do this? Any other more efficient ideas?

Thanks!
Hey there!

I was wanting to know if someone could make me a simple block that would increase the consecutive score reward after every time it is hit by a kick sprite.

Example, if the 2 brown blocks in this gif were the custom block, every time the shell hit one of the blocks it would increase the score reward as if it were a killed sprite (200, 400, 800, 1000, 2000, 4000, 8000, 1UP, 1UP, 1UP, etc...)
Hi there!

What would be the best way to make 1 switch palace activate all four upon hitting the switch? (Yellow, Green, Red, & Blue)
Originally posted by Koopster
Do you still want to have the single four switches as objects separately from the all-in-one switch?

If so, that's definitely possible (I'm thinking make it flag based i.e. any switch object becomes a all-in-one switch if it's in a specific translevel) but it's the harder thing to do so I'll ask before doing it.

If you're fine with only having the all-in-one switch, here's a quick patch that makes any of the switches activate every one of them:

Code
!addr = $0000

if read1($00FFD5) == $23
	sa1rom
	!addr = $6000

org $00EEAA
	LDX #$03
-	LDA #$01				
	STA $1F27|!addr,x
	DEX
	BPL -
	LDX #$00	;color of the pressed switch sprite (0 = g, 1 = y, 2 = b, 3 = r)
	NOP

#thp{O_O2} DIDN'T TEST #thp{O_O2} BACK UP YOUR ROM FIRST #thp{O_O2}
e: added SA-1 blabber
\
This is exactly what I was looking for. No errors so far in testing. Thanks for your help!!
I'm using the Magikoopa Boss sprite in 2 sequential Boss rooms. The First Room is only meant to be beaten if you manage to get 7 hits on the Boss (Skipping the next room and ending the level), and the Second Room is meant to be beaten after getting 3 hits on the Boss. My idea for doing this was just to insert 2 different sprites with different HP values (One with 7 and another with 3). The problem is that when you fight the boss in the second room his HP will still be 7 just like the first room (even though I am definitely using 2 different sprites).

How can I fix this? I assume this has something to do with the RAM, but I'm stumped.
Originally posted by Thomas
If I had to guess, it's because the two sprites you inserted actually aren't different. If you just copy-pasted the .asm and .cfg file and gave them a different name, then the issue likely lies with the .cfg file. If you open it up in a text editor, you'll see a line with "magikoopaBoss.asm" in it. This is the ASM file that the CFG is actually tied to. So if you just copy-pasted the file and gave it a new name without updating that line, it'll still actually reference the original sprite.
(you can also edit this value using PIXI's included CFG editor, the ASM file pointer is located at the bottom-left of the editor)

That's exactly what the issue was. I can't believe I never noticed that in the CFG editor. Feel pretty silly now haha
Almost done with my hack! You've help me solve so many things along the way. I appreciate it!
Hi there!

I am wondering what the best way I could make a Feather powerup rise out of (and stay on top of) question mark blocks? I want this instead of the current way of launching out upward and slowly drifting down. Didn't know if this would be something I could easily do without inserting new Sprites/Blocks.
Hi there,

As the title says, I would like a patch (or custom object) that will make the Dragon Coins only spawn after beating a specific level. Specifically for lo-rom. I’m open to whatever would be the simplest solution to this. I’d greatly appreciate the help!
Hi there!

I was wondering how I could make this Flutter Jump UberASM only apply to the player when you have the feather? It currently applies to Mario in all power states (Small, Big, Flower, & Caped). Help would be appreciated! In the final steps of releasing my hack!

Here's the code:
Code
!TTFJ = $18B4|!addr	;[T]ime [T]o [F]lutter [J]ump
!FJR = $18B7|!addr	;[F]lutter [J]ump [R]est
!FC = $18CD|!addr	;[F]lutter [C]arry

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Other defines
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
!FlutterAnimation = 1	; Change this to 0 to disable the flutter animation
!PlayerFlutter = 0		; Change this to 1 so only player 1 can flutter and 2 if only player 2 can flutter
!YoshiFlutter = 0		; Change this to 1 so you can't flutter with Yoshi and 2 if only Yoshi can flutter
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

main:
	LDA $9D
	BNE .Return1
if !PlayerFlutter == 1
	LDA $0DB3|!addr
	BEQ .GoOn
else
	if !PlayerFlutter == 2
		LDA $0DB3|!addr
		BNE .GoOn
	else
		BRA .GoOn
	endif
endif
.Return1
RTL

.GoOn
	LDA $187A|!addr
if !YoshiFlutter == 2
	BEQ .Reset
else
	if !YoshiFlutter == 1
		BNE .Reset
	else
		BNE .NotFluttering
	endif

	if !FlutterAnimation
		LDA !TTFJ
		BEQ .NotFluttering
		AND #$03
		CMP #$03
		BNE +
		LDA #$01
	+	LDY $148F|!addr
		BEQ +
		CLC : ADC #$07
		BRA .Store
	+	LDY $72
		CPY #$0C
		BNE .Store
		CLC : ADC #$04
	.Store
		STA $13E0|!addr
	.NotFluttering
	endif
endif

    LDA $77     	;(in order)Doesn't work if not in air, swimming, climbing, or on yoshi
    AND #$04		;On the ground?
    ORA $71			;Controllable
    ORA $75			;Swimming?
    ORA $74			;Climbing?
	ORA $1407|!addr	;Gliding with the cape
	ORA $1891|!addr
	;Add more checks if you don't want Mario to flutter
    BNE .Reset		;Exit
    LDA $1499|!addr  ;temperarily stops when facing screen
;    BEQ NoReturn
;    JMP Return
    BNE .Return
.NoReturn:
	LDA !TTFJ
	BEQ .NoFlutter	;If the player isn't flutter jumping then don't apply its effects
		DEC !FC		;boost more
		LDA !FC		;load boost amount
		STA $7D		;apply boost
		DEC !TTFJ	;decrement flutter jump counter
		BRA .Fluttered	;don't run the resting code if we're flutter jumping
.NoFlutter:
	LDA !FJR		;Is there still rest time to take care of?
	BEQ .NoRest	;Nope, skip
	DEC !FJR		;Yes, decrement the rest timer
.NoRest:
.Fluttered:
	LDA $16       ;change these two lines to alter which button you want to press. controller values are in the RAM section of smwcentral.net
	CMP #$80
	BNE .Return

	STZ $140D|!addr     ;remove this line if you don't want to allow mario to flutter while spin jumping (without this, mario spin flutters)
	LDA !FJR		;Are we resting?
	BNE .NoCheck
	LDA #$16	;How long to flutter jump
	STA !TTFJ
	LDA #$F8	;Starting Y speed for flutter jump
	STA !FC
	LDA #$20	;How long to rest afterwards
	STA !FJR
	LDA #$09     ;What sound to play		
	STA $1DF9|!addr	;Sound Bank to use
.NoCheck:
	BRA .Return
.Reset:	;Stop the flutter jump
	STZ !TTFJ
	STZ !FC
;	BRA Return
.Return:
	RTL
Originally posted by Thomas
Right after the "main" label, try adding this:

Code
main:
	LDA $19
	CMP #$02
	BNE .Return1

Works!! Thanks again Thomas! Ryckert’s Island wouldn’t be anywhere without your assistance the last few years.

This is also absurdly simple. Surprised I wasn’t able to find it easily by searching. Hopefully this post will help others figure out how to implement powerup specific Uberasm in the future.
Hi there!

So I'm currently using a slightly modified version of this Flutter Jump UberASM (I have it set to only be active when using a feather powerup). It works well, but I need a separate cooldown timer (seen on line 124 on code below) for when you're using player 2. I need this because Luigi physics behave differently than Mario's in my hack. I was wondering if someone could help me do this in an optimized way? My understanding of the language is limited and this would be a good teaching moment.
Code
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Flutter Jump
;;Original by Scepile3
;;Modification by UltimateYoshiMaster and MarioFanGamer
;;UberASM conversion by MarioFanGamer
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;		Notes from original version:		      ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;*People that are good at rapidly pressing buttons may find a slight advantage...
;;
;;*There is a slight glitch...(it deals with springs...)
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Timers, set to some other location if you are already using these locations in RAM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
!TTFJ = $18B4|!addr	;[T]ime [T]o [F]lutter [J]ump
!FJR = $18B7|!addr	;[F]lutter [J]ump [R]est
!FC = $18CD|!addr	;[F]lutter [C]arry

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Other defines
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
!FlutterAnimation = 1	; Change this to 0 to disable the flutter animation
!PlayerFlutter = 0		; Change this to 1 so only player 1 can flutter and 2 if only player 2 can flutter
!YoshiFlutter = 0		; Change this to 1 so you can't flutter with Yoshi and 2 if only Yoshi can flutter
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

main:
	LDA $19
	CMP #$02
	BNE .Return1

	LDA $9D
	BNE .Return1
if !PlayerFlutter == 1
	LDA $0DB3|!addr
	BEQ .GoOn
else
	if !PlayerFlutter == 2
		LDA $0DB3|!addr
		BNE .GoOn
	else
		BRA .GoOn
	endif
endif
.Return1
RTL

.GoOn
	LDA $187A|!addr
if !YoshiFlutter == 2
	BEQ .Reset
else
	if !YoshiFlutter == 1
		BNE .Reset
	else
		BNE .NotFluttering
	endif

	if !FlutterAnimation
		LDA !TTFJ
		BEQ .NotFluttering
		AND #$03
		CMP #$03
		BNE +
		LDA #$01
	+	LDY $148F|!addr
		BEQ +
		CLC : ADC #$07
		BRA .Store
	+	LDY $72
		CPY #$0C
		BNE .Store
		CLC : ADC #$04
	.Store
		STA $13E0|!addr
	.NotFluttering
	endif
endif

    LDA $77     	;(in order)Doesn't work if not in air, swimming, climbing, or on yoshi
    AND #$04		;On the ground?
    ORA $71			;Controllable
    ORA $75			;Swimming?
    ORA $74			;Climbing?
	ORA $1407|!addr	;Gliding with the cape
	ORA $1891|!addr
	;Add more checks if you don't want Mario to flutter
    BNE .Reset		;Exit
    LDA $1499|!addr  ;temperarily stops when facing screen
;    BEQ NoReturn
;    JMP Return
    BNE .Return
.NoReturn:
	LDA !TTFJ
	BEQ .NoFlutter	;If the player isn't flutter jumping then don't apply its effects
		DEC !FC		;boost more
		LDA !FC		;load boost amount
		STA $7D		;apply boost
		DEC !TTFJ	;decrement flutter jump counter
		BRA .Fluttered	;don't run the resting code if we're flutter jumping
.NoFlutter:
	LDA !FJR		;Is there still rest time to take care of?
	BEQ .NoRest	;Nope, skip
	DEC !FJR		;Yes, decrement the rest timer
.NoRest:
.Fluttered:
	LDA $16       ;change these two lines to alter which button you want to press. controller values are in the RAM section of smwcentral.net
	CMP #$80
	BNE .Return

	STZ $140D|!addr     ;remove this line if you don't want to allow mario to flutter while spin jumping (without this, mario spin flutters)
	LDA !FJR		;Are we resting?
	BNE .NoCheck
	LDA #$16	;How long to flutter jump
	STA !TTFJ
	LDA #$F8	;Starting Y speed for flutter jump
	STA !FC
	LDA #$32	;How long to rest afterwards (20 Default)
	STA !FJR
	LDA #$09     ;What sound to play		(list of sounds at http://www.smwcentral.net/?p=thread&id=6665)
	STA $1DF9|!addr	;Sound Bank to use
.NoCheck:
	BRA .Return
.Reset:	;Stop the flutter jump
	STZ !TTFJ
	STZ !FC
;	BRA Return
.Return:
	RTL


I'd really appreciate the help! I've been pretty burnt out on this hack I've been working on for the last 2 years, so if anyone's interested in helping me polish a few things, you'll be my friend forever : )
I'm making a Big Boo Boss fight using this custom sprite. I want a horizontal auto-scroll fight where you start on the left side of the level and platform your way through the level while you hit him with various blocks you find. The problem is, Boo gets left behind in the level with Layer 1 scrolling. So, I thought maybe making this a Layer 2 scrolling level would be the way to go instead... Unfortunately, I'm not too fond of the Layer 2 platforms constantly scrolling while Mario stays locked to his Layer 1 positioning. Does anyone have a suggestion to keep the Boo on Screen using Layer 1 scrolling instead? Or maybe there's a better way to do this whole thing?

(Side note: If anyone has suggestions on dealing with Big Boo's tilemap, let me know. I'm using a variation of these King Boo graphics, and the Crown flipping upside down when he turns is driving me insane lol)
Originally posted by Thomas
One option might be too increment the Big Boo Boss's X position along with the screen. $17BD is a RAM address that tells you how much the X position of the screen has changed in the last frame, so you can literally just add that value to the boss's X position to make him stick to the screen. Like this:

Code
	LDA !E4,x
	CLC : ADC $17BD|!addr
	STA !E4,x
	LDA !14E0,x
	ADC #$00
	STA !14E0,x

As for where to stick that, putting it just after the "UPDATE_POSITION" label should be fine.</pre>
</div>

Thanks for such a quick response! Unfortunately, this wasn't successful for me unless I did something wrong.
I tried the code in a few different spots after that label with no effect. In an attempt to see if I could do something with this I replaced the following code with yours
Code
  
                    JSL $018022|!BankB      ; update position based on speed values (X)
		    JSL $01801A|!BankB      ; update position based on speed values (Y)
		    

That of course only helped him stay in one specific spot on the screen (no swooping) and then would get left behind once in the Layer 1 Autoscroll when hit by a block. I'm mostly illiterate in ASM, so I could just not be seeing an obvious fix here.
Unexpected end tag (</pre>) at 739, expected </div>
Originally posted by Thomas
Don't replace those two calls, they're responsible for updating the boss's position with its actual speed; you want to have this code in addition to those. Putting the code just before or after those lines should be fine, though.

If it's still not working, though, it could be the scroll sprite you're using isn't setting $17BD (this may be the case if using a custom sprite/uberasm). I'm not certain how well it will work, but if that's the case you could try this variation instead:

Code
	REP #$20
	LDA $1462|!addr
	SEC : SBC $1A
	SEP #$20
	CLC : ADC !E4,x
	STA !E4,x
	LDA !14E0,x
	ADC #$00
	STA !14E0,x

Hmm, no such luck with this one either. I'm currently using the slow autoscroll sprite (F3), but have also tested with an Uberasm Autoscroll. Kinda stumped on this one.
Originally posted by Thomas
After getting it a test, the code does work, it just needs to be pasted in a different spot (the UPDATE_POSITION code only runs when the boss is actually moving). Specifically, paste it after this pair of lines:
Code
		    ORA $9D                 ; \ if sprites locked, return
		    BNE RETURN              ; /

Works perfectly now. I appreciate your help!

I’m sorry to keep asking questions, but I figured I’d knock them all out here now, since it pertains to this boss…

Is it possible to make such a sprite compatible with lightning generators/Uberasm? I I figure it has something to do with transparency, but this particular sprite causes the screen to be covered in garbage when used with one.
Hello!

Requesting a Patch or UberASM that will let you "spend" 1ups for powerups. While playing a level (not in overworld) you'd press "select" and Mario would gain either a Mushroom, Fire Flower, or Cape based on how many lives you can afford to spend (Never letting you spend lives that will put you below 1).

Example:
>Mushroom costs 4 lives.
Fire Flower costs 6 lives.
Cape cost 9 lives.
>When you press the select button, Mario is instantly powered up to whatever the most expensive powerup you can afford. (if you have 5-6 lives -> Mushroom, 7-8 lives Fire Flower, 10+ lives -> Cape).
>Lives are deducted from your 1UP Counter Instantly.

I'd be using this with item box disabled, and the following code that disables ever dropping below 1 Life.
Code
org $00D0D8
	LDA $0DBE
	BEQ NotGameOver
	DEC $0DBE
	BRA NotGameOver

org $00D0E6:
  NotGameOver

This would make collecting coins/lives useful in hacks that don't want to use the traditional life system.

Edit: I would also like it to play a sound when you press select if you don’t have enough lives to purchase a powerup. (Compatible with AddMusick)

If someone could help me with this it would be extremely appreciated! Been working on a hack called Ryckert’s Island over the last 3 years and this is the final system I need help with to release!
Hey there!

I'm looking for a level UberASM that would fine-tune cape glide speed?
  • Pages:
  • 1
  • 2
  • 3