CV64: Fix some textbox message truncation issues #4157
This commit is contained in:
parent
8f60a4a259
commit
c9e63a836a
|
@ -66,8 +66,9 @@ class Castlevania64Client(BizHawkClient):
|
||||||
self.received_deathlinks += 1
|
self.received_deathlinks += 1
|
||||||
if "cause" in args["data"]:
|
if "cause" in args["data"]:
|
||||||
cause = args["data"]["cause"]
|
cause = args["data"]["cause"]
|
||||||
if len(cause) > 88:
|
# Truncate the death cause message at 120 characters.
|
||||||
cause = cause[0x00:0x89]
|
if len(cause) > 120:
|
||||||
|
cause = cause[0:120]
|
||||||
else:
|
else:
|
||||||
cause = f"{args['data']['source']} killed you!"
|
cause = f"{args['data']['source']} killed you!"
|
||||||
self.death_causes.append(cause)
|
self.death_causes.append(cause)
|
||||||
|
@ -146,8 +147,18 @@ class Castlevania64Client(BizHawkClient):
|
||||||
text_color = bytearray([0xA2, 0x0B])
|
text_color = bytearray([0xA2, 0x0B])
|
||||||
else:
|
else:
|
||||||
text_color = bytearray([0xA2, 0x02])
|
text_color = bytearray([0xA2, 0x02])
|
||||||
|
|
||||||
|
# Get the item's player's name. If it's longer than 40 characters, truncate it at 40.
|
||||||
|
# 35 should be the max number of characters in a server player name right now (16 for the original
|
||||||
|
# name + 16 for the alias + 3 for the added parenthesis and space), but if it ever goes higher it
|
||||||
|
# should be future-proofed now. No need to truncate CV64 items names because its longest item name
|
||||||
|
# gets nowhere near the limit.
|
||||||
|
player_name = ctx.player_names[next_item.player]
|
||||||
|
if len(player_name) > 40:
|
||||||
|
player_name = player_name[0:40]
|
||||||
|
|
||||||
received_text, num_lines = cv64_text_wrap(f"{ctx.item_names.lookup_in_game(next_item.item)}\n"
|
received_text, num_lines = cv64_text_wrap(f"{ctx.item_names.lookup_in_game(next_item.item)}\n"
|
||||||
f"from {ctx.player_names[next_item.player]}", 96)
|
f"from {player_name}", 96)
|
||||||
await bizhawk.guarded_write(ctx.bizhawk_ctx,
|
await bizhawk.guarded_write(ctx.bizhawk_ctx,
|
||||||
[(0x389BE1, [next_item.item & 0xFF], "RDRAM"),
|
[(0x389BE1, [next_item.item & 0xFF], "RDRAM"),
|
||||||
(0x18C0A8, text_color + cv64_string_to_bytearray(received_text, False),
|
(0x18C0A8, text_color + cv64_string_to_bytearray(received_text, False),
|
||||||
|
|
|
@ -944,13 +944,19 @@ def write_patch(world: "CV64World", patch: CV64ProcedurePatch, offset_data: Dict
|
||||||
for loc in active_locations:
|
for loc in active_locations:
|
||||||
if loc.address is None or get_location_info(loc.name, "type") == "shop" or loc.item.player == world.player:
|
if loc.address is None or get_location_info(loc.name, "type") == "shop" or loc.item.player == world.player:
|
||||||
continue
|
continue
|
||||||
if len(loc.item.name) > 67:
|
# If the Item's name is longer than 104 characters, truncate the name to inject at 104.
|
||||||
item_name = loc.item.name[0x00:0x68]
|
if len(loc.item.name) > 104:
|
||||||
|
item_name = loc.item.name[0:104]
|
||||||
else:
|
else:
|
||||||
item_name = loc.item.name
|
item_name = loc.item.name
|
||||||
|
# Get the item's player's name. If it's longer than 16 characters (which can happen if it's an ItemLinked item),
|
||||||
|
# truncate it at 16.
|
||||||
|
player_name = world.multiworld.get_player_name(loc.item.player)
|
||||||
|
if len(player_name) > 16:
|
||||||
|
player_name = player_name[0:16]
|
||||||
|
|
||||||
inject_address = 0xBB7164 + (256 * (loc.address & 0xFFF))
|
inject_address = 0xBB7164 + (256 * (loc.address & 0xFFF))
|
||||||
wrapped_name, num_lines = cv64_text_wrap(item_name + "\nfor " +
|
wrapped_name, num_lines = cv64_text_wrap(item_name + "\nfor " + player_name, 96)
|
||||||
world.multiworld.get_player_name(loc.item.player), 96)
|
|
||||||
patch.write_token(APTokenTypes.WRITE, inject_address, bytes(get_item_text_color(loc) +
|
patch.write_token(APTokenTypes.WRITE, inject_address, bytes(get_item_text_color(loc) +
|
||||||
cv64_string_to_bytearray(wrapped_name)))
|
cv64_string_to_bytearray(wrapped_name)))
|
||||||
patch.write_token(APTokenTypes.WRITE, inject_address + 255, bytes([num_lines]))
|
patch.write_token(APTokenTypes.WRITE, inject_address + 255, bytes([num_lines]))
|
||||||
|
|
Loading…
Reference in New Issue