π
<-

[FR][Asm][TUTO] Faire votre propre personnage

Sous-forum du projet Axe d'Hayleia

[FR][Asm][TUTO] Faire votre propre personnage

Unread postby Hayleia » 29 Sep 2014, 20:38

(En travaux, vous pouvez commencer mais rien ne dit que vous n'aurez pas à revenir sur ce que vous avez écrit. Par contre, vous pouvez spriter sans problèmes)
(Si vous êtes vraiment pressé, je vous rappelle que vous pouvez lire les codes sources de Fox et Falco dans le zip, ils devraient être assez lisibles)


Remarques Diverses

Je ne sais pas du tout si Spasm peut compiler directement en appvars au lieu de compiler en programmes. Je compile donc en programme avant de convertir en appvar. C'est pourquoi j'utiliserai les termes "programme" et "appvar" indifféremment dans ce tutoriel.

Les noms des états, des touches, des labels, etc ayant été définis en anglais dans le smashh.inc (mentionné plus bas) ainsi que dans les codes de Fox et Falco (les personnages utilisés comme exemples de code ici), j'utiliserai dans ce tutoriel des noms anglais pour mes états, touches, labels, etc.


Remarques qui vous faciliteront la vie

Vous pouvez inclure smashh.inc dans votre programme. Il ne contient que des définitions, ni code ni data.
Non seulement il rendra votre code plus lisible (vous écrirez AirNull au lieu de %00000011) mais il me permettra aussi de changer quelques spécifications (même si j'espère que ça n'arrivera jamais) sans que vous n'ayez à tout réécrire, il vous suffira de changer le smashh.inc et de recompiler.

Je vous conseille aussi d'utiliser vos propres macros comme "#define Gravity 38" afin de pouvoir facilement changer cette valeur partout où vous l'utilisez.


Comment les personnages fonctionnent, sans détails (les détails viendront...)

En deux mots, ils fonctionnent par états. Quand votre personnage se tient debout sans rien faire, il est dans un état qu'on pourrait appeler "Standing State". Votre personnage quittera cet état lors de l'appui sur Jump par exemple, pour aller dans le "Jumping State". Un autre exemple est le "Dashing State" (lorsque vous courez), qui se répète (pas exactement) jusqu'à ce que vous appuyez sur A ou Jump, etc.


Le Header

Cette étape est nécessaire pour que le jeu reconnaisse votre personnage et le liste dans le menu de sélection.

Le header commence par un octet, pour l'instant égal à 1. Cet octet est en réalité inutilisé mais dans le cas d'un changement de spécification (qui j'espère n'arrivera jamais), il sera incrémenté, afin que le programme sache quelle spécification votre personnage suit.

Vous avez ensuite besoin de la chaine de caractères "SSBOCHAR",0. C'est ce que le programme utilise pour reconnaître votre appvar en tant que personnage SSBO.

Les deux octets suivants représentent la taille du programme.

Vous utiliserez les 28 octets suivants pour décrire une icône 16x24 pour le menu de sélection de personnages.

Et vous terminez le header avec le nom de votre personnage (évidemment suivi d'un zéro).

Voici ce que cela peut donner par exemple si vous faites Falco :
Code: Select all
.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:



Informations Générales

Après le header, votre personnage devra comporter quelques informations auxquelles le jeu aura besoin d'accéder vite et/ou souvent. Dans cet ordre :
1 octet: gravité (inutilisé finalement, peut être recyclé)
1 octet: vitesse aérienne
1 octet: traction
1 octet: nombre maximal de sauts (2 en général, 5 pour Rondoudou)
2 octets: vitesse horizontale maximale (pas encore utilisée)

Vous devrez ensuite donner au programme les adresses des états auxquels il devra accéder rapidement. Un contre-exemple de ce type d'états est la deuxième frame du Down Aerial. Vous n'y accéderez qu'après la première frame. Cette première frame en revanche a besoin d'être vite trouvée lorsque le joueur demande un Down Aerial.
Toutes ces adresses prennent deux octets.
Puisque pour l'instant vous n'avez écrit aucun état et n'avez l'adresse d'aucun d'eux, mettez simplement l'adresse du Standing State partout et vous modifierez ceci au fur et à mesure que vous avancez.

Dans cet ordre :
Standing, Airing, Dashing, GroundJump, AirJump, Landing
AirNeutralSpecial, AirSideSpecial, AirDownSpecial, AirUpSpecial
GroundNeutralSpecial, GroundSideSpecial, GroundDownSpecial, GroundUpSpecial
DashAttack
SideSmash, DownSmash, UpSmash
NeutralAir, ForwardAir, BackAir, DownAir, UpAir
LedgeGrabbed

Une petite précision s'impose. L'Axe Parser compile les programmes "dans" la zone mémoire où ils seront exécutés. Pour les développeurs assembleur, je suis en train de dire qu'il n'y a aucun moyen de dire .org 0. Pourtant, les adresses dont je parle doivent être des adresses relatives au début de la data, pas des adresses absolues qui supposent de plus que le programme se trouvera dans une certaine place dans la mémoire.
Heureusement pour vous, vous vous trouvez sur le tutoriel Asm, nous allons nous faciliter la vie en utilisant .org 0. Remarquez cependant que bous avons déjà utilisé un .org 0 pour calculer la taille du programme. Si nous en ajoutons un, nous devons aussi ajouter un nouveau label de fin que nous ajouterons au précédent.

Voici donc ce l'on a pour l'instant.
Code: Select all
#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

Image
ImageImageImage
Pokemon Topaze (Axe) discussion and download links here
(19:29:36) noelnadal: plus sérieusemen​t, j'ai très peu de problèmes
(22:45:44) Clifward: J'aime rire du malheur des autres :troll:

(2017.11.18 - 17:07:12) Fireworks: Hayleia !!!!!
(2017.11.18 - 17:07:19) TI-Bot: Fireworks has been logged out (Kicked).
(2017.11.18 - 17:07:22) TI-Bot: Ban of user Fireworks revoked.
(2017.11.18 - 17:07:25) TI-Bot: Fireworks logs into the Chat.
(2017.11.18 - 17:07:28) Fireworks: <3
(2017.11.18 - 17:07:31) Fireworks: 208
User avatar
HayleiaGénéreux
Niveau 17: GM (Grand Maître des calculatrices)
Niveau 17: GM (Grand Maître des calculatrices)
Level up: 43.8%
 
Posts: 2509
Images: 2
Joined: 30 Aug 2011, 08:22
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Templar

Return to Super Smash Bros. Open

Who is online

Users browsing this forum: ClaudeBot [spider] and 0 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
746 utilisateurs:
>721 invités
>17 membres
>8 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)