Oniromancie: Scripts - Brouillard de Guerre


Comment ça marche?

Aëdemphia
Par Sylvanor

Fighting Robots Quest
Par Boulon

Forstale
Par Ødd Clock

Geex
Par roys

Inexistence
Par Falco

La Légende d'Ibabou
Par Zaitan

Lije
Par Gaetz

LoveMaster
Par Cuddlefox

Sarcia
Par Kaëlar

Super Mario RPG - Lost Souls
Par Omegabowser

Jeux: Monster World RPG / Jeux: Pif et Hercule / News: Mise à jour de RPG Maker 2003 / Tutos: Création de charset / Jeux: FAYLINAWA /

Chat  (66 connectés)

Bienvenue
visiteur !






publicité RPG Maker!

Statistiques

Liste des
membres


Contact

66 connectés actuellement

9257270 visiteurs
depuis l'ouverture

1397 visiteurs
aujourd'hui

Groupe Facebook

Barre de séparation

Partenaires




TOP
GAMEMAKING


Les 5 plus
visités

Lunae, le baz'arts d'Emz0

Le studio du chat vert

Pixelandgame

Tashiroworld

HeyMakeGames

Au hasard

RPG Network

Just FTW

Final Fantasy VII Origin

Les deux derniers

Lunae, le baz'arts d'Emz0

Le studio du chat vert

Nos autres partenaires

Devenir
partenaire


Barre de séparation

Un site du réseau
War Paradise

Annuaires référenceurs




Brouillard de Guerre
Script pour RPG Maker VX
Ecrit par berka

Bonjour à tous !

Voici un tout nouveau script qui ajoute un brouillard de guerre sur vos cartes. Vous voyez Age Of Empires ? C'est le meme principe: tout endroit non découvert est noirci, laissant encore plus de suspens à votre partie.
image
Le principe est très simple:
un rayon est défini: c'est le champ de vision du héro.
les données visitées sont sauvegardée d'une carte à l'autre.
le brouillard peut etre masqué par l'activation d'un interrupteur (1 par défaut). Activé: brouillard masqué, Désactivé: brouillard Affiché.
il peut etre réinitialisé.

Attention, ce script entraine une chute de 5 FPS pour les grandes maps.

Voila tout, voici le tileset à placer dans votre projet, dossier System. Un grand merci à Jess qui me l'a rendu transparent. A nommer "fog.png"
image

Et le script qui doit etre placé au dessus de main:



Portion de code:





#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

# Brouillard de Guerre 22/05/09
#-------------------------------------------------------------------------------
# ver.0.1 par Berka rgss.2
# http://www.rpgmakervx-fr.com
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Ajoute un brouillard de guerre sur la Carte
#-------------------------------------------------------------------------------
# Commandes:
# Fog.clear_fog(map_id) # réinitialise le brouillard (tout noir)
# vu_par_hero?(x,y) # vérifie si [x,y] est vu par le héro
# $RayonFog = i # modifier le champ de vision du héro
#-------------------------------------------------------------------------------
# Fonctions:
# * Activation d'interrupteur pour masquer le brouillard
# * Sauvegarde du brouillard de chaque carte
# * Affichage des bordures de brouillard en parallèle (Thread)
# Ne pas utiliser sur de trop grandes cartes, risque de chute de fps !
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

module Berka
module Brouillard
$RayonFog = 3 # Rayon de vision: calcul optimisé pour 3 & 6
FichFog = "fog.png" # Fichier de tileset brouillard: seule la 1ere pose est utilisée
# doit se trouver dans le dossier systeme de projet
IDFog = 1 # Id de l'interrupteur qui désactive/active le brouillard
ZFog = 300 # Priorité de superposition du brouillard.
Act_GC = true # Activation du Ramasse Miettes pour gain de performances

# Ne pas changer !!!!
Tiles={ # Indexation des autotiles de brouillard
"0"=>2816,"1"=>2824,"12"=>2844,"123"=>2844,"1234"=>2856,"12346"=>2860,
"123467"=>2860,"1234678"=>2862,"12346789"=>2862,"1234679"=>2860,"123468"=>2862,
"1234689"=>2862,"123469"=>2860,"12347"=>2856,"123478"=>2859,"1234789"=>2859,
"123479"=>2857,"12348"=>2859,"123489"=>2859,"12349"=>2857,"1236"=>2854,
"12367"=>2855,"123678"=>2861,"123679"=>2855,"1236789"=>2861,"12368"=>2861,
"123689"=>2861,"12369"=>2854,"1237"=>2845,"12378"=>2849,"123789"=>2849,
"12379"=>2847,"1238"=>2849,"12389"=>2849,"1239"=>2846,"124"=>2856,"1246"=>2860,
"12467"=>2860,"124678"=>2862,"1246789"=>2862,"124679"=>2860,"12468"=>2862,
"124689"=>2862,"12469"=>2860,"1247"=>2856,"12478"=>2859,"124789"=>2859,
"12479"=>2857,"1248"=>2859,"12489"=>2859,"1249"=>2857,"126"=>2854,"1267"=>2855,
"12678"=>2861,"126789"=>2861,"12679"=>2855,"1268"=>2861,"12689"=>2861,"1269"=>2854,
"127"=>2845,"1278"=>2849,"12789"=>2849,"128"=>2849,"1289"=>2849,"129"=>2846,
"13"=>2828,"134"=>2834,"1346"=>2848,"13467"=>2848,"134678"=>2858,"1346789"=>2858,
"134679"=>2848,"13468"=>2858,"134689"=>2858,"13469"=>2848,"1347"=>2834,
"13478"=>2851,"134789"=>2851,"13479"=>2835,"1348"=>2851,"13489"=>2851,
"1349"=>2835,"136"=>2841,"1367"=>2843,"13678"=>2853,"136789"=>2853,"13679"=>2843,
"1368"=>2853,"13689"=>2853,"1369"=>2841,"137"=>2829,"1378"=>2839,"13789"=>2839,
"138"=>2839,"1389"=>2839,"139"=>2830,"14"=>2832,"146"=>2848,"1467"=>2848,
"14678"=>2858,"146789"=>2858,"14679"=>2848,"1468"=>2862,"14689"=>2858,"1469"=>2848,
"147"=>2832,"1478"=>2850,"14789"=>2850,"1479"=>2833,"148"=>2850,"1489"=>2850,
"149"=>2833,"16"=>2841,"167"=>2843,"1678"=>2853,"16789"=>2853,"1679"=>2848,
"168"=>2853,"1689"=>2853,"169"=>2841,"17"=>2825,"178"=>2838,"1789"=>2838,
"179"=>2827,"18"=>2838,"189"=>2838,"19"=>2826,"2"=>2844,"23"=>2844,"234"=>2856,
"2346"=>2860,"23467"=>2860,"234678"=>2862,"2346789"=>2862,"234679"=>2862,
"23468"=>2862,"234689"=>2862,"23469"=>2860,"2347"=>2856,"23478"=>2859,
"234789"=>2859,"23479"=>2857,"2348"=>2859,"23489"=>2859,"2348"=>2859,"236"=>2854,
"2367"=>2855,"23678"=>2861,"236789"=>2861,"23679"=>2855,"2368"=>2861,"23689"=>2861,
"2369"=>2854,"237"=>2845,"2378"=>2849,"23789"=>2849,"2379"=>2847,"238"=>2849,
"2389"=>2849,"239"=>2846,"24"=>2856,"246"=>2860,"2467"=>2860,"24678"=>2862,
"246789"=>2862,"24679"=>2860,"2468"=>2862,"24689"=>2862,"2469"=>2860,"247"=>2856,
"2478"=>2859,"24789"=>2859,"2479"=>2847,"248"=>2859,"2489"=>2859,"249"=>2857,
"26"=>2854,"267"=>2854,"2678"=>2861,"26789"=>2861,"2679"=>2855,"268"=>2861,
"2689"=>2861,"269"=>2854,"27"=>2845,"278"=>2849,"2789"=>2849,"279"=>2847,"28"=>2849,
"289"=>2849,"29"=>2846,"3"=>2820,"34"=>2834,"346"=>2848,"3467"=>2848,"34678"=>2858,
"346789"=>2858,"34679"=>2848,"3468"=>2858,"34689"=>2858,"3469"=>2848,"347"=>2834,
"3478"=>2851,"34789"=>2851,"3479"=>2835,"348"=>2851,"3489"=>2851,"349"=>2835,
"36"=>2840,"367"=>2842,"3678"=>2852,"36789"=>2852,"3679"=>2842,"368"=>2852,
"3689"=>2852,"369"=>2840,"37"=>2821,"378"=>2837,"3789"=>2837,"379"=>2823,
"38"=>2837,"389"=>2837,"39"=>2822,"4"=>2832,"46"=>2848,"467"=>2848,"4678"=>2858,
"46789"=>2858,"4679"=>2848,"468"=>2858,"4689"=>2858,"469"=>2848,"47"=>2832,
"478"=>2850,"4789"=>2850,"479"=>2833,"48"=>2850,"489"=>2850,"49"=>2833,
"6"=>2840,"67"=>2842,"678"=>2852,"6789"=>2852,"679"=>2842,"68"=>2852,
"689"=>2852,"69"=>2840,"7"=>2817,"78"=>2836,"789"=>2836,"79"=>2819,"8"=>2836,
"89"=>2836,"9"=>2818
} # et tu payes ton mal de crâne, pour trouver chaque valeur ^^
end
end
module Fog
def self.clear_fog(id)
$game_temp.br_maps.delete(id)
return if !$scene.is_a?(Scene_Map)
$scene.spriteset.dispose
$scene.spriteset=Spriteset_Map.new
end
end
Win32API.new('kernel32','SetPriorityClass','pi','i').call(
Win32API.new('kernel32','GetCurrentProcess','','i').call,256)
include Berka::Brouillard
class Spriteset_Map
alias :br_create :create_tilemap
alias :br_dispose :dispose_tilemap
alias :br_view :dispose_viewports
alias :br_update :update_tilemap unless $@
alias :br_view_update :update_viewports unless $@
attr_accessor :br_tile,:tilemap
def create_tilemap
br_create
@br_tile=Tilemap.new(@br_view=Viewport.new(0,0,Graphics.width,Graphics.height))
@br_view.z=ZFog
8.times{|i|@br_tile.bitmaps=@tilemap.bitmaps.clone}
@br_tile.bitmaps[1]=Cache.system(FichFog)
@br_tile.map_data=Table.new($game_map.width,$game_map.height,3)
clear_fog
end
def clear_fog
w,h=$game_map.width,$game_map.height
if $game_temp.br_maps.has_key?($game_map.map_id)
for x in 0...w;for y in 0...h
if $game_temp.br_maps[$game_map.map_id][x,y]==0
@br_tile.map_data[x,y,1]=2816
a||=true
else
@br_tile.map_data[x,y,1]=0
a||=false
end
end;end
if a
Thread.new{for x in 0...w;for y in 0...h
chk(x,y)
end;end}
end
else
$game_temp.br_maps[$game_map.map_id]||=Table.new(w,h)
for x in 0...w;for y in 0...h
@br_tile.map_data[x,y,1]=2816
$game_temp.br_maps[$game_map.map_id][x,y]=0
end;end
end
end
def dispose_tilemap
br_dispose
@br_tile.dispose
end
def dispose_viewports
br_view
@br_view.dispose
end
def update_tilemap
br_update
if $game_switches[IDFog]
@br_tile.dispose
return
end
GC.start if !$game_player.moving?&&Act_GC
return if !$game_temp.br_maps.has_key?($game_map.map_id)
br_obscurcis
x,y=$game_map.display_x/8,$game_map.display_y/8
return if x==@br_tile.ox&&y==@br_tile.oy
@br_tile.ox,@br_tile.oy=x,y
@br_tile.update
end
def br_obscurcis
x,y=$game_player.x,$game_player.y
rx,ry=(x-$RayonFog-2..x+$RayonFog+2).to_a,(y-$RayonFog-2..y+$RayonFog+2).to_a
for tx in rx
for ty in ry
r=Math.sqrt(((x-tx)**2+(y-ty)**2))
chk(tx,ty)if r.between?($RayonFog,$RayonFog+2)
next if !tx.between?(rx[0],rx[-1])
if r<=$RayonFog
@br_tile.map_data[tx,ty,1]=0
$game_temp.br_maps[$game_map.map_id][tx,ty]=1
end
end
end
end
def chk(x,y)
return if !$game_temp.br_maps.has_key?($game_map.map_id)||x.nil?||y.nil?||
$game_temp.br_maps[$game_map.map_id][x,y]==1
d=@br_tile.map_data
l=[]
l<<1 if d[x-1,y+1,1]==0
l<<2 if d[x,y+1,1]==0
l<<3 if d[x+1,y+1,1]==0
l<<4 if d[x-1,y,1]==0
l<<6 if d[x+1,y,1]==0
l<<9 if d[x+1,y-1,1]==0
l<<8 if d[x,y-1,1]==0
l<<7 if d[x-1,y-1,1]==0
l=l.sort.join
return if l.nil?||l==""
@br_tile.map_data[x,y,1]=Tiles[l]
end
def update_viewports
br_view_update
@br_view.update
end
end
class Game_Temp
alias :br_initialize :initialize
attr_accessor :br_maps
def initialize
br_initialize
@br_maps={}
end
end
def vu_par_hero?(x,y)
Math.sqrt((($game_player.x-x)**2+($game_player.y-y)**2))<=$RayonFog
end
class Scene_Map attr_accessor :spriteset
def update_basic
Graphics.update
Input.update
$game_map.update
end
end
class Scene_File alias :br_write_save :write_save_data
alias :br_read_save :read_save_data
def write_save_data(file)
br_write_save(file)
Marshal.dump($game_temp.br_maps,file)
end
def read_save_data(file)
br_read_save(file)
$game_temp.br_maps=Marshal.load(file)
end
end



En espérant qu'il trouvera preneur,

berka


berka - posté le 25/05/2009 à 09:47:36. (493 messages postés)

planchant sur un script

autres tilesets de brouillard:
image
image
image

Tous faits par Jess !

berka

Twitter: Pensées politiques et juridiques. Réflexions informatiques


La Meche - posté le 25/05/2009 à 11:37:28. (324 messages postés)

...

O.O
Ouaw !
Pas mal le script !
Je vais voir si je pourrais l'utiliser quand tu auras fini le script des events.
Bref bon script =)
(Tu t'es pas fait ch*er à ecrire l'indexation des autotiles de brouillard x] )

Diaries


berka - posté le 25/05/2009 à 14:27:05. (493 messages postés)

planchant sur un script

Ho, si ! Ca a été le plus long...

Il faut que je pense à finir le script de generation d'events.

berka

Twitter: Pensées politiques et juridiques. Réflexions informatiques


Rockmik - posté le 25/05/2009 à 14:45:47. (12633 messages postés) - honor

Merci pour cette contribution. :)


natinusala - posté le 25/05/2009 à 18:20:14. (587 messages postés)

Mon avatar est une patate trysophille aux poils de moustache musclés.

A moins de faire un RTS avec le système TERG (et encore !) ce n'est pas très utile mais merci quand même pour le partage !

Attends je vais chercher un stylo


zouglou - posté le 25/05/2009 à 18:24:37. (2197 messages postés)

perso, je trouve que c'est trop moche sur l'image
(chacun ces gouts)


La Meche - posté le 25/05/2009 à 19:23:18. (324 messages postés)

...

erreur ligne 201 et 209
Faut sauter des lignes !

Diaries


natinusala - posté le 25/05/2009 à 21:40:20. (587 messages postés)

Mon avatar est une patate trysophille aux poils de moustache musclés.

ben en fait ça fait comme les affiches TAN... des bandes un peu rondes...

auchi ch'ai trouvé cha mais ch'est moyen et l'autotile n'est pas fourni avec

http://cid6.over-blog.com/article-3052776.html

Ramasse-miettes ?

Attends je vais chercher un stylo


scrapi™ - posté le 26/05/2009 à 23:21:30. (6557 messages postés)

Céréales killer

il voulait dire quoi Trebor77 en disant:

Citation:

faut que tu nommes tes variables en anglais...étant donné que tout le code qui n'est pas de toi est en anglais... ca serait plus homogène, et au moins les scripteurs non Fr comprendrait ton code sans souci. ( pareil qd tu fais des commentaires ).



simple curiosité.


scrapi


natinusala - posté le 27/05/2009 à 16:17:41. (587 messages postés)

Mon avatar est une patate trysophille aux poils de moustache musclés.

hmmm sa lague sur une map 50/50 les touches mettent 3 plombes à répondre... dommage :(

Attends je vais chercher un stylo


berka - posté le 28/05/2009 à 11:07:34. (493 messages postés)

planchant sur un script

C'est vrai que ce systeme est lourd, mais la taille de la map n'influe que lors de son chargement. Les déplacements sont aussi gourmands en calcul quel que soit les dimensions de la map ! Tout dépend de ce que tu utilises comme scripts/events communs et parallèles.
C'est vrai que mon screen n'est pas très beau, mais avec les autres tilesets, le résultat est meilleur.

Scrapi: trebbor s'etonnait de voir certaines méthodes écrites en anglais. C'est plus facile de nommer les méthodes en anglais parce que les mots sont plus précis et courts.

-----------------------
Pour ceux qui ont des problemes: souris bloquée, plantage total... c'est que le script sollicite un peu trop votre CPU, votre ordi en gros.

Je vous propose de regarder cette ligne:

Portion de code : Tout sélectionner

1
2
Win32API.new('kernel32','SetPriorityClass','pi','i').call(
Win32API.new('kernel32','GetCurrentProcess','','i').call,256)



et de changer le 256 en 128.
puis supprimez la si rien ne change.

berka

Twitter: Pensées politiques et juridiques. Réflexions informatiques


natinusala - posté le 28/05/2009 à 17:23:33. (587 messages postés)

Mon avatar est une patate trysophille aux poils de moustache musclés.

Yeeha moi ça marche avec 128 ce script est génial !

Attends je vais chercher un stylo


Hugo121 - posté le 18/06/2009 à 16:17:52. (4 messages postés)

maker alien

:help:ça marche si on fait copier coller?:kirby


Danielinhoni - posté le 28/06/2009 à 12:16:55. (87 messages postés)

Guybrush Threepwood

Il faut que tu copies tout le script (Dans la boite de code), en faisant attention a ne pas te tromper.

Ensuite ouvre les scripts de RMVX en haut à droite, et juste au dessus d'une rubrique apellée "main", tu fait clic droit, "Insérer" et tu colles à droite le script.

Ensuite, tu prend l'image d'en haut, tu l'enregistre dans le dossier "System" sous le nom de "fog.png"

EDIT : Moi ca ne marche pas en ayant tout bien fait ...

My name is Guybrush Threepwood, Mighty Pirate !


Glymby - posté le 01/07/2009 à 22:27:38. (1 messages postés)

Au secours ! La ligne 201 bug, que veut dire La Meche par : "Sauter des lignes" ???


Argann - posté le 20/09/2009 à 12:17:34. (40 messages postés)

C'est halloween tout les jours, et à la toussaint, je fète paques...

Hé bien, à la ligne 201, tu dois avoir :

Portion de code : Tout sélectionner

1
class Scene_Map attr_accessor :spriteset


Il suffit juste de séparer "class Scene_Map" de "attr_accessor :spriteset" en sautant une ligne.
Ca doit donc te donner ça :

Portion de code : Tout sélectionner

1
2
class Scene_Map
attr_accessor :spriteset


Ensuite, tu fais la même chose à la ligne 209 :
Tu remplace :

Portion de code : Tout sélectionner

1
class Scene_File  alias :br_write_save :write_save_data


par :

Portion de code : Tout sélectionner

1
2
class Scene_File
  alias :br_write_save :write_save_data



Ps : Merci pour ce script (bien que je ne m'en servirais pas pour le moment...)XD

La vie est un jeu vachement bien programmé... Ma Galerie, venez-y !. Un problème de Charas ? Venez Là !. Bordel, que c'est bon de torturer ses héros favoris !!


nuparu1997 - posté le 20/09/2009 à 15:51:57. (222 messages postés)

est-il possible qu'envent, en se déplacant, puisse voir dans le brouillard ?


Fpierre - posté le 28/11/2009 à 21:46:51. (3 messages postés)

merci pour ce script très utile qui va améliorer mon labyrinthe créé sous vx:):elusun mais le script cache les textes des persos ou des messages:moinsun comment on fait pour enlever le brouillard dans les maison??


Polarator - posté le 04/12/2009 à 01:27:00. (1 messages postés)

je sais pas si t'a été aider, mais fait juste aller dans le script et va a la ligne 54 pour pouvoir changer la priorité d'affichage du brouillard moi sa marcher (j'ai regarder vite fait) avec 40


--ayoub-- - posté le 15/05/2010 à 13:06:05. (96 messages postés)

C'est moi la meileur

Merci pour le script

78


fromchaos - posté le 25/06/2010 à 11:43:27. (33 messages postés)

Projet Espoir : Apparition dans 15 jours...

ce n'est pas un necropost ; mais en utilisant le brouillard de guerre...j'ouvre le menu...sous le brouillard de guerre(il n'est donc pas visible). Est-ce que cela a un rapport avec la superposition ? j'en doute.
PS : mon menu est modifié (ce c'est qu'une petite fenêtre sur la droite ou la gauche , ça dépend de votre "x" sur l'écran)

EDIT : le problème n'affecte pas le menu par defaut.


patatemolle - posté le 25/08/2010 à 17:50:16. (3 messages postés)

BON... Si quelqu'un accepterait de m'expliquer quelqe chose sur les scripts , ça m'aiderait :-/


baba45 - posté le 26/10/2010 à 17:33:36. (13 messages postés)

pattemolle les scripts servent a modifier des choses dans le jeu comm la taille des perso le brouillard de guerre,... :Dmerci pour le scripts il marche super bien^^!!:)


Dambaru - posté le 02/11/2010 à 17:59:25. (46 messages postés)

Moi j'ai un blem à la ligne 433 :(

Même l'avenir n'est plus ce qu'il était..


roj13 - posté le 20/11/2010 à 19:00:41. (19 messages postés)

sauvez le bambou, mangez un panda

comment faitons pour enlever le brouillard sur certaine map ?:help:help:help

mieux vaut rater un baiser que baiser un rater


simoncanas - posté le 03/09/2011 à 13:11:58. (84 messages postés)

Tu veux un glaçon ?

Moi problème ligne 202:

Portion de code : Tout sélectionner

1
     8.times{|i|@br_tile.bitmaps=@tilemap.bitmaps.clone}

Choisi t'a destiné mais bas toi pour elle si tu ne veux pas la perdre a jamais


Zeus81 - posté le 03/09/2011 à 19:34:41. (11072 messages postés)

Essaie celui là.

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#                        Brouillard de Guerre                    22/05/09   
#-------------------------------------------------------------------------------
#      ver.0.1                  par Berka                      rgss.2         
#                      http://www.rpgmakervx-fr.com                           
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#                Ajoute un brouillard de guerre sur la Carte                  
#-------------------------------------------------------------------------------
#  Commandes:                                                                  
#   Fog.clear_fog(map_id)          # réinitialise le brouillard (tout noir)    
#   vu_par_hero?(x,y)              # vérifie si [x,y] est vu par le héro       
#   $RayonFog = i                  # modifier le champ de vision du héro       
#-------------------------------------------------------------------------------
#  Fonctions:                                                                  
#   * Activation d'interrupteur pour masquer le brouillard                     
#   * Sauvegarde du brouillard de chaque carte                                 
#   * Affichage des bordures de brouillard en parallèle (Thread)               
#  Ne pas utiliser sur de trop grandes cartes, risque de chute de fps !       
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
module Berka
  module Brouillard
    $RayonFog  = 3          # Rayon de vision: calcul optimisé pour 3 & 6
    FichFog    = "fog.png"  # Fichier de tileset brouillard: seule la 1ere pose est utilisée
                            #  doit se trouver dans le dossier systeme de projet
    IDFog      = 1          # Id de l'interrupteur qui désactive/active le brouillard
    ZFog      = 300         # Priorité de superposition du brouillard.          
    Act_GC    = true        # Activation du Ramasse Miettes pour gain de performances
    
                # Ne pas changer !!!!
    Tiles={                # Indexation des autotiles de brouillard
      "0"=>2816,"1"=>2824,"12"=>2844,"123"=>2844,"1234"=>2856,"12346"=>2860,
      "123467"=>2860,"1234678"=>2862,"12346789"=>2862,"1234679"=>2860,"123468"=>2862,
      "1234689"=>2862,"123469"=>2860,"12347"=>2856,"123478"=>2859,"1234789"=>2859,
      "123479"=>2857,"12348"=>2859,"123489"=>2859,"12349"=>2857,"1236"=>2854,
      "12367"=>2855,"123678"=>2861,"123679"=>2855,"1236789"=>2861,"12368"=>2861,
      "123689"=>2861,"12369"=>2854,"1237"=>2845,"12378"=>2849,"123789"=>2849,
      "12379"=>2847,"1238"=>2849,"12389"=>2849,"1239"=>2846,"124"=>2856,"1246"=>2860,
      "12467"=>2860,"124678"=>2862,"1246789"=>2862,"124679"=>2860,"12468"=>2862,
      "124689"=>2862,"12469"=>2860,"1247"=>2856,"12478"=>2859,"124789"=>2859,
      "12479"=>2857,"1248"=>2859,"12489"=>2859,"1249"=>2857,"126"=>2854,"1267"=>2855,
      "12678"=>2861,"126789"=>2861,"12679"=>2855,"1268"=>2861,"12689"=>2861,"1269"=>2854,
      "127"=>2845,"1278"=>2849,"12789"=>2849,"128"=>2849,"1289"=>2849,"129"=>2846,
      "13"=>2828,"134"=>2834,"1346"=>2848,"13467"=>2848,"134678"=>2858,"1346789"=>2858,
      "134679"=>2848,"13468"=>2858,"134689"=>2858,"13469"=>2848,"1347"=>2834,
      "13478"=>2851,"134789"=>2851,"13479"=>2835,"1348"=>2851,"13489"=>2851,
      "1349"=>2835,"136"=>2841,"1367"=>2843,"13678"=>2853,"136789"=>2853,"13679"=>2843,
      "1368"=>2853,"13689"=>2853,"1369"=>2841,"137"=>2829,"1378"=>2839,"13789"=>2839,
      "138"=>2839,"1389"=>2839,"139"=>2830,"14"=>2832,"146"=>2848,"1467"=>2848,
      "14678"=>2858,"146789"=>2858,"14679"=>2848,"1468"=>2862,"14689"=>2858,"1469"=>2848,
      "147"=>2832,"1478"=>2850,"14789"=>2850,"1479"=>2833,"148"=>2850,"1489"=>2850,
      "149"=>2833,"16"=>2841,"167"=>2843,"1678"=>2853,"16789"=>2853,"1679"=>2848,
      "168"=>2853,"1689"=>2853,"169"=>2841,"17"=>2825,"178"=>2838,"1789"=>2838,
      "179"=>2827,"18"=>2838,"189"=>2838,"19"=>2826,"2"=>2844,"23"=>2844,"234"=>2856,
      "2346"=>2860,"23467"=>2860,"234678"=>2862,"2346789"=>2862,"234679"=>2862,
      "23468"=>2862,"234689"=>2862,"23469"=>2860,"2347"=>2856,"23478"=>2859,
      "234789"=>2859,"23479"=>2857,"2348"=>2859,"23489"=>2859,"2348"=>2859,"236"=>2854,
      "2367"=>2855,"23678"=>2861,"236789"=>2861,"23679"=>2855,"2368"=>2861,"23689"=>2861,
      "2369"=>2854,"237"=>2845,"2378"=>2849,"23789"=>2849,"2379"=>2847,"238"=>2849,
      "2389"=>2849,"239"=>2846,"24"=>2856,"246"=>2860,"2467"=>2860,"24678"=>2862,
      "246789"=>2862,"24679"=>2860,"2468"=>2862,"24689"=>2862,"2469"=>2860,"247"=>2856,
      "2478"=>2859,"24789"=>2859,"2479"=>2847,"248"=>2859,"2489"=>2859,"249"=>2857,
      "26"=>2854,"267"=>2854,"2678"=>2861,"26789"=>2861,"2679"=>2855,"268"=>2861,
      "2689"=>2861,"269"=>2854,"27"=>2845,"278"=>2849,"2789"=>2849,"279"=>2847,"28"=>2849,
      "289"=>2849,"29"=>2846,"3"=>2820,"34"=>2834,"346"=>2848,"3467"=>2848,"34678"=>2858,
      "346789"=>2858,"34679"=>2848,"3468"=>2858,"34689"=>2858,"3469"=>2848,"347"=>2834,
      "3478"=>2851,"34789"=>2851,"3479"=>2835,"348"=>2851,"3489"=>2851,"349"=>2835,
      "36"=>2840,"367"=>2842,"3678"=>2852,"36789"=>2852,"3679"=>2842,"368"=>2852,
      "3689"=>2852,"369"=>2840,"37"=>2821,"378"=>2837,"3789"=>2837,"379"=>2823,
      "38"=>2837,"389"=>2837,"39"=>2822,"4"=>2832,"46"=>2848,"467"=>2848,"4678"=>2858,
      "46789"=>2858,"4679"=>2848,"468"=>2858,"4689"=>2858,"469"=>2848,"47"=>2832,
      "478"=>2850,"4789"=>2850,"479"=>2833,"48"=>2850,"489"=>2850,"49"=>2833,
      "6"=>2840,"67"=>2842,"678"=>2852,"6789"=>2852,"679"=>2842,"68"=>2852,
      "689"=>2852,"69"=>2840,"7"=>2817,"78"=>2836,"789"=>2836,"79"=>2819,"8"=>2836,
      "89"=>2836,"9"=>2818  
    } # et tu payes ton mal de crâne, pour trouver chaque valeur ^^
  end
end
module Fog
  def self.clear_fog(id)
    $game_temp.br_maps.delete(id)
    return if !$scene.is_a?(Scene_Map)
    $scene.spriteset.dispose
    $scene.spriteset=Spriteset_Map.new
  end
end
Win32API.new('kernel32','SetPriorityClass','pi','i').call(
Win32API.new('kernel32','GetCurrentProcess','','i').call,256)
include Berka::Brouillard
class Spriteset_Map
  alias :br_create      :create_tilemap
  alias :br_dispose    :dispose_tilemap
  alias :br_view        :dispose_viewports
  alias :br_update      :update_tilemap    unless $@
  alias :br_view_update :update_viewports  unless $@
  attr_accessor :br_tile,:tilemap
  def create_tilemap
    br_create
    @br_tile=Tilemap.new(@br_view=Viewport.new(0,0,Graphics.width,Graphics.height))
    @br_view.z=ZFog
    8.times{|i|@br_tile.bitmaps[i]=@tilemap.bitmaps[i].clone}
    @br_tile.bitmaps[1]=Cache.system(FichFog)
    @br_tile.map_data=Table.new($game_map.width,$game_map.height,3)
    clear_fog
  end
  def clear_fog
    w,h=$game_map.width,$game_map.height
    if $game_temp.br_maps.has_key?($game_map.map_id)
      for x in 0...w;for y in 0...h
        if $game_temp.br_maps[$game_map.map_id][x,y]==0
          @br_tile.map_data[x,y,1]=2816
          a||=true
        else
          @br_tile.map_data[x,y,1]=0
          a||=false
        end
      end;end
      if a
        Thread.new{for x in 0...w;for y in 0...h
          chk(x,y)
        end;end}
      end
    else
      $game_temp.br_maps[$game_map.map_id]||=Table.new(w,h)
      for x in 0...w;for y in 0...h
        @br_tile.map_data[x,y,1]=2816
        $game_temp.br_maps[$game_map.map_id][x,y]=0
      end;end
    end
  end
  def dispose_tilemap
    br_dispose
    @br_tile.dispose
  end
  def dispose_viewports
    br_view
    @br_view.dispose
  end
  def update_tilemap
    br_update
    if $game_switches[IDFog]
      @br_tile.dispose
      return
    end
    GC.start if !$game_player.moving?&&Act_GC
    return if !$game_temp.br_maps.has_key?($game_map.map_id)
    br_obscurcis
    x,y=$game_map.display_x/8,$game_map.display_y/8
    return if x==@br_tile.ox&&y==@br_tile.oy
    @br_tile.ox,@br_tile.oy=x,y
    @br_tile.update
  end
  def br_obscurcis
    x,y=$game_player.x,$game_player.y
    rx,ry=(x-$RayonFog-2..x+$RayonFog+2).to_a,(y-$RayonFog-2..y+$RayonFog+2).to_a
    for tx in rx
      for ty in ry
        r=Math.sqrt(((x-tx)**2+(y-ty)**2))
        chk(tx,ty)if r.between?($RayonFog,$RayonFog+2)
        next if !tx.between?(rx[0],rx[-1])
        if r<=$RayonFog
          @br_tile.map_data[tx,ty,1]=0
          $game_temp.br_maps[$game_map.map_id][tx,ty]=1
        end
      end
    end
  end
  def chk(x,y)
    return if !$game_temp.br_maps.has_key?($game_map.map_id)||x.nil?||y.nil?||
      $game_temp.br_maps[$game_map.map_id][x,y]==1
    d=@br_tile.map_data
    l=[]
    l<<1 if d[x-1,y+1,1]==0
    l<<2 if d[x,y+1,1]==0
    l<<3 if d[x+1,y+1,1]==0
    l<<4 if d[x-1,y,1]==0
    l<<6 if d[x+1,y,1]==0
    l<<9 if d[x+1,y-1,1]==0
    l<<8 if d[x,y-1,1]==0
    l<<7 if d[x-1,y-1,1]==0
    l=l.sort.join
    return if l.nil?||l==""
    @br_tile.map_data[x,y,1]=Tiles[l]
  end
  def update_viewports
    br_view_update
    @br_view.update
  end
end
class Game_Temp
  alias :br_initialize :initialize
  attr_accessor :br_maps
  def initialize
    br_initialize
    @br_maps={}
  end
end
def vu_par_hero?(x,y)
  Math.sqrt((($game_player.x-x)**2+($game_player.y-y)**2))<=$RayonFog
end
class Scene_Map<Scene_Base # correctif: màj spriteset 1/frame
  attr_accessor :spriteset 
  def update_basic
    Graphics.update                
    Input.update              
    $game_map.update            
  end
end
class Scene_File<Scene_Base
  alias :br_write_save :write_save_data
  alias :br_read_save  :read_save_data
  def write_save_data(file)
    br_write_save(file)
    Marshal.dump($game_temp.br_maps,file)
  end
  def read_save_data(file)
    br_read_save(file)
    $game_temp.br_maps=Marshal.load(file)
  end
end


simoncanas - posté le 03/09/2011 à 22:16:31. (84 messages postés)

Tu veux un glaçon ?

Merci!

Choisi t'a destiné mais bas toi pour elle si tu ne veux pas la perdre a jamais


xArK4iz - posté le 05/06/2012 à 10:43:50. (10 messages postés)

Travaille sur un projet RM VX :) .

Ne marche pas pour moi. J'ai essayer toutes les techniques et je me retrouve au lancement du jeu avec une belle erreure :

Script ' ' Line 53 : SyntaxError Occured

WTF ?

EDIIIIT :
Autant pour moi, j'avais placer au mauvais endroit le fog.png trolololol :feu:feu:feu


charlescol 999 - posté le 22/09/2012 à 12:02:36. (2 messages postés)

Bas moi ya pas de brouillard :'(


Skatino - posté le 18/06/2013 à 23:12:04. (53 messages postés)

Vive rpg-maker.fr !

Pas mal du tout ! Très beau travail !

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe

Plan du site:

Activité: Accueil | News | Forum | Flash-news | Chat | Commentaires | Galerie | Screen de la semaine | Sorties | Articles perso | Livre d'or | Recherche
Jeux: Index jeux séparés | Top Classiques | Top Originaux | Les autres | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Jeux complets | Proposer
Rubriques: Le Wiki | Collection Oniro | Tutoriaux | Scripts | Guides | Gaming-Live | Tests | Making-of | Interviews | Articles perso | OST | L'Annuaire | Divers | Palmarès
Hébergés: Aëdemphia | Fighting Robots Quest | Forstale | Geex | Inexistence | La Légende d'Ibabou | Lije | LoveMaster | Sarcia | Super Mario RPG - Lost Souls
Ressources: Jeux | Programmes | Packs de ressources | Midis | Eléments séparés | Sprites
RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis