Add a short description for all extensions and dimension field (2D, 3D, 2D/3D or n/a) (#8303)

Only show in developer changelog
This commit is contained in:
Florian Rival
2026-02-21 13:10:41 +01:00
committed by GitHub
parent d9279e94fb
commit 9934457b39
83 changed files with 244 additions and 9 deletions
@@ -18,6 +18,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAdvancedExtension(
_("Advanced control features for functions made with events."),
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Copy object parameters between functions. Advanced event function control flow.")
.SetCategory("Advanced");
extension.AddInstructionOrExpressionGroupMetadata(_("Event functions"))
.SetIcon("res/function32.png");
@@ -19,6 +19,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAsyncExtension(
_("Functions that defer the execution of the events after it."),
"Arthur Pacaud (arthuro555)",
"Open source (MIT License)")
.SetShortDescription("Asynchronous tasks that pause sub-event execution until resolved.")
.SetCategory("Advanced");
extension.AddInstructionOrExpressionGroupMetadata(_("Asynchronous functions"))
.SetIcon("res/function32.png");
@@ -19,6 +19,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(
"files. They can be either long music or short sound effects."),
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Play/stop/pause sounds and music. Volume/pitch/loop/fades/offset, spatial audio on channels, preload/unload audio.")
.SetExtensionHelpPath("/all-features/audio")
.SetCategory("Audio");
extension.AddInstructionOrExpressionGroupMetadata(_("Sounds and music"))
@@ -20,6 +20,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(
_("Common features that can be used for all objects in GDevelop."),
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Base object: position, angle, size, visibility, layer, z-order, distance, collision, variables, timers, effects.")
.SetExtensionHelpPath("/objects/base_object/events");
extension.AddInstructionOrExpressionGroupMetadata(_("Collision"))
.SetIcon("res/conditions/collision24.png");
@@ -32,6 +32,8 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsCameraExtension(
"Florian Rival",
"Open source (MIT License)")
.SetCategory("Camera")
.SetShortDescription("Layers, 2D/3D camera position/zoom/rotation, show/hide layers, layer effects, layer time scale.")
.SetDimension("2D/3D")
.SetExtensionHelpPath("/interface/scene-editor/layers-and-cameras");
extension.AddInstructionOrExpressionGroupMetadata(_("Layers and cameras"))
.SetIcon("res/conditions/camera24.png");
@@ -22,6 +22,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAnimatableExtension(
_("Actions and conditions for objects having animations (sprite, 3D models...)."),
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Play/pause/set animations by name or index. Speed, frame, loop, finished checks.")
.SetExtensionHelpPath("/objects");
extension.AddInstructionOrExpressionGroupMetadata(_("Objects with animations"))
.SetIcon("res/actions/animation24.png");
@@ -22,6 +22,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsEffectExtension(
_("Actions/conditions to enable/disable and change parameters of visual effects applied on objects."),
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Enable/disable visual effects on objects. Change effect parameters at runtime.")
.SetExtensionHelpPath("/objects");
extension.AddInstructionOrExpressionGroupMetadata(_("Effects"))
.SetIcon("res/actions/effect_black.svg");
@@ -22,6 +22,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsFlippableExtension(
_("Actions/conditions for objects which can be flipped horizontally or vertically."),
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Flip objects horizontally or vertically. Check flip state.")
.SetExtensionHelpPath("/objects");
extension.AddInstructionOrExpressionGroupMetadata(_("Effects"))
.SetIcon("res/actions/effect_black.svg");
@@ -23,6 +23,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsOpacityExtension(
"check the opacity of an object (0-255)."),
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Get/set object opacity (0=transparent, 255=opaque).")
.SetExtensionHelpPath("/objects");
extension.AddInstructionOrExpressionGroupMetadata(_("Objects with opacity"))
.SetIcon("res/actions/opacity24.png");
@@ -23,6 +23,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsResizableExtension(
"be resized (i.e: most objects)."),
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Read/change width and height of resizable objects.")
.SetExtensionHelpPath("/objects");
extension.AddInstructionOrExpressionGroupMetadata(_("Size")).SetIcon(
"res/actions/scale24_black.png");
@@ -23,6 +23,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsScalableExtension(
"check the scale of an object (default: 1)."),
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Get/set scale (X, Y, overall) of scalable objects. Default 1.")
.SetExtensionHelpPath("/objects");
extension.AddInstructionOrExpressionGroupMetadata(_("Scalable objects"))
.SetIcon("res/actions/scale24_black.png");
@@ -22,6 +22,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsTextContainerExtension(
_("Allows an object to contain a text, usually shown on screen, that can be modified."),
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Get/set the text content of objects that display text (Text, BBText, etc.).")
.SetExtensionHelpPath("/objects");
extension.AddInstructionOrExpressionGroupMetadata(_("Objects containing a text"))
.SetIcon("res/conditions/text24_black.png");
@@ -21,6 +21,7 @@ BuiltinExtensionsImplementer::ImplementsCommonConversionsExtension(
"JSON string.",
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Convert number<->string, degrees<->radians, variable<->JSON.")
.SetExtensionHelpPath("/all-features/common-conversions");
extension.AddInstructionOrExpressionGroupMetadata(_("Conversion"))
.SetIcon("res/conditions/toujours24_black.png");
@@ -30,6 +30,7 @@ BuiltinExtensionsImplementer::ImplementsCommonInstructionsExtension(
"express the game logic and rules.",
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Standard events, sub-events, for-each, repeat, while, event groups, links to external events.")
.SetCategory("Advanced")
.SetExtensionHelpPath("/all-features/advanced-conditions");
extension
@@ -19,6 +19,7 @@ BuiltinExtensionsImplementer::ImplementsExternalLayoutsExtension(
"external layouts.",
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Create objects from an external layout to reuse level sections or UI templates.")
.SetExtensionHelpPath("/interface/scene-editor/external-layouts")
.SetCategory("Advanced");
extension.AddInstructionOrExpressionGroupMetadata(_("External layouts"))
@@ -20,6 +20,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsFileExtension(
"stored on the device and erased when the game is uninstalled.",
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Persistent key-value storage on device. Write/read data across game sessions.")
.SetExtensionHelpPath("/all-features/storage")
.SetCategory("Advanced");
extension.AddInstructionOrExpressionGroupMetadata(_("Storage"))
@@ -22,6 +22,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsKeyboardExtension(
"scratch."),
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Check if a key is pressed or released. Last pressed key expression.")
.SetExtensionHelpPath("/all-features/keyboard")
.SetCategory("Input");
extension.AddInstructionOrExpressionGroupMetadata(_("Keyboard"))
@@ -17,7 +17,8 @@ BuiltinExtensionsImplementer::ImplementsMathematicalToolsExtension(
_("Mathematical tools"),
"A set of mathematical functions that can be used in expressions.",
"Florian Rival",
"Open source (MIT License)");
"Open source (MIT License)")
.SetShortDescription("Random, trigonometry (sin/cos/tan/atan2), min/max, abs, ceil/floor/round, clamp, sign, log, pow, sqrt, lerp.");
extension.AddInstructionOrExpressionGroupMetadata(_("Mathematical tools"))
.SetIcon("res/mathfunction.png");
@@ -26,6 +26,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsMouseExtension(
"separately in different events.",
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Mouse buttons, wheel, cursor position. Touch positions, started/ended touches. Multi-touch support.")
.SetExtensionHelpPath("/all-features/mouse-touch")
.SetCategory("Input");
extension.AddInstructionOrExpressionGroupMetadata(_("Mouse and touch"))
@@ -20,6 +20,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsNetworkExtension(
"a URL on the device browser."),
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Send HTTP requests, JSON parsing, open URL in browser, enable analytics metrics.")
.SetExtensionHelpPath("/all-features/network")
.SetCategory("Network");
extension.AddInstructionOrExpressionGroupMetadata(_("Network"))
@@ -23,6 +23,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsSceneExtension(
"game, set background color, or disable input when focus is lost."),
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Change/pause/stop scenes, check scene start, preload assets, get scene name, quit game.")
.SetExtensionHelpPath("" /*TODO: Add a documentation page for this */);
extension.AddInstructionOrExpressionGroupMetadata(_("Scene"))
.SetIcon("res/conditions/depart24.png");
@@ -22,6 +22,8 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsSpriteExtension(
"for most elements of a 2D game."),
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Animated 2D object with multiple directions, frames, collision masks, and points.")
.SetDimension("2D")
.SetExtensionHelpPath("/objects/sprite");
extension.AddInstructionOrExpressionGroupMetadata(_("Sprite"))
.SetIcon("CppPlatform/Extensions/spriteicon.png");
@@ -20,6 +20,7 @@ BuiltinExtensionsImplementer::ImplementsStringInstructionsExtension(
"line, upper/lowercase, substring, find, replace, etc...",
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("String expressions: newline, upper/lowercase, substring, find, replace one/all, length, repeat.")
.SetExtensionHelpPath("" /*TODO: Add a documentation page for this */);
extension.AddInstructionOrExpressionGroupMetadata(_("Text manipulation"))
.SetIcon("res/actions/text24_black.png");
@@ -23,6 +23,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsTimeExtension(
"the last frame or timer elapsed time.",
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Scene timers (start/pause/reset), time scale (slow motion), wait action, delta time, timestamp.")
.SetExtensionHelpPath("/all-features/timers-and-time");
extension.AddInstructionOrExpressionGroupMetadata(_("Timers and time"))
.SetIcon("res/conditions/timer24.png");
@@ -21,6 +21,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsVariablesExtension(
"inventory or the result of a web request.",
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Scene/global/object variables: read, set, compare, arrays, structures, JSON conversion.")
.SetExtensionHelpPath("/all-features/variables");
extension.AddInstructionOrExpressionGroupMetadata(_("Variables"))
.SetIcon("res/conditions/var24.png");
@@ -23,6 +23,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsWindowExtension(
"Florian Rival",
"Open source (MIT License)")
.SetCategory("User interface")
.SetShortDescription("Game window title, size, fullscreen, resolution, adaptive scaling, screen dimensions.")
.SetExtensionHelpPath("/all-features/window");
extension
.AddInstructionOrExpressionGroupMetadata(_("Game window and resolution"))
@@ -110,6 +110,22 @@ class GD_CORE_API PlatformExtension {
return *this;
}
/**
* \brief Set a short description for the extension, used by AI/LLM agents.
*/
PlatformExtension& SetShortDescription(const gd::String& shortDescription_) {
shortDescription = shortDescription_;
return *this;
}
/**
* \brief Set the dimension of the extension ("2D", "3D", "2D/3D" or empty).
*/
PlatformExtension& SetDimension(const gd::String& dimension_) {
dimension = dimension_;
return *this;
}
/**
* \brief Set the category of the extension.
*/
@@ -398,6 +414,16 @@ class GD_CORE_API PlatformExtension {
*/
const gd::String& GetDescription() const { return informations; }
/**
* \brief Return a short description of the extension, used by AI/LLM agents.
*/
const gd::String& GetShortDescription() const { return shortDescription; }
/**
* \brief Return the dimension of the extension ("2D", "3D", "2D/3D" or empty).
*/
const gd::String& GetDimension() const { return dimension; }
/**
* \brief Return the name of the extension developer
*/
@@ -699,6 +725,8 @@ static gd::String GetVariantFullType(const gd::String& extensionName,
///< actions/conditions/expressions/objects/behavior/event.
gd::String fullname; ///< Name displayed to users in the editor.
gd::String informations; ///< Description displayed to users in the editor.
gd::String shortDescription; ///< Short description for AI/LLM agents.
gd::String dimension; ///< "2D", "3D", "2D/3D" or empty.
gd::String category;
gd::String author; ///< Author displayed to users in the editor.
gd::String license; ///< License name displayed to users in the editor.
@@ -38,6 +38,7 @@ void EventsFunctionsExtension::Init(const gd::EventsFunctionsExtension& other) {
extensionNamespace = other.extensionNamespace;
shortDescription = other.shortDescription;
description = other.description;
dimension = other.dimension;
name = other.name;
fullName = other.fullName;
category = other.category;
@@ -59,6 +60,7 @@ void EventsFunctionsExtension::SerializeTo(SerializerElement& element, bool isEx
element.SetAttribute("version", version);
element.SetAttribute("extensionNamespace", extensionNamespace);
element.SetAttribute("shortDescription", shortDescription);
element.SetAttribute("dimension", dimension);
element.AddChild("description").SetMultilineStringValue(description);
element.SetAttribute("name", name);
element.SetAttribute("fullName", fullName);
@@ -133,6 +135,7 @@ void EventsFunctionsExtension::UnserializeExtensionDeclarationFrom(
version = element.GetStringAttribute("version");
extensionNamespace = element.GetStringAttribute("extensionNamespace");
shortDescription = element.GetStringAttribute("shortDescription");
dimension = element.GetStringAttribute("dimension");
description = element.GetChild("description").GetMultilineStringValue();
name = element.GetStringAttribute("name");
fullName = element.GetStringAttribute("fullName");
@@ -78,6 +78,12 @@ class GD_CORE_API EventsFunctionsExtension {
return *this;
}
const gd::String& GetDimension() const { return dimension; };
EventsFunctionsExtension& SetDimension(const gd::String& dimension_) {
dimension = dimension_;
return *this;
}
const gd::String& GetName() const { return name; };
EventsFunctionsExtension& SetName(const gd::String& name_) {
name = name_;
@@ -395,6 +401,7 @@ class GD_CORE_API EventsFunctionsExtension {
gd::String extensionNamespace;
gd::String shortDescription;
gd::String description;
gd::String dimension;
gd::String name;
gd::String fullName;
gd::String category;
+4
View File
@@ -27,6 +27,10 @@ module.exports = {
'Florian Rival',
'MIT'
)
.setShortDescription(
'3D objects (box, model), 3D camera, Z position/rotation/size. Base 3D capability for all objects.'
)
.setDimension('3D')
.setCategory('General');
extension
.addInstructionOrExpressionGroupMetadata(_('3D'))
+3
View File
@@ -27,6 +27,9 @@ module.exports = {
'Florian Rival',
'MIT'
)
.setShortDescription(
'AdMob ads: banners, interstitials, rewarded video, app open. Configure test/production ad units.'
)
.setExtensionHelpPath('/all-features/admob')
.setCategory('Ads');
extension
+3
View File
@@ -27,6 +27,9 @@ module.exports = {
'Arthur Pacaud (arthuro555)',
'MIT'
)
.setShortDescription(
'Window focus, position, size, always-on-top, minimize/maximize, content protection. Desktop only.'
)
.setCategory('User interface');
extension
.addInstructionOrExpressionGroupMetadata(_('Advanced window management'))
+2
View File
@@ -17,6 +17,8 @@ void DeclareAnchorBehaviorExtension(gd::PlatformExtension& extension) {
_("Anchor objects to the window's bounds."),
"Victor Levasseur",
"Open source (MIT License)")
.SetShortDescription("Pin object edges/center to window bounds. Useful for HUD/UI elements that adapt to screen size.")
.SetDimension("2D")
.SetCategory("User interface")
.SetTags("anchor, ui, layout")
.SetExtensionHelpPath("/behaviors/anchor");
+4
View File
@@ -27,6 +27,10 @@ module.exports = {
'Todor Imreorov',
'Open source (MIT License)'
)
.setShortDescription(
'Rich text with BBCode markup: bold, italic, colors, sizes, shadows in a single object.'
)
.setDimension('2D')
.setExtensionHelpPath('/objects/bbtext')
.setCategory('Text');
extension
+4
View File
@@ -27,6 +27,10 @@ module.exports = {
'Aurélien Vivet',
'Open source (MIT License)'
)
.setShortDescription(
'Text rendered from bitmap font images. High performance, full character aesthetic control.'
)
.setDimension('2D')
.setExtensionHelpPath('/objects/bitmap_text')
.setCategory('Text');
extension
+3
View File
@@ -27,6 +27,9 @@ module.exports = {
'Arthur Pacaud (arthuro555), Aurélien Vivet (Bouh)',
'MIT'
)
.setShortDescription(
'Enable 2D debug draw, log messages to debugger console, pause execution.'
)
.setCategory('Advanced');
extension
.addInstructionOrExpressionGroupMetadata(_('Debugger Tools'))
@@ -26,6 +26,8 @@ void DeclareDestroyOutsideBehaviorExtension(gd::PlatformExtension& extension) {
"removed unless it goes beyond the unseen object grace distance."),
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Auto-destroy 2D objects when outside camera bounds. Configurable extra margin distance.")
.SetDimension("2D")
.SetCategory("Game mechanic")
.SetTags("screen")
.SetExtensionHelpPath("/behaviors/destroyoutside");
+3
View File
@@ -25,6 +25,9 @@ module.exports = {
'Matthias Meike',
'Open source (MIT License)'
)
.setShortDescription(
'Access mobile device orientation (alpha/beta/gamma) and motion sensors (acceleration, rotation rate).'
)
.setExtensionHelpPath('/all-features/device-sensors')
.setCategory('Input');
extension
@@ -26,6 +26,9 @@ module.exports = {
'Matthias Meike',
'Open source (MIT License)'
)
.setShortDescription(
'Trigger vibrations on mobile devices with configurable duration and patterns.'
)
.setExtensionHelpPath('/all-features/device-vibration')
.setCategory('User interface');
extension
+3
View File
@@ -25,6 +25,9 @@ module.exports = {
'Todor Imreorov',
'Open source (MIT License)'
)
.setShortDescription(
'Yarn Spinner dialogue trees: branching dialogues, choices, commands, variables. Built-in editor.'
)
.setExtensionHelpPath('/all-features/dialogue-tree')
.setCategory('Game mechanic');
extension
@@ -20,6 +20,7 @@ void DeclareDraggableBehaviorExtension(gd::PlatformExtension& extension) {
"or disable the behavior when needed."),
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Drag objects with mouse/touch. Enable/disable at runtime. Multi-touch aware.")
.SetCategory("User interface")
.SetTags("drag")
.SetExtensionHelpPath("/behaviors/draggable");
+4
View File
@@ -25,6 +25,10 @@ module.exports = {
'Various contributors from PixiJS, PixiJS filters and GDevelop',
'MIT'
)
.setDimension('2D')
.setShortDescription(
'Visual effects: blur, glow, color adjust, outline, shadow, pixelate, CRT, reflection, displacement, and more.'
)
.setCategory('Visual effect')
.setExtensionHelpPath('/interface/scene-editor/layer-effects');
+11 -7
View File
@@ -17,13 +17,17 @@
module.exports = {
createExtension: function (_, gd) {
const extension = new gd.PlatformExtension();
extension.setExtensionInformation(
'MyDummyExtension',
_('My Dummy Extension'),
_('An example of a declaration of an extension'),
'Florian Rival',
'MIT'
);
extension
.setExtensionInformation(
'MyDummyExtension',
_('My Dummy Extension'),
_('An example of a declaration of an extension'),
'Florian Rival',
'MIT'
)
.setShortDescription(
'Example/dummy extension for testing extension declaration patterns.'
);
extension
.addInstructionOrExpressionGroupMetadata(_('My Dummy Extension'))
.setIcon('CppPlatform/Extensions/topdownmovementicon.png');
@@ -27,6 +27,9 @@ module.exports = {
'Florian Rival',
'Open source (MIT License)'
)
.setShortDescription(
'Facebook Instant Games: scores, leaderboards, player data, share, ads, in-app purchases.'
)
.setExtensionHelpPath('/publishing/publishing-to-facebook-instant-games')
.setCategory('Third-party');
extension
+3
View File
@@ -27,6 +27,9 @@ module.exports = {
'Matthias Meike',
'Open source (MIT License)'
)
.setShortDescription(
'Read/write/delete files and directories. Desktop only (Windows, Linux, macOS).'
)
.setExtensionHelpPath('/all-features/filesystem')
.setCategory('Advanced');
extension
+3
View File
@@ -28,6 +28,9 @@ module.exports = {
'Arthur Pacaud (arthuro555)',
'MIT'
)
.setShortDescription(
'Google Firebase: realtime database, cloud functions, storage, authentication, analytics, performance.'
)
.setExtensionHelpPath('/all-features/firebase')
.setCategory('Network');
extension
+1
View File
@@ -21,6 +21,7 @@ void DeclareInventoryExtension(gd::PlatformExtension& extension) {
"from/to a GDevelop variable."),
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Named inventories with items, counts, max limits, equip state. Save/load to variable.")
.SetExtensionHelpPath("/all-features/inventory")
.SetCategory("Game mechanic");
extension.AddInstructionOrExpressionGroupMetadata(_("Inventories"))
+3
View File
@@ -27,6 +27,9 @@ module.exports = {
'Florian Rival',
'Open source (MIT License)'
)
.setShortDescription(
'Submit scores to leaderboards, display rankings. Anonymous or authenticated player entries.'
)
.setExtensionHelpPath('/all-features/leaderboards')
.setCategory('Players')
.addInstructionOrExpressionGroupMetadata(_('Leaderboards'))
+4
View File
@@ -26,6 +26,10 @@ module.exports = {
'Harsimran Virk',
'MIT'
)
.setShortDescription(
'2D light objects with configurable radius, color, and optional texture. Obstacle behavior blocks light.'
)
.setDimension('2D')
.setCategory('Visual effect')
.setTags('light');
+1
View File
@@ -23,6 +23,7 @@ void DeclareLinkedObjectsExtension(gd::PlatformExtension& extension) {
"that is more efficient than using variables.",
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Link objects together to retrieve associated objects efficiently. Useful for equipment, connections.")
.SetExtensionHelpPath("/all-features/linked-objects")
.SetCategory("Advanced");
extension.AddInstructionOrExpressionGroupMetadata(_("Linked objects"))
+3
View File
@@ -27,6 +27,9 @@ module.exports = {
'Florian Rival',
'Open source (MIT License)'
)
.setShortDescription(
'Online multiplayer lobbies, object sync, variable sync, player ownership. Up to 8 players.'
)
.setExtensionHelpPath('/all-features/multiplayer')
.setCategory('Players');
extension
+3
View File
@@ -25,6 +25,9 @@ module.exports = {
'Arthur Pacaud (arthuro555)',
'MIT'
)
.setShortDescription(
'Peer-to-peer communication via WebRTC. Send/receive events and variables between game instances.'
)
.setExtensionHelpPath('/all-features/p2p')
.setCategory('Network');
extension
@@ -23,6 +23,8 @@ void DeclarePanelSpriteObjectExtension(gd::PlatformExtension& extension) {
"corners as well as the filling.",
"Victor Levasseur and Florian Rival",
"Open source (MIT License)")
.SetShortDescription("9-patch/panel sprite: image with stretched/tiled edges and corners for resizable UI elements.")
.SetDimension("2D")
.SetExtensionHelpPath("/objects/panel_sprite");
extension
.AddInstructionOrExpressionGroupMetadata(
+2
View File
@@ -26,6 +26,8 @@ void DeclareParticleSystemExtension(gd::PlatformExtension& extension) {
"the 3D particle emitter instead.",
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("2D particle emitter for fire, smoke, explosions, magic effects. Configurable color, size, speed, lifetime.")
.SetDimension("2D")
.SetCategory("Visual effect")
.SetExtensionHelpPath("/objects/particles_emitter");
extension.AddInstructionOrExpressionGroupMetadata(_("Particle system"))
@@ -21,6 +21,8 @@ void DeclarePathfindingBehaviorExtension(gd::PlatformExtension& extension) {
"avoiding obstacles on the way.",
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("A* pathfinding: compute paths avoiding obstacles. Configurable speed, grid, diagonals.")
.SetDimension("2D")
.SetCategory("Movement")
.SetTags("pathfinding, obstacle, collision")
.SetExtensionHelpPath("/behaviors/pathfinding");
@@ -29,6 +29,10 @@ module.exports = {
'Florian Rival, Franco Maciel',
'MIT'
)
.setShortDescription(
'2D rigid-body physics behavior: gravity, forces, collisions, joints. Static/dynamic/kinematic bodies. Mass, damping.'
)
.setDimension('2D')
.setExtensionHelpPath('/behaviors/physics2')
.setCategory('Movement')
.setTags('physics, gravity, obstacle, collision');
@@ -29,6 +29,10 @@ module.exports = {
'Florian Rival',
'MIT'
)
.setShortDescription(
'3D rigid-body physics behavior: gravity, forces, collisions, joints. Static/dynamic/kinematic bodies. Mass, damping.'
)
.setDimension('3D')
.setExtensionHelpPath('/behaviors/physics3d')
.setCategory('Movement')
.setTags('physics, gravity, obstacle, collision');
+2
View File
@@ -21,6 +21,8 @@ void DeclarePhysicsBehaviorExtension(gd::PlatformExtension& extension) {
"This is the old, deprecated physics engine. Prefer to use the Physics Engine 2.0.",
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Deprecated physics engine. Use Physics Engine 2.0 instead.")
.SetDimension("2D")
.SetCategory("Movement")
.SetExtensionHelpPath("/behaviors/physics");
extension.AddInstructionOrExpressionGroupMetadata(("Physics Engine (deprecated)"))
@@ -28,6 +28,8 @@ void DeclarePlatformBehaviorExtension(gd::PlatformExtension& extension) {
"associated \"mapper\" behaviors.",
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Platformer engine: jump, run on platforms, grab edges, custom gravity. Platform/jumpthru/ladder objects.")
.SetDimension("2D")
.SetCategory("Movement")
.SetTags("platformer, platform, character, jump, obstacle, collision")
.SetExtensionHelpPath("/behaviors/platformer");
@@ -25,6 +25,9 @@ module.exports = {
'Florian Rival',
'Open source (MIT License)'
)
.setShortDescription(
'Authenticate players. Login/logout, get username/user ID, check authentication status.'
)
.setExtensionHelpPath('/all-features/player-authentication')
.setCategory('Players');
extension
@@ -19,6 +19,8 @@ void DeclarePrimitiveDrawingExtension(gd::PlatformExtension& extension) {
"on the screen using events."),
"Florian Rival and Aurélien Vivet",
"Open source (MIT License)")
.SetShortDescription("Draw 2D shapes (rectangles, circles, lines, bezier, polygons) with fill/outline via events.")
.SetDimension("2D")
.SetExtensionHelpPath("/objects/shape_painter")
.SetCategory("Advanced");
extension.AddInstructionOrExpressionGroupMetadata(_("Shape painter"))
+3
View File
@@ -27,6 +27,9 @@ module.exports = {
'Neyl Mahfouf',
'Open source (MIT License)'
)
.setShortDescription(
'Save/load full game state (objects, variables, sounds, effects). Profile-based filtering.'
)
.setExtensionHelpPath('/all-features/save-state')
.setCategory('Game mechanic')
.addInstructionOrExpressionGroupMetadata(_('Save State (experimental)'))
+3
View File
@@ -25,6 +25,9 @@ module.exports = {
'Matthias Meike',
'Open source (MIT License)'
)
.setShortDescription(
'Capture screenshots of the running game as PNG images.'
)
.setExtensionHelpPath('/all-features/screenshot')
.setCategory('Advanced');
extension
+1
View File
@@ -16,6 +16,7 @@ void DeclareShopifyExtension(gd::PlatformExtension& extension) {
"Shopify shop."),
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Initialize Shopify shop, fetch products, generate checkout URLs.")
.SetExtensionHelpPath("/all-features/shopify")
.SetCategory("Third-party");
extension.AddInstructionOrExpressionGroupMetadata(_("Shopify"))
+4
View File
@@ -27,6 +27,10 @@ module.exports = {
'Arthur Pacaud (arthuro555)',
'MIT'
)
.setShortDescription(
'Position sounds in 3D space. Stereo panning simulates spatial audio around the listener.'
)
.setDimension('3D')
.setCategory('Audio');
extension
.addInstructionOrExpressionGroupMetadata(_('Spatial sound'))
+4
View File
@@ -26,6 +26,10 @@ module.exports = {
'Vladyslav Pohorielov',
'Open source (MIT License)'
)
.setShortDescription(
'Spine skeletal animation object. Play animations, mix, set skins, track events.'
)
.setDimension('2D')
.setExtensionHelpPath('/objects/spine')
.setCategory('Advanced');
+3
View File
@@ -25,6 +25,9 @@ module.exports = {
'Arthur Pacaud (arthuro555)',
'MIT'
)
.setShortDescription(
'Steam integration: achievements, leaderboards, lobby, workshop, overlay, app ownership.'
)
.setCategory('Third-party');
extension
+1
View File
@@ -17,6 +17,7 @@ void DeclareSystemInfoExtension(gd::PlatformExtension& extension) {
"or if the game runs as a preview."),
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Check touchscreen, mobile device, preview mode, native mobile app, web environment.")
.SetCategory("Advanced");
extension.AddInstructionOrExpressionGroupMetadata(_("System information"))
.SetIcon("CppPlatform/Extensions/systeminfoicon.png");
+1
View File
@@ -19,6 +19,7 @@ void DeclareTextEntryObjectExtension(gd::PlatformExtension& extension) {
"entered with a keyboard by a player.",
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Deprecated. Invisible object capturing keyboard text input into a string.")
.SetCategory("User interface")
.SetExtensionHelpPath("/objects/text_entry");
+3
View File
@@ -25,6 +25,9 @@ module.exports = {
'Florian Rival',
'MIT'
)
.setShortDescription(
'Text input field for players. Placeholder, font, color, disabled state, read-only, focus control.'
)
.setCategory('User interface');
extension
.addInstructionOrExpressionGroupMetadata(_('Text Input'))
+2
View File
@@ -23,6 +23,8 @@ void DeclareTextObjectExtension(gd::PlatformExtension& extension) {
"some indicators, menu buttons, dialogues..."),
"Florian Rival and Victor Levasseur",
"Open source (MIT License)")
.SetShortDescription("2D text object: font, size, color, bold/italic, gradient, shadow, outline, alignment, wrapping.")
.SetDimension("2D")
.SetCategory("Text")
.SetExtensionHelpPath("/objects/text");
extension.AddInstructionOrExpressionGroupMetadata(_("Text object"))
+4
View File
@@ -1531,6 +1531,10 @@ module.exports = {
'Todor Imreorov',
'Open source (MIT License)'
)
.setShortDescription(
'Tile-based map object for RPG, platformers, strategy. Built-in editor. External Tiled/LDtk support.'
)
.setDimension('2D')
.setCategory('Advanced')
.setExtensionHelpPath('/objects/tilemap');
@@ -23,6 +23,8 @@ void DeclareTiledSpriteObjectExtension(gd::PlatformExtension& extension) {
"Sprite objects.",
"Victor Levasseur and Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Repeating 2D image over an area. Useful for scrolling backgrounds. Adjustable offset.")
.SetDimension("2D")
.SetExtensionHelpPath("/objects/tiled_sprite");
extension.AddInstructionOrExpressionGroupMetadata(_("Tiled Sprite Object"))
.SetIcon("CppPlatform/Extensions/TiledSpriteIcon.png");
@@ -23,6 +23,8 @@ void DeclareTopDownMovementBehaviorExtension(gd::PlatformExtension& extension) {
"events."),
"Florian Rival",
"Open source (MIT License)")
.SetShortDescription("Move objects in 4/8 directions via keyboard, joystick, or gamepad. Speed, acceleration, rotation.")
.SetDimension("2D")
.SetCategory("Movement")
.SetTags("top-down")
.SetExtensionHelpPath("/behaviors/topdown");
+3
View File
@@ -65,6 +65,9 @@ module.exports = {
'Matthias Meike, Florian Rival',
'Open source (MIT License)'
)
.setShortDescription(
'Smoothly animate position, scale, rotation, opacity, color, variables over time. Easing functions.'
)
.setCategory('Visual effect')
.setTags('tween, interpolation, smooth')
.setExtensionHelpPath('/behaviors/tween');
+3
View File
@@ -28,6 +28,9 @@ module.exports = {
'Aurélien Vivet',
'Open source (MIT License)'
)
.setShortDescription(
'Video object: play/pause/loop MPEG4 videos on screen. Volume, playback speed, opacity control.'
)
.setCategory('User interface')
.setExtensionHelpPath('/objects/video');
extension
@@ -40,6 +40,11 @@ void MetadataDeclarationHelper::DeclareExtension(
.SetExtensionHelpPath(eventsFunctionsExtension.GetHelpPath())
.SetIconUrl(eventsFunctionsExtension.GetIconUrl());
if (!eventsFunctionsExtension.GetShortDescription().empty())
extension.SetShortDescription(eventsFunctionsExtension.GetShortDescription());
if (!eventsFunctionsExtension.GetDimension().empty())
extension.SetDimension(eventsFunctionsExtension.GetDimension());
for(auto tag : eventsFunctionsExtension.GetTags()) {
extension.AddTag(tag);
}
+6
View File
@@ -2286,6 +2286,10 @@ interface PlatformExtension {
[Ref] PlatformExtension SetExtensionHelpPath([Const] DOMString helpPath);
[Ref] PlatformExtension SetIconUrl([Const] DOMString iconUrl);
[Ref] PlatformExtension SetCategory([Const] DOMString category);
[Ref] PlatformExtension SetShortDescription([Const] DOMString shortDescription);
[Const, Ref] DOMString GetShortDescription();
[Ref] PlatformExtension SetDimension([Const] DOMString dimension);
[Const, Ref] DOMString GetDimension();
[Ref] InstructionOrExpressionGroupMetadata AddInstructionOrExpressionGroupMetadata([Const] DOMString name);
void MarkAsDeprecated();
@@ -3517,6 +3521,8 @@ interface EventsFunctionsExtension {
[Const, Ref] DOMString GetShortDescription();
[Ref] EventsFunctionsExtension SetDescription([Const] DOMString description);
[Const, Ref] DOMString GetDescription();
[Ref] EventsFunctionsExtension SetDimension([Const] DOMString dimension);
[Const, Ref] DOMString GetDimension();
[Ref] EventsFunctionsExtension SetName([Const] DOMString name);
[Const, Ref] DOMString GetName();
[Ref] EventsFunctionsExtension SetFullName([Const] DOMString fullName);
+6
View File
@@ -1799,6 +1799,10 @@ export class PlatformExtension extends EmscriptenObject {
setExtensionHelpPath(helpPath: string): PlatformExtension;
setIconUrl(iconUrl: string): PlatformExtension;
setCategory(category: string): PlatformExtension;
setShortDescription(shortDescription: string): PlatformExtension;
getShortDescription(): string;
setDimension(dimension: string): PlatformExtension;
getDimension(): string;
addInstructionOrExpressionGroupMetadata(name: string): InstructionOrExpressionGroupMetadata;
markAsDeprecated(): void;
getTags(): VectorString;
@@ -2570,6 +2574,8 @@ export class EventsFunctionsExtension extends EmscriptenObject {
getShortDescription(): string;
setDescription(description: string): EventsFunctionsExtension;
getDescription(): string;
setDimension(dimension: string): EventsFunctionsExtension;
getDimension(): string;
setName(name: string): EventsFunctionsExtension;
getName(): string;
setFullName(fullName: string): EventsFunctionsExtension;
@@ -9,6 +9,8 @@ declare class gdEventsFunctionsExtension {
getShortDescription(): string;
setDescription(description: string): gdEventsFunctionsExtension;
getDescription(): string;
setDimension(dimension: string): gdEventsFunctionsExtension;
getDimension(): string;
setName(name: string): gdEventsFunctionsExtension;
getName(): string;
setFullName(fullName: string): gdEventsFunctionsExtension;
+4
View File
@@ -5,6 +5,10 @@ declare class gdPlatformExtension {
setExtensionHelpPath(helpPath: string): gdPlatformExtension;
setIconUrl(iconUrl: string): gdPlatformExtension;
setCategory(category: string): gdPlatformExtension;
setShortDescription(shortDescription: string): gdPlatformExtension;
getShortDescription(): string;
setDimension(dimension: string): gdPlatformExtension;
getDimension(): string;
addInstructionOrExpressionGroupMetadata(name: string): gdInstructionOrExpressionGroupMetadata;
markAsDeprecated(): void;
getTags(): gdVectorString;
@@ -23,6 +23,8 @@ import {
import { useIsMounted } from '../../Utils/UseIsMounted';
import { showErrorBox } from '../../UI/Messages/MessageBox';
import { UsersAutocomplete } from '../../Profile/UsersAutocomplete';
import SelectField from '../../UI/SelectField';
import SelectOption from '../../UI/SelectOption';
import SemiControlledAutoComplete from '../../UI/SemiControlledAutoComplete';
import { ResourceStoreContext } from '../../AssetStore/ResourceStore/ResourceStoreContext';
@@ -317,6 +319,20 @@ export const ExtensionOptionsEditor = ({
},
]}
/>
<SelectField
floatingLabelText={<Trans>Dimension</Trans>}
value={eventsFunctionsExtension.getDimension()}
onChange={(e, i, value) => {
eventsFunctionsExtension.setDimension(value);
forceUpdate();
}}
fullWidth
>
<SelectOption value="" label={t`Not applicable`} />
<SelectOption value="2D" label="2D" />
<SelectOption value="3D" label="3D" />
<SelectOption value="2D/3D" label="2D/3D" />
</SelectField>
<SemiControlledTextField
floatingLabelText={<Trans>Tags (comma separated)</Trans>}
value={eventsFunctionsExtension
@@ -44,7 +44,8 @@ const config = {
arch: ['universal'],
},
mergeASARs: false,
x64ArchFiles: 'Contents/Resources/app.asar.unpacked/node_modules/steamworks.js/dist/osx/steamworksjs.darwin-*.node',
x64ArchFiles:
'Contents/Resources/app.asar.unpacked/node_modules/steamworks.js/dist/osx/steamworksjs.darwin-*.node',
},
win: {
executableName: 'GDevelop',