c4beeae38f
Top-down twin-stick bullet-hell, Godot 4.7, server-authoritative dedicated server with client-side prediction. Clients send input only; the server resolves every hit for both players and enemies (no PvP). - SimWorld: whole simulation as plain RefCounted objects (no nodes, no physics server), ~0.24ms/tick at peak load -- runs headless for free and drives 78 tests in under a second - BulletPool: struct-of-arrays bullet storage, replicated as spawn/despawn events rather than per-tick state - Emitter framework (Ring/AimedSpread/WallGap/ArcSweep) shared by trash enemies and bosses -- a new boss is data in src/content/content.gd, no simulation changes - The Warden of the Fold: stationary 4-phase boss built entirely on that format - Lobby hub with a portal into on-demand dungeon instances; one process hosts the hub plus every concurrent dungeon - Emergency escape: 3s server-owned channel, cancelled by damage - tools/check.sh, test.sh (GUT), smoke.sh (real server + bot clients over ENet), bench.gd; git hooks wired to the same scripts - docs/ARCHITECTURE.md, NETCODE.md, WORKFLOW.md, ROADMAP.md
34 lines
1.1 KiB
GDScript
34 lines
1.1 KiB
GDScript
@tool
|
|
var default_script_name_no_extension = 'gut_dynamic_script'
|
|
var default_script_resource_path = 'res://addons/gut/not_a_real_file/'
|
|
var default_script_extension = "gd"
|
|
|
|
var _created_script_count = 0
|
|
|
|
|
|
# Creates a loaded script from the passed in source. This loaded script is
|
|
# returned unless there is an error. When an error occcurs the error number
|
|
# is returned instead.
|
|
func create_script_from_source(source, override_path=null):
|
|
_created_script_count += 1
|
|
var r_path = str(default_script_resource_path,
|
|
default_script_name_no_extension, '_', _created_script_count, ".",
|
|
default_script_extension)
|
|
|
|
if(override_path != null):
|
|
r_path = override_path
|
|
|
|
var DynamicScript = GDScript.new()
|
|
DynamicScript.source_code = source.dedent()
|
|
# The resource_path must be unique or Godot thinks it is trying
|
|
# to load something it has already loaded and generates an error like
|
|
# ERROR: Another resource is loaded from path 'workaround for godot
|
|
# issue #65263' (possible cyclic resource inclusion).
|
|
DynamicScript.resource_path = r_path
|
|
var result = DynamicScript.reload()
|
|
if(result != OK):
|
|
DynamicScript = result
|
|
|
|
return DynamicScript
|
|
|