Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Hayleia

Pages: 1 ... 8 9 [10] 11 12 ... 239
136
Super Smash Bros. Open / Re: [Axe] Super Smash Bros. Open
« on: October 07, 2014, 12:56:26 am »
Obligatory question: Will you support GameCube controllers through the USB port? :D
Well I know nothing about the USB port and I know even less about the GC Pad, so I guess no :(

(off topic)
How did you change the font in the screenshot on the first post?
Yeah, that's zStart, as DJ_Oes said.

(on topic)
Will SSBO ever support gCn? 'Cause that would be epic!
That's something I'd like but for now a lot of features are missing so if I ever implement that, it's not in a near future ;)

My only concern about custom characters is if this game ever becomes online via gCn or something, then people could just make super-high-mega-ultra-overpowered characters that are nearly invincible then win against anyone. Also, how would it work if someone tries to link play vs another player but the other player doesn't have all the maps and characters the opponent has? What about characters with duplicate file names (eg if someone has REUBEN.8xp on his calc for Reuben Quest character, but the other player has Reuben from Mystic Quest Legend and the other player link plays with Reuben). Wouldn't that mess the game up?
Your first concern is not a concern thanks to the other ones :P
To answer the second question, yeah, if all players don't have the same appvars on their calcs, chances are that there will be problems during the selection. And if you have the same appvars but not the same content, you'll get desync when playing. Hence why no one will make an overpowered character because if he can play it, other players can too :P

137
Art / Re: [Request] Sprites based on Ikaruga ships
« on: October 05, 2014, 01:28:56 am »
Thanks :D

138
Super Smash Bros. Open / Re: [Axe] Super Smash Bros. Open
« on: October 05, 2014, 01:27:39 am »
Well I won't at all be doing all characters, that's why I am writing tutorials. You are already lucky that I am doing two characters when the first post states that I would only do one :P
So do your character Brawl-Like if you don't mind losing (:P), Melee-Like or P:M-like if you want more balance.

139
Art / Re: [Request] Sprites based on Ikaruga ships
« on: October 02, 2014, 05:41:32 pm »
Well you said "only the arms" so I gave you a link to "only the arms" -.-

141
Art / Re: [Request] Sprites based on Ikaruga ships
« on: October 02, 2014, 01:41:11 pm »
Thanks :D

Wait how do you manage to do such artwork? O.O
Lol, I can do that the exact same way I can build a Buzz Lightyear with recycled materials when I am bored. Seriously, I am always patient with tasks when I am bored (except if those tasks are boring :P ).

142
Art / Re: [Request] Sprites based on Ikaruga ships
« on: October 02, 2014, 12:01:57 pm »
Here's what I could get for the right weapon.

143
Super Smash Bros. Open / Re: [Axe]How To make your own character
« on: September 30, 2014, 04:18:05 pm »
It does support multiple frames. The tutorial is not complete but you can try Fox's Down Aerial or his Up Smash to be convinced of that ;)
That's actually what the "address of the next state by default" is for. If you have several frames, put here the address of the next frame. Otherwise, put the address of the state you want to come back to after you finished your move. This can become more complicated if you want more possibilities but you get the point :P

144
Super Smash Bros. Open / Re: [Axe] Super Smash Bros. Open
« on: September 30, 2014, 04:05:42 pm »
Which is why a ticalc.org demo with some characters might be a good idea, especially now that SSB3DS just came out and that school just started. Imagine how many downloads it will get and the potential for extra feedback it would generate, even with no ticalc news.
Ok, well I need to finish Falco and Fox then :P

145
Super Smash Bros. Open / Re: [Axe] Super Smash Bros. Open
« on: September 30, 2014, 03:53:52 pm »
Well, do as you please but don't forget that motivation is what keeps me working on things, so if they can give me motivation (like if they start spriting characters or do something else that proves they are interested in my game), this game will have more chances to be "finished" ;)

146
Axe / Re: Need help with Jumping
« on: September 30, 2014, 03:51:02 pm »
The program works now. I just didn't know that you had to space the section of your While command.  :P 
I don't see what you mean by that.

Now I really understand the difference. I guess this would be of some use to my game, because it does look more smooth than the 10 pixel jump (I'm talking about the 256 pixel inflation).
Just note that here, inflation by 256 makes the jump a lot slower but by changing some constants you can get a pretty fast jump "even" with inflation by 256.

Thanks for the help. Now one last thing before I consider the topic solved: How do you make your character jump if there is no "platform" (Line) beneath him? Taking from my code a couple replies back, I don't know if I should just change the entire routine or not.
I guess you'd just change the "If getKey(54) and (pxl-Test(X,Y+8))" into If getKey(54)" ?

147
Super Smash Bros. Open / Re: [Axe]How To make your own character
« on: September 30, 2014, 03:46:38 pm »
I am not sure you noticed what subforum we are in. This tutorial doesn't teach you how to make a character in any game, it teaches you how to make a SSBO character. I probably should have made it clear in the title.

148
Super Smash Bros. Open / Re: [Axe] Super Smash Bros. Open
« on: September 30, 2014, 02:13:21 pm »
They are not the same, notice the [Asm]/[Axe] part ;)
One explains how to do it using SPASM or similar, for those having a z80 dev environment, and the other one explains how to do it with Axe, for those without a z80 dev environment.

149
Super Smash Bros. Open / [Axe]How To make your own character
« on: September 30, 2014, 12:07:24 pm »
(Still in the works. You can start making your character but nothing guarantees that you'll never need to come back to what you've already written. Spriting doesn't have this kind of risk though. If you are really in an urge to make a character and can't wait for this to be done, you can also have a glance at Fox/Falco's source.)


Random Notes

When using the Axe method, you actually compile as a program then convert it into an appvar. That's why I'll say "program" and "appvar" everywhere without distinction.

If you are fluent with Asm, I'd advise you to use the Asm tutorial instead.

When spriting, be sure that your character is the right size compared to Fox. Here are some of Fox's sprites for reference.


Notes to make your life easier

You can include the SMASHH program into your program. It only includes definitions, not code nor data so you can include it wherever you want in your program.
This will not only be a lot more readable for you to write "°AirNull" than to write "pi00000011" but this will also allow some specification changes (I hope that will never happen but we never know) because if you wrote "°AirNull" everywhere, just change the SMASHH and the °AirNull constant is changed everywhere while if you wrote "pi00000011", you'll have to change them all "by hand".

I'd also advise you to use your own macros, like "38→°FoxGravity" so that you can quickly change a constant everywhere in your program.


How do characters work, without details (you'll have details below)

Basically, they work with states. When your character is standing, doing nothing, it's in a state that we can call the "Standing state". It will leave this state when you press Jump for example, to go to the "Jumping state". Another example is the "Dashing State", that repeats itself (not entirely true) until you stop pressing the arrow key you pressed to start this state, or when you press Jump, etc.


The Header

This is necessary to have the game list your character and not list random appvars that don't have the right header.

The header starts with a one byte number, which for now is 1. This is actually not used for now, but in case specification changes happen (which I still hope will never happen), you'll have to put 2 here then 3, etc so that the program knows which specification your character is following.

You then need to put "SSBOCHAR"[00]. This is what the program uses to check if the appvar is a SSBO character or not.

The following two bytes are the size of the program.

Then, you put a 16x14 icon for the character selection menu (28 bytes).

You finish the header with the name of your character, obviously null-terminated.

For example if you are making Fox, here's what it should look like for now. I didn't say that your Axe source needs to start with a dot followed by the name of the compiled program but you must do that obviously.
Code: [Select]
.FOXP
prgmSMASHH

[]→°FoxBEGIN
[01]
"SSBOCHAR"[00]
Data(°FoxEND-°FoxBEGIN^r)
[00000000000000000000000000000000000000000000000000000000]
"Fox"[00]
[]→°FoxEND


General Information

After the header, you need to put information about your character that SSBO will needs to get quick access to. In that order:
1 byte: gravity (not used anymore, can be recycled for something else)
1 byte: air speed
1 byte: traction
1 byte: max number of jumps (2 in general, 5 for Jigglypuff)
2 bytes: max horizontal speed (not used yet)

Then follow the adresses of states that the program will need to have quick access to. A counter example is the second frame of the Down Aerial. You only access that one after the first frame. That first frame however needs to be quickly accessed to when the player asks for a Down Aerial.
All of those adresses take two bytes.
Since for now you have not written any state and have the adress of none, just put the adress of the standing state everywhere, you'll change that as you go along.

Anyway, in that order:
Standing, Airing, Dashing, GroundJump, AirJump, Landing
AirNeutralSpecial, AirSideSpecial, AirDownSpecial, AirUpSpecial
GroundNeutralSpecial, GroundSideSpecial, GroundDownSpecial, GroundUpSpecial
DashAttack
SideSmash, DownSmash, UpSmash
NeutralAir, ForwardAir, BackAir, DownAir, UpAir
LedgeGrabbed

Just a little precision. Axe compiles program "in" the RAM area it will be executed. For Asm users, I mean there is no way to say .org 0. However, state adresses need to be the ones related to the beginning of the data, not absolute ones assuming the program will be located at a precise location. This is why you'll have to put a "[]→°DB" right after the header and a "-°DB" after all your adresses (and this is why I said at the beginning that if you were fluent with Asm, you'd probably want to use your favorite assembler to build the appvar rather than using Axe).

So this is what you have for now:
Code: [Select]
.FOXP
prgmSMASHH
38→°FoxGravity

[]→°FoxBEGIN
[01]
"SSBOCHAR"[00]
Data(°FoxEND-°FoxBEGIN^r)
[00000000000000000000000000000000000000000000000000000000]
"Fox"[00]

[]→°DB
Data(°FoxGravity)
Data(5)
Data(20)
Data(2)
Data(255^r)
Data(°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r)
Data(°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r)
Data(°FoxStand-°DB^r)
Data(°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r)
Data(°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r)
Data(°FoxStand-°DB^r)

[]→°FoxStand
##that state is not done yet but since you wrote its adress above, you need that adress to exist

[]→°FoxEND
## dont forget that the °FoxEND must be the last line of your program, it's not because you wrote it at a previous step that what you add at the next step must be written after it

We now have quick access to the Standing state... which we didn't implement. That's what we are going to do.


States

States have those fields:
2x2 bytes: pointer to sprite facing right, pointer to sprite facing left
2x1 bytes: teleportation (X,Y)
1x1 byte: flags
2x2 bytes: speed
1x1 byte: arrow key influence
1x2 bytes: adress to next state by default
<depends>: commands
1x1 byte: 0, end of commands.

- I guess there's no problem with the sprite pointers, except maybe the sprite format, which is just 1 byte for the width in bytes (width in pixels divided by 8) , one byte for the height in pixels, then usual data to describe pixels, 1 bit per pixel.
- Teleportation should be straightforward too. Basically, if you want your character to have its position changing when entering that state, put non zero numbers here. Notice that those numbers will obviously be added to your current position. And since they are 1 byte numbers, you can only move from -128 to +127. This is actually not implemented yet.
- Flags change the behaviour of your state.
--- °Inv when set will grant your character invincibility during that state (not implemented)
--- °Piv when set allows you to pivot (change the direction you're facing)
--- °AbsX when set will set your X speed to the specified X speed in the speed field, and when not set will add the X speed in that field to your current X speed
--- °AbsY is obviously the same for the Y speed
--- °SetKnockBack is unused
--- °GroundNull states that when in that state you are on the ground and can't use attacks
--- °GroundOK states that when in that state you are on the ground and can use attacks
--- °GroundDash states that when in that state you are on the ground and can use dash attacks
--- °AirNull states that when in that state you are in the air and can't use attacks
--- °AirOK states that when in that state you are in the air and can use attacks
--- °Aerial states that this state is an aerial attack (don't follow the example of the Fox I made, he doesn't use that flag when he should)
--- °Ledge states that you are currently holding a ledge
- Speed is the X speed and Y speed we mentionned when talking about °AbsX and °AbsY
- The arrow key influence is a number that, when non-zero, will allow your character to be moved horizontally during that state. It is for example used in the Air (falling) state but it may be set to zero in most attacks. The higher it is, the more the character can be moved of course.
- The adress to the next state by default is pretty straightforward too
- Commands (will) have their section below in that tutorial but are not used in the standing state so first read and understand the following example

The Standing state is a very simple example (plus, it's the state you gave the adress everywhere so it would rather be defined soon).
I am throwing it without more explanation because I don't know what to say, it you have questions, feel free to ask.

Code: [Select]
.FOXP
prgmSMASHH
38→°FoxGravity

[]→°FoxBEGIN
[01]
"SSBOCHAR"[00]
Data(°FoxEND-°FoxBEGIN^r)
[00000000000000000000000000000000000000000000000000000000]
"Fox"[00]

[]→°DB
Data(°FoxGravity)
Data(5)
Data(20)
Data(2)
Data(255^r)
Data(°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r)
Data(°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r)
Data(°FoxStand-°DB^r)
Data(°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r)
Data(°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r,°FoxStand-°DB^r)
Data(°FoxStand-°DB^r)

[]->°FoxStand .état debout normal
Data(°FoxStandSprR-°DB^^r,°FoxStandSpr-°DB^^r) .sprite
Data(0,0) .téléportation
Data(°Piv+°GroundOK)
Data(0^^r,0^^r) .V
Data(0) .arrowkeys influence
Data(°FoxStand-°DB^^r) .état suivant par défaut
Data(0)

[021B]->°FoxStandSpr
[004000A001300208052407142834660EF1946FF821F4DCE2A4C794CF95C84E3863F037F80FFC0F3C0B1C079603DE01CE03DE039E010C]
[021B]->°FoxStandSprR
[020005000C80104024A028E02C147066298F1FF62F84473BE325F32913A91C720FC61FEC3FF03CF038D069E07BC073807BC079C03080]

[]→°FoxEND

Notice that flags can be added in the flags field. Writing "or" instead of "+" is advised however, in case you add twice the same flag (since or_ing  it twice gives the same result as or_ing it once) but "+" is more compact so I use it.

150
Super Smash Bros. Open / [Asm]How To make your own character
« on: September 30, 2014, 12:05:44 pm »
(Still in the works. You can start making your character but nothing guarantees that you'll never need to come back to what you've already written. Spriting doesn't have this kind of risk though. If you are really in an urge to make a character and can't wait for this to be done, you can also have a glance at Fox/Falco's source.)


Random Notes

I have no idea if Spasm can compile into appvars instead of compiling into programs so I actually compile as programs then convert into appvars. That's why I'll say "program" and "appvar" everywhere without distinction.

The Asm tutorial will probably take more time to write than the Axe tutorial since I have a character "done" in Axe but have yet to provide examples in Asm. At worst, read the Asm tutorial, then read the Axe tutorial, notice where the difference are, they are not many really (there's nothing high level in making characters and I don't even think there's anything high level in Axe anyway).


Notes to make your life easier

You can include the smashh.inc into your program. It only includes definitions, not code nor data so you can include it wherever you want in your program.
This will not only be a lot more readable for you to write "AirNull" than to write "%00000011" but this will also allow some specification changes (I hope that will never happen but we never know) because if you wrote "AirNull" everywhere, just change the include and the AirNull constant is changed everywhere while if you wrote "%00000011", you'll have to change them all "by hand".

I'd also advise you to use your own macros, like "#define Gravity 38" so that you can quickly change a constant everywhere in your program.


How do characters work, without details (you'll have details below)

Basically, they work with states. When your character is standing, doing nothing, it's in a state that we can call the "Standing state". It will leave this state when you press Jump for example, to go to the "Jumping state". Another example is the "Dashing State", that repeats itself (not entirely true) until you stop pressing the arrow key you pressed to start this state, or when you press Jump, etc.


The Header

This is necessary to have the game list your character and not list random appvars that don't have the right header.

The header starts with a one byte number, which for now is 1. This is actually not used for now, but in case specification changes happen (which I still hope will never happen), you'll have to put 2 here then 3, etc so that the program knows which specification your character is following.

You then need to put "SSBOCHAR",0. This is what the program uses to check if the appvar is a SSBO character or not.

The following two bytes are the size of the program.

Then, you put a 16x14 icon for the character selection menu (28 bytes).

You finish the header with the name of your character, obviously null-terminated.

For example if you are making Falco, here's what it should look like for now.
Code: [Select]
.org 0

.db 1
.db "SSBOCHAR",0
.dw HeaderEnd
.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.db "Falco",0

HeaderEnd:


General Information

After the header, you need to put information about your character that SSBO will needs to get quick access to. In that order:
1 byte: gravity (not used anymore, can be recycled for something else)
1 byte: air speed
1 byte: traction
1 byte: max number of jumps (2 in general, 5 for Jigglypuff)
2 bytes: max horizontal speed (not used yet)

Then follow the adresses of states that the program will need to have quick access to. A counter example is the second frame of the Down Aerial. You only access that one after the first frame. That first frame however needs to be quickly accessed to when the player asks for a Down Aerial.
All of those adresses take two bytes.
Since for now you have not written any state and have the adress of none, just put the adress of the standing state everywhere, you'll change that as you go along.

Anyway, in that order:
Standing, Airing, Dashing, GroundJump, AirJump, Landing
AirNeutralSpecial, AirSideSpecial, AirDownSpecial, AirUpSpecial
GroundNeutralSpecial, GroundSideSpecial, GroundDownSpecial, GroundUpSpecial
DashAttack
SideSmash, DownSmash, UpSmash
NeutralAir, ForwardAir, BackAir, DownAir, UpAir
LedgeGrabbed

Just a little precision. Axe compiles program "in" the RAM area it will be executed. For Asm users, I mean there is no way to say .org 0. However, state adresses need to be the ones related to the beginning of the data, not absolute ones assuming the program will be located at a precise location. This is why you'll have to put a "[]→°DB" right after the header and a "-°DB" after all your adresses.
Luckily for you, you're in the Asm tutorial so we'll use .org 0. Notice that we need another label at the very end of the data that we will add to HeaderEnd in the "size of data" field in the header.

So this is what you have for now:
Code: [Select]
#define FalcoGravity 38

.org 0

.db 1
.db "SSBOCHAR",0
.dw HeaderEnd+DataEnd
.db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.db "Falco",0

HeaderEnd:

.org 0

;INFO ----------------------------

.db FalcoGravity
.db 5
.db 20
.db 2
.dw 255

.dw Stand
.dw Stand
.dw Stand
.dw Stand
.dw Stand
.dw Stand
.dw Stand
.dw Stand
.dw Stand
.dw Stand
.dw Stand
.dw Stand
.dw Stand
.dw Stand
.dw Stand
.dw Stand
.dw Stand
.dw Stand
.dw Stand
.dw Stand
.dw Stand
.dw Stand
.dw Stand
.dw Stand

Stand:
;nothing here for now

DataEnd:

## dont forget that the DataEnd must be the last line of your program, it's not because you wrote it at a previous step that what you add at the next step must be written after it

Pages: 1 ... 8 9 [10] 11 12 ... 239