extends SceneTree ## Capture the real impact effect in the Compatibility renderer, no remote score calls. func _initialize() -> void: call_deferred("run_test") func run_test() -> void: root.size = Vector2i(1280, 720) var world = load("res://scenes/main.tscn").instantiate() root.add_child(world) world.spawning = true world.start_screen.hide() world.player.set_physics_process(false) world.player.position = Vector3(0, 0.1, 4) world.player.camera.look_at(Vector3(0, 1, -1)) Input.mouse_mode = Input.MOUSE_MODE_VISIBLE await create_timer(0.3).timeout var grenade = load("res://scripts/grenade.gd").new() grenade.position = Vector3(0, 0.6, -1) world.add_child(grenade) grenade.linear_velocity = Vector3(0, -4, 0) await grenade.detonated await process_frame var effect = world.get_node("GrenadeExplosion") effect.set_process(false) for index in [0, 3, 7, 11, 14]: effect.fireball.show() effect._set_frame(index) await process_frame await RenderingServer.frame_post_draw root.get_texture().get_image().save_png("/tmp/zombie-grenade-frame-%02d.png" % index) print("SHOT: original sprite frames 0/3/7/11/14 at real floor impact") world.queue_free() await process_frame quit()