extends SceneTree # Real native scene/physics acceptance; this is not a JavaScript engine adapter. var checks: Array[String] = [] var failures: Array[String] = [] func verify(label: String, condition: bool): checks.append(label) if not condition: failures.append(label) push_error(label) func _initialize(): call_deferred("run_checks") func run_checks(): verify("Exact Godot4.7.2 native version",Engine.get_version_info().major == 4 and Engine.get_version_info().minor == 7 and Engine.get_version_info().patch == 2 and Engine.get_version_info().status == "stable") var packed = load("res://main.tscn") as PackedScene verify("Native packed main scene loads",packed != null) if packed == null: quit(1); return var main = packed.instantiate() root.add_child(main) main.set_physics_process(false) await physics_frame await physics_frame var tilemap = main.get_node("Room/TileMap") verify("Builtin exporter TileMap class",tilemap is TileMap) verify("Two exported tile layers",tilemap.get_layers_count() == 2) verify("Floor and Walls preserve names",tilemap.get_layer_name(0) == "Floor" and tilemap.get_layer_name(1) == "Walls") verify("32px tile dimensions",tilemap.tile_set.tile_size == Vector2i(32,32)) verify("60 floor cells and28 wall cells",tilemap.get_used_cells(0).size() == 60 and tilemap.get_used_cells(1).size() == 28) var ids_correct = true for y in range(6): for x in range(10): var cell = Vector2i(x,y) ids_correct = ids_correct and tilemap.get_cell_atlas_coords(0,cell) == Vector2i.ZERO var wall = x == 0 or x == 9 or y == 0 or y == 5 ids_correct = ids_correct and (tilemap.get_cell_atlas_coords(1,cell) == Vector2i(1,0) if wall else tilemap.get_cell_source_id(1,cell) == -1) verify("All60 floor and wall atlas positions",ids_correct) verify("Original PNG texture resolves",tilemap.tile_set.get_source(0).texture.get_size() == Vector2(64,32)) verify("Wall physics layer1",tilemap.tile_set.get_physics_layer_collision_layer(0) == 1) var wall_data = tilemap.get_cell_tile_data(1,Vector2i.ZERO) verify("Full tile wall collision polygon",wall_data.get_collision_polygon_points(0,0) == PackedVector2Array([Vector2(-16,-16),Vector2(16,-16),Vector2(16,16),Vector2(-16,16)])) verify("resPath imports actual Marker2D",main.spawn is Marker2D) verify("Marker pixel position survives",main.spawn.position == Vector2(80,80)) verify("Probe spawns from exported marker",main.player.position == Vector2(80,80)) verify("Probe body checks wall layer",main.player.collision_layer == 2 and main.player.collision_mask == 1) var start = main.player.position for i in range(12): await physics_frame main.move_probe(Vector2.RIGHT) verify("Actual native interior movement",main.player.position.x > start.x + 10 and abs(main.player.position.y-start.y) < 0.01) var pause_key = InputEventKey.new() pause_key.physical_keycode = KEY_P pause_key.keycode = KEY_P pause_key.pressed = true root.push_input(pause_key) await process_frame verify("Native P event toggles pause",main.paused) start = main.player.position for i in range(3): await physics_frame; main.move_probe(Vector2.RIGHT) verify("Pause prevents physics movement",main.player.position == start) root.push_input(pause_key) await process_frame verify("Native P event resumes",not main.paused) var reset_key = InputEventKey.new() reset_key.physical_keycode = KEY_R reset_key.keycode = KEY_R reset_key.pressed = true root.push_input(reset_key) await process_frame verify("Reset returns to exported spawn",main.player.position == Vector2(80,80) and main.player.velocity == Vector2.ZERO) for pair in [[Vector2.LEFT,0],[Vector2.UP,1],[Vector2.RIGHT,2],[Vector2.DOWN,3]]: main.reset_probe() for i in range(150): await physics_frame main.move_probe(pair[0]) var pos = main.player.position var clamped = [pos.x >= 37.9 and pos.x < 39, pos.y >= 37.9 and pos.y < 39, pos.x <= 282.1 and pos.x > 281, pos.y <= 154.1 and pos.y > 153][pair[1]] verify("Native wall contact " + str(pair[1]),clamped and main.player.get_slide_collision_count() > 0) main.queue_free() await process_frame var reopened = packed.instantiate() root.add_child(reopened) reopened.set_physics_process(false) await physics_frame verify("Second scene starts at spawn",reopened.player.position == Vector2(80,80)) verify("Second scene keeps map cells",reopened.get_node("Room/TileMap").get_used_cells(1).size() == 28) reopened.queue_free() await process_frame print("FORGE_MAP_CHECKS=" + JSON.stringify({"checks":checks,"failures":failures,"count":checks.size()})) quit(0 if failures.is_empty() else 1)