Language…
15 users online: autisticsceptile1993, Dennsen86,  Eden_, Golden Yoshi, Hammerer, JezJitzu, MarkVD100, Metal-Yoshi94, Nayfal, rafaelfutbal,  RussianMan, Sadistic Designer, SolveForX,  Telinc1, timeisart - Guests: 276 - Bots: 307
Users: 64,795 (2,369 active)
Latest user: mathew

ASM Projects show-off thread

  • Pages:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
Looks like i'm back.
(first pic = sm3dw draglet, second pic = sms seed-scattering pokey head)

Yeah, looks like i'm going to release those (and further) sprites at C3 (yeah, its gonna take time, i know) as i released nearly nothing last one.

Btw, expect a video and more significant things soon i guess.
Shouldn't he shoot bullet bills first since they're easier to dodge? (You can jump off of them, unlike the fireballs, which require you to... I want to say you can spin jump on them, but we haven't seen that.)


Cool sprites as always, Tsutarja.


Now, I present... another boss. SMW Custom Lemmy time!





Dream team (feed them, please):






here's a sort of C3 project that wasn't

https://youtu.be/ijaGE0KC7-g

one part of this is a dynamic sprites patch, that uses dynamic allocation of sprite GFX tiles (vaguely like malloc), and only uploads anything when the dynamic graphics actually change. this is actually basically done, i just need to clean things up enough for the next daiyousei release (drop routines have some real weird gotchas right now).

the other part is a patch to make SMW's sprites use the dynamic sprites patch to be all dynamic. this might be a long/eternal time coming bc SMW does stuff like having sprites call a default graphics routine, and then overwriting the tile that draws with a different one anyway, which make its graphics code a huge nuisance to be around, think about, or know exists
Either way that's quite impressive already. What happens if one were to exceed the sprite slot limit (one way or another)? Wcould the graphics glitch up, or would further sprites be prevented from spawning?
Feel free to visit my website/blog - it's updated rarely, but it looks pretty cool!
If there aren't any tiles left, the allocator will return tile $1ff (which is basically useless as a 16x16 tile) and it is up to your sprite to decide what to do. A lot of sprites will be "okay" if they don't upload graphics and use some kind of "default tile" (which would probably end up being just whatever tiles are in VRAM at tile $100), but a sprite that really needs dynamic graphics can choose to kill itself in its INIT routine.

Right now I have the SMW sprites on the "glitchy default tile" route.

I figure that in most cases it is better for a glitchy-looking ugly thing to happen than for the game to potentially become unbeatable because of a missing sprite.

It might be better to make sprites without tiles use a more proper default graphic, like the question mark block or something, but that complicates the graphics routines a bit.
How much more processing power does this all require compared to the normal graphics routines? And wouldn't having dynamic graphics for every sprite take up a ridiculous amount of ROM space? Do you leave them all in the ROM uncompressed, or decompress all the graphics for a particular sprite type once one spawns, or what?

----------------

I'm working on a hack! Check it out here. Progress: 64/95 levels.
Easy questions first.

Quote
Do you leave them all in the ROM uncompressed, or decompress all the graphics for a particular sprite type once one spawns, or what?

I'm currently leaving them all uncompressed. The easiest way to get compressed graphics would be to fetch them from the ExAnimation buffer. Trying to decompress graphics in the midst of gameplay seems like it might lead to a big hitch, depending on how big the files are.

Quote
And wouldn't having dynamic graphics for every sprite take up a ridiculous amount of ROM space?

This doesn't include quite all of the sprite graphics in SMW - I put tiles used by cluster sprites, extended sprites, etc. in SP1 and SP2, and Banzai Bill and Big Boo/bubbles use the last two rows of SP4.

I gathered up most of the rest into a couple big graphics files, which take up roughly a bank and a half put together. I think that's reasonable for what you get out of it.

Quote
How much more processing power does this all require compared to the normal graphics routines?

Hard question hour!

I think the bulk of additional CPU use would come from uploads during NMI. Unfortunately, you can't really just add up all the cycles in the routines, because how much gets uploaded depends on how often sprites change their pose, which depends on a lot of stuff about actual levels.

If I had a debugger with a profiler I could just run through some sample levels, and get a ballpark estimate, but I have no idea if there's a SNES debugger with a profiler.

My guess is that it's probably a lot better on cycle usage per sprite than existing dynamic sprite patches (they upload, at minimum, 4 tiles/sprite every 2 frames, but with this the minimum is more like 1 or 2 tiles every time the pose changes or maybe even less frequently), but since it would affect a lot more sprites I can't even guess how it comes out overall.
I'm trying to understand ASM, mostly making sprites and patches. I have read some tutorials to understand what the OP codes do, and how SNES assembly functions. This post isn't really a show-off but I am happy with a result I have acheived. I have hacked together a 'new' sprite.

Here is a para-dry bones that flys in the same pattern as a red koopa!


It dies when jumped on because I'm still trying to figure out how to spawn a regular dry bones:


And it dies in a puff of smoke when spin jumped on:


I'm proud of myself for creating a functioning sprite that does exactly what I wanted for a level in my hack, but really all I did was merge two different sprites together. I took the base ASM code from Erik's Para-Spiny and merged the graphics routine from another one of Erik's sprites, the Para Dry Bones. Then modified the cfg file, and came out with this working sprite. Thanks to Erik for both his sprites :)
Nice attemp, I hope you continue learning ASM and create useful things :)

-------------------------------------------------

I've succesfully created a HDMA gradient with two given colors using linear interpolation. Video.

It does all of the calculations with 24-bit RGB format (8 bits per component) and then it proceeds to convert it to SNES RGB colors (15-bit RGB or 5 bits per component) to create a HDMA table in RAM.

The code can be found here (gamemode code for UberASMTool).
And you can play a demo here. The controls can be found inside of the code above.
Been a while since I haven't shown anything here


https://www.youtube.com/watch?v=wsbOq3KAJ9M

This is basically the result from rewriting SMW's IRQ and NMI routine, now they basically run on RAM and dynamically changes depending on the demand.... That and now it's possible to set which scanline to NMI fire, combining that with HDMA you can expand the amount of data transfers per time, which made it possible these gigantic animations.
GitHub - Twitter - YouTube - SnesLab Discord
Originally posted by Katrina
If there aren't any tiles left, the allocator will return tile $1ff (which is basically useless as a 16x16 tile) and it is up to your sprite to decide what to do. A lot of sprites will be "okay" if they don't upload graphics and use some kind of "default tile" (which would probably end up being just whatever tiles are in VRAM at tile $100), but a sprite that really needs dynamic graphics can choose to kill itself in its INIT routine.

Right now I have the SMW sprites on the "glitchy default tile" route.

I figure that in most cases it is better for a glitchy-looking ugly thing to happen than for the game to potentially become unbeatable because of a missing sprite.

It might be better to make sprites without tiles use a more proper default graphic, like the question mark block or something, but that complicates the graphics routines a bit.


Here's a wild idea off the top of my head with little knowledge or understanding of the underlying systems at work...
Instead of a default sprite or just suicide, could you have it spawn an instance of a sprite that is already present before offing itself?
That way you avoid something glitchy or missing altogether.
Krakenskin Leather Works, my Etsy store.
LordVanya, my art page.
FundamentalEssence, my game development page.
Originally posted by Vitor Vilela


That looks amazing! I really want the rotating foreground now.



YouTube Twitter Twitch
For some reason, I've never seen castle intros edited in Lunar Magic before (or if they are, they don't have functional doors).

It turned out to be easier than I expected. I thought I'd need to reproduce the door sprite's movements, but it turns out that sprite spawns automatically if in tileset 1. It does spawn at a hardcoded position though, so more editing would be needed to adjust that (seems to be in the routine around $02F66E).



Created with a reconstruction of the level in Lunar Magic, and this levelASM:
Code
levelinit6:     ; 1-6 castle intro
INC $141A       ; increment screen-exits-taken counter, to fix a bug where the intro infinitely reloads itself
LDA #$0A        ;\ set player animation to castle entrance movements
STA $71         ;/
LDA #$01        ;\ initialize castle intro movement timer
STA $89         ;/
RTS

Notes for what I've found to be required for this to be functional:
- The tileset must be set to 1 for a castle door, otherwise you get a ghost house door. Use custom Map16 if necessary to reproduce another tileset.
- The tiles directly to the right and above the castle door should have layer priority, but the tiles to the left should not.
- Set SP4=0F for the door sprite to have proper graphics.
- Disable the vanilla no-Yoshi intro.
- Set Mario's initial position to X=3 Y=7.
- Set the screen exits of both screen 0 (for if the player skips the animation) and screen 1 (for if the player waits out the animation) to the next room of the castle.

The timer is probably best set to 0, with the next room set to force the timer to reset to the appropriate value (keep in mind it'll also reset the timer if returning from a sublevel! You can avoid this by creating a duplicate room without the force-timer-reset flag), though I happened to have a pause-timer flag set up in my hack already.

–=–=–=–=–=–=–
Advynia: a Yoshi's Island editor - Alyssa's Unlikely Trap demo 3
Hey, that's something I care about. It's really good somebody finally bothered to make this and do it actually usable. For reference: there is this block and this patch to """do""" this, but both options didn't really do the job. The patch doesn't support any ExGFX nor custom palettes and the custom block didn't even work (Mario does the wrong movements and the screen teleporter doesn't work).

The ASM code you provide is somewhat accurate, but it worked kinda different for me: when I put a tileset where it's supposed to have a game's original No Yoshi's intro (Castle, Ghost House or Rope), it shows the actual original one, ignoring whatever is in the level, but more important: Mario delays a bit in his movement and the screens sets didn't work (I got warped into level 0). On the other hand, in any other tileset (Normal, Switch Palace, etc...), it works as intended (showing the "custom" entrance I made) and actually teleporting to the set level, but it shows the Ghost House door instead of the Castle door.

I don't know if I did something wrong or maybe you did aditional things for this to work, just for the record, I tried it in both uberasms (patch and tool) and I get the same results, unless it needs to be especifically in the levelasm patch as you pointed it. I really hope you finish it and hopefully submit it to the uberasm section if possible.

And sorry for being ambitious I guess, this is a feature I always tried to put in my projects but never could.
Layout made by MaxodeX
2021 TRENO vibe check thread
Did you make sure to disable the vanilla no-Yoshi intro in all relevant sublevels?

Also, I forgot to mention, you need to set Mario's initial coordinates to X=3 Y=7. If he spawns farther left, his movement glitches out a bit; if he spawns farther up, he falls until Y=7 (ignoring any collision).

The ghost house door spawns if the tileset isn't set to 1 (castle). Note that this is the tileset of the no-Yoshi intro; the next room can be any tileset. I've used this to add a castle intro to a non-castle level-- helpful since line-guides only function in tileset 2, and low tide doesn't function in tileset 1, for example.

I'll edit these requirements into my previous post.

This is something I've been hoping would exist for years now, as well, ever since attempting to use that very old patch that breaks if the level contains any Lunar Magic features. The no-Yoshi intros feel like the last part of the vanilla game that hasn't been edited (even castle destruction scenes can have their palettes and background shuffled with a few hex-edits)... well I suppose there's still the credits (backgrounds) and enemy list?

As for submitting it, I'd need to ensure it actually removes Yoshi, which I'm pretty sure it won't always do, at least at the midway entrance. I haven't tested yet, but I've had that problem before if the midway entrance is in a different sublevel from the main entrance (which it naturally will be when the main level is used for a castle intro).

–=–=–=–=–=–=–
Advynia: a Yoshi's Island editor - Alyssa's Unlikely Trap demo 3
Yeah, I haven't disabled the vanilla No Yoshi intro, my bad. It works like it should now.

About removing Yoshi though, I noticed it won't remove Yoshi in the scene itself (Mario doesn't dismount from Yoshi), but when teleported to the next level you don't have Yoshi, so technically "it works" to remove it, just the animation doesn't show it. Pretty curious.

Thanks for the reply.
Layout made by MaxodeX
2021 TRENO vibe check thread
4-digit passcode user interface:


Much better than having custom blocks and level setup like this where the interface is towards the player character instead of the player playing the game.

I disabled the controls for the player and sprite via hijacking ControllerUpdate in the all.log and move them to freeram so that anything else doesn't register the inputs besides the UI.

No custom sprites used, I only use the patch that disabled controls and uberasm's level to display the sprites for numbers and cursor.
Give thanks to RPG hacker for working on Asar.
Originally posted by Vitor Vilela
Been a while since I haven't shown anything here


https://www.youtube.com/watch?v=wsbOq3KAJ9M

This is basically the result from rewriting SMW's IRQ and NMI routine, now they basically run on RAM and dynamically changes depending on the demand.... That and now it's possible to set which scanline to NMI fire, combining that with HDMA you can expand the amount of data transfers per time, which made it possible these gigantic animations.


Is that rotating platform being rendered in realtime?
Nope. That would be overkill to even Super FX do it, I think... Do you happen to know any fast enough rotator code that could potentially make it possible though? Would be superb.
GitHub - Twitter - YouTube - SnesLab Discord
  • Pages:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157