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

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 !

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 :

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:
Petit brouillard de guerre Warfogiii-4c48c04 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

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