Domaine concerné: Script Logiciel utilisé: RPGVX Salut,
Je suis en train de me casser la tête depuis quelques heures
Dans mon RPG j'ai un item "bateau" qui peut apparaitre dès qu'on s'approche de l'eau. Le problème c'est que les passabilités du bateau permettent aussi au bateau d'aller sur la lave, et donc quand je suis dans un donjon, une ville ou une route avec de la lave, le joueur peut décider de prendre son bateau en bois et traverser la lave...
J'ai une piste : Dans Game_Map il y a ce petit bout de code qui s'occupe des passabilités :
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
| #--------------------------------------------------------------------------
# * Determine if Passable
# x : x coordinate
# y : y coordinate
# flag : The impassable bit to be looked up
# (normally 0x01, only changed for vehicles)
#--------------------------------------------------------------------------
def passable?(x, y, flag = 0x01)
for event in events_xy(x, y) # events with matching coordinates
next if event.tile_id == 0 # graphics are not tiled
next if event.priority_type > 0 # not [Below characters]
next if event.through # pass-through state
pass = @passages[event.tile_id] # get passable attribute
next if pass & 0x10 == 0x10 # *: Does not affect passage
return true if pass & flag == 0x00 # o: Passable
return false if pass & flag == flag # x: Impassable
end
for i in [2, 1, 0] # in order from on top of layer
tile_id = @map.data[x, y, i] # get tile ID
return false if tile_id == nil # failed to get tile: Impassable
pass = @passages[tile_id] # get passable attribute
next if pass & 0x10 == 0x10 # *: Does not affect passage
return true if pass & flag == 0x00 # o: Passable
return false if pass & flag == flag # x: Impassable
end
return false # Impassable
end
#--------------------------------------------------------------------------
# * Determine if Boat is Passable
# x : x-coordinate
# y : y-coordinate
#--------------------------------------------------------------------------
def boat_passable?(x, y)
return passable?(x, y, 0x02)
end |
En gros, la fonction passable? avec une valeur de 0x02 pour le flag définit donc les passabilités pour le bateau
Et c'est là que ma piste s'arrête, je sais pas comment bidouiller le code pour que le bateau puisse aller sur tout l'eau qu'il veut mais pas la lave...
La méthode bourrin consisterait à récupérer le tile_id de la lave et de faire un return false si ça correspond, mais je ne connais pas le tile_id de la lave et je ne sais pas comment l'obtenir
Quelqu'un aurait une idée ?
|