# ambience_test —— AreaAmbienceData + .pra -> Audio source contract. # godot --headless --path project --script ambience_test.gd extends SceneTree var _fail := 0 func _ck(ok: bool, message: String) -> void: if not ok: _fail += 1 printerr("FAIL: " + message) func _init() -> void: if not ClassDB.class_exists("Metin2World"): printerr("FAIL: Metin2World extension is not registered") quit(1) return var assets := AssetRoot.path() var world: Node = ClassDB.instantiate("Metin2World") world.set("auto_load", false) world.set("assets_root", assets) world.set("map_path", "OutdoorA3/metin2_map_a3") world.set("focus_tile", Vector2i(3, 3)) world.set("load_radius_tiles", 0) world.set("splat_enabled", false) world.set("water_enabled", false) world.set("env_enabled", false) get_root().add_child(world) var ok: bool = world.call("load_map") _ck(ok, "A3 map chunk loads") var sources: Array = world.call("get_ambience_sources") _ck(sources.size() == 1, "A3 chunk exposes one ambience source") if sources.size() == 1: var source: Dictionary = sources[0] _ck(int(source.get("range_cm", 0)) == 3300, "ambience range is preserved in cm") _ck(String(source.get("play_type", "")).to_upper() == "LOOP", "ambience play type is LOOP") var sounds: Array = source.get("sounds", []) _ck(sounds.size() == 1 and String(sounds[0]) == "sound/ambience/warp_test.mp3", ".pra sound vector is exposed to Audio") world.queue_free() await process_frame if _fail == 0: print("PASS: ambience_test (AreaAmbienceData + .pra + world/audio contract)") quit(0) else: printerr("%d check(s) failed" % _fail) quit(1)