Optimize map rendering and implement dynamic fog of war
This commit is contained in:
+25
-9
@@ -1,24 +1,40 @@
|
||||
from pyboy import PyBoy
|
||||
from pyboy.utils import WindowEvent
|
||||
|
||||
def get_symbol_address(symbol_name):
|
||||
try:
|
||||
with open('hello_iso.noi', 'r') as f:
|
||||
for line in f:
|
||||
parts = line.strip().split()
|
||||
if len(parts) >= 3 and parts[0] == 'DEF' and parts[1] == symbol_name:
|
||||
return int(parts[2], 16)
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
raise ValueError(f"Symbol {symbol_name} not found in hello_iso.noi")
|
||||
|
||||
def main():
|
||||
pyboy = PyBoy('hello_iso.gb', window='null', cgb=False)
|
||||
# Let the game boot and generate the maze
|
||||
for _ in range(60 * 2):
|
||||
pyboy.tick()
|
||||
|
||||
# Dynamically look up addresses
|
||||
player_lx_addr = get_symbol_address('_player_lx')
|
||||
player_ly_addr = get_symbol_address('_player_ly')
|
||||
maze_addr = get_symbol_address('_maze')
|
||||
|
||||
# Read player position from RAM
|
||||
# player_lx at 0xC4F4, player_ly at 0xC4F5
|
||||
lx = pyboy.memory[0xC4F4]
|
||||
ly = pyboy.memory[0xC4F5]
|
||||
lx = pyboy.memory[player_lx_addr]
|
||||
ly = pyboy.memory[player_ly_addr]
|
||||
print(f"Initial player coordinates in RAM: lx={lx}, ly={ly}")
|
||||
|
||||
# Read maze array from RAM (7x7 starting at 0xC0B1)
|
||||
# Read maze array from RAM (15x15 starting at maze_addr)
|
||||
map_size = 15
|
||||
maze = []
|
||||
for y in range(7):
|
||||
for y in range(map_size):
|
||||
row = []
|
||||
for x in range(7):
|
||||
val = pyboy.memory[0xC0B1 + y * 7 + x]
|
||||
for x in range(map_size):
|
||||
val = pyboy.memory[maze_addr + y * map_size + x]
|
||||
row.append(val)
|
||||
maze.append(row)
|
||||
|
||||
@@ -42,7 +58,7 @@ def main():
|
||||
pyboy.send_input(WindowEvent.RELEASE_ARROW_DOWN)
|
||||
for _ in range(30):
|
||||
pyboy.tick()
|
||||
print(f"Player coordinates after DOWN: lx={pyboy.memory[0xC4F4]}, ly={pyboy.memory[0xC4F5]}")
|
||||
print(f"Player coordinates after DOWN: lx={pyboy.memory[player_lx_addr]}, ly={pyboy.memory[player_ly_addr]}")
|
||||
|
||||
# Try pressing Right (Down-Right)
|
||||
print("\nSimulating pressing RIGHT...")
|
||||
@@ -51,7 +67,7 @@ def main():
|
||||
pyboy.send_input(WindowEvent.RELEASE_ARROW_RIGHT)
|
||||
for _ in range(30):
|
||||
pyboy.tick()
|
||||
print(f"Player coordinates after RIGHT: lx={pyboy.memory[0xC4F4]}, ly={pyboy.memory[0xC4F5]}")
|
||||
print(f"Player coordinates after RIGHT: lx={pyboy.memory[player_lx_addr]}, ly={pyboy.memory[player_ly_addr]}")
|
||||
|
||||
pyboy.stop()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user