Dans le tutoriel d'un RPG 2D qui se trouve dans ma signature, il y a un chapitre sur la gestion des événements.
Tu peux créer différents événements comme l'ouverture d'une porte, la gestion des ventilateurs etc..
de cette façon tu vas créer une structure par événement et une procédure par événement, et tu pourras en ajouter à volonté sans casser le reste de ton programme.
Voici un extrait du tutoriel concernant les événements
dans le tutoriel on peut se téléporter, ouvrir un dialogue simple, gérer une bataille, gérer une auberge, changer un tile par exemple pour ouvrir un coffre ( ou une porte dans ton cas).
Ensuite tu as une procédure qui teste les événements et appelle la procédure correspondante.
Code : Tout sélectionner
;Type d'évènement : e_event_type
Enumeration
#EVENT_NULL
#EVENT_TELEPORT
#EVENT_DIALOG
#EVENT_BATTLE
#EVENT_SHOP
#EVENT_INN
#EVENT_CHANGETILE
EndEnumeration
;définit quelle action permet de déclencher un événement : e_event_action
Enumeration
#EVENT_ACTION_AUTO
#EVENT_ACTION_ONKEYPRESS
EndEnumeration
Structure s_event
type.l
onaction.l
proba.b
*param.LONG
player_anim.l
*sound.l
is_unique.b
*Next.s_event
EndStructure
Structure s_lib_event
global_event.s_event
*map_event.s_event
*sprite_event.s_event
EndStructure
;paramètres des événements
Structure s_event_param_teleport
filename.s
startX.l
startY.l
EndStructure
Structure s_event_param_dialog
dialog.s
EndStructure
Structure s_event_param_battle
n_monstre.l
*fond
*fondu
*monstres.s_monstre
EndStructure
Structure s_event_param_shop
n_item.l
*itemId.long
*coutItem.long
*prixVente.long
EndStructure
Structure s_event_param_inn
cout.l
EndStructure
Structure s_event_param_changetile
x.l
y.l
newtile.l
EndStructure
voici la procédure qui teste les événements du jeu
Code : Tout sélectionner
Procedure DoEvent(*event.s_event, *libevent.s_lib_event, *map.s_map, *libsprite.s_lib_sprite, *player.s_player,*gui.s_gui)
Define.s_event_param_shop *Ptparam_shop
Define.s_event_param_inn *Ptparam_inn
If *event = #Null : ProcedureReturn 0 : EndIf
If *event\type = #EVENT_NULL : ProcedureReturn 0 : EndIf
If *event\sound : PlaySound(*event\sound) : *event\sound = 0 : EndIf
Select *event\type
Case #EVENT_TELEPORT
DoEventTeleport(*event, *libevent, *map, *libsprite)
ProcedureReturn 1
Case #EVENT_DIALOG
DoEventDialog(*event, *gui, *map, *libsprite)
Case #EVENT_BATTLE
DoEventBattle(*event, *libevent, *map, *libsprite)
Case #EVENT_SHOP
DoEventShop(*event, *map, *libsprite, *player, *gui)
Case #EVENT_INN
DoEventInn(*event, *map, *libsprite, *player, *gui)
Case #EVENT_CHANGETILE
DoEventChangetile(*event, *map)
EndSelect
If *event\is_unique
;suppr. de l'événement
Select *event\type
Case #EVENT_NULL
Case #EVENT_TELEPORT
FreeMemory(*event\param)
Case #EVENT_DIALOG
FreeMemory(*event\param)
Case #EVENT_BATTLE
FreeMemory(*event\param)
Case #EVENT_SHOP
*Ptparam_shop = *event\param
FreeMemory(*Ptparam_shop\itemId)
FreeMemory(*Ptparam_shop\coutItem)
FreeMemory(*Ptparam_shop\prixVente)
FreeMemory(*event\param)
Case #EVENT_INN
FreeMemory(*event\param)
Case #EVENT_CHANGETILE
FreeMemory(*event\param)
EndSelect
*event\type = #EVENT_NULL
*event\onaction = #EVENT_ACTION_AUTO
*event\param = #Null
EndIf
ProcedureReturn 0
EndProcedure
et voici une procédure simple qui gère un événement
Code : Tout sélectionner
Procedure DoEventTeleport(*event.s_event, *libevent.s_lib_event, *map.s_map, *libsprite.s_lib_sprite)
Define.s file_map, file_sprite, file_event
Define.s_event_param_teleport *param
*param = *event\param
If *param\filename = #NULL$
SpriteMove(*libsprite\sprites, *param\startX, *param\startY, *map)
Else
file_map = *param\filename + ".map"
file_sprite = *param\filename + ".sprite"
file_event = *param\filename + ".event"
FreeMap(*map)
FreeSprites(*libsprite)
FreeLibEvent(*libevent,*map,*libsprite)
LoadSprites(*libsprite, file_sprite)
LoadMap(*map, file_map)
loadEvent(*libevent,*map,*libsprite,file_event)
SpriteMove(*libsprite\sprites, *param\startX, *param\startY, *map)
EndIf
EndProcedure
ET là je sais que ce n'est pas très clair, il faut se taper le tutoriel depuis le début pour bien suivre
[EDIT]
Voici l'introduction sur les événements
Code : Tout sélectionner
Avant de commencer, qu'est-ce qu'un événement dans un rpg?
Il s'agit de toutes les interactions possibles entre le joueur et le jeu durant la partie. Quelques exemples:
* un dialogue entre un pnj et notre héros
* un changement de carte
* une téléportation dans la carte actuelle
* l'affichage du menu de l'auberge ou bien d'un marchand
* une bataille
* un changement de musique
* un effet graphique: pluie, neige, tremblement de terre, éclair, etc.
* etc.
Ce ne sont évidemment que quelques exemples. Ce système est conçu pour que vous puissiez rajouter n'importe quel autre événement non-géré actuellement. Cinq événements différents seront prévus dans cette étape. Seule l'événement téléportation sera totalement fonctionnel à la fin de cette partie, les autres suivront dans les prochaines étapes.
Ces événements peuvent être liés:
* à la carte: l'événement se déclenche quand on passe sur un tile déterminé
* à un sprite: l'événement se déclenche quand on passe près d'un sprite donné
* ou bien il peut s'agir d'un événement global. Il peut se déclencher potentiellement à tout moment.
D'autres paramétrages sont intégrés au système:
* l'événement se déclenche si l'on appuie sur espace au lieu de se déclencher automatiquement
* l'événement se déclenche X fois sur 100
* l'événement est unique: il n'arrivera qu'une fois.
Un son peut être associé à l'événement et l'événement peut également changer l'animation actuelle du joueur.
En combinant plusieurs événements, ce système permet de réaliser n'importe quelle opération complexe.