Add portraits + small improvements
This commit is contained in:
parent
0a0f87f543
commit
692db46f7a
49
LIBSCII.py
49
LIBSCII.py
|
@ -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
|
||||
#---
|
||||
|
|
16
SCIITEST.py
16
SCIITEST.py
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue