Add portraits + small improvements

This commit is contained in:
mibi88 2023-01-07 20:05:11 +01:00
parent 0a0f87f543
commit 692db46f7a
2 changed files with 48 additions and 17 deletions

View File

@ -25,8 +25,8 @@ BLOCKS = 2
STICKYBLOCKS = 3
class Scii:
def __init__(self, world, player, on_npc_collision, scii_keys = None, get_input_text = None, no_collision = None, collision_checker = None,
message_history_max = None, screen_width = 21, screen_height = 7):
def __init__(self, world, player, on_npc_collision, scii_keys = {"left": '4', "right": '6', "up": '8', "down": '2', "quit": 'q', "old_messages": '0'}, get_input_text = None,
no_collision = " ^", collision_checker = None, message_history_max = 20, screen_width = 21, screen_height = 7, portrait_width = 7):
self.world = world
self.player = player
self.map_num = world["map_num"]
@ -37,20 +37,18 @@ class Scii:
self.screen_size = self.screen_width*self.screen_height
self._vram = [' ' for i in range(self.screen_size)]
self.on_char_handlers = {}
if scii_keys: self.scii_keys = scii_keys
else: self.scii_keys = {"left": '4', "right": '6', "up": '8', "down": '2', "quit": 'q', "old_messages": '0'}
self.scii_keys = scii_keys
if get_input_text: self.get_input_text = get_input_text
else: self.get_input_text = self._default_intext
if collision_checker: self.collision_checker = collision_checker
else: self.collision_checker = self._default_collision_check
self.last_key = ""
if not message_history_max: self.message_history_max = 20
else: self.message_history_max = message_history_max
self.message_history_max = message_history_max
self.old_messages = []
self.on_npc_collision = on_npc_collision
if no_collision: self.no_collision = no_collision
else: self.no_collision = " ^"
self.no_collision = no_collision
self.collision_npc = None
self.portrait_width = portrait_width
def _default_collision_check(self, world, player, x, y):
collision = 0
for i in self.world["maps"][self.map_num]["layers"]:
@ -189,8 +187,9 @@ class Scii:
if layerc == self.player["layer"] and show_player: self._setc(px, py, self.player["playerc"])
layerc += 1
self._dvram()
def show_text(self, text):
dwidth = self.screen_width - 2
def show_text(self, text, portrait = None):
if portrait: dwidth = self.screen_width - (2 + self.portrait_width)
else: dwidth = self.screen_width - 2
self._cvram()
dtext = ""
sz = 0
@ -223,6 +222,7 @@ class Scii:
y += 1
x = 0
if y >= self.screen_height:
if portrait: self._draw_portrait(portrait)
self._setc(self.screen_width - 1, self.screen_y_middle, '>')
self._dvram()
intxt = input("Continue > ")
@ -234,12 +234,31 @@ class Scii:
msg = ""
self._cvram()
else:
self._setc(x, y, i)
if portrait: self._setc(8 + x, y, i)
else: self._setc(x, y, i)
x += 1
msg += i
if portrait: self._draw_portrait(portrait)
self._dvram()
if msg != "": self._add_message(msg)
input("End of the text > ")
def _draw_portrait(self, portrait):
for i in range(self.screen_height):
self._setc(1, i, '|')
self._setc(self.portrait_width, i, '|')
for i in range(self.portrait_width):
self._setc(1 + i, self.screen_height - 1, '-')
self._setc(1 + i, 0, '-')
self._setc(1, self.screen_height - 1, '+')
self._setc(self.portrait_width, self.screen_height - 1, '+')
self._setc(1, 0, '+')
self._setc(self.portrait_width, 0, '+')
portrait_data = portrait.split('\n')
while("" in portrait_data): portrait_data.remove("")
for y in range(1, self.screen_height - 1):
for x in range(2, self.portrait_width):
try: self._setc(x, y, portrait_data[y - 1][x - 2])
except: pass
def _add_message(self, message):
self.old_messages.append(message)
while(len(self.old_messages) > self.message_history_max): del self.old_messages[0]
@ -256,6 +275,8 @@ class Scii:
for i in [i for i in self.old_messages[::-1]]:
self.show_text(i)
c -= 1
self._cvram()
self._dvram()
if c < 1: input("Go back > ")
else: intxt = input("Next message > ")
if len(intxt) > 0:
@ -263,14 +284,16 @@ class Scii:
def ask_choice(self, text, choices):
choice = 0
while choice < 1 or choice > len(choices):
newtext = text + "\n\n"
newtext = text + "\n"
c = 1
for i in choices:
newtext += "{} - {}\n".format(c, i)
if c < len(choices): newtext += "{}:{}\n".format(c, i)
else: newtext += "{}:{}".format(c, i)
c += 1
self.show_text(newtext)
try:
choice = int(input("Choice > "))
except: choice = -1
self._add_message("You selected choice {}:{}".format(choice, choices[choice - 1]))
return choice
#---

View File

@ -12,16 +12,24 @@ map0 = """
########################################################
"""
portrait = """
___
/\\/\\\\
\\. ./
/ \\
"""
def npc_collision(self, npc):
global portrait
if npc["name"] == "lephenixnoir":
self.show_text("""C'est moi, Lephe',
Je suis aussi dans le jeu !""")
Je suis aussi dans le jeu !""", portrait)
if npc["name"] == "massena":
txt = self.ask_choice("""T'as besoin d'aide pour des pixel arts ?""", ["Oui", "Non"])
txt = self.ask_choice("T'as besoin d'aide pour des pixel arts ?", ["Oui", "Non"])
if txt == 1:
self.show_text("""Merci !""")
self.show_text("Merci !")
else:
self.show_text("""Dommage""")
self.show_text("Dommage")
world = {
"dmode": STICKY,