Bienvenue visiteur !
|
Statistiques
Liste des membres
Contact
Mentions légales
368 connectés actuellement
30729740 visiteurs depuis l'ouverture
3357 visiteurs aujourd'hui
Partenaires
Tous nos partenaires
Devenir partenaire
|
❤ 0 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.
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.
Ressources
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"
Et d'autres tilesets, toujours par Jess :
[spoiler]
Et le script qui doit etre placé au dessus de main:
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
# https://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 |
Notes
28/05/2009 :
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:
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.
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:
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 (12689 messages postés)
| En ligne | Merci pour cette contribution.
|
Les ramens, c'est délicieux. |
natinusala -
posté le 25/05/2009 à 18:20:14 (586 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 (586 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 (586 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:
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 (586 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 | :ça marche si on fait copier coller?
|
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 :
1
| class Scene_Map attr_accessor :spriteset |
Il suffit juste de séparer "class Scene_Map" de "attr_accessor priteset" en sautant une ligne.
Ca doit donc te donner ça :
1
2
| class Scene_Map
attr_accessor :spriteset |
Ensuite, tu fais la même chose à la ligne 209 :
Tu remplace :
1
| class Scene_File alias :br_write_save :write_save_data |
par :
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...)
|
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 mais le script cache les textes des persos ou des messages 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,... merci 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 ?
|
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:
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 (11071 messages postés)
| | Essaie celui là.
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
|
| | 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 !
| |
|
|