Font work
This commit is contained in:
4
Rom.py
4
Rom.py
@@ -2446,8 +2446,8 @@ def write_strings(rom, world, player, team):
|
|||||||
|
|
||||||
# inverted spawn menu changes
|
# inverted spawn menu changes
|
||||||
if world.mode[player] == 'inverted':
|
if world.mode[player] == 'inverted':
|
||||||
tt['menu_start_2'] = "{MENU}\n{SPEED0}\n≥@'s house\n Dark Chapel\n{CHOICE3}"
|
tt['menu_start_2'] = "{MENU}\n{SPEED0}\n≥@'s House\n Dark Chapel\n{CHOICE3}"
|
||||||
tt['menu_start_3'] = "{MENU}\n{SPEED0}\n≥@'s house\n Dark Chapel\n Mountain Cave\n{CHOICE2}"
|
tt['menu_start_3'] = "{MENU}\n{SPEED0}\n≥@'s House\n Dark Chapel\n Mountain Cave\n{CHOICE2}"
|
||||||
tt['intro_main'] = CompressedTextMapper.convert(
|
tt['intro_main'] = CompressedTextMapper.convert(
|
||||||
"{INTRO}\n Episode III\n{PAUSE3}\n A Link to\n the Past\n"
|
"{INTRO}\n Episode III\n{PAUSE3}\n A Link to\n the Past\n"
|
||||||
+ "{PAUSE3}\nInverted\n Randomizer\n{PAUSE3}\nAfter mostly disregarding what happened in the first two games.\n"
|
+ "{PAUSE3}\nInverted\n Randomizer\n{PAUSE3}\nAfter mostly disregarding what happened in the first two games.\n"
|
||||||
|
|||||||
32
Text.py
32
Text.py
@@ -627,8 +627,8 @@ class MultiByteCoreTextMapper(object):
|
|||||||
}
|
}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def convert(cls, text, pause=True, wrap=14):
|
def convert(cls, text, pause=True, wrap=19):
|
||||||
text = text.upper()
|
# text = text.upper()
|
||||||
lines = text.split('\n')
|
lines = text.split('\n')
|
||||||
outbuf = bytearray()
|
outbuf = bytearray()
|
||||||
lineindex = 0
|
lineindex = 0
|
||||||
@@ -655,7 +655,8 @@ class MultiByteCoreTextMapper(object):
|
|||||||
pending_space = False
|
pending_space = False
|
||||||
while words:
|
while words:
|
||||||
word = words.pop(0)
|
word = words.pop(0)
|
||||||
# sanity check: if the word we have is more than 14 characters, we take as much as we can still fit and push the rest back for later
|
# sanity check: if the word we have is more than 19 characters,
|
||||||
|
# we take as much as we can still fit and push the rest back for later
|
||||||
if cls.wordlen(word) > wrap:
|
if cls.wordlen(word) > wrap:
|
||||||
(word_first, word_rest) = cls.splitword(word, linespace)
|
(word_first, word_rest) = cls.splitword(word, linespace)
|
||||||
words.insert(0, word_rest)
|
words.insert(0, word_rest)
|
||||||
@@ -736,7 +737,7 @@ class CompressedTextMapper(object):
|
|||||||
}
|
}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def convert(cls, text, pause=True, max_bytes_expanded=0x800, wrap=14):
|
def convert(cls, text, pause=True, max_bytes_expanded=0x800, wrap=19):
|
||||||
inbuf = MultiByteCoreTextMapper.convert(text, pause, wrap)
|
inbuf = MultiByteCoreTextMapper.convert(text, pause, wrap)
|
||||||
|
|
||||||
# Links name will need 8 bytes in the target buffer
|
# Links name will need 8 bytes in the target buffer
|
||||||
@@ -772,20 +773,23 @@ class CompressedTextMapper(object):
|
|||||||
class CharTextMapper(object):
|
class CharTextMapper(object):
|
||||||
number_offset = None
|
number_offset = None
|
||||||
alpha_offset = 0
|
alpha_offset = 0
|
||||||
|
alpha_lower_offset = 0
|
||||||
char_map = {}
|
char_map = {}
|
||||||
@classmethod
|
@classmethod
|
||||||
def map_char(cls, char):
|
def map_char(cls, char):
|
||||||
if cls.number_offset is not None:
|
if cls.number_offset is not None:
|
||||||
if 0x30 <= ord(char) <= 0x39:
|
if 0x30 <= ord(char) <= 0x39:
|
||||||
return ord(char) + cls.number_offset
|
return ord(char) + cls.number_offset
|
||||||
|
if 0x41 <= ord(char) <= 0x5A:
|
||||||
|
return ord(char) + 0x20 + cls.alpha_offset
|
||||||
if 0x61 <= ord(char) <= 0x7A:
|
if 0x61 <= ord(char) <= 0x7A:
|
||||||
return ord(char) + cls.alpha_offset
|
return ord(char) + cls.alpha_lower_offset
|
||||||
return cls.char_map.get(char, cls.char_map[' '])
|
return cls.char_map.get(char, cls.char_map[' '])
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def convert(cls, text):
|
def convert(cls, text):
|
||||||
buf = bytearray()
|
buf = bytearray()
|
||||||
for char in text.lower():
|
for char in text:
|
||||||
buf.append(cls.map_char(char))
|
buf.append(cls.map_char(char))
|
||||||
return buf
|
return buf
|
||||||
|
|
||||||
@@ -1240,6 +1244,7 @@ class RawMBTextMapper(CharTextMapper):
|
|||||||
"月": 0xFE,
|
"月": 0xFE,
|
||||||
"姫": 0xFF}
|
"姫": 0xFF}
|
||||||
alpha_offset = 0x49
|
alpha_offset = 0x49
|
||||||
|
alpha_lower_offset = -0x31
|
||||||
number_offset = 0x70
|
number_offset = 0x70
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@@ -1251,7 +1256,7 @@ class RawMBTextMapper(CharTextMapper):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def convert(cls, text):
|
def convert(cls, text):
|
||||||
buf = bytearray()
|
buf = bytearray()
|
||||||
for char in text.lower():
|
for char in text:
|
||||||
res = cls.map_char(char)
|
res = cls.map_char(char)
|
||||||
if isinstance(res, int):
|
if isinstance(res, int):
|
||||||
buf.extend([0x00, res])
|
buf.extend([0x00, res])
|
||||||
@@ -1267,16 +1272,19 @@ class GoldCreditMapper(CharTextMapper):
|
|||||||
'-': 0x36,
|
'-': 0x36,
|
||||||
'.': 0x37,}
|
'.': 0x37,}
|
||||||
alpha_offset = -0x47
|
alpha_offset = -0x47
|
||||||
|
alpha_lower_offset = -0x47
|
||||||
|
|
||||||
|
|
||||||
class GreenCreditMapper(CharTextMapper):
|
class GreenCreditMapper(CharTextMapper):
|
||||||
char_map = {' ': 0x9F,
|
char_map = {' ': 0x9F,
|
||||||
'·': 0x52}
|
'·': 0x52}
|
||||||
alpha_offset = -0x29
|
alpha_offset = -0x29
|
||||||
|
alpha_lower_offset = -0x29
|
||||||
|
|
||||||
class RedCreditMapper(CharTextMapper):
|
class RedCreditMapper(CharTextMapper):
|
||||||
char_map = {' ': 0x9F}
|
char_map = {' ': 0x9F}
|
||||||
alpha_offset = -0x61
|
alpha_offset = -0x61
|
||||||
|
alpha_lower_offset = -0x61
|
||||||
|
|
||||||
class LargeCreditTopMapper(CharTextMapper):
|
class LargeCreditTopMapper(CharTextMapper):
|
||||||
char_map = {' ': 0x9F,
|
char_map = {' ': 0x9F,
|
||||||
@@ -1296,6 +1304,7 @@ class LargeCreditTopMapper(CharTextMapper):
|
|||||||
'◢': 0xAA,
|
'◢': 0xAA,
|
||||||
'◣': 0xAB,}
|
'◣': 0xAB,}
|
||||||
alpha_offset = -0x04
|
alpha_offset = -0x04
|
||||||
|
alpha_lower_offset = -0x04
|
||||||
number_offset = 0x23
|
number_offset = 0x23
|
||||||
|
|
||||||
|
|
||||||
@@ -1317,6 +1326,7 @@ class LargeCreditBottomMapper(CharTextMapper):
|
|||||||
'◢': 0xCA,
|
'◢': 0xCA,
|
||||||
'◣': 0xCB,}
|
'◣': 0xCB,}
|
||||||
alpha_offset = 0x22
|
alpha_offset = 0x22
|
||||||
|
alpha_lower_offset = 0x22
|
||||||
number_offset = 0x49
|
number_offset = 0x49
|
||||||
|
|
||||||
class TextTable(object):
|
class TextTable(object):
|
||||||
@@ -1955,16 +1965,16 @@ class TextTable(object):
|
|||||||
text['game_chest_lost_woods'] = CompressedTextMapper.convert("Pay 100 rupees open 1 chest. Are you lucky?\nSo, Play game?\n ≥ play\n never!\n{CHOICE}")
|
text['game_chest_lost_woods'] = CompressedTextMapper.convert("Pay 100 rupees open 1 chest. Are you lucky?\nSo, Play game?\n ≥ play\n never!\n{CHOICE}")
|
||||||
text['kakariko_flophouse_man_no_flippers'] = CompressedTextMapper.convert("I really hate mowing my yard.\nI moved my house and everyone else's to avoid it.\n{PAGEBREAK}\nI hope you don't mind.")
|
text['kakariko_flophouse_man_no_flippers'] = CompressedTextMapper.convert("I really hate mowing my yard.\nI moved my house and everyone else's to avoid it.\n{PAGEBREAK}\nI hope you don't mind.")
|
||||||
text['kakariko_flophouse_man'] = CompressedTextMapper.convert("I really hate mowing my yard.\nI moved my house and everyone else's to avoid it.\n{PAGEBREAK}\nI hope you don't mind.")
|
text['kakariko_flophouse_man'] = CompressedTextMapper.convert("I really hate mowing my yard.\nI moved my house and everyone else's to avoid it.\n{PAGEBREAK}\nI hope you don't mind.")
|
||||||
text['menu_start_2'] = CompressedTextMapper.convert("{MENU}\n{SPEED0}\n≥@'s house\n Sanctuary\n{CHOICE3}", False)
|
text['menu_start_2'] = CompressedTextMapper.convert("{MENU}\n{SPEED0}\n≥@'s House\n Sanctuary\n{CHOICE3}", False)
|
||||||
text['menu_start_3'] = CompressedTextMapper.convert("{MENU}\n{SPEED0}\n≥@'s house\n Sanctuary\n Mountain Cave\n{CHOICE2}", False)
|
text['menu_start_3'] = CompressedTextMapper.convert("{MENU}\n{SPEED0}\n≥@'s House\n Sanctuary\n Mountain Cave\n{CHOICE2}", False)
|
||||||
text['menu_pause'] = CompressedTextMapper.convert("{SPEED0}\n≥continue\n save and quit\n{CHOICE3}", False)
|
text['menu_pause'] = CompressedTextMapper.convert("{SPEED0}\n≥Continue\n Save and Quit\n{CHOICE3}", False)
|
||||||
text['game_digging_choice'] = CompressedTextMapper.convert("Have 80 Rupees? Want to play digging game?\n ≥yes\n no\n{CHOICE}")
|
text['game_digging_choice'] = CompressedTextMapper.convert("Have 80 Rupees? Want to play digging game?\n ≥yes\n no\n{CHOICE}")
|
||||||
text['game_digging_start'] = CompressedTextMapper.convert("Okay, use the shovel with Y!")
|
text['game_digging_start'] = CompressedTextMapper.convert("Okay, use the shovel with Y!")
|
||||||
text['game_digging_no_cash'] = CompressedTextMapper.convert("Shovel rental is 80 rupees.\nI have all day")
|
text['game_digging_no_cash'] = CompressedTextMapper.convert("Shovel rental is 80 rupees.\nI have all day")
|
||||||
text['game_digging_end_time'] = CompressedTextMapper.convert("Time's up!\nTime for you to go.")
|
text['game_digging_end_time'] = CompressedTextMapper.convert("Time's up!\nTime for you to go.")
|
||||||
text['game_digging_come_back_later'] = CompressedTextMapper.convert("Come back later, I have to bury things.")
|
text['game_digging_come_back_later'] = CompressedTextMapper.convert("Come back later, I have to bury things.")
|
||||||
text['game_digging_no_follower'] = CompressedTextMapper.convert("Something is following you. I don't like.")
|
text['game_digging_no_follower'] = CompressedTextMapper.convert("Something is following you. I don't like.")
|
||||||
text['menu_start_4'] = CompressedTextMapper.convert("{MENU}\n{SPEED0}\n≥@'s house\n Mountain Cave\n{CHOICE3}", False)
|
text['menu_start_4'] = CompressedTextMapper.convert("{MENU}\n{SPEED0}\n≥@'s House\n Mountain Cave\n{CHOICE3}", False)
|
||||||
# Start of new text data
|
# Start of new text data
|
||||||
text['ganon_fall_in_alt'] = CompressedTextMapper.convert("You think you\nare ready to\nface me?\n\nI will not die\n\nunless you\ncomplete your\ngoals. Dingus!")
|
text['ganon_fall_in_alt'] = CompressedTextMapper.convert("You think you\nare ready to\nface me?\n\nI will not die\n\nunless you\ncomplete your\ngoals. Dingus!")
|
||||||
text['ganon_phase_3_alt'] = CompressedTextMapper.convert("Got wax in\nyour ears?\nI cannot die!")
|
text['ganon_phase_3_alt'] = CompressedTextMapper.convert("Got wax in\nyour ears?\nI cannot die!")
|
||||||
|
|||||||
Reference in New Issue
Block a user