π
<-
Chat plein-écran
[^]

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

Sous-forum du projet Axe d'Hayleia

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

Message non lude 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: Tout sélectionner
.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: Tout sélectionner
#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
Avatar de l’utilisateur
HayleiaGénéreux
Niveau 17: GM (Grand Maître des calculatrices)
Niveau 17: GM (Grand Maître des calculatrices)
Prochain niv.: 43.8%
 
Messages: 2509
Images: 2
Inscription: 30 Aoû 2011, 08:22
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Templar

Retourner vers Super Smash Bros. Open

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1348 utilisateurs:
>1318 invités
>25 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)