12 users online:  AmperSam, ASMagician Maks, EvilGuy0613, fanfan21, FrostyLosty, gcrackaaa, hh0962430, imamelia, pinguwahoo, Reese, WONIU, yoshi3706 - Guests: 87 - Bots: 181
Users: 66,425 (2,327 active)
Latest user: Chadtronic

Posts by zuccha

zuccha's Profile → Posts

The $ in front of a number means the number should already be interpreted as hexadecimal, you don't need to prefix it with 0x, too. Try changing org $0x108000 to org $108000.

About the jump operation, I'm not sure what's going on, as JMP (addr,X) should exist (you can double check the reference guide). Maybe PowerupTable is in another bank and thus not reachable (I would expect another kind of error for this case, though). Maybe the assembler is trying to interpret PowerupTable as a 24-bit address, and JMP (long,X) doesn't exist. Maybe nothing I say makes sense, since I don't really know xkas and how it differs from Asar, and worse how Asar's compatibility mode for xkas works.

Are JMP (PowerupTable,x) and PowerupTable defined in the same bank?
ROM Hack Manager - SMW Resources - SMW Toolbox
What is displayed at the end of the level is defined in the table at $05CC16 (two bytes per character).

The game loops 37 times, drawing each character defined on the table on screen. In particular, at $05CC9D the game reads from the table:


where Y is the index of the current character being processed. You could write a patch that hijacks this address with a custom routine, that loads in A the character depending on the level. Something like this:

org $05CC9C
	autoclean JSL load_character


	TAX			; Restore original code

	LDA $010B		;\ 
	CMP #$0105 		;| Branch if current level is 105
	BEQ .level_105		;/

	LDA $05CC16,y		; Load character from generic (vanilla) table

	LDA tilemap_105,y	; Read character from custom table

; This is just a copy of the vanilla tilemap, feel free to change it.
	db $51,$0D,$00,$09,$30,$28,$31,$28
	db $32,$28,$33,$28,$34,$28,$51,$49
	db $00,$19,$0C,$38,$18,$38,$1E,$38
	db $1B,$38,$1C,$38,$0E,$38,$FC,$38
	db $0C,$38,$15,$38,$0E,$38,$0A,$38
	db $1B,$38,$28,$38,$51,$A9,$00,$19
	db $76,$38,$FC,$38,$FC,$38,$FC,$38
	db $26,$38,$05,$38,$00,$38,$77,$38
	db $FC,$38,$FC,$38,$FC,$38,$FC,$38
	db $FC,$38,$FF

This could get expensive in bytes if you have a tilemap table for each level, so you could use some free RAM to store the character values (instead of defining a table for each level), which you would populate on level init via UberASM.

Disclaimer: I didn't test this code.
ROM Hack Manager - SMW Resources - SMW Toolbox
First, what do the animations in slot 00 and 01 should correspond to? What graphics correspond to which values?

Second, you are setting 0xE (15) frames, but you are only specifying 14, so you're actually including frame 0E in the animation.

Now, the original animations seems to be symmetrical, in the sense that the animation for the muncher going back in the pipe is just the reverse of it coming out. However, your animations don't seem to be symmetrical:

  1. DC0 3 times
  2. DA2 6 times
  3. DB2 2 times
  4. DD0 3 times

I'm not sure what values correspond to which graphics, but assuming they are like this:

  1. EEE: completely hidden
  2. DC0: barely visible
  3. DA2: halfway
  4. DB2: extended with mouth closed
  5. DD0: extended with mouth open

then I would do something like this


with 0x18 (24) frames.
ROM Hack Manager - SMW Resources - SMW Toolbox
For inserting custom blocks you don't use PIXI, but GPS (PIXI is for sprites).


First check out the FAQ and the tutorial, if you still have questions let us know :)
ROM Hack Manager - SMW Resources - SMW Toolbox
On the topic of ExAnimations, would it be possible to add a text field below Slot, to give a name to the animation? This would be purely informative, but it would help to quickly identify animations when several are specified in a level or globally. I always have to reverse engineer which animation is which when I haven't touched a level for a long time and there are a lot of animations.
ROM Hack Manager - SMW Resources - SMW Toolbox
Hey, I found a few issues that I reported on the GitHub page, but this is a neat project!

Also, a few suggestions, in order of importance:

  1. Display better error messages, both on startup if the configuration is not valid, and in the app (e.g., when trying to launch a hack with no valid emulator configured)
  2. Add a visual indicator whether a hack has already been downloaded or not
  3. Add a filter showing only the hacks that I already downloaded
  4. Allow to filter with multiple combinations of hack types (e.g., "Kaizo: Intermediate" AND "Kaizo: Standard"), this makes sense since a hack can have more than one type (such hacks produce warnings in the shell after a filter has been applied)

In general, I would handle downloaded hacks separately from the SMW Central's catalogue, so that hacks won't disappear from the list if they are somehow removed from the website (or if they are renamed). However, I understand it might be a design choice to have the list of hacks matching exactly the one online.

If you need someone to make a macOS build, feel free to DM me.
ROM Hack Manager - SMW Resources - SMW Toolbox
I'm assuming what you are doing is Save Level to File as... (or Save Level to File), followed by Open Level from File.... As far as I know, the first command creates a mwl file for the current level, and the second command imports the level that was saved, and you cannot save or import with a different level number.

What you can do is navigate to the level you want to copy and use Save Level to ROM as..., and specify the target level in the Level Number to save as field of the pop-up window. Lunar Magic will copy the current level to the target level in the same ROM, and it will update the entrance sprite correctly.
ROM Hack Manager - SMW Resources - SMW Toolbox
ROM Hack Manager

This is a tool that allows to download, unzip, and patch hacks all in one go. It supports SMW and YI, and you can look through SMW Central's catalogue directly from within the tool. ROM Hack Manager also provides a simplistic list of hacks you downloaded, where you can choose to run it in the emulator or remove it from your PC.

Currently available for Windows and macOS, the source code and documentation can be found on GitHub.


The latest version is always available on GitHub, both for Windows and macOS:
- Latest version

The approved version on SMW Central can be found here (Windows only):
- SMW Central's version

As the moderation process takes some time, the version on SMW Central's might be slightly older than the one found on GitHub, however it has been approved by a competent moderator.

Contributions & Suggetions

Feel free to report any bug or feature request in this thread, or on the issue tracker on GitHub. You can also open a PR directly on the project.

The tool is not available on Linux mainly because I don't have a Linux machine at my disposal. If someone wants to work on a Linux version, feel free to contact me and I can guide you through the process :)


R3tr0BoiDX created a similar tool: SMW Central Browser. Check this one out, maybe it's better for you (it's available for Linux).
I'm a little late to the party, but if all you want to do is limit the horizontal speed of the rock, you can try to modify the sprite as follows:

N.B.: I didn't test this code, it might not work.

Also, I referenced lines as in the original file, as you modify stuff the actual line numbers will shift down.

Finally, if this doesn't work, try again without applying changes for lines 344 and 445 (I'm not 100% convinced about those).
ROM Hack Manager - SMW Resources - SMW Toolbox
I haven't tested it myself, but from taking a look at the hijacks of the two patches I can't see any overlap. They do come close, where one hijacks $04DBF7 and the other $04DBFB, but I don't think it's a problem.

First of all, are you sure the patches work independently? If yes, what happens when you combine them?
ROM Hack Manager - SMW Resources - SMW Toolbox
This should be really easy to do. This table determines how often then Hammer Bro will throw hammers

HammerFreq:	db $1F,$0F,$0F,$0F,$0F,$0F,$0F

where $1F is slow and $0F is fast. Every position represents a different map or submap, in order they are: Main map, Yoshi's Island, Vanilla Dome, Forest of Illusion, Valley of Bowser, Special World, Star World.

In short, if you want to set the slow speed for every submap, then change the table to this:

HammerFreq:	db $1F,$1F,$1F,$1F,$1F,$1F,$1F

ROM Hack Manager - SMW Resources - SMW Toolbox
In the Overworld Editor window's menu, select File, then Reload & Discard Unsaved Changes, this should bring you back to the overworld editor.

Also, next time post the question in the SMW Hacking Help subforum, Tutorials is for posting tutorials.
ROM Hack Manager - SMW Resources - SMW Toolbox