Initial commit

This commit is contained in:
scorpion21211-cmd
2026-10-03 23:29:41 -04:00
commit e24bbbda5d
10586 changed files with 1030090 additions and 0 deletions
+152
View File
@@ -0,0 +1,152 @@
extends Node
const SAVE_PATH := "user://save_slot_1.json"
var has_save: bool = false
var play_elapsed: float = 0.0
var demo_limit: float = 36000.0
var scramble_at: float = 35280.0
var scramble_started: bool = false
var clock_paused: bool = false
var game_year: int = 2066
var game_month: int = 9
var game_day: int = 14
var game_hour: float = 8.0
var time_scale: float = 1.0
signal scramble_begun
signal time_scale_changed(new_scale: float)
func _ready() -> void:
has_save = FileAccess.file_exists(SAVE_PATH)
process_mode = Node.PROCESS_MODE_PAUSABLE
func _process(delta: float) -> void:
if clock_paused:
return
var stepped: float = delta * time_scale
play_elapsed += stepped
_advance_game_clock(stepped)
if not scramble_started and play_elapsed >= scramble_at:
scramble_started = true
scramble_begun.emit()
print("SCRAMBLE: proxy privateers inbound")
func set_time_scale(scale: float) -> void:
time_scale = clampf(scale, 0.0, 4.0)
time_scale_changed.emit(time_scale)
print("Time scale: x", time_scale)
func _advance_game_clock(game_seconds: float) -> void:
game_hour += game_seconds / 3600.0
while game_hour >= 24.0:
game_hour -= 24.0
game_day += 1
var days_in_month: int = _days_in_month(game_year, game_month)
if game_day > days_in_month:
game_day = 1
game_month += 1
if game_month > 12:
game_month = 1
game_year += 1
func _days_in_month(_year: int, month: int) -> int:
match month:
1, 3, 5, 7, 8, 10, 12:
return 31
4, 6, 9, 11:
return 30
2:
return 28
_:
return 30
func get_time_string() -> String:
var h: int = int(game_hour)
var m: int = int((game_hour - float(h)) * 60.0)
var s: int = int((game_hour - float(h) - float(m) / 60.0) * 3600.0)
var month_names := ["", "Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
var mon: String = month_names[game_month]
var scale_txt := ""
if time_scale == 0.0:
scale_txt = " PAUSED"
elif time_scale > 1.0:
scale_txt = " x%d" % int(time_scale)
return "%d %s %d %02d:%02d:%02d%s" % [game_day, mon, game_year, h, m, s, scale_txt]
func get_play_remaining_string() -> String:
var left: float = max(demo_limit - play_elapsed, 0.0)
var h: int = int(left / 3600.0)
var m: int = int((left - float(h) * 3600.0) / 60.0)
var sec: int = int(left) % 60
return "%02d:%02d:%02d" % [h, m, sec]
func save_game(player: Node) -> void:
if player == null:
return
var look = {}
if "appearance" in player:
look = player.appearance
var data := {
"player_name": player.player_name,
"background_id": player.background_id,
"background_name": player.background_name,
"culture_id": player.culture_id if "culture_id" in player else "",
"culture_name": player.culture_name if "culture_name" in player else "",
"appearance": look,
"money": player.money,
"food": player.food,
"health": player.health,
"oxygen": player.oxygen,
"inventory": player.inventory.duplicate(),
"position": {
"x": player.global_position.x,
"y": player.global_position.y,
"z": player.global_position.z
},
"play_elapsed": play_elapsed,
"scramble_started": scramble_started,
"game_year": game_year,
"game_month": game_month,
"game_day": game_day,
"game_hour": game_hour,
"time_scale": time_scale
}
var file := FileAccess.open(SAVE_PATH, FileAccess.WRITE)
if file:
file.store_string(JSON.stringify(data))
file.close()
has_save = true
print("Game saved")
func load_game_data() -> Dictionary:
if not FileAccess.file_exists(SAVE_PATH):
return {}
var file := FileAccess.open(SAVE_PATH, FileAccess.READ)
if file == null:
return {}
var text := file.get_as_text()
file.close()
var parsed = JSON.parse_string(text)
if typeof(parsed) == TYPE_DICTIONARY:
return parsed
return {}
func apply_loaded_clock(data: Dictionary) -> void:
play_elapsed = float(data.get("play_elapsed", 0.0))
scramble_started = bool(data.get("scramble_started", false))
game_year = int(data.get("game_year", 2066))
game_month = int(data.get("game_month", 9))
game_day = int(data.get("game_day", 14))
game_hour = float(data.get("game_hour", 8.0))
time_scale = float(data.get("time_scale", 1.0))
clock_paused = false