| Posts by Kickchon |
|
|
|
Pages: 1 2  |
|
|
|
|
|
Hi there, is it possible to change the palette of the exploding block animation. I think it is using palette 8, so editing it will change Mario as well. :/
However that brownish explosion does not fit in my level.
Thanks, Kickchon
|
|
|
|
That shouldn't be the problem. ;)
But how. =)
I guess i found it in the ROM Map.
Too bad it has too be done by a hex edit.
10D8C $02:8B8C 8 bytes Sprite tilemap related Exploding Block/Monty Mole Dirt Tile Attributes. This is just for the regular brown exploding block. YXPPCCCT format.
|
| Last edited on 2010-05-04 02:58:22 AM by Kickchon. |
|
|
|
Hi there,
I'm currently programming a boss and have the following problem:
There are two sprites which are active all the time and are therefore initialized in the beginning and imo occupy sprite slot 0 and 1. Then the boss can summon additional sprites, those however do not appear in front of the other sprites. Is there a way to fix this? The priority bits seem not to affect this. :/
Thanks
|
| Last edited on 2010-05-06 03:47:47 AM by Kickchon. |
|
|
|
Hmm,
the problem seems to be more difficult than I thought.
The routine you posted seems to work just fine for the priority, however I have 3 of those sprites on screen at the same time and I am using the NoMoreSpriteLimits patch to get this to render correctly.
Using your render routine only the first one gets rendered, imo a conflict with the OAM pointer assignment of the NoLimits patch, right?
Is there a way to fix this?
And KilloZapit is right, I just want one specific type of sprite in front of one specific other sprite. :o For me that is custom sprite #$02 in front of custom sprite #$03. :/
|
|
|
|
So here it is, C3!
Obviously I am new and I have never done anything for Mario hacking before, but the announcement of this C3 event got me hooked up and I thought I'd try to create something as well. But please be nice, this is my very first thing to do, I just started around one week ago.
Well, I'm quite happy with the result anyway, but see for yourself.
Hope the quality is alright:
<object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/_dd3XUl44ow&hl=de_DE&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/_dd3XUl44ow&hl=de_DE&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object>
The sprite graphics are ripped from Secret of Mana and I added some custom animation frames.
The ice spikes graphics are from Secret of Mana 2.
I've drawn the wave myself, so its graphics are not so awesome. :/
While watching, you'll probably notice a bug regarding the layers of the wave and ice spikes. I didn't know and still don't know how to fix this, as I need to use the "No Sprite Tile Limit" patch to get everything to show up correctly.
EDIT: I FIXED IT:

EDIT 2: OK, I fixed the layer bug and changed some timings to improve performance. And I made the tidal wave's speed increase as the fight goes on to spice it up a little bit. So I made a second video to show it off. =)
ENJOY!
<object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/TXFGkSivflg&hl=de_DE&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/TXFGkSivflg&hl=de_DE&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object>
The room is just for demonstration purposes but I think an adjusted watery cave style will fit quite nicely.
Credits:
Concept: Myself
GFX Rips: Myself
Custom GFX: Myself
ASM: Myself
Total Time spent/wasted: ~25hours (decide for yourself)
P.S.: I don't have any hack/usage for this boss, so I offered S.N.N. in a PM to give this to the SMWC production, if they are interested in it.
P.P.S.: Hope embedding video is OK here. :o
So far, Kickchon
|
| Last edited on 2010-05-08 10:31:37 AM by Kickchon. |
|
|
|
Well actually I'm a computer science and engineering student. So I have programmed microcontrollers in assembler before and have general programming skills.
The most difficult part was finding out how everything works, because I did not download the "All "documentation but looked at the ROM and RAM maps here, and unfortunately there are some subroutines you don't find there. =)
Assembler is not that difficult. (If you know what you're doing)
|
|
|
|
Originally posted by JeRRy86this is a pretty awesome boss, but i'd say thet you'd set the priority of the spikes that come out of the water some higher, since the wave being above them spikes makes no sense whatswhoever :/
Way to read the opening post. It's explained below the video.
|
|
|
|
As far as I know,
the sprite priority bits in the property byte only define priorities relativ the the normal layers, not between the sprites themselves.
I tried using them, but it didn't have any effect. It's not like I didn't want to fix that. =)
And yes, Brutal Mario's bosses are pretty epic and I was partly inspired by them to try to do something like that myself.
|
|
|
|
I fixed the layer problem finally! Added picture to the main post. =)
Also reduced the wave from using 12 16x16 tiles to 10.
YAY!
|
| Last edited on 2010-05-08 08:04:40 AM by Kickchon. |
|
|
|
Added a second video, with some bugfixes, especially the layer one.
Also the tidal wave now increases its speed as the fight goes on! Thanks for the recommendation.
|
|
|
|
|
Actually, something that is not shown in the videos is, that if you're in the water, the tidal wave will pull you down to death if it is near. So I don't think spikes are necessary, with the speed up of the wave I guess the fight is already quite challenging.
|
|
|
|
Looks really nice,
I especially like the martial art animation. Looks to be well implemented. Would like to see that used in some good hack.
|
|
|
|
TBH, there is no real inspiration.
Some time ago I had an idea for a complete mod with a story which included the different spirits from SoM. But I figured I probably would never be able to finish it as it was quite ambitious and obviously would have been my first project.
However I did not want to abandon the ideas I had completely and tried to realize at least this. So yeah, in that Hack Undine would have been a boss. Maybe I'll actually start that hack if I find some spare time, first thing would be to write down everything that has to be done in some kind of design document.
Regarding the boss directly, my thinking process was probably like this: I tried to answer the follwing questions and goals:
1. I need more than one attack to make it more interesting.
2. I need some way to hurt her.
3. There should be some gimmick to it.
4. I should be fun and challenging but not unfair.
The first part was answered quite fast by thinking about the SoM series. I decided to implement one indirect and one direct attack and came up with the projectile (internally called frostwave) and the spikes (internally called icelance).
The second one wasn't so easy. Obviously there were two more or less common ways. Jump on her, and throw something at her. As I thought it was unapproriate to make her be on the bottom of the screen and therefore unreachable to jumps, I decided to get something to throw at her and I already like the idea to use something from her against herself. This is when I thought about the tidal wave to stop the iceblock from being destroyed.
Luckily the same idea fulfilled goal #3 so I was very satisfied with my current design. =)
As this was my first project I could not really comment on the difficulty beforehand and just implemented it. I made lots of defines to make it adjustable to finetune the difficulty later on, e.g. the speed of the different parts, the time, the health points, etc.
Comments here made me realize I probably overestimated the difficulty and added the speed increase to the tidal wave. (Sidenote: In the beginning the tidal wave disallowed you to jump when you touched it, but I decided this was unfair. ;))
That is basically how I came up with this boss.
Another honorable mention should obviously Brutal Mario, which impressed me a lot with what is possible and made me interested in SMW hacking in the beginning. (Probably because I really like the SoM series and there are so many references in BM. =))
So far, think this covers everything.
|
|
|
|
Actually I did offer it by PM before C3. S.N.N. said he'll have a look and see if there would be a use for it.
Notice I got this anwser before C3 even started and he didn't know the boss.
Since then I haven't heard anything from him.
|
|
|
|
In your code X is the index of the different sprites.
It's an array with at maximum 12 sprites.
You check every sprite with a loop, first sprite #0, then sprite #1, etc.
X is not the custom sprite number, it is the number of the current sprite which is being checked.
Your LDA !CustomSpriteNumbers should be
LDA !CustomSpriteNumbers,x
as this is a sprite table. You can imaging this as asking the game "Hey what kind of sprite is sprite number X?"
The answer can then obviously be found in the A register (LDA)
As there can at maximum be 12 sprites in the tables, you need to cycle the loop exactly 12 times.
You do this with CPX #$0C, it compares the current X value to 12 in decimal and in the next line, if X is below 12 you return to the loop start. Remember: Counting starts at 0.
In total it should look something like this:
Code
LDX #$00 ; Initialize x index
Loop: LDA !CustomSpriteNumbers,x ; Get sprite number x's sprite number
CMP !NumberOfFLUDD ; Compare that number to fludd's number
BEQ FluddFound ; There is a fludd sprite already, quit
INX ; Get next sprite
CPX #$0C ; Check if this is still a valid sprite, aka x < 12
BCC Loop ; It is valid, go to loop start
NoFludd: ; If we get here, there is no fludd sprite, so we might want to spawn one here.
RTS/RTL ; However you got here
FluddFound: ; If this code gets executed, there is already a fludd, in that case x is its internal number
RTS/RTL ; However you got here
Try not to mix up the internal sprite index X, and the sprite number you use in LM.
|
|
|
|
Actually the blocks for Mario are supposed to be one tile higher, then the wave will not be cut off.
Regarding the frostblock it seems it uses the wave's gfx file while it should be using the boss gfx file as well. And yes, you are not supposed to jump on it. It will shatter, I think that's working as intended.
The animation where apparently nothing happens is supposed to summon icicles from below. Those also use the gfx file of the boss. It might be possible that the custom sprite number in the boss' asm file is not configured correctly and thus nothing is summoned. Should be the define "!UNDINE_ICELANCESP".
EDIT: Ok i playtested the actual baserom, and I found that both customsprite numbers that the boss uses seem not to be set. S.N.N. did you read the readme at all? =)
Maybe this helps ;p
|
| Last edited on 2010-06-12 02:17:34 AM by Kickchon. |
|
|
|
|
So I have a very basic question, what does the "sprite<->sprite interaction subroutine" at $018032 actually do? It seems if my custom sprite touches a normal sprite the normal sprite turns around then, but mine doesn't for example. Would i need to code this myself or is there something I am just missing?
|
|
|
|
|
Does that function set a carry or something? Or how do I check for interaction afterwards?
|
|
|
|
So, i have a problem:
I am currently making a sprite which is not the normal 16x16 or 16x32 pixels big. Now I have a serious problem handling the death animation properly. Is it even possible to create a good death frame without applying a patch to the rom?
For example, a shell might interact with my sprite, and set my sprite state to $02 (killed). After this my sprite code is not processed ever again, so I can't draw a proper death frame right?
|
|
|
|
I don't see how this can work, as my sprite does not get processed.
Imaging this:
First frame:
First sprite: Shell
Second sprite: My sprite
Both have status 8 and are processed normally as there is no contact.
Second frame, this time with contact:
Shell sprite is processed first.
In its sprite-sprite interaction routine it sees my sprite is touching and sets my sprites status to 2.
Accordingly my sprite routine is never called this frame so I could revert this, right?
If this is somehow wrong, to what jump do you refer?
|
|
|
Pages: 1 2  |
|
|
|
|
|