RMEx
RMEx

Community

Le Deal du moment : -20%
-20% Récupérateur à eau mural 300 ...
Voir le deal
79 €

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]

Ergo

Ergo
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):

Petit brouillard de guerre Warfog-4b4f78b


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 !

Zangther

Zangther
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.

Ergo

Ergo
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.

Ergo

Ergo
Désolé pour le double poste ! MAIS !
J'ai refait un petit brouillard de guerre :

Petit brouillard de guerre Warfogii-4c48bbb

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:

Hellper


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

Ergo

Ergo
il y a une ruse en plus.

7Petit brouillard de guerre Empty

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