extends Node func _ready() -> void: if not InputMap.has_action("ship_mini_boost"): InputMap.add_action("ship_mini_boost") var palette_names := {} var sheet := Image.create(1280,1080,false,Image.FORMAT_RGBA8) var progress: Resource = GameState.captain.expedition for index in 6: var profile: Dictionary = preload("res://scripts/planets/planet_profiles.gd").generate(99,index,"Krajobraz %d" % (index+1)) profile.temperature = 75 if index==4 else (-35 if index==5 else 20) profile.easy = index<4 profile.oxygen = 90 profile.flora = 0 progress.lander_hp = 100 assert(progress.begin_visit(profile)) progress.visit_seed = 200+index var surface := Control.new() surface.set_script(preload("res://scripts/planets/surface_screen.gd")) surface.captain = GameState.captain surface.progress = progress add_child(surface) var material: ShaderMaterial = surface.world.get_node("Terrain").material if "--debug-region" in OS.get_cmdline_user_args(): var diagnostic := material.shader.duplicate() as Shader diagnostic.code = diagnostic.code.replace("COLOR=vec4(mix(shore*shade,water,lake),1.0);","COLOR=vec4(vec3(region),1.0);") material.shader = diagnostic for kind in ["soil","rock","sand","moss"]: var texture: Texture2D = material.get_shader_parameter(kind+"_detail") assert(texture != null and texture.get_width() >= 1024) var target: Vector2 = surface.world.data.structures[0].position if not surface.world.data.structures.is_empty() else surface.world.data.pois[0].position target = target.clamp(Vector2(-1200,-1200),Vector2(1200,1200)) surface.lander.position = target surface._previous_position = target surface.lander.reset_physics_interpolation() surface.camera.position = target surface.camera.reset_smoothing() palette_names[surface.world.data.landscape.name] = true for frame in 4: await get_tree().process_frame await RenderingServer.frame_post_draw var screenshot: Image = get_viewport().get_texture().get_image() screenshot.save_png("res://artifacts/%sterrain_detail_%d.png" % ["debug_" if "--debug-region" in OS.get_cmdline_user_args() else "",index]) if index == 0 and "--debug-region" in OS.get_cmdline_user_args(): var seams := 0 for y in range(220,600,2): for x in range(480,1000): var a := screenshot.get_pixel(x,y) var b := screenshot.get_pixel(x+1,y) if absf(a.r-a.g)<0.0005 and absf(a.g-a.b)<0.0005 and absf(b.r-b.g)<0.0005 and absf(b.g-b.b)<0.0005 and absf(a.r-b.r)>0.07: seams += 1 assert(seams < 20) print("TERRAIN NOISE CONTINUITY PASS: abrupt grayscale edges=",seams) screenshot.convert(Image.FORMAT_RGBA8) screenshot.resize(640,360,Image.INTERPOLATE_LANCZOS) sheet.blit_rect(screenshot,Rect2i(0,0,640,360),Vector2i(index%2*640,index/2*360)) progress.finish_visit(GameState.captain,true) surface.queue_free() await get_tree().process_frame assert(palette_names.size() == 6) if not "--debug-region" in OS.get_cmdline_user_args(): sheet.save_png("res://artifacts/terrain_material_variants_final.png") print("LANDSCAPE PREVIEW PASS: six distinct terrain styles with four detailed material textures rendered") get_tree().quit()