39 Commits

Author SHA1 Message Date
Vaillant Jeremy 46ab28f76f fix(android): enable ETC2/ASTC import + use versioned editor settings
Build Puzzle Quest / Validate GDScript (push) Successful in 25s
Build Puzzle Quest / Lint GDScript (push) Successful in 26s
Build Puzzle Quest / Lint GDScript (pull_request) Successful in 40s
Build Puzzle Quest / Validate GDScript (pull_request) Successful in 48s
Build Puzzle Quest / Export Linux (push) Successful in 6m18s
Build Puzzle Quest / Export Windows (push) Successful in 5m43s
Build Puzzle Quest / Export Android (push) Successful in 8m44s
Build Puzzle Quest / Export Linux (pull_request) Successful in 7m0s
Build Puzzle Quest / Export Windows (pull_request) Successful in 6m58s
Build Puzzle Quest / Export Android (pull_request) Successful in 5m34s
Two fixes that finally land the Android export. Verified locally
with godot 4.6.2-arch + downloaded 4.6 templates + Android SDK.

- project.godot: add
  rendering/textures/vram_compression/import_etc2_astc=true.
  Without it Godot refuses the Android export with "La plateforme
  cible nécessite une compression de texture « ETC2/ASTC »". In
  headless mode this surfaces as an *empty* configuration-errors
  block, which is what kept us stuck in CI.

- workflow: write Godot editor settings to
  editor_settings-${GODOT_VERSION}.tres (i.e. -4.6.tres on 4.6),
  not -4.tres. Godot 4.5+ uses a minor-version-suffixed settings
  file; the major-only name is ignored by 4.6, so our injected
  android_sdk_path / java_sdk_path / debug_keystore never reached
  the export plugin.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 20:35:58 +02:00
Vaillant Jeremy 60d9f614ee Replace Event + GlobalAnimation autoloads with class_name + static funcs
Two of the five autoloads were stateless helper bundles, not the
persistent application-wide systems that the Godot 4 best-practice
guide reserves autoload slots for. Convert them to plain classes with
all-static methods so they no longer need a Node living under /root.

- scripts/Animation.gd -> scripts/game_animation.gd (renamed:
  conflict with the built-in Animation class; the autoload sidestepped
  it by being called GlobalAnimation). class_name GameAnimation,
  every helper static. The dissolve tween now captures its target
  material in a lambda closure, eliminating the current_material
  member that the autoload kept as shared mutable state.
- scripts/Event.gd -> scripts/event.gd, class_name Event, every
  handler static. Added Event.level_pressed(name) -> Callable for the
  one place ChooseScene needed dynamic lookup of a per-level handler
  (replaces the old _build_method('_on_' + name + '_pressed') +
  Callable(autoload, string) reflection trick with an explicit match).

Updated call sites:
- scripts/Global.gd: animation.connect('animation_started',
  Callable(Event, '...')) -> animation.animation_started.connect(
  Event._loading_is_started). Same for animation_finished.
- scenes/levels/Levels.gd: GlobalAnimation.* -> GameAnimation.*;
  Quit/TextureButton.connect('pressed', Callable(Event, '...')) ->
  pressed.connect(Event._on_main_scene_pressed).
- scenes/UI/choose_scenes/ChooseScene.gd: per-level button connects
  go through Event.level_pressed(); reset button's bound callable now
  reads Event._on_reset_level.bind(...); cleanup no longer relies on
  is_connected with an unbound Callable (which would never match a
  bound one anyway) -- iterates reset.pressed.get_connections()
  instead. Drop the now-dead _build_method helper.

Also: organise scripts/ by promoting the one-shot migration helpers
(migrate_shaders, migrate_misc, resave_scenes, devisualize_shaders,
find_visualshaders) into scripts/migration/. They are not part of
the runtime and should not be browsable next to the autoloads.

Autoload count goes 5 -> 3 (Loading, Global, Setting remain --
Setting will move to a Resource in a later refactor).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-16 21:50:00 +02:00
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
Vaillant Jeremy 4d5db7bb61 Make Main, Settings, ChooseScene, and gameplay run in Godot 4.6
Catch-all commit for everything the --convert-3to4 tool missed during a
manual playtest of the game. All errors raised by clicking through Main
-> Puzzles -> level were fixed.

GDScript:
- PackedScene.instance() -> instantiate() (ChooseScene.gd)
- String(x) constructor doesn't exist -> str(x) (MBase, MScene,
  MLevel, Animation, Levels)
- 'x as int/String/bool' doesn't parse strings -> explicit
  int()/str()/bool(int()) (MScene, MLevel, MSetting)
- BaseButton.pressed (property) -> button_pressed; set_pressed() ->
  direct assignment (Settings.gd)
- AnimationPlayer.add_animation() removed -> go through
  AnimationLibrary (Levels.gd)
- PhysicsDirectSpaceState3D.intersect_ray(from, to, ...) ->
  PhysicsRayQueryParameters3D.create() (Levels.gd)
- @export with type-hint-in-comment ('# (String, ...)') -> explicit
  @export_enum (candle.gd)
- Get effective material with get_active_material() instead of
  get_surface_override_material(), with null guard (Levels.gd)
- get_node() -> get_node_or_null() so missing items from ahog.json
  (e.g. sm_super_dager in Home) don't crash (Levels.gd)

Scenes/resources:
- Remove 14 Tween nodes from WarCraft.tscn — Tween is no longer a
  Node in Godot 4. Rewrite Animation.start_dissolve to use
  create_tween().tween_method().
- Rename property material/N -> surface_material_override/N in every
  .tscn (10 files) — Godot 3 -> 4 rename that --convert-3to4 missed.
  Without this, MeshInstance3D.get_active_material(0) returned the
  glTF-imported StandardMaterial3D instead of the project's custom
  dissolve ShaderMaterial.

Shaders:
- One-shot scripts/migrate_shaders.gd walks every .material under
  assets/ and fixes Godot 3 -> 4 shader code in-place. Fixed 17
  materials: depth_draw_alpha_prepass -> depth_prepass_alpha,
  hint_color -> source_color, NORMALMAP -> NORMAL_MAP.

Result: Main, Settings, ChooseScene, and the WarCraft level all run
without script or shader errors. Remaining noise is non-blocking
(visual_shader graph in text_outline.material, baked lightmap binary
format from Godot 3, and empty animation tracks).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-16 19:40:03 +02:00
Vaillant Jeremy ec906117bb Replace godot_db_manager plugin with native DB, port lod plugin
godot_db_manager was incompatible with Godot 4 (used WindowDialog, Tabs,
PopupPanel which were all removed). Replace with a minimal Database.gd
that parses the same ahog.json format and exposes the same surface API
(get_table_by_name, get_data_at_row_idx, edit_data, save_db, etc.) used
by the M* model classes — no changes needed in MBase/MScene/MLevel/MSetting.

Also port the lod plugin: fix class_name syntax (Godot 4 uses @icon
separately from class_name extends) and Particles -> GPUParticles3D.

Rewrite Global.gd async scene loading: the convert-3to4 tool mapped
load_interactive -> load_threaded_request but those have different APIs
(stage count, poll vs. status enum). Reimplement using the new
load_threaded_get_status / load_threaded_get pair.

Clean project.godot: drop the old _global_script_classes table (Godot 4
uses inline class_name declarations), remove gddb_* autoloads, and
remove the godot_db_manager entry from editor_plugins.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-16 19:21:09 +02:00
Vaillant Jeremy 01ea3af253 Run godot --convert-3to4 (automated conversion)
Apply Godot 4.6 automated conversion: renames Spatial.translate->position,
margin_*->offset_*, tool->@tool, .empty()->.is_empty(), DynamicFont->FontFile,
onready->@onready, export()->@export, and many more.

127 files changed by the tool. Manual fixes still required for:
 - godot_db_manager plugin (incompatible APIs: WindowDialog, Tabs, etc.)
 - lod plugin (Spatial -> Node3D renames)
 - ResourceLoader.load_interactive removed -> load_threaded_request
 - OS.set_window_fullscreen removed -> DisplayServer
 - Viewport.set_size_override removed

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-16 19:18:27 +02:00
Vaillant Jeremy efa35a444a Migrate to Godot 3.5 LTS
Open project with Godot 3.5.3 to update project.godot to the new
config format (adds physical_scancode field to InputEventKey).
Intermediate step before --convert-3to4 to Godot 4.x.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-16 19:16:24 +02:00
darknight a33ecafb81 feature/shader-animation (#83)
Co-authored-by: Vaillant Jeremy <vaillant.jeremy@dev-crea.com>
Co-authored-by: VAILLANT Jeremy <vaillant.jeremy@dev-crea.com>
Reviewed-on: Athena/game-source#83
Co-authored-by: darknight <vaillant.jeremy@dev-crea.com>
Co-committed-by: darknight <vaillant.jeremy@dev-crea.com>
2021-06-26 15:33:34 +02:00
darknight 1883355678 feature/connect-level-and-reset-btn (#77)
Co-authored-by: VAILLANT Jeremy <vaillant.jeremy@dev-crea.com>
Reviewed-on: Athena/game-source#77
Co-authored-by: darknight <vaillant.jeremy@dev-crea.com>
Co-committed-by: darknight <vaillant.jeremy@dev-crea.com>
2021-06-06 16:54:38 +02:00
stilobique 9712f13365 feature/packages (#75)
Branche dédié pour la generation des packages

Co-authored-by: stilobique-i7 <aurelienvlt@free.fr>
Reviewed-on: Athena/game-source#75
Co-authored-by: stilobique <aurelienvlt@free.fr>
Co-committed-by: stilobique <aurelienvlt@free.fr>
2021-06-05 14:13:44 +02:00
stilobique dee1ee5b1b feature/select-puzzle-update (#72)
Si tu peut regarder pour finir la pull request pour l'écran de selection des puzzles !

Co-authored-by: stilobique-i7 <aurelienvlt@free.fr>
Co-authored-by: VAILLANT Jeremy <vaillant.jeremy@dev-crea.com>
Reviewed-on: Athena/game-source#72
Co-authored-by: stilobique <aurelienvlt@free.fr>
Co-committed-by: stilobique <aurelienvlt@free.fr>
2021-06-04 17:54:23 +02:00
darknight d1bf0f76d8 Fix case and move single script in folder scripts (#69)
Co-authored-by: VAILLANT Jeremy <vaillant.jeremy@dev-crea.com>
Reviewed-on: Athena/game-source#69
Co-authored-by: darknight <vaillant.jeremy@dev-crea.com>
Co-committed-by: darknight <vaillant.jeremy@dev-crea.com>
2021-06-03 22:53:49 +02:00
darknight 0debe0d2d3 feature/update-main-ui (#66)
Co-authored-by: stilobique-i7 <aurelienvlt@free.fr>
Co-authored-by: VAILLANT Jeremy <vaillant.jeremy@dev-crea.com>
Reviewed-on: Athena/game-source#66
Co-authored-by: darknight <vaillant.jeremy@dev-crea.com>
Co-committed-by: darknight <vaillant.jeremy@dev-crea.com>
2021-06-03 22:18:50 +02:00
darknight ed20465f39 feature/list-object-counter (#60)
Co-authored-by: VAILLANT Jeremy <vaillant.jeremy@dev-crea.com>
Reviewed-on: Athena/game-source#60
Co-authored-by: darknight <vaillant.jeremy@dev-crea.com>
Co-committed-by: darknight <vaillant.jeremy@dev-crea.com>
2021-05-29 21:09:10 +02:00
VAILLANT Jeremy c46cb1f41e Add setting true/false audio background in war level 2021-05-25 14:14:03 +02:00
stilobique-i7 c71cfe0efe Fix parchment paper material 2021-05-24 12:57:32 +02:00
stilobique-i7 7cb01db654 LOD Spatial, fix resource path 2021-05-23 15:27:02 +02:00
stilobique-i7 38e71b7343 Fix resource path about LODSpatial node 2021-05-23 15:23:16 +02:00
stilobique-i7 a741e0860e Add and active LOD plugin 2021-05-23 14:49:12 +02:00
stilobique-surface 74a5c3ac69 Reordering scene, and setup basic scene instance on main view 2021-05-15 12:13:23 +02:00
stilobique-surface 2d1081a3f8 Update new GUI.
- Add font
- first step to update main menu Ui
- replace button with a subscene
- add props textures
- write a new resolution default
- actvate HDPI
2021-05-15 12:13:23 +02:00
VAILLANT Jeremy b6466e10cd Remove verbose log mode 2021-05-13 23:20:56 +02:00
VAILLANT Jeremy e8edc134e1 Add addon database 2021-05-13 23:20:27 +02:00
VAILLANT Jeremy b13a850150 Remove font oversampling & display FPS in stdout 2021-05-12 13:03:34 +02:00
Vaillant Jeremy 272f48ee48 Set a default import preset about mesh object 2021-05-11 14:31:00 +02:00
stilobique-surface ffd4acef6b Project Setting : Add sensor setup to control the landscape orientation on Mobile device 2021-05-10 15:14:09 +02:00
darknight 353233b0ce Merge pull request 'feature/populate-warcraft' (#27) from feature/populate-warcraft into dev
Reviewed-on: Athena/game-source#27
2021-05-10 14:37:10 +02:00
stilobique-surface e35c78d241 Tweak rendering setup for mobile device 2021-05-10 14:19:10 +02:00
VAILLANT Jeremy 90591e098e Configure locales for main scene 2021-05-09 23:28:45 +02:00
stilobique-surface 18f48e21a8 Disalbe setup "vertex shading" to false 2021-05-09 21:27:15 +02:00
stilobique-surface b56f27ec33 Reactivate the Fallback error 2021-05-09 17:16:17 +02:00
stilobique-surface 247c2d110c Revert with a GLES 3 rendering 2021-05-09 17:16:17 +02:00
VAILLANT Jeremy 275c0a080f Configure autoload & input end 2021-05-09 17:10:24 +02:00
VAILLANT Jeremy 9128dcb966 Don't close apps when press back abdroid button 2021-05-08 20:23:04 +02:00
stilobique-surface 585cf2f261 Setup a rendering to be compatible with Android 2021-05-08 20:10:21 +02:00
stilobique-surface ab8e189048 Godot settings, remove the borderless option 2021-05-08 19:06:29 +02:00
VAILLANT Jeremy 1e3e757287 Configure android 2021-05-08 17:25:15 +02:00
VAILLANT Jeremy 2c1f5a0f93 Add basic scene interface 2021-05-08 12:49:27 +02:00
stilobique f5666bc8ed Basic Godot project setup 2021-05-02 12:02:26 +02:00