RMEx
RMEx

Community


Vous n'êtes pas connecté. Connectez-vous ou enregistrez-vous

Petit brouillard de guerre

Voir le sujet précédent Voir le sujet suivant Aller en bas  Message [Page 1 sur 1]

Bonjour, j'ai conçu un tout petit système de brouillard de guerre pour dissimuler les événements trop loin du héros. Voici un exemple (dans une toute petite carte):




J'ai utilisé un événement en processus parallèle sur la carte :
Event - EV005
| > Appeler Script : SL[:view_field] = 50
| > Appeler Script : SV[1] = events {|i| event_name(i) == "maskable"}
| > Boucle
| >| > Attendre : 1 Frames
| >| > Appeler Script : SV[1].each { |i|
| >| > Appeler Script : f = pixels_between(0, i)
| >| > Appeler Script : g = percent(f, SL[:view_field])
| >| > Appeler Script : event_opacity(i, apply_percent(255 - g, 255))
| >| > Appeler Script : }
| >| >
| > Fin - Boucle
| >

Le label :view_field décrit le rayon de vision. Les événements qui seront "prit en compte" par le brouillard seront les événements dont le nom est "maskable".

Si vous avez des questions/remarques !

Voir le profil de l'utilisateur
Le problème c'est que ce n'est pas vraiment un brouillard mais plutôt un champ de vision. L'idée est sympa mais là on a plus l'impression d'avoir des fantomes qu'un vrai brouillard de guerre.

Voir le profil de l'utilisateur
Pourtant :
Le brouillard de guerre est aussi utilisé en jeu vidéo, notamment dans les jeux de stratégie en temps réel et les arènes de bataille en ligne multijoueur. C'est un élément de gameplay dissimulant les ennemis présents sur des terrains dont le joueur n'a pas la vision.

Mais je vois pluz ou moin ce que tu veux dire.

Voir le profil de l'utilisateur
Désolé pour le double poste ! MAIS !
J'ai refait un petit brouillard de guerre :



Cette fois-ci, le code n'est pas aussi "naïf" que le précédent. Il est beaucoup moins cool car il est bien plus long. Il se sert des labels "comme de Hashtable" et ça marche plutôt bien !

Voici le code, si vous avez des questions Wink


Event - EV001
| > Appeler Script : L[:black_tile] = 1536
| > Commentaire : Iteration sur toutes les cases de la carte
| > Opération : Variable [0002:y] = 0
| > Opération : Variable [0003:map_width] = map_width
| > Opération : Variable [0004:map_height] = map_height
| > Boucle
| >| > Condition : Variable [0002:y] == Variable [0004:map_height]
| >| >| > Commentaire : Obligé d'utiliser une étiquette sinon... ça plante :O  
| >| >| > Aller à l'Étiquette : end_loop
| >| >| >
| >| > Fin - Condition
| >| > Opération : Variable [0001:x] = 0
| >| > Boucle
| >| >| > Condition : Variable [0001:x] == Variable [0003:map_width]
| >| >| >| > Sortir de la Boucle
| >| >| >| >
| >| >| > Fin - Condition
| >| >| > Commentaire : On stock les données de la case courante dans un HASH !  
| >| >| > Commentaire : Via les labels !!!
| >| >| > Appeler Script : offset = "#{V[1]}-#{V[2]}-"
| >| >| > Appeler Script : L["#{offset}0"] = tile_id(V[1], V[2], 0)
| >| >| > Appeler Script : L["#{offset}1"] = tile_id(V[1], V[2], 1)
| >| >| > Appeler Script : L["#{offset}2"] = tile_id(V[1], V[2], 2)
| >| >| > Commentaire : On rend la case courante noire
| >| >| > Appeler Script : set_tile(L[:black_tile], V[1], V[2], 0)
| >| >| > Appeler Script : set_tile(0, V[1], V[2], 1)
| >| >| > Appeler Script : set_tile(0, V[1], V[2], 2)
| >| >| > Opération : Variable [0001:x] += 1
| >| >| >
| >| > Fin - Boucle
| >| > Opération : Variable [0002:y] += 1
| >| >
| > Fin - Boucle
| > Étiquette : end_loop
| > Boucle
| >| > Attendre : 1 Frames
| >| > Commentaire : On parcours toutes les cases voisines
| >| > Opération : Variable [0002:y] = -1
| >| > Boucle
| >| >| > Commentaire : Petite attente pour un peu plus de swagg  
| >| >| > Attendre : 1 Frames
| >| >| > Condition : Variable [0002:y] > 1
| >| >| >| > Aller à l'Étiquette : end_loop2
| >| >| >| >
| >| >| > Fin - Condition
| >| >| > Opération : Variable [0001:x] = -1
| >| >| > Boucle
| >| >| >| > Commentaire : Petite attente pour un peu plus de swagg  
| >| >| >| > Attendre : 1 Frames
| >| >| >| > Condition : Variable [0001:x] > 1
| >| >| >| >| > Sortir de la Boucle
| >| >| >| >| >
| >| >| >| > Fin - Condition
| >| >| >| > Appeler Script : L[:s_x] = player_x + V[1]
| >| >| >| > Appeler Script : L[:s_y] = player_y + V[2]
| >| >| >| > Commentaire : Si la case existe
| >| >| >| > Condition : Script : L[:s_x] >= 0 and L[:s_x] < map_width and L[:s_y] >= 0 and L[:s_y] < map_height
| >| >| >| >| > Commentaire : Remplacer la case si elle n'a pas déjà été modifiée
| >| >| >| >| > Appeler Script : offset = "#{L[:s_x]}-#{L[:s_y]}-"
| >| >| >| >| > Appeler Script : if tile_id(L[:s_x], L[:s_y], 0) != L["#{offset}0"]
| >| >| >| >| > Appeler Script :   set_tile(L["#{offset}0"], L[:s_x], L[:s_y], 0)  
| >| >| >| >| > Appeler Script : end
| >| >| >| >| > Appeler Script : if tile_id(L[:s_x], L[:s_y], 1) != L["#{offset}1"]
| >| >| >| >| > Appeler Script :   set_tile(L["#{offset}1"], L[:s_x], L[:s_y], 1)  
| >| >| >| >| > Appeler Script : end
| >| >| >| >| > Appeler Script : if tile_id(L[:s_x], L[:s_y], 2) != L["#{offset}2"]
| >| >| >| >| > Appeler Script :   set_tile(L["#{offset}2"], L[:s_x], L[:s_y], 2)  
| >| >| >| >| > Appeler Script : end
| >| >| >| >| >
| >| >| >| > Fin - Condition
| >| >| >| > Opération : Variable [0001:x] += 1
| >| >| >| >
| >| >| > Fin - Boucle
| >| >| > Opération : Variable [0002:y] += 1
| >| >| >
| >| > Fin - Boucle
| >| > Étiquette : end_loop2
| >| >
| > Fin - Boucle
| >
Et maintenant la version Overkill Very Happy
Spoiler:
un cookie à celui qui trouve comment j'ai fait  Embarassed

Voir le profil de l'utilisateur
Le second mode n'est quand même pas fait en affichant une tone de pictures en mode soustraction ? Surprised

Voir le profil de l'utilisateur
il y a une ruse en plus.

Voir le profil de l'utilisateur

7

Contenu sponsorisé


Voir le sujet précédent Voir le sujet suivant Revenir en haut  Message [Page 1 sur 1]

Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum