Added map animations
This commit is contained in:
parent
12ed26362c
commit
2702a61839
45
DOCS_fr.md
45
DOCS_fr.md
|
@ -48,6 +48,25 @@ map0 = """
|
|||
########################################################
|
||||
"""
|
||||
|
||||
animations = {
|
||||
"replace_animations": {
|
||||
'-': {
|
||||
"frames": ['=', '-'],
|
||||
"animation_frame": 0
|
||||
},
|
||||
'=': {
|
||||
"frames": ['-', '='],
|
||||
"animation_frame": 0
|
||||
}
|
||||
},
|
||||
"coords_animations": {
|
||||
"4, 4": {
|
||||
"frames": ['^', ' '],
|
||||
"animation_frame": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
world = {
|
||||
"dmode": STICKY,
|
||||
"map_num": 0,
|
||||
|
@ -56,7 +75,8 @@ world = {
|
|||
"layers": [
|
||||
{
|
||||
"data": map0,
|
||||
"transp_char": None
|
||||
"transp_char": None,
|
||||
"animations": animations
|
||||
}
|
||||
],
|
||||
"jumps": [
|
||||
|
@ -105,18 +125,25 @@ world = {
|
|||
* `STICKYBLOCKS` : La carte s'affiche comme dans `BLOCKS`, mais elle remplit toujours l'écran.
|
||||
* `map_num` : Le numéro de la carte sur laquelle on va démarrer le jeu.
|
||||
* `maps` : Une liste de plusieurs cartes, chacune constituée de :
|
||||
* `layers` : les différentes couches qui contituent les maps. Ces layers sont dessinés du premier au dernier.
|
||||
* `layers` : les différentes couches qui constituent les maps. Ces layers sont dessinés du premier au dernier.
|
||||
* `data` : Une string qui contient le layer (`map0` dans l'exemple).
|
||||
* `transp_char` : Le caractère qui ne sera pas affiché : permet de voir le layer d'en dessous. Si il est à `None`, aucun caractère ne sera enlevé.
|
||||
* `animations` (**Optionnel**) : Dictionnaire qui permet d'ajouter des animations à la map constitué de :
|
||||
* `replace_animations` : Dictionnaire pour les animations où un caractère est remplacé par un autre sur toute la map. Pour chaque caractère qui doit être animé, il faut y ajouter un autre dictionnaire où le nom est le caractère qui doit être animé. Ces dictionnaires sont constitués de :
|
||||
* `frames` : Liste qui contient les différent caractères qui constituent l'animation.
|
||||
* `animation_frame` : Quel caractère de l'animation va être affiché. C'est une position dans `frames`.
|
||||
* `coords_animations` : Dictionnaire pour les animations où un caractère est remplacé par un autre uniquement à une position bien précise. Pour chaque position qui doit être animée, il faut y ajouter un autre dictionnaire où le nom est `"x, y"` où x doit être remplacé par l'abscisse et y par l'ordonnée du caractère qui doit être animé. Ces dictionnaires sont constitués de :
|
||||
* `frames` : Liste qui contient les différent caractères qui constituent l'animation.
|
||||
* `animation_frame` : Quel caractère de l'animation va être affiché. C'est une position dans `frames`.
|
||||
* `jumps` : Liste des endroits où le joueur peut sauter d'une map à l'autre et/ou d'une position à l'autre. Cette liste est constituée de dictionnaires constituées de :
|
||||
* `x` et `y` : La position de départ.
|
||||
* `to_x` et `to_y` : La position de d'arrivée.
|
||||
* `to_map` : La map de l'arrivée.
|
||||
* `isactive` : Bolléen : est ce que ce jump peut téléporter le joueur ?
|
||||
* `isactive` : Booléen : est ce que ce jump peut téléporter le joueur ?
|
||||
* `npc` : Liste des pnj qui sont des dictionnaires constituée de :
|
||||
* `x` et `y` : Leur position sur la map.
|
||||
* `isvisible` : est ce qu'ils sont visibles.
|
||||
* `collision_check` : Bolléen : est ce qu'on peut entrer en collision avec eux.
|
||||
* `collision_check` : Booléen : est ce qu'on peut entrer en collision avec eux.
|
||||
* `layer` : Au dessus de quel layer ils s'affichent.
|
||||
* `map` : Sur quelle map ils sont.
|
||||
* `char` : Quel caractère est utilisé pour les afficher.
|
||||
|
@ -141,7 +168,7 @@ player = {
|
|||
|
||||
* `x` et `y` : Sa position sur la map.
|
||||
* `isvisible` : est ce qu'il est visible.
|
||||
* `collision_check` : Bolléen : est ce qu'il est stoppé par les objets durs et les pnj.
|
||||
* `collision_check` : Booléen : est ce qu'il est stoppé par les objets durs et les pnj.
|
||||
* `layer` : Au dessus de quel layer ils s'affiche.
|
||||
|
||||
La map sur laquelle il est est déjà définie dans `map_num` de `world`.
|
||||
|
@ -151,19 +178,19 @@ La map sur laquelle il est est déjà définie dans `map_num` de `world`.
|
|||
`self` est la classe `Scii`.
|
||||
|
||||
* `mainloop(self)` : Lance la boucle du jeu.
|
||||
* Déjà uilisés dans mainloop :
|
||||
* Déjà utilisés dans mainloop :
|
||||
* `get_map_width(self, map_data)` : Retourne la largeur de la map.
|
||||
* `map_data` : dictionnaire de la map comme il est dans `world["maps"]`
|
||||
* `get_map_height(self, map_data)` : Retourne la hauteur de la map.
|
||||
* `map_data` : dictionnaire de la map comme il est dans `world["maps"]`
|
||||
* `draw_map(self, mode, show_player)`
|
||||
* `mode` : Mode de dessin de la map (`STICKY`, `CENTERED`, `BLOCKS` ou `STICKYBLOCKS`)
|
||||
* `show_player` : Bolléen : est ce que le joueur doit être affiché.
|
||||
* `show_player` : Booléen : est ce que le joueur doit être affiché.
|
||||
* `def show_text(self, text)` : Affiche du texte. L'historique du texte affiché est disponible en appuyant sur `scii_keys["old_messages"]` ou en appelant `show_old_messages(self)`.
|
||||
* `text` : Texte à afficher.
|
||||
* `portrait` (**Optionnel**) : Affiche un portrait à côté du texte.
|
||||
* `show_old_messages(self)` : Affiche les anciennes conversations.
|
||||
* `ask_choice(self, text, choices)` : Demande à l'utilisateur de faire un choix parmi les choix proposés dans `choices`. Retourne le choix fait. Le premier choix est le numéro 1, et les prochains sont à chaque fois de 1 plus grands : dans `["Oui", "Non", "Je ne sais pas"]` "Oui" est le choix numéro 1, "Non" est le choix numéro 2 et "Je ne sais pas" est le choix numéro 3.
|
||||
* `text` : Texte à afficher avant de demander à l'utilisateur quel proposition il fait. Les choix seront affichés en dessous.
|
||||
* `choices` : Liste de chaines de caractères des choix que l'utilisateur.
|
||||
* `portrait` (**Optionnel**) : Affiche un portrait à côté du texte.
|
||||
* `choices` : Liste de chaînes de caractères des choix que l'utilisateur.
|
||||
* `portrait` (**Optionnel**) : Affiche un portrait à côté du texte.
|
||||
|
|
20
LIBSCII.py
20
LIBSCII.py
|
@ -173,11 +173,22 @@ class Scii:
|
|||
while("" in data): data.remove("")
|
||||
map_width = self.get_map_width(map_data)
|
||||
map_height = self.get_map_height(map_data)
|
||||
if "animations" in i:
|
||||
animations = 1
|
||||
replace_animations = i["animations"]["replace_animations"]
|
||||
coords_animations = i["animations"]["coords_animations"]
|
||||
else:
|
||||
animations = 0
|
||||
for y in range(self.screen_height):
|
||||
for x in range(self.screen_width):
|
||||
try:
|
||||
if sx+x >= 0 and sx+x < map_width and sy+y >= 0 and sy+y < map_height:
|
||||
c = data[sy+y][sx+x]
|
||||
if animations:
|
||||
if c in replace_animations:
|
||||
c = replace_animations[c]["frames"][replace_animations[c]["animation_frame"]]
|
||||
if "{}, {}".format(sx+x, sy+y) in coords_animations:
|
||||
c = coords_animations["{}, {}".format(sx+x, sy+y)]["frames"][coords_animations["{}, {}".format(sx+x, sy+y)]["animation_frame"]]
|
||||
if c != i["transp_char"]:
|
||||
self._setc(x, y, c)
|
||||
except: pass
|
||||
|
@ -185,6 +196,15 @@ class Scii:
|
|||
if npc["layer"] == layerc and npc["map"] == self.map_num and npc["isvisible"]:
|
||||
self._setc(px + (npc["x"] - osx), py + (npc["y"] - osy), npc["char"])
|
||||
if layerc == self.player["layer"] and show_player: self._setc(px, py, self.player["playerc"])
|
||||
if animations:
|
||||
for key in i["animations"]["replace_animations"]:
|
||||
i["animations"]["replace_animations"][key]["animation_frame"] += 1
|
||||
if i["animations"]["replace_animations"][key]["animation_frame"] >= len(i["animations"]["replace_animations"][key]["frames"]):
|
||||
i["animations"]["replace_animations"][key]["animation_frame"] = 0
|
||||
for key in i["animations"]["coords_animations"]:
|
||||
i["animations"]["coords_animations"][key]["animation_frame"] += 1
|
||||
if i["animations"]["coords_animations"][key]["animation_frame"] >= len(i["animations"]["coords_animations"][key]["frames"]):
|
||||
i["animations"]["coords_animations"][key]["animation_frame"] = 0
|
||||
layerc += 1
|
||||
self._dvram()
|
||||
def show_text(self, text, portrait = None):
|
||||
|
|
22
SCIITEST.py
22
SCIITEST.py
|
@ -19,6 +19,25 @@ portrait = """
|
|||
/ \\
|
||||
"""
|
||||
|
||||
animations = {
|
||||
"replace_animations": {
|
||||
'-': {
|
||||
"frames": ['=', '-'],
|
||||
"animation_frame": 0
|
||||
},
|
||||
'=': {
|
||||
"frames": ['-', '='],
|
||||
"animation_frame": 0
|
||||
}
|
||||
},
|
||||
"coords_animations": {
|
||||
"4, 4": {
|
||||
"frames": ['^', ' '],
|
||||
"animation_frame": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def npc_collision(self, npc):
|
||||
global portrait
|
||||
if npc["name"] == "lephenixnoir":
|
||||
|
@ -39,7 +58,8 @@ world = {
|
|||
"layers": [
|
||||
{
|
||||
"data": map0,
|
||||
"transp_char": None
|
||||
"transp_char": None,
|
||||
"animations": animations
|
||||
}
|
||||
],
|
||||
"jumps": [
|
||||
|
|
Loading…
Reference in New Issue