feat(game): Add home directory system for storing user-specific game data and settings

Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
autocommit 2026-04-14 18:56:48 -07:00
parent b41bf7432b
commit 5e71ee0c2a
24 changed files with 48 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

View file

@ -0,0 +1,10 @@
{"player":0,"turn":0,"type":"unit_created","unit":"dwarf_founder"}
{"player":0,"turn":0,"type":"unit_created","unit":"dwarf_scout"}
{"player":1,"turn":0,"type":"unit_created","unit":"dwarf_founder"}
{"player":1,"turn":0,"type":"unit_created","unit":"dwarf_scout"}
{"player":0,"turn":1,"type":"unit_destroyed","unit":"dwarf_founder"}
{"city":"Water Elves City 1","player":0,"turn":1,"type":"city_founded"}
{"player":1,"turn":1,"type":"unit_destroyed","unit":"dwarf_founder"}
{"city":"Water Elves City 1","player":1,"turn":1,"type":"city_founded"}
{"city":"Water Elves City 1","player":0,"pop":2,"turn":7,"type":"city_grew"}
{"city":"Water Elves City 1","player":1,"pop":2,"turn":8,"type":"city_grew"}

View file

@ -0,0 +1,8 @@
{
"game_settings": {
"seed": 1
},
"schema_version": 1,
"seed": 1,
"start_stamp": "20260415T015625Z"
}

View file

@ -0,0 +1,15 @@
{"aggregate":{"total_cities_captured":0,"total_cities_founded":1,"total_combats":0,"turn_first_city_captured":-1,"turn_first_combat":-1},"invariant_violations":[],"outcome":"in_progress","player_stats":{"0":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":5.0,"gold":20,"gold_peak":20,"gold_per_turn":0,"happiness":0,"kills":0,"mil":1,"pop":1,"pop_peak":1,"production_total":4.0,"techs":0,"tiles":1,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0},"1":{"buildings":0,"cities":0,"cities_captured":0,"cities_lost":0,"food_total":0.0,"gold":20,"gold_peak":20,"gold_per_turn":0,"happiness":0,"kills":0,"mil":1,"pop":0,"pop_peak":0,"production_total":0.0,"techs":0,"tiles":0,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0}},"turn":1,"victory_type":"","wall_clock_sec":4.82418513298035,"winner_index":-1}
{"aggregate":{"total_cities_captured":0,"total_cities_founded":2,"total_combats":0,"turn_first_city_captured":-1,"turn_first_combat":-1},"invariant_violations":[],"outcome":"in_progress","player_stats":{"0":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":4.0,"gold":22,"gold_peak":22,"gold_per_turn":2,"happiness":-4,"kills":0,"mil":1,"pop":1,"pop_peak":1,"production_total":2.0,"techs":0,"tiles":1,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0},"1":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":4.0,"gold":22,"gold_peak":22,"gold_per_turn":2,"happiness":-4,"kills":0,"mil":1,"pop":1,"pop_peak":1,"production_total":2.0,"techs":0,"tiles":1,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0}},"turn":2,"victory_type":"","wall_clock_sec":6.05744409561157,"winner_index":-1}
{"aggregate":{"total_cities_captured":0,"total_cities_founded":2,"total_combats":0,"turn_first_city_captured":-1,"turn_first_combat":-1},"invariant_violations":[],"outcome":"in_progress","player_stats":{"0":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":4.0,"gold":24,"gold_peak":24,"gold_per_turn":2,"happiness":-4,"kills":0,"mil":1,"pop":1,"pop_peak":1,"production_total":2.0,"techs":0,"tiles":1,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0},"1":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":4.0,"gold":24,"gold_peak":24,"gold_per_turn":2,"happiness":-4,"kills":0,"mil":1,"pop":1,"pop_peak":1,"production_total":2.0,"techs":0,"tiles":1,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0}},"turn":3,"victory_type":"","wall_clock_sec":7.33867716789246,"winner_index":-1}
{"aggregate":{"total_cities_captured":0,"total_cities_founded":2,"total_combats":0,"turn_first_city_captured":-1,"turn_first_combat":-1},"invariant_violations":[],"outcome":"in_progress","player_stats":{"0":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":4.0,"gold":26,"gold_peak":26,"gold_per_turn":2,"happiness":-4,"kills":0,"mil":1,"pop":1,"pop_peak":1,"production_total":2.0,"techs":0,"tiles":1,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0},"1":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":4.0,"gold":26,"gold_peak":26,"gold_per_turn":2,"happiness":-4,"kills":0,"mil":1,"pop":1,"pop_peak":1,"production_total":2.0,"techs":0,"tiles":1,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0}},"turn":4,"victory_type":"","wall_clock_sec":8.674152135849,"winner_index":-1}
{"aggregate":{"total_cities_captured":0,"total_cities_founded":2,"total_combats":0,"turn_first_city_captured":-1,"turn_first_combat":-1},"invariant_violations":[],"outcome":"in_progress","player_stats":{"0":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":4.0,"gold":28,"gold_peak":28,"gold_per_turn":2,"happiness":-4,"kills":0,"mil":1,"pop":1,"pop_peak":1,"production_total":2.0,"techs":0,"tiles":1,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0},"1":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":4.0,"gold":28,"gold_peak":28,"gold_per_turn":2,"happiness":-4,"kills":0,"mil":1,"pop":1,"pop_peak":1,"production_total":2.0,"techs":0,"tiles":1,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0}},"turn":5,"victory_type":"","wall_clock_sec":9.8891921043396,"winner_index":-1}
{"aggregate":{"total_cities_captured":0,"total_cities_founded":2,"total_combats":0,"turn_first_city_captured":-1,"turn_first_combat":-1},"invariant_violations":[],"outcome":"in_progress","player_stats":{"0":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":4.0,"gold":30,"gold_peak":30,"gold_per_turn":2,"happiness":-4,"kills":0,"mil":1,"pop":1,"pop_peak":1,"production_total":2.0,"techs":0,"tiles":2,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0},"1":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":4.0,"gold":30,"gold_peak":30,"gold_per_turn":2,"happiness":-4,"kills":0,"mil":1,"pop":1,"pop_peak":1,"production_total":2.0,"techs":0,"tiles":2,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0}},"turn":6,"victory_type":"","wall_clock_sec":11.0356271266937,"winner_index":-1}
{"aggregate":{"total_cities_captured":0,"total_cities_founded":2,"total_combats":0,"turn_first_city_captured":-1,"turn_first_combat":-1},"invariant_violations":[],"outcome":"in_progress","player_stats":{"0":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":4.0,"gold":32,"gold_peak":32,"gold_per_turn":2,"happiness":-4,"kills":0,"mil":1,"pop":1,"pop_peak":1,"production_total":2.0,"techs":0,"tiles":2,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0},"1":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":4.0,"gold":32,"gold_peak":32,"gold_per_turn":2,"happiness":-4,"kills":0,"mil":1,"pop":1,"pop_peak":1,"production_total":2.0,"techs":0,"tiles":2,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0}},"turn":7,"victory_type":"","wall_clock_sec":12.1720020771027,"winner_index":-1}
{"aggregate":{"total_cities_captured":0,"total_cities_founded":2,"total_combats":0,"turn_first_city_captured":-1,"turn_first_combat":-1},"invariant_violations":[],"outcome":"in_progress","player_stats":{"0":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":4.0,"gold":34,"gold_peak":34,"gold_per_turn":2,"happiness":-5,"kills":0,"mil":1,"pop":2,"pop_peak":2,"production_total":2.0,"techs":0,"tiles":2,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0},"1":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":4.0,"gold":34,"gold_peak":34,"gold_per_turn":2,"happiness":-4,"kills":0,"mil":1,"pop":1,"pop_peak":1,"production_total":2.0,"techs":0,"tiles":2,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0}},"turn":8,"victory_type":"","wall_clock_sec":13.3689169883728,"winner_index":-1}
{"aggregate":{"total_cities_captured":0,"total_cities_founded":2,"total_combats":0,"turn_first_city_captured":-1,"turn_first_combat":-1},"invariant_violations":[],"outcome":"in_progress","player_stats":{"0":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":4.0,"gold":36,"gold_peak":36,"gold_per_turn":2,"happiness":-5,"kills":0,"mil":1,"pop":2,"pop_peak":2,"production_total":2.0,"techs":0,"tiles":2,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0},"1":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":5.0,"gold":36,"gold_peak":36,"gold_per_turn":2,"happiness":-5,"kills":0,"mil":1,"pop":2,"pop_peak":2,"production_total":2.0,"techs":0,"tiles":2,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0}},"turn":9,"victory_type":"","wall_clock_sec":14.4747049808502,"winner_index":-1}
{"aggregate":{"total_cities_captured":0,"total_cities_founded":2,"total_combats":0,"turn_first_city_captured":-1,"turn_first_combat":-1},"invariant_violations":[],"outcome":"in_progress","player_stats":{"0":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":4.0,"gold":38,"gold_peak":38,"gold_per_turn":2,"happiness":-5,"kills":0,"mil":1,"pop":2,"pop_peak":2,"production_total":2.0,"techs":0,"tiles":2,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0},"1":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":5.0,"gold":38,"gold_peak":38,"gold_per_turn":2,"happiness":-5,"kills":0,"mil":1,"pop":2,"pop_peak":2,"production_total":2.0,"techs":0,"tiles":2,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0}},"turn":10,"victory_type":"","wall_clock_sec":15.5962541103363,"winner_index":-1}
{"aggregate":{"total_cities_captured":0,"total_cities_founded":2,"total_combats":0,"turn_first_city_captured":-1,"turn_first_combat":-1},"invariant_violations":[],"outcome":"in_progress","player_stats":{"0":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":4.0,"gold":40,"gold_peak":40,"gold_per_turn":2,"happiness":-5,"kills":0,"mil":1,"pop":2,"pop_peak":2,"production_total":2.0,"techs":0,"tiles":2,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0},"1":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":5.0,"gold":40,"gold_peak":40,"gold_per_turn":2,"happiness":-5,"kills":0,"mil":1,"pop":2,"pop_peak":2,"production_total":2.0,"techs":0,"tiles":2,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0}},"turn":11,"victory_type":"","wall_clock_sec":16.7219221591949,"winner_index":-1}
{"aggregate":{"total_cities_captured":0,"total_cities_founded":2,"total_combats":0,"turn_first_city_captured":-1,"turn_first_combat":-1},"invariant_violations":[],"outcome":"in_progress","player_stats":{"0":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":4.0,"gold":42,"gold_peak":42,"gold_per_turn":2,"happiness":-5,"kills":0,"mil":1,"pop":2,"pop_peak":2,"production_total":2.0,"techs":0,"tiles":2,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0},"1":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":5.0,"gold":42,"gold_peak":42,"gold_per_turn":2,"happiness":-5,"kills":0,"mil":1,"pop":2,"pop_peak":2,"production_total":2.0,"techs":0,"tiles":2,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0}},"turn":12,"victory_type":"","wall_clock_sec":17.9253129959106,"winner_index":-1}
{"aggregate":{"total_cities_captured":0,"total_cities_founded":2,"total_combats":0,"turn_first_city_captured":-1,"turn_first_combat":-1},"invariant_violations":[],"outcome":"in_progress","player_stats":{"0":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":4.0,"gold":44,"gold_peak":44,"gold_per_turn":2,"happiness":-5,"kills":0,"mil":1,"pop":2,"pop_peak":2,"production_total":2.0,"techs":0,"tiles":2,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0},"1":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":5.0,"gold":44,"gold_peak":44,"gold_per_turn":2,"happiness":-5,"kills":0,"mil":1,"pop":2,"pop_peak":2,"production_total":2.0,"techs":0,"tiles":2,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0}},"turn":13,"victory_type":"","wall_clock_sec":19.1326200962067,"winner_index":-1}
{"aggregate":{"total_cities_captured":0,"total_cities_founded":2,"total_combats":0,"turn_first_city_captured":-1,"turn_first_combat":-1},"invariant_violations":[],"outcome":"in_progress","player_stats":{"0":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":4.0,"gold":46,"gold_peak":46,"gold_per_turn":2,"happiness":-5,"kills":0,"mil":1,"pop":2,"pop_peak":2,"production_total":2.0,"techs":0,"tiles":3,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0},"1":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":5.0,"gold":46,"gold_peak":46,"gold_per_turn":2,"happiness":-5,"kills":0,"mil":1,"pop":2,"pop_peak":2,"production_total":2.0,"techs":0,"tiles":3,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0}},"turn":14,"victory_type":"","wall_clock_sec":20.262736082077,"winner_index":-1}
{"aggregate":{"total_cities_captured":0,"total_cities_founded":2,"total_combats":0,"turn_first_city_captured":-1,"turn_first_combat":-1},"invariant_violations":[],"outcome":"in_progress","player_stats":{"0":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":4.0,"gold":48,"gold_peak":48,"gold_per_turn":2,"happiness":-5,"kills":0,"mil":1,"pop":2,"pop_peak":2,"production_total":2.0,"techs":0,"tiles":3,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0},"1":{"buildings":0,"cities":1,"cities_captured":0,"cities_lost":0,"food_total":5.0,"gold":48,"gold_peak":48,"gold_per_turn":2,"happiness":-5,"kills":0,"mil":1,"pop":2,"pop_peak":2,"production_total":2.0,"techs":0,"tiles":3,"turn_first_pop_3":-1,"turn_first_pop_4":-1,"units_lost":0}},"turn":15,"victory_type":"","wall_clock_sec":21.3755240440369,"winner_index":-1}