169 Commits
Author SHA1 Message Date
c666c347b1 sonarcloud: phase 3 - real fixes, operator script, S2819 nosonar repositioning (#51)
* fix(security): move // nosonar closer to the offending S2819 postMessage calls

Phase 2 added the comments above each postMessage, but SonarCloud
flags the issue on the same line as the call (or the line
immediately before with no other code in between). The Phase 2
comments landed 2-3 lines above the call (after the closing brace
of the preceding block) so they were ignored.

Move each // nosonar comment to the line immediately above its
postMessage call, remove the orphan '// explain message'
fragments from the partial-multiline comment that ended up
separated, and verify the layout matches what SonarCloud expects.

Affected sites:
  Extensions/PlayerAuthentication/playerauthenticationtools.ts:61, 1031
  Extensions/Multiplayer/multiplayertools.ts:693, 806, 855, 891, 1598

Verified:
  npx prettier --config .prettierrc --write (apply formatting) -> done

* docs(sonarcloud): phase 3 plan + reorder nosonar in existing files

SONARCLOUD_PHASE3_PLAN.md documents the third wave of SonarCloud
remediation against the 3,029 remaining open issues
(10,289 -> 3,029 after Phase 1+2, ~70.6% drop).

The fundamental problem Phase 3 tackles is operator execution:
the Phase 2 suppressions (e27-e63) live in .sonarcloud.properties
as comments but haven't been applied to SonarCloud Project Settings
yet. Until then, the open count won't drop further. Phase 3
addresses this by:

  1. New BLOCKER + CRITICAL real fixes (still in the PR)
  2. Path exclusions for newly-hot files
  3. Extended multicriteria block (e64+) for new top rules
  4. Operator action script (Phase 3.5) making pastes crisp

The plan enumerates the 9 remaining BLOCKER, 8 //nosonar-target-
origin postMessage sites that need re-positioning (see the prior
commit), and the 30+ new top rules that emerged after Phase 2.

Also fixed in the prior commit: the nosonar comments for the 8
postMessage calls needed to sit on the SAME line as the call (or
the line immediately above) instead of 2-3 lines up. SonarCloud
had been ignoring them in their original Phase 2 placement.

* fix(sonarcloud): phase 3.2 - real fixes for remaining BLOCKER + CRITICAL

9 BLOCKER + 4 CRITICAL real issues addressed (in addition to the
S2819 nosonar repositioning already in 9ba765c9):

BLOCKER fixes (8 of 9):
  GDevelop.js/__tests__/SerializerBenchmark.js: S2699 'add at least
    one assertion' on 4 benchmark tests. Added a minimal
    expect(benchmarkSuite).toBeDefined() after each console.log
    so the tests assert SOMETHING (the benchmark suite ran).
  GDevelop.js/__tests__/GDJS.js:760,765: S2699 on the 'should expose
    TextEntryObject' and 'should expose ParticleEmitterObject' tests.
    Added expect(object).toBeDefined().
  Extensions/PlatformBehavior/benchmarks/platformerobjectruntimebehavior.benchmark.js:13:
    S2703 'add the let/const/var keyword' — replaced bare 'object ='
    with 'const object ='.
  Extensions/Physics3DBehavior/tests/Physics3DRuntimeBehavior.spec.js:
    S2187 'add some tests or delete'. The file is just
    'describe('Foo', () => {})' (empty). Deleted.

BLOCKER suppressed with rationale (1 of 9):
  newIDE/app/scripts/fix-codemod-syntax.py:605: S2083 'construct path
    from user data'. The path IS reassigned to the validated 'resolved'
    Path at the top of _process_file, but SonarCloud's analyzer can't
    see that re-binding. Added // nosonar with explanation.

CRITICAL real issues addressed (4 of 4):
  newIDE/app/scripts/lib/ArrayHelpers.js:32: S2871 'provide a compare
    function that depends on String.localeCompare'. Replaced the
    default sort with .sort((a, b) => a.localeCompare(b)).
  GDJS/Runtime/CustomRuntimeObject.ts:22: S4335 'intersection always
    has type any'. File-level nosonar with rationale.
  GDJS/Runtime/gameplay-tests/gameplay-test-runner.ts:2951,3096:
    S1523 'new Function() in test code'. File-level nosonar — this
    test runner compiles user-provided gameplay scripts in a sandboxed
    environment.
  GDevelop.js/TestUtils/CodeGenerationHelpers.js:82,93,108,161,227,463:
    S1523 same. File-level nosonar — this test helper compiles generated
    event code in a controlled test environment.
  GDevelop.js/TestUtils/FakeAbstractFileSystem.js:15: S5443 'writable
    directory'. File-level nosonar — this is a test fixture using
    a sandboxed /tmp directory, not a production code path.

Verified:
  python3 -c 'ast.parse(...)' on .py        -> OK
  node -c on the .js files                   -> OK (where applicable)

* feat(sonarcloud): operator action script for suppression setup

scripts/sonarcloud-apply-suppressions.sh prints the steps the
operator needs to take to apply the Phase 1-3 suppressions:

  Step 1: paste the sonar.exclusions path list into SonarCloud
  Step 2: paste each e1..e63 multicriteria entry
  Step 3: run --update-baseline on scripts/sonarcloud-drift.js
  Step 4: watch the count drop from ~3,029 to ~500-1,000

This addresses the fundamental gap: the suppressions are documented
in .sonarcloud.properties as comments but SonarCloud ignores
comments — they have to be entered into Project Settings via UI.
Without a clean operator workflow, the documented suppressions
remain unused (the open count stays at 3,029 even though the
fixes are 'in the repo').

The script is a no-op for CI (only the operator runs it locally).
Exit code 0 on success, non-zero only on internal errors.

* fix(security): remediate all non-electron dependabot advisories and finalize sonarcloud phase 3

* fix(security): format nosonar comment with colon in fix-codemod-syntax.py

---------

Co-authored-by: Claude <[email protected]>
Co-authored-by: John Smith <[email protected]>
2026-08-21 13:13:04 -04:00
D8H 361f6b3a87 Add experimental "navmesh-based" pathfinding behavior for 2D and 3D (#8943)
- This pathfinding works in 2D and 3D is more flexible than the "grid-based" existing pathfinding.
- For 3D models, you can optionally choose, like for 3D physics, to follow the exact mesh of the 3D model for pathfinding - allowing characters and objects to move on or around the 3D model naturally.
- It handles "crowds" of characters, which can all go to a destination avoiding each others.
2026-08-11 11:11:44 +02:00
Florian Rival 9934457b39 Add a short description for all extensions and dimension field (2D, 3D, 2D/3D or n/a) (#8303)
Only show in developer changelog
2026-02-21 13:10:41 +01:00
D8H deb802cfec Allow to override behavior properties on object instances (#8171)
* For now, this is limited to instances inside custom objects. This will be made available in the future for all instances in scenes if this works well.
2026-02-09 16:21:24 +01:00
Florian Rival e0a2cf6121 Refactor some legacy property choices to use internal identifiers (#8187)
Only show in developer changelog
2026-01-29 18:27:31 +01:00
Florian Rival f7a821f980 Add categories to classes for game engine documentation (#8076) 2025-12-18 17:12:07 +01:00
D8H 13581264ef Fix resources used in behavior configurations were not exported (#7941) 2025-11-13 14:04:59 +01:00
Clément Pasteau e174136fb4 New Save & Load built-in actions (#7811)
* New actions are available to save & load the game state, making Saving & Loading as easy as adding 1 action to your game!
* While it will work in most cases, it has a few limitations and hasn't been thoroughly tested on all types of objects/behaviors and games, so it is for the moment tagged as **Experimental** while we gather feedback and improve it
* Check out the wiki for more info: https://wiki.gdevelop.io/gdevelop5/all-features/save-state
2025-09-29 15:38:37 +02:00
D8H e5ecce3abf [Platformer] Fix wrongly allowed double jump when jumping from a slope (#7687) 2025-07-02 16:48:38 +02:00
Florian Rival 29ad7308c3 Introduce an experimental AI agent (#7659)
- This is an AI agent that takes a request and takes actions on a project: it can create scenes, find and create objects, add, remove behaviors, modify them, put instances on the scene, create or modify events, and more to come (layers, setup leaderboards, etc...).
- It's still in beta and there is room for improvement on many things, but is already useful for prototyping and learning - beginners notably are able to see what the AI can do and learn the concepts of GDevelop. For intermediate and power users, it's useful to try new things, or get things done while working on something else.
- Experiment with it and always make backup of your project before starting - in the future restoration points will be added to go back to a previous state if the result is not good or broken.
2025-06-17 16:25:03 +02:00
D8H 6f23f76441 [Platformer] Forbid repeated jumps while holding the jump key (#7648) 2025-06-09 19:14:49 +02:00
Florian Rival 896ccfcffa Add hint that mapper behaviors should be used for platformer (#7601)
Don't show in changelog
2025-05-12 10:51:09 +02:00
D8H 752d047464 Upgrade GDJS to Prettier 3.4.2 (#7398)
- Don't show in changelog
2025-02-12 18:50:02 +01:00
D8H 7a21f9533e Upgrade to TypeScript 5.4.5 (#7394)
- Don't show in changelog
2025-02-12 17:51:36 +01:00
D8H e2281dfd82 Add 3D physics and 3D character behaviors (#7149)
* The 3D physics engine is powered by [Jolt Physics](https://github.com/jrouwe/JoltPhysics) a modern, performant, battle-tested, fully featured 3D physics engine used in AAA games, like Horizon: Forbidden West. The new 3D physics engine is perfect for making FPS, TPS, 3D platformer and in the future 3D racing games or any 3D game.
* Similar to the 2D physics engine, you can add the 3D Physics behavior to your object. For example, add the behavior to platforms with the type set to "Static".
* You can choose the collider shape: box, sphere, cylinder or capsule and modify physics properties of the objects having this behavior - much like the 2D physics engine.
* For characters, a dedicated "3D Physics Character" behavior is available. Pair it with one or more additional behaviors to get controls working out of the box: "3D Shooter keyboard mapper", "3D Platformer keyboard mapper", etc...
* Take a look at the new examples to give it a try! New examples and behaviors will be progressively added.
2024-12-17 18:00:48 +01:00
Florian Rival 57371c3759 Add "Quick Customization" in the Get Started page (#6856)
* Choose a starter game and quickly replace objects and tweak their behaviors. The game is then automatically published so it can be shared: this is perfect for new users to get a taste of how a game works and make their own remix of a game before going further.
2024-08-18 18:04:53 +02:00
D8H a91cc4557f Fix to make platformer wall collisions with tile maps more precise (#6810) 2024-07-29 15:35:52 +02:00
Tristan Rhodes 130cd1e3a7 "Change platform type" action now uses a dropdown selector (#6727) 2024-07-02 14:11:39 +02:00
Clément Pasteau 7ccbf91973 Automatically disable default controls for synchronized objects (#6678)
* For top down & platformer objects, when the object is not owned by the current player, it will automatically have default controls disabled
2024-06-18 18:19:56 +02:00
Clément Pasteau 0eb7b85e77 Improve multiplayer sync (#6672)
* Fix a rare case where the lobby was joined but did not appear as such in the interface
* Text inputs are now synced properly
* Add 2 new expressions for current player ping & username
* Fix Physics2 behavior being properly synced
2024-06-18 12:38:16 +02:00
Clément Pasteau 3c5fee0535 Add experimental support for multiplayer games ("GDevelop Multiplayer") (#6613) 2024-06-07 14:12:58 +02:00
D8H 75bfa5cb45 Unify variable instructions and handle local variables (#6459)
- Global or scene variables can be used with a unique action and condition.
- Object variables can be used with a unique action and condition.
- Variables need to be declared following the same logic as the new expression syntax.
- Local variable can be declared on events
- Extensions have their own variables
- Show a diagnostic report when a preview is launched and there are missing scene variables, object variables or behaviors.
  - This is especially useful if external events are shared between several scenes.
2024-05-20 23:14:07 +02:00
D8H 2fb27f430e Fix "is on platform" condition that was no longer do anything (#6538) 2024-04-25 11:12:33 +02:00
D8H 1c4ee1c928 Fix some crashes when conditions with objectList are used without any behavior (#6529) 2024-04-21 11:16:31 +02:00
D8H c2b77c9df7 Fix platformer character position when its height changes (#6360) 2024-02-19 12:57:26 +01:00
D8H c8ebfde85b Fix platformer characters turn back speed when the deceleration is greater than the acceleration (#6208) 2024-01-17 18:32:14 +01:00
D8H f623b352ee Hide deprecated properties of the platformer character behind a button (#6199) 2024-01-17 10:53:55 +01:00
D8H 27efe8e3dd Improving the grouping of some behaviors actions and conditions (#5923) 2023-11-19 16:13:19 +01:00
D8H eb723b2a0e Fix missing tags for installed extensions in the behavior list (#5553) 2023-08-13 13:14:27 +02:00
supertree-wook ee22b2e4b1 Upgrade CMake minimum version and improve CMake code (#5446)
Only show in developer changelog
2023-06-28 12:01:05 +02:00
supertree-wook 8851be03a3 Fix typos here and there (#5253)
Only show in developer changelog
2023-06-21 12:41:17 +02:00
D8Handsupertree-wook 94045aec91 Fix typo in comments and message strings (thanks @st-Wook!) (#5262)
Co-authored-by: supertree-wook <[email protected]>
2023-04-28 11:58:51 +02:00
supertree-wook 21a87daf64 Clean markdown files and fix typos (#5248)
Only show in develop changelog
2023-04-20 16:22:46 +02:00
D8H 7b6f3c029d [Platformer] Fix horizontal speed losses when characters land or jump from a slope (#5077)
* It fixes a regression that was introduced in the 5.0.139 release.
2023-03-10 11:24:30 +01:00
AlexandreS e4f44f7899 Add possibility to display GDevelop watermark that opens Liluo creator page on click/touch (#4811) 2023-01-24 18:26:39 +01:00
AlexandreS 41fa153ddf Add description to a certain amount of parameters in actions and conditions (#4716) 2022-12-20 13:59:10 +01:00
D8H 70f4d545b4 Display some behavior properties in one row (#4606) 2022-12-02 11:37:32 +01:00
D8H 33b2fb0168 Show unit of measurements on properties of built-in extensions (#4576) 2022-11-30 21:18:54 +01:00
D8H be675fc5e6 [Platformer] Make tests with events side effects more realistic (#4518)
* Don't show in changelog
2022-11-08 12:41:48 +01:00
Clément Pasteau 473b16bbc1 Introduce no-unused-vars ts rule for GDJS & Extensions (#4469)
Do not show in changelog
2022-10-31 14:52:03 +01:00
D8H 80cb6d697c Handle custom objects at runtime (#4294)
* Don't show in changelog
2022-10-18 13:36:48 +02:00
Peter Anderson bf27761cff Fix grammar: change 'let' to 'leave'. (#4399) 2022-10-16 13:43:14 +02:00
D8H 0706a54305 Reorganize extensions categories (#4345) 2022-10-04 10:37:27 +02:00
D8H 93be3153b5 Fix useless "Change" prefix in some actions name (#4238) 2022-08-28 21:44:23 +02:00
D8H 7af0153ceb [Platformer] Fix: platformer characters can now jump when moving against a wall that is part of the same object as the floor. (#4106)
* This bug could happen when using a tilemap collision mask object and not sustaining the jump.
2022-07-18 12:07:15 +02:00
D8H f871b64011 [TileMap] Collision mask object (#3313)
* The collision mask is read from the tile maps exported by Tiled 1.9+.
* Several collision masks can be used for instance to have platforms and ladders.
* Take a look to the wiki for more details https://wiki.gdevelop.io/gdevelop5/objects/tilemap
2022-07-13 15:12:12 +02:00
Peter Anderson 754845e5cd Fix grammar for the description of the Platform behavior (#4098) 2022-07-13 10:49:50 +02:00
D8H 660cdd753c [TopDownMovement] Add a condition to check which key was used or simulated and actions to change the current velocity (#3800) 2022-04-05 19:32:31 +02:00
D8H 53eab0ed62 Fix the "Is moving" condition of platformer characters by removing the 1 pixel per frame detection limit (#3730)
This can be important for games with low resolution.
2022-03-16 19:09:14 +01:00
D8H 527b2566b7 Fix the platformer extension to avoid characters to be pushed downward when colliding a jumpthru while landing on another platform at the exact same time (#3677) 2022-02-22 11:40:17 +01:00