Fix bytestring slices for compatibility

In Python 2, b'asdf'[0] returns b'a', but in Python 3, it returns 97, which is
the result of ord(b'a'). In other words, there are a lot of ord() calls that
are now unnecessary for Python 3 but still necessary for Python 2.

This can be resolved by using b'asdf'[0:1], which returns b'a' in both versions.
This commit is contained in:
Zack Marvel 2014-04-28 18:42:51 -04:00
parent c70144ddb8
commit 4828593919

View File

@ -4,8 +4,6 @@
import json import json
import os import os
from __future__ import print_function
#parse hex values as base 16 (see calculate_pointer) #parse hex values as base 16 (see calculate_pointer)
base = 16 base = 16
@ -339,7 +337,7 @@ def get_nth_map_header_pointer_bank_byte(map_id):
assert_rom() assert_rom()
address = get_nth_map_header_pointer_bank_byte_address(map_id) address = get_nth_map_header_pointer_bank_byte_address(map_id)
bank_byte = ord(rom[address]) bank_byte = ord(rom[address:address+1])
return bank_byte return bank_byte
def get_nth_map_header_pointer(map_id): def get_nth_map_header_pointer(map_id):
@ -351,8 +349,8 @@ def get_nth_map_header_pointer(map_id):
byte2_address = start_map_header_pointers + (map_id * 2) + 1 byte2_address = start_map_header_pointers + (map_id * 2) + 1
#grab the two bytes making up the partial pointer #grab the two bytes making up the partial pointer
byte1 = ord(rom[byte1_address]) byte1 = ord(rom[byte1_address:byte1_address+1])
byte2 = ord(rom[byte2_address]) byte2 = ord(rom[byte2_address:byte2_address+1])
#swap the bytes (16-bit pointers for z80 are little endian) #swap the bytes (16-bit pointers for z80 are little endian)
temp = byte1 temp = byte1
@ -391,26 +389,26 @@ def load_map_pointers():
#print json.dumps(map_pointers) #print json.dumps(map_pointers)
def read_connection_bytes(connection_bytes, bank): def read_connection_bytes(connection_bytes, bank):
map_id = ord(connection_bytes[0]) map_id = ord(connection_bytes[0:1])
#connection strip #connection strip
connected_map_tile_pointer_byte1 = ord(connection_bytes[1]) connected_map_tile_pointer_byte1 = ord(connection_bytes[1:2])
connected_map_tile_pointer_byte2 = ord(connection_bytes[2]) connected_map_tile_pointer_byte2 = ord(connection_bytes[2:3])
connected_map_tile_pointer = (connected_map_tile_pointer_byte1 + (connected_map_tile_pointer_byte2 << 8)) connected_map_tile_pointer = (connected_map_tile_pointer_byte1 + (connected_map_tile_pointer_byte2 << 8))
#connection strip #connection strip
current_map_tile_pointer_byte1 = ord(connection_bytes[3]) current_map_tile_pointer_byte1 = ord(connection_bytes[3:4])
current_map_tile_pointer_byte2 = ord(connection_bytes[4]) current_map_tile_pointer_byte2 = ord(connection_bytes[4:5])
current_map_tile_pointer = (current_map_tile_pointer_byte1 + (current_map_tile_pointer_byte2 << 8)) current_map_tile_pointer = (current_map_tile_pointer_byte1 + (current_map_tile_pointer_byte2 << 8))
bigness_byte = ord(connection_bytes[5]) bigness_byte = ord(connection_bytes[5:6])
width_byte = ord(connection_bytes[6]) width_byte = ord(connection_bytes[6:7])
y = ord(connection_bytes[7]) y = ord(connection_bytes[7:8])
x = ord(connection_bytes[8]) x = ord(connection_bytes[8:9])
#window #window
window_pointer_byte1 = ord(connection_bytes[9]) window_pointer_byte1 = ord(connection_bytes[9:10])
window_pointer_byte2 = ord(connection_bytes[10]) window_pointer_byte2 = ord(connection_bytes[10:11])
window_pointer = (window_pointer_byte1 + (window_pointer_byte2 << 8)) window_pointer = (window_pointer_byte1 + (window_pointer_byte2 << 8))
connection_data = { connection_data = {
@ -431,10 +429,10 @@ def read_warp_data(address, warp_count):
offset = address + (warp_id*4) #4 bytes per warp offset = address + (warp_id*4) #4 bytes per warp
warp = {} warp = {}
warp["y"] = ord(rom[offset]) warp["y"] = ord(rom[offset:offset+1])
warp["x"] = ord(rom[offset+1]) warp["x"] = ord(rom[offset+1:offset+2])
warp["warp_to_point"] = ord(rom[offset+2]) warp["warp_to_point"] = ord(rom[offset+2:offset+3])
warp["warp_to_map_id"] = ord(rom[offset+3]) warp["warp_to_map_id"] = ord(rom[offset+3:offset+4])
warps[warp_id] = warp warps[warp_id] = warp
return warps return warps
@ -444,9 +442,9 @@ def read_sign_data(address, sign_count):
for sign_id in range(0, sign_count): for sign_id in range(0, sign_count):
offset = address + (sign_id * 3) offset = address + (sign_id * 3)
sign = {} sign = {}
sign["y"] = ord(rom[offset]) sign["y"] = ord(rom[offset:offset+1])
sign["x"] = ord(rom[offset+1]) sign["x"] = ord(rom[offset+1:offset+2])
sign["text_id"] = ord(rom[offset+2]) sign["text_id"] = ord(rom[offset+2:offset+3])
signs[sign_id] = sign signs[sign_id] = sign
return signs return signs
@ -455,9 +453,10 @@ def read_warp_tos(address, warp_count):
for warp_to_id in range(0, warp_count): for warp_to_id in range(0, warp_count):
offset = address + (warp_to_id * 4) offset = address + (warp_to_id * 4)
warp_to = {} warp_to = {}
warp_to["event_displacement"] = [ord(rom[offset]),ord(rom[offset+1])] warp_to["event_displacement"] = [ord(rom[offset:offset+1]),
warp_to["y"] = ord(rom[offset+2]) ord(rom[offset+1:offset+2])]
warp_to["x"] = ord(rom[offset+3]) warp_to["y"] = ord(rom[offset+2:offset+3])
warp_to["x"] = ord(rom[offset+3:offset+4])
warp_tos[warp_to_id] = warp_to warp_tos[warp_to_id] = warp_to
return warp_tos return warp_tos
@ -465,9 +464,9 @@ def get_object_data(address):
if type(address) == str: address = int(address, base) if type(address) == str: address = int(address, base)
output = {} output = {}
maps_border_tile = ord(rom[address]) maps_border_tile = ord(rom[address:address+1])
number_of_warps = ord(rom[address+1]) number_of_warps = ord(rom[address+1:address+2])
if number_of_warps == 0: warps = {} if number_of_warps == 0: warps = {}
else: else:
warps = read_warp_data(address+2, number_of_warps) warps = read_warp_data(address+2, number_of_warps)
@ -475,7 +474,7 @@ def get_object_data(address):
offset = number_of_warps * 4 offset = number_of_warps * 4
address = address + 2 + offset address = address + 2 + offset
number_of_signs = ord(rom[address]) number_of_signs = ord(rom[address:address+1])
if number_of_signs == 0: signs = {} if number_of_signs == 0: signs = {}
else: else:
signs = read_sign_data(address+1, number_of_signs) signs = read_sign_data(address+1, number_of_signs)
@ -483,29 +482,29 @@ def get_object_data(address):
offset = number_of_signs * 3 offset = number_of_signs * 3
address = address + 1 + offset address = address + 1 + offset
number_of_things = ord(rom[address]) number_of_things = ord(rom[address:address+1])
address = address + 1 address = address + 1
things = {} things = {}
for thing_id in range(0, number_of_things): for thing_id in range(0, number_of_things):
thing = {} thing = {}
picture_number = ord(rom[address]) picture_number = ord(rom[address:address+1])
y = ord(rom[address+1]) y = ord(rom[address+1:address+2])
x = ord(rom[address+2]) x = ord(rom[address+2:address+3])
movement1 = ord(rom[address+3]) movement1 = ord(rom[address+3:address+4])
movement2 = ord(rom[address+4]) movement2 = ord(rom[address+4:address+5])
text_string_number = ord(rom[address+5]) text_string_number = ord(rom[address+5:address+6])
address += 5 + 1 address += 5 + 1
if text_string_number & (1 << 6) != 0: #trainer if text_string_number & (1 << 6) != 0: #trainer
thing["type"] = "trainer" thing["type"] = "trainer"
thing["trainer_type"] = ord(rom[address]) thing["trainer_type"] = ord(rom[address:address+1])
thing["pokemon_set"] = ord(rom[address+1]) thing["pokemon_set"] = ord(rom[address+1:address+2])
address += 2 address += 2
elif text_string_number & (1 << 7) != 0: #item elif text_string_number & (1 << 7) != 0: #item
thing["type"] = "item" thing["type"] = "item"
thing["item_number"] = ord(rom[address]) thing["item_number"] = ord(rom[address:address+1])
address += 1 address += 1
else: #normal person else: #normal person
thing["type"] = "person" thing["type"] = "person"
@ -568,26 +567,26 @@ def read_map_header(address, bank):
address = int(address, base) address = int(address, base)
bank = int(bank, base) bank = int(bank, base)
tileset = ord(rom[address]) tileset = ord(rom[address:address+1])
y = ord(rom[address+1]) y = ord(rom[address+1:address+2])
x = ord(rom[address+2]) x = ord(rom[address+2:address+3])
map_pointer_byte1 = ord(rom[address+3]) map_pointer_byte1 = ord(rom[address+3:address+4])
map_pointer_byte2 = ord(rom[address+4]) map_pointer_byte2 = ord(rom[address+4:address+5])
partial_map_pointer = (map_pointer_byte1 + (map_pointer_byte2 << 8)) partial_map_pointer = (map_pointer_byte1 + (map_pointer_byte2 << 8))
map_pointer = calculate_pointer(partial_map_pointer, bank) map_pointer = calculate_pointer(partial_map_pointer, bank)
texts_pointer_byte1 = ord(rom[address+5]) texts_pointer_byte1 = ord(rom[address+5:address+6])
texts_pointer_byte2 = ord(rom[address+6]) texts_pointer_byte2 = ord(rom[address+6:address+7])
partial_texts_pointer = (texts_pointer_byte1 + (texts_pointer_byte2 << 8)) partial_texts_pointer = (texts_pointer_byte1 + (texts_pointer_byte2 << 8))
texts_pointer = calculate_pointer(partial_texts_pointer, bank) texts_pointer = calculate_pointer(partial_texts_pointer, bank)
script_pointer_byte1 = ord(rom[address+7]) script_pointer_byte1 = ord(rom[address+7:address+8])
script_pointer_byte2 = ord(rom[address+8]) script_pointer_byte2 = ord(rom[address+8:address+9])
partial_script_pointer = (script_pointer_byte1 + ( script_pointer_byte2 << 8)) partial_script_pointer = (script_pointer_byte1 + ( script_pointer_byte2 << 8))
script_pointer = calculate_pointer(partial_script_pointer, bank) script_pointer = calculate_pointer(partial_script_pointer, bank)
connection_byte = ord(rom[address+9]) #0xc = NORTH | SOUTH connection_byte = ord(rom[address+9:address+10]) #0xc = NORTH | SOUTH
# <&IIMarckus> the connection byte is a bitmask allowing 0-4 connections # <&IIMarckus> the connection byte is a bitmask allowing 0-4 connections
# <&IIMarckus> each connection is 11 bytes # <&IIMarckus> each connection is 11 bytes
# <&IIMarckus> or'd # <&IIMarckus> or'd
@ -631,8 +630,8 @@ def read_map_header(address, bank):
offset = address + 10 + (11 * num_connections) offset = address + 10 + (11 * num_connections)
#object data #object data
object_data_pointer_byte1 = ord(rom[offset]) object_data_pointer_byte1 = ord(rom[offset:offset+1])
object_data_pointer_byte2 = ord(rom[offset+1]) object_data_pointer_byte2 = ord(rom[offset+1:offset+2])
partial_object_data_pointer = (object_data_pointer_byte1 + (object_data_pointer_byte2 << 8)) partial_object_data_pointer = (object_data_pointer_byte1 + (object_data_pointer_byte2 << 8))
object_data_pointer = calculate_pointer(partial_object_data_pointer, bank) object_data_pointer = calculate_pointer(partial_object_data_pointer, bank)
object_data = get_object_data(object_data_pointer) object_data = get_object_data(object_data_pointer)