1
Voici un autre projet (mon cinquième !) grin

Cette fois-ci c'est mon entrée pour le concours 11 de Cemetech. J'ai décidé faire un shoot-em-up du style Phoenix, mais je voulais changeait les choses un peu : c'est une version de Phoenix comme RPG ! Pour le concours j'avais pas le temps de faire plus qu'une toute petite partie de la partie shoot-em-up :
J3wR
ESA4
ftQH

Ces derniers jours je l'ai repris et j'ai commencé à coder la partie RPG du jeu :
SDlC

J'ai codé un système pour faire des cutscenes (comme dans l'intro) et maintenant il faut polir un peu le système d'évènements.

Ce que on fera c'est aller de planète en planète pour les libérer (toutes les batailles vont se produire quand tu es dans ton navire), puis tu pourras explorer les planètes comme dans les RPGs, acheter des choses pour ton navire, parler avec les gents, etc. Ah, et pendant les batailles tu gagneras de l'xp qui te permettera faire .. je ne sais pas encore, peut-être améliorer tes stats, apprendre de nouveaux techniques, etc. Il y aura aussi des batailles aléatoires où tu affronteras d'1 à 5 méchants un peu plus intelligents et beaucoup plus mobiles (leur IA sera plus complèxe que dans les campagnes : tu, fais un cercle ici, et toi, un rectangle ici, et toi... zzz ).

Bon, je crois que c'est tout. Pour une ou deux semaines, j'aurais pas mal de temps pour y consacrer, et j'ai toujours de la motivation pour le faire. Je ne crois pas que je le finirai maintenant, mais j'espère au moins faire du progrès smile

Au mémoire de Sebastián Oversluij...
2
Cool j'adore ce genre de jeu top

Ça me rappel Anarchy, auquel j'ai joué des heures sur ma TI82 STATS, et aussi plus récemment Strange Adventures In Infinite Space que j'adore (il faut que tu l'essayes !) smile

J'ai hâte de voir ce que ça donne (d'ailleurs ton dernier screenshot bug, non ? Je n'arrive pas à le voir avec chrome), surtout la façons d'aller de planètes en planètes (avec une map un peu comme ce jeu : http://www.hpcalc.org/details.php?id=915 ?) et de quelle façons on marchande tongue

Pour ma part je n'ai vraiment plus de temps à consacrer à la programmation, mais si je peux aider pour de petites choses, n'hésites pas à demander.
3
Merci grin

Moi aussi j'ai joué beaucoup à Anarchy pendant les classes de Mathémathiques, ce ne sera pas exactement comme ça, l'espace va être un autre tilemap et tu vas le traverser comme l' "overworld" des RPGs, seulement que tu vas être dans ton navire et les batailles vont être comme dans les premiers screenshots.

Aujourd'hui j'ai dessiné pas mal de sprites, pas beaucoup de code mais ça avance tout de même !

Quant au dernier screenshot, je n'utilise pas Chrome, mais avec Firefox il s'affiche sans problème... le fichier est grand, je crois qu'il est >2MB.

Pour le moment, j'utilise Pixelscape pour faire les tilemaps, mais on ne peut avoir qu'un map à la fois (quand tu en charges un autre, tu perds ce que tu avais d'abords), donc c'est un peut ennuyeux modifier de vieux maps. A part ça, je crois que je n'ai besoin de rien d'autre. smile
4
Ok, j'ai hâte de voir smile

Pour le screenshot, ça bug avec chrome (après le premier texte l'image se fige), mais pas avec... IE :/

En tout cas beau travail, continue top

As-tu essayé Strange Adventures ? Je crois que tu pourrais en tirer quelques idées de plus (comme les nébuleuses qui te freine sauf si tu as un bon système de propulsion, les étoiles qui explosent et un tas de trucs durant les combats etc...) tongue

Autrement je ne connaissais pas pixelscape mais c'est quoi le problème ? Tu peux pas faire plusieurs sauvegardes ? Je te proposerais bien de faire un éditeur de carte mais il va falloir que je trouve le temps ! cheeky

Enfin tu peux toujours poster le format des cartes.
5
Cette fois-ci les cartes sont de simples tilemaps, pas de brushes. Et oui, c'est ce que j'ai fait jusqu'au moment avec les sauvegardes, mais si j'ajoute des tuiles à une nouvelle carte il n'y a pas de moyen de les copier aux vielles cartes. Donc éditer les vielles cartes est un peu complèxe.

J'ai jeté un coup d'oeuil hier à Strange Adventures et ça a l'air très intéressant ! Malheureusement (ou peut-être pas :P) j'ai pas d'ordinateur avec Windows et je ne voudrais vraiment pas installer Wine...
6
chickendude (./5) :
Cette fois-ci les cartes sont de simples tilemaps, pas de brushes.

Les cartes de l'overworld, pas les maps pour la partie RPG, c'est bien ça ? Enfin tant mieux, ça permet de faire des choses plus jolies et plus détaillées smile
chickendude (./5) :
Et oui, c'est ce que j'ai fait jusqu'au moment avec les sauvegardes, mais si j'ajoute des tuiles à une nouvelle carte il n'y a pas de moyen de les copier aux vielles cartes. Donc éditer les vielles cartes est un peu complèxe.

Ah d'accord, c'est vrai que c'est pas pratique, faudrait peut être en parler au développeur du site parce que c'est le genre de trucs qui ne doit pas embêter que toi.
chickendude (./5) :
J'ai jeté un coup d'oeuil hier à Strange Adventures et ça a l'air très intéressant ! Malheureusement (ou peut-être pas :P) j'ai pas d'ordinateur avec Windows et je ne voudrais vraiment pas installer Wine...

http://sais-linux.sourceforge.net/ smile

D'ailleurs il existe même suite encore plus étoffée d'après wikipédia : http://en.wikipedia.org/wiki/Strange_Adventures_in_Infinite_Space ; il faudra que je l'essaye !
7
Je ne trouve pas le source, la page de téléchargements dit seulement "This project has no files." :/ Je l'essayerai plus tard smile

Pour le moment, il faut penser à ce que je veux programmer maintenant : les cutscenes marchent bien, aussi que les NPCs, bien qu'ils ne se déplacent que pendant les cutscenes.

Et toutes les cartes n'utilisent pas de brushes, chaque carte a sa propre liste d'évènements (je crois que c'est ce que tu fais pour Pokémon Monochrome, non ?). Il ne faut pas un tilemap pour les batailles, donc cette fois le système de tilemaps et assez simple. smile

EDIT : J'ai bossé un peu sur les NPCs, maintenant on peut pas passer à travers d'eux. Il faut toujours que je leur donne des dialogues, mais j'ai déjà une idée de comment le faire. J'ai bossé aussi sur la routine de texte, il y a en fin de simples menus smile
F5Dv

Je ne sais toujours pas comment gérer les évènements, par exemple pour changer le dialogue d'un NPC après une action ou faire qu'ils changent de place, comme par exemple aller à une autre maison quand tu sorts de la première maison du screenshot, donc si tu rentres à la même maison ils n'y seront plus.

EDIT2 : Ah ! J'ai peut-être une idée pour les évènements, il faut l'essayer grin
8
Oups j'ai pas fait gaffe : http://nekohako.xware.cx/sais/index.html .

Purée c'est vraiment beau, on dirait un jeu de game boy eek

Bravo top

Du coup pour l'éditeur je peux t'adapter facilement celui de pokémon si tu veux. Et pour l'ajout des événements il faudra simplement me dire comment tu les gères.

edit : et pour les évènements je pense qu'il faut coder un système de "switch" : tu mets on/off certains bits d'un buffer et en fonction de leur état les dialogues changent etc... Avec une macro il y a même moyen de faire un pseudo-script avec le changement d'état des switch, leur test etc...
9
Je vais donner chaque carte une liste d'évènements, si un évènement a été activé je vais exécuter son code lors de l'affichage de la carte, donc je pourrai dire : effacer NPC1 et NPC3, ajouter cette chose, changer le dialogue de NPC2, etc.

Je ne sais pas si j'ai compris ta méthode. Je pense avior un système de switches comme tu dis (event_array), mais comment changer les dialogues selon lesquels switches sont mis (ou pas) ? La seule manière que je vois c'est pendant l'affichage de la carte.
As-tu mis les sources en ligne ?
chickendude (./9) :
mais comment changer les dialogues selon lesquels switches sont mis (ou pas) ? La seule manière que je vois c'est pendant l'affichage de la carte.

Quand l’événement est déclenché (le joueur enclenche le dialogue avec un npc) il te suffit de tester tel bit du buffer et de faire telle ou telle action en conséquence (afficher tel texte plutôt qu'un autre), non ? Il faudrait faire une macro "if(switch, dialogue_x)" ou quelque chose du genre.

Et pour les événements liés à la carte (si un npc ne doit pas être affiché par exemple), il faut effectivement les exécuter avant l'affichage de la carte (pendant la transition), je pense.
J'ai uploadé une vielle version du source, dès que je finirai l'affichage des textes des NPCs et je mettrai tout en ligne. smile

Je te parlerai plus tard du formate des cartes aussi, c'est pas trop compliqué et un éditeur comme CalcGS m'aiderai beaucoup. voici tous les datas d'une des cartes :B_INN: .db 0 ;number of events that change what should be displayed here .db 12,8 ;width,height .dw B_INN_EVT ;inn event list .dw B_INN_NPC ;list of npcs .db 25,0,0,18,19,0,0,0,0,0,0,25 .db 0,0,0,0,0,0,0,0,0,0,13,15 .db 0,0,0,0,0,0,0,0,0,0,14,16 .db 0,0,0,0,21,22,0,0,0,0,0,17 .db 0,0,0,0,24,23,0,0,0,0,13,15 .db 0,0,0,0,0,0,0,0,0,0,14,16 .db 17,0,0,0,0,0,0,0,0,0,0,25 .db 52,52,52,20,20,52,52,52,52,52,52,52 B_INN_EVT: .db (+_ - $)/4 ;number of events .db 3,7 \ .dw B_INN_TOWN ;x,y,event addr .db 4,7 \ .dw B_INN_TOWN ;x,y,event addr _ B_INN_NPC: .db ALICE_U,3,2 \ .dw b_inn_txt1 .db CALVIN_U,5,2 \ .dw b_inn_txt2 .db $FF ;end of list B_INN_TOWN: ;return to town map .db MAP,1,3,0 ;load map 0, player coords 1,3 ;texts b_inn_txt1: ;alice's text(s) .db 0 ;always the same text .dw +_ _ .db "sounds good, see you there",0 b_inn_txt2: .db 8 .dw +_ .db "i still can't believe it...",0 _ .db "shouldn't you be going to",NEWL .db "talk to Emily?",0

EDIT : j'ai fini l'affichage de texte pour les NPCs, leur texte peut même changer si tu parles avec l'NPC assez de fois. Ici, la 5ème fois Calvin change son dialogue, normalement je crois que la 2ème fois on changera le texte de son dialogue. Ah, et j'ai reglé le masking avec les NPCs, parfois il faut afficher le joueur d'abord, parfois l'NPC.

8lti

Et voici les sources : http://www.mirari.fr/JsM8

EDIT2 : je crois que j'ai implementé un système simple d'évènements. Maintenant j'ai une autre idée pour éviter que l'SMC soit sauvegardé dans le fichier. Il serait plus facile de simplement dire au shell de "ne pas sauvegarder les modifications au fichier" mais aucun shell n'a pas cette option :/ MirageOS te permet de désactiver le program writeback, mais l'option existe seulement pour l'utilisateur, pas pour le/a programmeur/se.

EDIT 3 : j'ai commencé plusiers choses d'autres : les menus, plus d'intéraction avec le monde (avec [2nd] et en touchant une tuile), le système d'évènements (si tu retournes à la maison tes amis n'y seront plus), les magasins (partie finale du screenshot), et j'ai restructuré le chargement de cartes pour régler les problèmes avec SMC. Mais je me rends compte qu'il devient de plus en plus difficile de travailler avec les cartes fou Je ne sais pas comment mais tout marche ! grin
dQrx

Et les sources les plus récents : http://www.mirari.fr/9NZ3
Pfiou tu es en train de nous pondre le meilleur RPG existant sur TI z80 love

Pour les cartes je vais voir ce que je peux faire, car je n'ai plus mes fichiers z80 sur mon PC (j'en ai un neuf, je suis passé d'un MSI Wind à un Asus T100). Il va falloir que je réinstalle PureBasic + TortoiseSVN pour chopper ma sauvegarde de celui de pokémon.
Merci smile Aujourd'hui j'ai commencé le système d'éléments (comme des potions, ce genre de trucs) et j'ai écrit un peu plus pour le "storyline".

Je crois que bientôt j'arriverai au moment de la première bataille (les premiers screenshots) grin Il faut ajouter le marchand et son magasin et je crois que c'est tout. Peut-être l'on pourra bientôt faire sortir le premier demo..

EDIT : Le marchand est presque fait, je ne sais pas si je veux permettre le joueur d'acheter plus d'une chose à la fois (c'est-à-dire, 2 "ferralla" ou 10 "metzina"). Il faut aussi afficher un petit texte descriptif de chaque élément, parce que sinon personne ne va savoir ce qu'ils font ! :P
dvvv

Ah, et "odol", le mot pour "argent", veut dire sang en basque wink
Cool, comme toujours smile

Est-ce que tu comptes retoucher les tiles/sprites ? Parce que je pense qu'il faudrait ajouter un peu plus de "profondeur" aux tables et au comptoir par exemple : ça à l'air pratiquement vu du dessus pour l'instant tongue
chickendude (./13) :
je ne sais pas si je veux permettre le joueur d'acheter plus d'une chose à la fois

C'est toujours utile, je pense que le plus simple c'est d'avoir le nombre de quantités achetées en face de l'argent (qu'on pourra augmenter ou diminuer avec les flèches gauche/droite).

Pour la démo je pourrais t'aider à faire la traduction française si tu veux.

Et pour l'éditeur je ne pense pas pouvoir y regarder avant ce week-end (trop de travail ! tsss).
deeph (./14) :
Est-ce que tu comptes retoucher les tiles/sprites ? Parce que je pense qu'il faudrait ajouter un peu plus de "profondeur" aux tables et au comptoir par exemple : ça à l'air pratiquement vu du dessus pour l'instant tongue
Oui, tu as raison, il y a plusieurs sprites qui ne me plaient pas beaucoup... je crois que les sprites sont assez difficile.
deeph (./14) :
chickendude (./13) :
je ne sais pas si je veux permettre le joueur d'acheter plus d'une chose à la fois
C'est toujours utile, je pense que le plus simple c'est d'avoir le nombre de quantités achetées en face de l'argent (qu'on pourra augmenter ou diminuer avec les flèches gauche/droite).
Je vais essayer d'implémenter cette méthode, ça ne devrait pas être trop difficile...
deeph (./14) :
Pour la démo je pourrais t'aider à faire la traduction française si tu veux.
Merci grin Il y a pas mal de textes, il faut que je les organise un peu..

EDIT : Maintenant tu ne peux acheter que 99. Le numéro en parenthèses te montre combien tu en a déjà.
4D6w

EDIT2 : J'ai changé les sprites du magasin mais ClrHome.org a des problèmes, donc il faudra attendre un peu pour les intégrer au jeu. J'ai nettoyé les dialogues du magasin aussi. Quand ClrHome.org retourne en ligne il faudra ajouter la maison d'Emily, celle du joueur et celle du "safehouse" et je crois que c'est tout pour Berga (la première planète).

EDIT3 : Ettt voilà, le nouveau magasin :
LwLR

Les sources les plus récentes : http://www.mirari.fr/EEhD (il y a toujours un .8xp dans le .7z)

EDIT4 : Les évènements marche avec les textes (on peut dire: "Nous allons [chez moi][au magasin]" selon l'état d'un évènement : mis ou non) smile

EDIT5 : Une chambre secrète !
Y5O5
Génial, j'ai hâte de lire les sources (pour te piquer toutes tes idées, notamment celles concernant la gestion des événements, ça pourrait me servir pour pokémon devil wink), et me mettre à l'adaptation de l'éditeur de cartes (ce week-end promis) smile
Merci ! Mais si tu es pressé ne t'en inquiète pas..

Pour le moment, le structure des cartes est ainsi :
Chaque carte a cinq sections :
1. le nombre d'événements qu'il faut charger en chargeant la carte
1b. si ce nombre est 1 ou plus, le suit une liste des événements
2. la largeur et la hauteur (un octet)
3. un mot (.dw) avec l'addresse de la liste d'évènements intéractifs dans la carte
4. un mot pour l'addresse de la liste de NPCs
5. et finalement, la carte

to Emily?",0
Un exemple :B_INN:
.org MAP_ADDR

.db 1								;number of events that can change what should be displayed here
.db 1 \ .dw B_INN_EVENT1			;OK, this says that if event 1 is set, we should run B_INN_EVENT1
.db 12,8							;width,height
.dw B_INN_EVT						;inn event list
.dw B_INN_NPC						;list of npcs
.db 25,0,0,18,19,0,0,0,0,0,0,25
.db 0,0,0,0,0,0,0,0,0,0,13,15
.db 0,0,0,0,0,0,0,0,0,0,14,16
.db 0,0,0,0,21,22,0,0,0,0,0,17
.db 0,0,0,0,24,23,0,0,0,0,13,15
.db 0,0,0,0,0,0,0,0,0,0,14,16
.db 17,0,0,0,0,0,0,0,0,0,0,25
.db 52,52,52,20,20,52,52,52,52,52,52,52

B_INN_EVT:
.db 3,7 \ .dw B_INN_TOWN	;x,y,event addr
.db 4,7 \ .dw B_INN_TOWN	;x,y,event addr
.db $FF						;end of touch events
.db $FF						;end of [2nd] events

B_INN_NPC:
.db ALICE_U,3,2 \ .dw b_inn_txt1
.db CALVIN_U,5,2 \ .dw b_inn_txt2
.db $FF						;end of list

;texts
b_inn_txt1:
.db T_ALICE					;alice's text(s)
.db 0						;always the same text
.dw $+2
.db "Sounds good, see you at ",EVENTTEXT \ .dw your_house_safehouse_txt \ .db ".",0

b_inn_txt2:
.db T_CALVIN
.db 3						;after talking 3 times, change texts
.dw +_
.db "I still can't believe it...",0
_ .db "Shouldn't you be going to talk 

Chaque carte de la même planète est précédée par une lettre, ici la "B" signifie "Berga", le nom de la planète. Les noms des labels pour les événements et les NPCs suivent toujours la même formule : _EVT et _NPC.

Dans B_INN_EVT, avant le premier $FF, il y a les événements qui s'activent quand on touche une tuile. Avant le deuxième $FF, les événements qui s'activent en touchant [2nd].

Dans B_INN_NPC, il y a l'id du NPC, ses coordonnées (X,Y), puis le texte qui s'affichera si l'on parle avec l'NPC.

Dans b_inn_txt1, le premier octet t'annonce qui parle (il y a une petite boîte au-dessus du text avec le nom du locuteur). Puis le nombre de fois qu'il faut parler avec l'NPC pour changer son texte. Puis l'addresse du deuxième texte une fois le compteur = à 0. Pour Alice, le compteur commence à zéro donc il n'y a qu'un texte, mais pour Calvin il y en a deux.

Je sais que mes explications ne sont pas très claires, mais les cartes mêmes sont assez simples, chaque numéro correspond avec un sprite (pas avec un brush, comme les autres).

Je peux t'expliquer le système d'événements (j'utilise le même mot pour les événements du jeu (pour faire avancer le jeu) et pour ceux de les cartes, comme les panneaux, les portes, les NPCs, etc., c'est assez embrouillant :P) plus tard, si tu veux. Essentielment j'y ai consacré 20 octets dont chaque bit corréspond avec un événement. J'ai trois routines : set_event, reset_event, et check_event :;a = event to set set_event: ld c,a srl c srl c srl c and $7 ld b,a ld a,%10000000 jr z,+_ rrca djnz $-1 _ ld b,0 ld hl,event_array add hl,bc or (hl) ld (hl),a ret ;a = event to set reset_event: ld c,a srl c srl c srl c and $7 ld b,a ld a,%10000000 jr z,+_ rrca djnz $-1 _ ld b,0 ld hl,event_array add hl,bc ld c,a or (hl) xor c ld (hl),a ret ;a = event id to check ;returns z if bit is 0, nz if bit s set check_event: push hl ld c,a srl c srl c srl c and $7 ld b,a ld a,%10000000 jr z,+_ rrca djnz $-1 _ ld b,0 ld hl,event_array add hl,bc and (hl) pop hl ret
Première version de l'éditeur de cartes :

F7ub

GALL map editor.zip

smile

Pour l'instant il ne fait que le minimum (export des données des cartes), je rajouterais la gestion des événements par la suite. Et il y a quelques trucs qui sont là parce qu'ils servaient pour pokémon (choix de la carte initiale du jeu, départ x/y, offsets...), mais ça servira peut être ensuite donc je ne les ai pas retirés.
Merci ! Je vais l'essayer tout de suite !

Le zoom semble ne marche pas sous Linux :/ Je crois que l'éditeur de Juego a le même problème.

Et faut-il utiliser un seul fichier pour les tiles?

De toutes façons, merci beaucoup grin
Ok pour le zoom je note, j’essaierai d'y faire quelque chose d'ici la prochaine version, même si ça marche bien sous windows.

Pour les tiles il faut juste spécifier quel "tileset" on veut en créant la map, rien de plus (ça ne rajoute rien à l'export, c'est juste inscrit dans le fichier .map pour l'instant). D'ailleurs je pense que tu devais en utiliser plusieurs à la base puisqu'il y a plus de 32 tiles différents ?
Je voulais dire que pour l'éditeur de Juego chaque tile est un .bmp, donc si j'ai 80 tiles il faut avoir 80 fichiers .bmp. Et chaque numéro correspond avec nu sprite, donc je peux avoir 256 tiles. Je n'ai pas l'habitude de travailler avec tous les sprites ensemble, si je veux ajouter un sprite au début (on peut marcher à travers les premiers tiles, mais pas les autres), bon c'est pas grave mais moi je le vois plus facile avec plusieurs .bmp.

Ah, maintenant je vois pourquoi tu dis ça de 32 tiles, je simplement multiplie le sprite id par 8 (add hl,hl \ add hl,hl \ add hl,hl \ ld de,sprite_data \ add hl,de). Comme ça on peut avoir 256 tiles.

Le zoom marchait avec Wine, mais cet ordinateur ne l'a pas.
Ok je peux diviser le tileset en plusieurs fichiers .bmp pour chaque tile si tu préfères.

Pour le nombre de tiles, oui je voulais dire 256 (le matin, tout ça... zzz).

Enfin du coup toutes les maps auront les mêmes 256 tiles ou tu veux pouvoir en utiliser plusieurs ?
Pour le moment je crois que je me limiterai à 256 tiles. A la fin il faudra séparer en plusieurs fichiers data, peut-être un fichier pour chaque galaxie? S'il le faut, je peut créer un tileset pour chaque galaxie. Mais pour le moment je n'en ai qu'un peu plus de 80. Je crois que le plus important serait de pouvoir reorganiser les tiles, surtout quand je veut ajouter un autre tile "non-passable".

Donc oui, je pense utiliser les même tiles pour toutes les cartes smile

Et merci encore, j'espère que ce ne sera pas trop gênant..