Skip to content

Commit 8a56ace

Browse files
authored
Merge pull request #254 from coderwilson/movement_tracking
Distance Logging and Filesave Fix
2 parents c3a48b9 + e3060c2 commit 8a56ace

File tree

5 files changed

+81
-22
lines changed

5 files changed

+81
-22
lines changed

Diff for: distance_logging.py

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
2+
from gamestate import game
3+
4+
import memory
5+
import vars
6+
import threading
7+
import logging
8+
import json
9+
import time
10+
11+
logger = logging.getLogger(__name__)
12+
13+
14+
game_vars = vars.vars_handle()
15+
16+
def perform_distance_logging():
17+
distances = {}
18+
19+
def _update(distance_travelled, location, zone):
20+
if location in distances:
21+
cur_loc = distances[location]
22+
else:
23+
cur_loc = {}
24+
if zone not in cur_loc:
25+
cur_loc[zone] = 0
26+
cur_loc[zone] += distance_travelled
27+
distances[location] = cur_loc
28+
logger.manip(f"Updated {location} - {zone} to {cur_loc[zone]}")
29+
30+
def _monitor():
31+
distance_travelled = 0
32+
location = -1
33+
zone = -1
34+
previously_added = -1
35+
last_updated_map_time = time.time()
36+
while not (game.state == "Sin" and game.step == 4):
37+
new_travelled = memory.main.total_distance_travelled()
38+
if (not new_travelled) or (memory.main.get_map() != location) or (memory.main.get_zone() != zone):
39+
if not distance_travelled or (distance_travelled == previously_added):
40+
pass
41+
else:
42+
logger.manip(f"Adding {distance_travelled}")
43+
_update(distance_travelled, location, zone)
44+
previously_added = distance_travelled
45+
distance_travelled = new_travelled
46+
# The map updates faster than the steps reset to 0 on screen transition, so we need a bit of a delay.
47+
if (time.time() - last_updated_map_time >= 1):
48+
location = memory.main.get_map()
49+
last_updated_map_time = time.time()
50+
zone = memory.main.get_zone()
51+
logger.manip("Done logging distances.")
52+
# write_everything
53+
with open("./json_ai_files/distance_logging.json", "w") as fp:
54+
json.dump(distances, fp)
55+
return
56+
57+
monitoring = threading.Thread(target=_monitor, daemon=True)
58+
monitoring.start()
59+
return monitoring

Diff for: json_ai_files/distance_logging.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"71": {"0": 215.02772521972656}, "288": {"0": 651.0842590332031}, "41": {"0": 1414.7367553710938}, "22": {"0": 407.29345703125}, "18": {"0": 3132.0282440185547}, "95": {"0": 1468.5615844726562}, "120": {"0": 1017.9033203125}, "127": {"0": 2625.9536743164062}, "115": {"1": 1236.9472351074219}, "116": {"1": 729.8141536712646}, "79": {"0": 664.4529266357422}, "92": {"0": 2783.9503326416016}, "128": {"0": 3018.916534423828}, "93": {"0": 879.0300064086914, "1": 1596.58447265625}, "75": {"0": 3196.674758911133}, "97": {"0": 863.9864959716797}, "140": {"0": 2244.8383827209473}, "162": {"0": 2373.92032623291}, "110": {"0": 616.3773422241211}, "241": {"0": 1554.4971466064453}, "242": {"0": 1240.1963500976562}, "164": {"0": 417.08199977874756}, "192": {"0": 1290.291877746582}, "136": {"0": 2375.9225540161133}, "137": {"0": 1579.1166076660156, "1": 777.586181640625}, "138": {"0": 1287.9697570800781}, "280": {"0": 189.7969207763672}, "265": {"0": 256.5383605957031}, "351": {"0": 105.0890121459961}, "198": {"0": 570.9893188476562, "1": 1008.4601745605469}, "209": {"0": 665.9271240234375}, "208": {"0": 1030.4814758300781}, "223": {"0": 4740.568206787109}, "266": {"0": 145.4811248779297}, "56": {"0": 1197.9669799804688, "2": 1447.8811950683594}}

Diff for: load_game.py

+11-9
Original file line numberDiff line numberDiff line change
@@ -70,19 +70,20 @@ def load_into_game(gamestate: str, step_counter: str):
7070
nemesis = key
7171
if save_num > 200:
7272
pass
73-
elif nemesis == str(game_vars.nemesis()):
73+
else:
7474
logger.debug(f"Found save {save_num}")
7575
save_num_conf = save_num
76-
nemesis_conf = nemesis
7776
blitz_win = results[gamestate][step_counter][key]["blitz_win_value"]
7877
end_ver = results[gamestate][step_counter][key]["end_game_version_val"]
79-
nea_zone = results[gamestate][step_counter][key]["nea_zone"]
80-
nem_ap = results[gamestate][step_counter][key]["nem_ap_val"]
81-
spec_move = results[gamestate][step_counter][key]["special_movement"]
8278
logger.debug(f"Blitz Win {blitz_win}")
8379
logger.debug(f"End game version {end_ver}")
84-
logger.debug(f"NEA zone {nea_zone}")
85-
logger.debug(f"Nemesis checkpoint {nem_ap}")
80+
if nemesis == str(game_vars.nemesis()):
81+
nemesis_conf = nemesis
82+
nea_zone = results[gamestate][step_counter][key]["nea_zone"]
83+
nem_ap = results[gamestate][step_counter][key]["nem_ap_val"]
84+
spec_move = results[gamestate][step_counter][key]["special_movement"]
85+
logger.debug(f"NEA zone {nea_zone}")
86+
logger.debug(f"Nemesis checkpoint {nem_ap}")
8687

8788
if save_num_conf == 0:
8889
logger.debug("Failure 2")
@@ -93,8 +94,9 @@ def load_into_game(gamestate: str, step_counter: str):
9394
load_save_num(int(save_num_conf))
9495
game_vars.set_blitz_win(value=(blitz_win == "True"))
9596
game_vars.end_game_version_set(value=int(end_ver))
96-
game_vars.set_nea_zone(value=int(nea_zone))
97-
game_vars.set_nem_checkpoint_ap(value=int(nem_ap))
97+
if nemesis == str(game_vars.nemesis()):
98+
game_vars.set_nea_zone(value=int(nea_zone))
99+
game_vars.set_nem_checkpoint_ap(value=int(nem_ap))
98100

99101
if spec_move != "none":
100102
logger.debug(f"Special movement needed: {spec_move}")

Diff for: main.py

+2-7
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import battle.main
3636
import blitz
3737
import config
38+
import distance_logging
3839
import load_game
3940
import logs
4041
import memory.main
@@ -242,13 +243,7 @@ def perform_TAS():
242243
if game.step == 3:
243244
area.besaid.leaving()
244245
game.state = "Boat1"
245-
if memory.main.get_tidus_slvl() < 3:
246-
logger.warning("=========================")
247-
logger.warning("=== Under-levelled!!! ===")
248-
logger.warning("=========================")
249-
game.state, game.step = reset.mid_run_reset()
250-
else:
251-
game.step = 1
246+
game.step = 1
252247

253248
if game.state == "Boat1":
254249
area.boats.ss_liki()

Diff for: memory/main.py

+8-6
Original file line numberDiff line numberDiff line change
@@ -1521,12 +1521,10 @@ def get_story_progress():
15211521

15221522
def get_map():
15231523
global base_value
1524-
15251524
key = base_value + 0x00D2CA90
15261525
progress = process.read_bytes(key, 2)
15271526
return progress
15281527

1529-
15301528
def touching_save_sphere():
15311529
global base_value
15321530

@@ -2711,14 +2709,18 @@ def blitz_cursor():
27112709
return cursor
27122710

27132711

2714-
# ------------------------------
2715-
# Function for logging
27162712

27172713

2718-
def read_bytes(key, size):
2719-
return process.read_bytes(key, size)
2714+
# ------------------------------
2715+
# Function for logging
27202716

27212717

2718+
def total_distance_travelled():
2719+
return float_from_integer(read_val(0x00D2A9DC, 4))
2720+
2721+
def get_zone():
2722+
return read_val(0x00D2CAA0, 2)
2723+
27222724
# ------------------------------
27232725
# Equipment array
27242726

0 commit comments

Comments
 (0)