Files
puzzle-quest/scenes/UI/settings/Settings.tscn
T
Vaillant Jeremy 6f3f8b8f64 Wire up UI in Godot 4: fonts, translations, layout, fog, shadow
Discovered while playtesting the migrated build. Each fix has a
specific Godot-3-to-4 cause that the --convert-3to4 tool did not catch.

Fonts:
- Replace 4 .tres font wrappers (MKX_Base, kirsty_base/medium/title)
  with FontVariation pointing at the .otf/.ttf source. Godot 3
  DynamicFont with size= and font_data= is invalid in Godot 4 (those
  properties don't exist on FontFile).
- Apply size 46 via theme_override_font_sizes/font_size on the 5
  Labels that used kirsty_title.tres (LabelLoading + 4 in Summary).
- Drop the broken VisualShader text_outline.material from the 4
  Labels in Summary — Index p_from_port errors in Godot 4 meant
  COLOR was never written, so text rendered invisible.
- Migrate VisualShader nodes inside text_outline.material (compressed
  asset; updated by the inspect/migrate scripts).

Translations:
- Move project.godot section from [locale] (Godot 3) to
  [internationalization] with locale/translations=... (Godot 4). The
  old section was silently ignored so tr() returned the raw msgid.
- Adjust Setting.translate_int_to_locale to return "en"/"fr" to
  match what the .po files declare (was "en_GB"/"fr_FR", which Godot
  3 fell back from automatically but Godot 4 does not).

Label alignment (Godot 3 names not auto-renamed):
- align -> horizontal_alignment, valign -> vertical_alignment across
  9 .tscn files.

Background / Loading / ChooseScene layout:
- Rewrite Background.tscn from a VisualShader-textured Panel to a
  plain TextureRect (the visual shader connection ports went out of
  bounds in Godot 4, leaving the panel grey on scene reload).
- Set layout_mode=1 + anchors_preset=15 on BackgroundPicture
  instances in Main.tscn and Loading.tscn — Godot 4 inheritance no
  longer applies the .tscn-root's anchors to an instanced child
  unless layout_mode is set to Anchors mode explicitly.
- Replace scroll_horizontal_enabled (Godot 3) with
  horizontal_scroll_mode/vertical_scroll_mode (Godot 4) on
  ChooseScene's ScrollContainer.
- Add theme_override_styles/panel = StyleBoxEmpty on the
  ScrollContainer (Godot 4 ScrollContainer ships a default dark
  panel style that Godot 3 did not).
- Hide BackgroundTile in Template.tscn — it points at
  UI-level-btn-shadow.png (228x228, 83% opaque black) which used to
  render at natural size in Godot 3 but is stretched to fill the
  456px rect in Godot 4, leaving a big black square below each
  thumbnail. The proper drop-shadow needs a shader or 9-patch.
- TextureRect.expand=true (Godot 3) -> expand_mode=1 (Godot 4) on
  ThumbnailLevel and TopPart's content rects.

Lighting:
- background_mode 3 (which used to mean Sky in Godot 3) -> 2 (Sky in
  Godot 4; 3 is now Canvas, producing a black background).
- background_sky -> sky, background_energy -> background_energy_multiplier,
  fog_color -> fog_light_color, fog_height_min -> fog_height; drop
  fog_height_enabled / fog_height_max / fog_height_curve /
  dof_blur_far_distance (no longer exist).
- Add fog_mode = 1 so Godot 4 uses fog_depth_* instead of the new
  default fog_density-based exponential fog (which rendered as a
  thick white cloud).
- ambient_light_energy 1.55 -> 0.4 — the new pipeline interprets
  the value much more strongly so 1.55 produced a saturated pink scene.
- Remove the light_data = ExtResource(41) reference to
  WarCraft.lmbake — Godot 3 baked lightmap binary format is
  incompatible with Godot 4. Re-bake in editor when ready.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-16 20:55:47 +02:00

149 lines
4.3 KiB
Plaintext

[gd_scene load_steps=2 format=2]
[ext_resource path="res://scenes/UI/settings/Settings.gd" type="Script" id=1]
[node name="Settings" type="CenterContainer"]
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -1.12244
offset_right = -1.12244
script = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="VBoxContainer" type="VBoxContainer" parent="."]
offset_left = 547.0
offset_top = 265.0
offset_right = 732.0
offset_bottom = 455.0
alignment = 1
[node name="langue" type="CenterContainer" parent="VBoxContainer"]
offset_right = 185.0
offset_bottom = 27.0
[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/langue"]
offset_left = 67.0
offset_right = 117.0
offset_bottom = 27.0
__meta__ = {
"_editor_description_": ""
}
[node name="Label" type="Label" parent="VBoxContainer/langue/VBoxContainer"]
offset_right = 50.0
offset_bottom = 14.0
text = "langue :"
horizontal_alignment = 1
[node name="data" type="ItemList" parent="VBoxContainer/langue/VBoxContainer"]
offset_top = 18.0
offset_right = 50.0
offset_bottom = 27.0
focus_mode = 0
auto_height = true
max_columns = 2
same_column_width = true
fixed_icon_size = Vector2( 32, 32 )
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/langue"]
offset_left = 92.0
offset_top = 13.0
offset_right = 92.0
offset_bottom = 13.0
[node name="gyroscope" type="CenterContainer" parent="VBoxContainer"]
offset_top = 31.0
offset_right = 185.0
offset_bottom = 71.0
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/gyroscope"]
offset_left = 16.0
offset_right = 169.0
offset_bottom = 40.0
[node name="Label" type="Label" parent="VBoxContainer/gyroscope/HBoxContainer"]
offset_top = 13.0
offset_right = 73.0
offset_bottom = 27.0
text = "gyroscope :"
[node name="data" type="CheckButton" parent="VBoxContainer/gyroscope/HBoxContainer"]
offset_left = 77.0
offset_right = 153.0
offset_bottom = 40.0
horizontal_alignment = 1
[node name="ambient_sound" type="CenterContainer" parent="VBoxContainer"]
offset_top = 75.0
offset_right = 185.0
offset_bottom = 115.0
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/ambient_sound"]
offset_right = 185.0
offset_bottom = 40.0
[node name="Label" type="Label" parent="VBoxContainer/ambient_sound/HBoxContainer"]
offset_top = 13.0
offset_right = 105.0
offset_bottom = 27.0
text = "Ambiant sound :"
[node name="data" type="CheckButton" parent="VBoxContainer/ambient_sound/HBoxContainer"]
offset_left = 109.0
offset_right = 185.0
offset_bottom = 40.0
[node name="resolution" type="CenterContainer" parent="VBoxContainer"]
offset_top = 119.0
offset_right = 185.0
offset_bottom = 146.0
[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/resolution"]
offset_left = 54.0
offset_right = 130.0
offset_bottom = 27.0
[node name="Label" type="Label" parent="VBoxContainer/resolution/VBoxContainer"]
offset_right = 76.0
offset_bottom = 14.0
text = "Resolution :"
[node name="data" type="ItemList" parent="VBoxContainer/resolution/VBoxContainer"]
offset_top = 18.0
offset_right = 76.0
offset_bottom = 27.0
focus_mode = 0
size_flags_horizontal = 3
size_flags_vertical = 3
auto_height = true
same_column_width = true
[node name="fullscreen" type="CenterContainer" parent="VBoxContainer"]
offset_top = 150.0
offset_right = 185.0
offset_bottom = 190.0
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/fullscreen"]
offset_left = 15.0
offset_right = 169.0
offset_bottom = 40.0
[node name="Label" type="Label" parent="VBoxContainer/fullscreen/HBoxContainer"]
offset_top = 13.0
offset_right = 74.0
offset_bottom = 27.0
text = "Fullscreen :"
[node name="data" type="CheckButton" parent="VBoxContainer/fullscreen/HBoxContainer"]
offset_left = 78.0
offset_right = 154.0
offset_bottom = 40.0
[connection signal="item_selected" from="VBoxContainer/langue/VBoxContainer/data" to="." method="_on_langue_item_selected"]
[connection signal="pressed" from="VBoxContainer/gyroscope/HBoxContainer/data" to="." method="_on_gyroscope_pressed"]
[connection signal="pressed" from="VBoxContainer/ambient_sound/HBoxContainer/data" to="." method="_on_ambient_sound_pressed"]
[connection signal="item_selected" from="VBoxContainer/resolution/VBoxContainer/data" to="." method="_on_resolution_item_selected"]
[connection signal="pressed" from="VBoxContainer/fullscreen/HBoxContainer/data" to="." method="_on_fullscreen_item_selected"]