diff --git a/examples/advanced-projectile/advanced-projectile.json b/examples/advanced-projectile/advanced-projectile.json index 51286b52b..373dc2031 100644 --- a/examples/advanced-projectile/advanced-projectile.json +++ b/examples/advanced-projectile/advanced-projectile.json @@ -7521,14 +7521,14 @@ "author": "@4ian", "category": "Game mechanic", "extensionNamespace": "", - "fullName": "Fire bullets", "gdevelopVersion": ">=5.5.222", + "fullName": "Fire bullets", "helpPath": "/extensions/fire-bullet/details", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", "name": "FireBullet", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", "shortDescription": "Fire bullets, manage ammo, reloading and overheating.", - "version": "0.9.1", + "version": "0.9.2", "description": [ "This extension allows objects to fire bullets. To use it, add the behavior to the object that will shoot, then use the provided action to launch another object as the bullet.", "", @@ -7539,7 +7539,7 @@ "- Overheat", "", "The speed can be specified when using the actions to fire the bullets.", - "The bullets are automatically given a permanent force to make them move (no need to use a linear movement or move them with another behavior).", + "The bullets are automatically given a permanent force to make them move in the 2D plane (no need to use a linear movement or move them with another behavior).", "", "It can be used for:", "- Twin-stick shooters ([open the project online](https://editor.gdevelop.io/?project=example://conviction-of-gun-dude-desktop))", @@ -7574,7 +7574,7 @@ "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "Fire bullets, manage ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior action in your events to fire another object as a bullet. This action will also make the bullet move (using a permanent force) at the speed specified in the action.", + "description": "Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).", "fullName": "Fire bullets", "name": "FireBullet", "objectType": "", @@ -8148,11 +8148,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward an object at a specified speed.", + "description": "Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an object", "functionType": "Action", "name": "FireTowardObject", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -8217,11 +8217,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward a position at a specified speed.", + "description": "Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward a position", "functionType": "Action", "name": "FireTowardPosition", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -8291,11 +8291,11 @@ "objectGroups": [] }, { - "description": "Fire bullets in the direction of a given angle at a specified speed.", + "description": "Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an angle", "functionType": "Action", "name": "Fire", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -12256,12 +12256,17 @@ "unit": "Second", "label": "Firing cooldown", "description": "Objects cannot shoot while firing cooldown is active.", + "group": "", + "extraInformation": [], "name": "FireCooldown" }, { "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HasJustFired" }, @@ -12269,6 +12274,9 @@ "value": "true", "type": "Boolean", "label": "Rotate bullets to match their trajectory", + "description": "", + "group": "", + "extraInformation": [], "name": "RotateBullet" }, { @@ -12278,6 +12286,7 @@ "label": "Firing arc", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "FiringArc" }, { @@ -12286,6 +12295,7 @@ "label": "Number of bullets created at once", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "BulletQuantity" }, { @@ -12295,6 +12305,7 @@ "label": "Angle variance", "description": "Make imperfect aim (between 0 and 180 degrees).", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "AngleVariance" }, @@ -12305,6 +12316,7 @@ "label": "Bullet speed variance", "description": "Bullet speed will be adjusted by a random value within this range.", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "BulletSpeedVariance" }, @@ -12312,6 +12324,9 @@ "value": "0", "type": "Number", "label": "Ammo quantity (current)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "AmmoQuantity" }, @@ -12321,6 +12336,7 @@ "label": "Shots per reload ", "description": "Use 0 to disable reloading.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ShotsPerReload" }, @@ -12331,6 +12347,7 @@ "label": "Reloading duration", "description": "Objects cannot shoot while reloading is in progress.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ReloadDuration" }, @@ -12338,7 +12355,9 @@ "value": "0", "type": "Number", "label": "Max ammo ", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "MaxAmmo" }, @@ -12346,6 +12365,9 @@ "value": "0", "type": "Number", "label": "Shots before next reload", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ShotsBeforeNextReload" }, @@ -12354,6 +12376,8 @@ "type": "Number", "label": "Total shots fired", "description": "Regardless of how many bullets are created, only 1 shot will be counted per frame", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalShotsFired" }, @@ -12361,6 +12385,9 @@ "value": "0", "type": "Number", "label": "Total bullets created", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalBulletsCreated" }, @@ -12368,7 +12395,9 @@ "value": "0", "type": "Number", "label": "Starting ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "StartingAmmo" }, @@ -12376,6 +12405,9 @@ "value": "0", "type": "Number", "label": "Total reloads completed", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalReloadsCompleted" }, @@ -12383,7 +12415,9 @@ "value": "true", "type": "Boolean", "label": "Unlimited ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "UnlimitedAmmo" }, @@ -12391,6 +12425,9 @@ "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ReloadInProgress" }, @@ -12400,6 +12437,7 @@ "label": "Heat increase per shot (between 0 and 1)", "description": " Object is overheated when Heat reaches 1.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "HeatIncreasePerShot" }, @@ -12407,6 +12445,9 @@ "value": "0", "type": "Number", "label": "Heat level (Range: 0 to 1)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HeatLevel" }, @@ -12414,7 +12455,9 @@ "value": "true", "type": "Boolean", "label": "Reload automatically", + "description": "", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "AutomaticReloading" }, @@ -12425,6 +12468,7 @@ "label": "Overheat duration", "description": "Object cannot shoot while overheat duration is active.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "OverheatDuration" }, @@ -12432,7 +12476,9 @@ "value": "0.1", "type": "Number", "label": "Linear cooling rate (per second)", + "description": "", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "LinearCoolingRate" }, @@ -12446,7 +12492,6 @@ "Linear", "Exponential" ], - "choices": [], "advanced": true, "name": "ExponentialCoolingRate" }, @@ -12456,6 +12501,7 @@ "label": "Layer the bullets are created on", "description": "Base layer by default.", "group": "Shooting configuration", + "extraInformation": [], "hidden": true, "name": "BulletLayer" }, @@ -12463,6 +12509,9 @@ "value": "0", "type": "Number", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "RandomizedAngle" } diff --git a/examples/bim-bam/bim-bam.json b/examples/bim-bam/bim-bam.json index e2249fb83..ad041deb0 100644 --- a/examples/bim-bam/bim-bam.json +++ b/examples/bim-bam/bim-bam.json @@ -4524,22 +4524,26 @@ "author": "@4ian", "category": "Game mechanic", "extensionNamespace": "", + "gdevelopVersion": ">=5.5.222", "fullName": "Fire bullets", "helpPath": "/extensions/fire-bullet/details", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", "name": "FireBullet", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", "shortDescription": "Fire bullets, manage ammo, reloading and overheating.", - "version": "0.9.0", + "version": "0.9.2", "description": [ - "This extension allows objects to fire bullets.", + "This extension allows objects to fire bullets. To use it, add the behavior to the object that will shoot, then use the provided action to launch another object as the bullet.", "", - "It handles:", + "The properties of the behavior can be used to customize:", "- Cooldown between shots", "- Firing multiple bullets at a time ([open the project online](https://editor.gdevelop.io/?project=example://fire-bullet))", "- Ammo management", "- Overheat", "", + "The speed can be specified when using the actions to fire the bullets.", + "The bullets are automatically given a permanent force to make them move in the 2D plane (no need to use a linear movement or move them with another behavior).", + "", "It can be used for:", "- Twin-stick shooters ([open the project online](https://editor.gdevelop.io/?project=example://conviction-of-gun-dude-desktop))", "- Shoot'em up ([open the project online](https://editor.gdevelop.io/?project=example://space-shooter))", @@ -4573,7 +4577,7 @@ "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "Fire bullets, manage ammo, reloading, and overheating.", + "description": "Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).", "fullName": "Fire bullets", "name": "FireBullet", "objectType": "", @@ -5147,11 +5151,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward an object.", + "description": "Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an object", "functionType": "Action", "name": "FireTowardObject", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -5216,11 +5220,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward a position.", + "description": "Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward a position", "functionType": "Action", "name": "FireTowardPosition", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -5290,11 +5294,11 @@ "objectGroups": [] }, { - "description": "Fire bullets in the direction of a given angle.", + "description": "Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an angle", "functionType": "Action", "name": "Fire", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -8708,11 +8712,12 @@ "subInstructions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHasJustFired" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "HasJustFired", + "True", + "" ] }, { @@ -9135,11 +9140,10 @@ "subInstructions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHeatLevel" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatLevel", ">=", "1" ] diff --git a/examples/conviction-of-gun-dude-desktop/conviction-of-gun-dude-desktop.json b/examples/conviction-of-gun-dude-desktop/conviction-of-gun-dude-desktop.json index fb0134e08..e9c323845 100644 --- a/examples/conviction-of-gun-dude-desktop/conviction-of-gun-dude-desktop.json +++ b/examples/conviction-of-gun-dude-desktop/conviction-of-gun-dude-desktop.json @@ -19154,14 +19154,14 @@ "author": "@4ian", "category": "Game mechanic", "extensionNamespace": "", - "fullName": "Fire bullets", "gdevelopVersion": ">=5.5.222", + "fullName": "Fire bullets", "helpPath": "/extensions/fire-bullet/details", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", "name": "FireBullet", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", "shortDescription": "Fire bullets, manage ammo, reloading and overheating.", - "version": "0.9.1", + "version": "0.9.2", "description": [ "This extension allows objects to fire bullets. To use it, add the behavior to the object that will shoot, then use the provided action to launch another object as the bullet.", "", @@ -19171,6 +19171,9 @@ "- Ammo management", "- Overheat", "", + "The speed can be specified when using the actions to fire the bullets.", + "The bullets are automatically given a permanent force to make them move in the 2D plane (no need to use a linear movement or move them with another behavior).", + "", "It can be used for:", "- Twin-stick shooters ([open the project online](https://editor.gdevelop.io/?project=example://conviction-of-gun-dude-desktop))", "- Shoot'em up ([open the project online](https://editor.gdevelop.io/?project=example://space-shooter))", @@ -19204,7 +19207,7 @@ "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "Fire bullets, manage ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior action in your events to fire another object as a bullet.", + "description": "Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).", "fullName": "Fire bullets", "name": "FireBullet", "objectType": "", @@ -19778,11 +19781,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward an object.", + "description": "Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an object", "functionType": "Action", "name": "FireTowardObject", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -19847,11 +19850,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward a position.", + "description": "Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward a position", "functionType": "Action", "name": "FireTowardPosition", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -19921,11 +19924,11 @@ "objectGroups": [] }, { - "description": "Fire bullets in the direction of a given angle.", + "description": "Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an angle", "functionType": "Action", "name": "Fire", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -23886,12 +23889,17 @@ "unit": "Second", "label": "Firing cooldown", "description": "Objects cannot shoot while firing cooldown is active.", + "group": "", + "extraInformation": [], "name": "FireCooldown" }, { "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HasJustFired" }, @@ -23899,6 +23907,9 @@ "value": "true", "type": "Boolean", "label": "Rotate bullets to match their trajectory", + "description": "", + "group": "", + "extraInformation": [], "name": "RotateBullet" }, { @@ -23908,6 +23919,7 @@ "label": "Firing arc", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "FiringArc" }, { @@ -23916,6 +23928,7 @@ "label": "Number of bullets created at once", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "BulletQuantity" }, { @@ -23925,6 +23938,7 @@ "label": "Angle variance", "description": "Make imperfect aim (between 0 and 180 degrees).", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "AngleVariance" }, @@ -23935,6 +23949,7 @@ "label": "Bullet speed variance", "description": "Bullet speed will be adjusted by a random value within this range.", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "BulletSpeedVariance" }, @@ -23942,6 +23957,9 @@ "value": "0", "type": "Number", "label": "Ammo quantity (current)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "AmmoQuantity" }, @@ -23951,6 +23969,7 @@ "label": "Shots per reload ", "description": "Use 0 to disable reloading.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ShotsPerReload" }, @@ -23961,6 +23980,7 @@ "label": "Reloading duration", "description": "Objects cannot shoot while reloading is in progress.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ReloadDuration" }, @@ -23968,7 +23988,9 @@ "value": "0", "type": "Number", "label": "Max ammo ", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "MaxAmmo" }, @@ -23976,6 +23998,9 @@ "value": "0", "type": "Number", "label": "Shots before next reload", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ShotsBeforeNextReload" }, @@ -23984,6 +24009,8 @@ "type": "Number", "label": "Total shots fired", "description": "Regardless of how many bullets are created, only 1 shot will be counted per frame", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalShotsFired" }, @@ -23991,6 +24018,9 @@ "value": "0", "type": "Number", "label": "Total bullets created", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalBulletsCreated" }, @@ -23998,7 +24028,9 @@ "value": "0", "type": "Number", "label": "Starting ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "StartingAmmo" }, @@ -24006,6 +24038,9 @@ "value": "0", "type": "Number", "label": "Total reloads completed", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalReloadsCompleted" }, @@ -24013,7 +24048,9 @@ "value": "true", "type": "Boolean", "label": "Unlimited ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "UnlimitedAmmo" }, @@ -24021,6 +24058,9 @@ "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ReloadInProgress" }, @@ -24030,6 +24070,7 @@ "label": "Heat increase per shot (between 0 and 1)", "description": " Object is overheated when Heat reaches 1.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "HeatIncreasePerShot" }, @@ -24037,6 +24078,9 @@ "value": "0", "type": "Number", "label": "Heat level (Range: 0 to 1)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HeatLevel" }, @@ -24044,7 +24088,9 @@ "value": "true", "type": "Boolean", "label": "Reload automatically", + "description": "", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "AutomaticReloading" }, @@ -24055,6 +24101,7 @@ "label": "Overheat duration", "description": "Object cannot shoot while overheat duration is active.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "OverheatDuration" }, @@ -24062,7 +24109,9 @@ "value": "0.1", "type": "Number", "label": "Linear cooling rate (per second)", + "description": "", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "LinearCoolingRate" }, @@ -24076,7 +24125,6 @@ "Linear", "Exponential" ], - "choices": [], "advanced": true, "name": "ExponentialCoolingRate" }, @@ -24086,6 +24134,7 @@ "label": "Layer the bullets are created on", "description": "Base layer by default.", "group": "Shooting configuration", + "extraInformation": [], "hidden": true, "name": "BulletLayer" }, @@ -24093,6 +24142,9 @@ "value": "0", "type": "Number", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "RandomizedAngle" } diff --git a/examples/conviction-of-gun-dude-mobile/conviction-of-gun-dude-mobile.json b/examples/conviction-of-gun-dude-mobile/conviction-of-gun-dude-mobile.json index 45309b1cb..8d8a27773 100644 --- a/examples/conviction-of-gun-dude-mobile/conviction-of-gun-dude-mobile.json +++ b/examples/conviction-of-gun-dude-mobile/conviction-of-gun-dude-mobile.json @@ -18980,23 +18980,26 @@ "author": "@4ian", "category": "Game mechanic", "extensionNamespace": "", + "gdevelopVersion": ">=5.5.222", "fullName": "Fire bullets", - "gdevelopVersion": "", "helpPath": "/extensions/fire-bullet/details", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", "name": "FireBullet", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", "shortDescription": "Fire bullets, manage ammo, reloading and overheating.", - "version": "0.8.1", + "version": "0.9.2", "description": [ - "This extension allows objects to fire bullets.", + "This extension allows objects to fire bullets. To use it, add the behavior to the object that will shoot, then use the provided action to launch another object as the bullet.", "", - "It handles:", + "The properties of the behavior can be used to customize:", "- Cooldown between shots", "- Firing multiple bullets at a time ([open the project online](https://editor.gdevelop.io/?project=example://fire-bullet))", "- Ammo management", "- Overheat", "", + "The speed can be specified when using the actions to fire the bullets.", + "The bullets are automatically given a permanent force to make them move in the 2D plane (no need to use a linear movement or move them with another behavior).", + "", "It can be used for:", "- Twin-stick shooters ([open the project online](https://editor.gdevelop.io/?project=example://conviction-of-gun-dude-desktop))", "- Shoot'em up ([open the project online](https://editor.gdevelop.io/?project=example://space-shooter))", @@ -19030,7 +19033,7 @@ "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "Fire bullets, manage ammo, reloading, and overheating.", + "description": "Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).", "fullName": "Fire bullets", "name": "FireBullet", "objectType": "", @@ -19056,22 +19059,20 @@ }, { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AmmoQuantity", "=", "StartingAmmo" ] }, { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", "=", "ShotsPerReload" ] @@ -19126,23 +19127,24 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHasJustFired" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "HasJustFired", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyHasJustFired" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "=" + "HasJustFired", + "False", + "" ] }, { @@ -19156,11 +19158,10 @@ }, { "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalShotsFired" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "TotalShotsFired", "+", "1" ] @@ -19182,22 +19183,22 @@ { "type": { "inverted": true, - "value": "FireBullet::FireBullet::PropertyUnlimitedAmmo" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "UnlimitedAmmo", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AmmoQuantity", "=", "max(0, AmmoQuantity - 1)" ] @@ -19209,11 +19210,10 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyShotsPerReload" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsPerReload", ">", "0" ] @@ -19222,11 +19222,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", "-", "1" ] @@ -19238,11 +19237,12 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyAutomaticReloading" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "AutomaticReloading", + "True", + "" ] }, { @@ -19297,11 +19297,10 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHeatIncreasePerShot" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatIncreasePerShot", ">", "0" ] @@ -19310,11 +19309,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyHeatLevel" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatLevel", "+", "HeatIncreasePerShot" ] @@ -19326,11 +19324,10 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyOverheatDuration" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "OverheatDuration", ">", "0" ] @@ -19417,23 +19414,22 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalReloadsCompleted" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "TotalReloadsCompleted", "+", "1" ] }, { "type": { - "value": "FireBullet::FireBullet::SetPropertyReloadInProgress" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "no" + "ReloadInProgress", + "False", + "" ] } ], @@ -19455,11 +19451,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", "=", "ShotsPerReload" ] @@ -19496,11 +19491,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", "=", "min(ShotsPerReload, AmmoQuantity)" ] @@ -19542,11 +19536,10 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyExponentialCoolingRate" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ExponentialCoolingRate", ">", "0" ] @@ -19555,11 +19548,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyHeatLevel" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatLevel", "=", "max(0, HeatLevel - TimeDelta() * ExponentialCoolingRate * HeatLevel)" ] @@ -19571,11 +19563,10 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyLinearCoolingRate" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "LinearCoolingRate", ">", "0" ] @@ -19584,11 +19575,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyHeatLevel" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatLevel", "=", "max(0, HeatLevel - TimeDelta() * LinearCoolingRate)" ] @@ -19617,11 +19607,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward an object.", + "description": "Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an object", "functionType": "Action", "name": "FireTowardObject", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -19686,11 +19676,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward a position.", + "description": "Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward a position", "functionType": "Action", "name": "FireTowardPosition", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -19760,11 +19750,11 @@ "objectGroups": [] }, { - "description": "Fire bullets in the direction of a given angle.", + "description": "Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an angle", "functionType": "Action", "name": "Fire", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -19783,12 +19773,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyHasJustFired" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "yes" + "HasJustFired", + "True", + "" ] } ], @@ -20081,11 +20071,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyRandomizedAngle" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "RandomizedAngle", "=", "Angle + RandomInRange(-AngleVariance, AngleVariance)" ] @@ -20120,11 +20109,12 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyRotateBullet" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "RotateBullet", + "True", + "" ] } ], @@ -20161,11 +20151,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalBulletsCreated" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "TotalBulletsCreated", "+", "1" ] @@ -20241,12 +20230,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyReloadInProgress" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "yes" + "ReloadInProgress", + "True", + "" ] }, { @@ -20289,11 +20278,12 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHasJustFired" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "HasJustFired", + "True", + "" ] } ], @@ -20337,11 +20327,12 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyRotateBullet" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "RotateBullet", + "True", + "" ] } ], @@ -20426,11 +20417,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyFiringArc" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "FiringArc", "=", "Value" ] @@ -20560,11 +20550,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAngleVariance" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AngleVariance", "=", "Value" ] @@ -20694,11 +20683,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyBulletSpeedVariance" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "BulletSpeedVariance", "=", "Value" ] @@ -20828,11 +20816,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyBulletQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "BulletQuantity", "=", "Value" ] @@ -20922,11 +20909,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyBulletLayer" + "value": "SetStringVariable" }, "parameters": [ - "Object", - "Behavior", + "BulletLayer", "=", "Value" ] @@ -20968,22 +20954,24 @@ { "type": { "inverted": true, - "value": "GetArgumentAsBoolean" + "value": "BooleanVariable" }, "parameters": [ - "\"Value\"" + "Value", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyRotateBullet" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "no" + "RotateBullet", + "False", + "" ] } ] @@ -20993,22 +20981,24 @@ "conditions": [ { "type": { - "value": "GetArgumentAsBoolean" + "value": "BooleanVariable" }, "parameters": [ - "\"Value\"" + "Value", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyRotateBullet" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "yes" + "RotateBullet", + "True", + "" ] } ] @@ -21050,22 +21040,24 @@ { "type": { "inverted": true, - "value": "GetArgumentAsBoolean" + "value": "BooleanVariable" }, "parameters": [ - "\"Value\"" + "Value", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyUnlimitedAmmo" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "no" + "UnlimitedAmmo", + "False", + "" ] } ] @@ -21075,22 +21067,24 @@ "conditions": [ { "type": { - "value": "GetArgumentAsBoolean" + "value": "BooleanVariable" }, "parameters": [ - "\"Value\"" + "Value", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyUnlimitedAmmo" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "yes" + "UnlimitedAmmo", + "True", + "" ] } ] @@ -21172,11 +21166,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyFireCooldown" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "FireCooldown", "=", "Value" ] @@ -21306,11 +21299,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyReloadDuration" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ReloadDuration", "=", "Value" ] @@ -21440,11 +21432,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyOverheatDuration" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "OverheatDuration", "=", "Value" ] @@ -21574,11 +21565,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AmmoQuantity", "=", "max(0, Value)" ] @@ -21708,11 +21698,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyHeatIncreasePerShot" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatIncreasePerShot", "=", "Value" ] @@ -21842,11 +21831,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyMaxAmmo" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "MaxAmmo", "=", "Value" ] @@ -21858,11 +21846,10 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyMaxAmmo" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "MaxAmmo", ">", "0" ] @@ -21871,11 +21858,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AmmoQuantity", "=", "min(MaxAmmo, AmmoQuantity)" ] @@ -21965,11 +21951,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalShotsFired" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "TotalShotsFired", "=", "0" ] @@ -22006,11 +21991,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalBulletsCreated" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "TotalBulletsCreated", "=", "0" ] @@ -22047,11 +22031,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalReloadsCompleted" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "TotalReloadsCompleted", "=", "0" ] @@ -22128,11 +22111,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsPerReload" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsPerReload", "=", "Value" ] @@ -22144,11 +22126,10 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyShotsBeforeNextReload" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", ">", "ShotsPerReload" ] @@ -22157,11 +22138,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", "=", "ShotsPerReload" ] @@ -22251,12 +22231,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAutomaticReloading" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "=" + "AutomaticReloading", + "False", + "" ] } ] @@ -22266,22 +22246,24 @@ "conditions": [ { "type": { - "value": "GetArgumentAsBoolean" + "value": "BooleanVariable" }, "parameters": [ - "\"Value\"" + "Value", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAutomaticReloading" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "yes" + "AutomaticReloading", + "True", + "" ] } ] @@ -22363,11 +22345,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyLinearCoolingRate" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "LinearCoolingRate", "=", "Value" ] @@ -22497,11 +22478,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyExponentialCoolingRate" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ExponentialCoolingRate", "=", "Value" ] @@ -22592,11 +22572,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AmmoQuantity", "+", "AmmoGained" ] @@ -22620,11 +22599,10 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyMaxAmmo" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "MaxAmmo", ">", "0" ] @@ -22633,11 +22611,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AmmoQuantity", "=", "min(MaxAmmo, AmmoQuantity)" ] @@ -22659,11 +22636,12 @@ }, { "type": { - "value": "FireBullet::FireBullet::PropertyAutomaticReloading" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "AutomaticReloading", + "True", + "" ] } ], @@ -23121,11 +23099,12 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyReloadInProgress" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "ReloadInProgress", + "True", + "" ] } ], @@ -23189,11 +23168,12 @@ "subInstructions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHasJustFired" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "HasJustFired", + "True", + "" ] }, { @@ -23325,11 +23305,12 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyAutomaticReloading" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "AutomaticReloading", + "True", + "" ] } ], @@ -23387,11 +23368,12 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyUnlimitedAmmo" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "UnlimitedAmmo", + "True", + "" ] } ], @@ -23460,11 +23442,10 @@ }, { "type": { - "value": "FireBullet::FireBullet::PropertyAmmoQuantity" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AmmoQuantity", "<=", "0" ] @@ -23536,22 +23517,20 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyShotsPerReload" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsPerReload", ">", "0" ] }, { "type": { - "value": "FireBullet::FireBullet::PropertyShotsBeforeNextReload" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", "=", "0" ] @@ -23617,11 +23596,10 @@ "subInstructions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHeatLevel" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatLevel", ">=", "1" ] @@ -23737,12 +23715,17 @@ "unit": "Second", "label": "Firing cooldown", "description": "Objects cannot shoot while firing cooldown is active.", + "group": "", + "extraInformation": [], "name": "FireCooldown" }, { "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HasJustFired" }, @@ -23750,6 +23733,9 @@ "value": "true", "type": "Boolean", "label": "Rotate bullets to match their trajectory", + "description": "", + "group": "", + "extraInformation": [], "name": "RotateBullet" }, { @@ -23759,6 +23745,7 @@ "label": "Firing arc", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "FiringArc" }, { @@ -23767,6 +23754,7 @@ "label": "Number of bullets created at once", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "BulletQuantity" }, { @@ -23776,6 +23764,7 @@ "label": "Angle variance", "description": "Make imperfect aim (between 0 and 180 degrees).", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "AngleVariance" }, @@ -23786,6 +23775,7 @@ "label": "Bullet speed variance", "description": "Bullet speed will be adjusted by a random value within this range.", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "BulletSpeedVariance" }, @@ -23793,6 +23783,9 @@ "value": "0", "type": "Number", "label": "Ammo quantity (current)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "AmmoQuantity" }, @@ -23802,6 +23795,7 @@ "label": "Shots per reload ", "description": "Use 0 to disable reloading.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ShotsPerReload" }, @@ -23812,6 +23806,7 @@ "label": "Reloading duration", "description": "Objects cannot shoot while reloading is in progress.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ReloadDuration" }, @@ -23819,7 +23814,9 @@ "value": "0", "type": "Number", "label": "Max ammo ", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "MaxAmmo" }, @@ -23827,6 +23824,9 @@ "value": "0", "type": "Number", "label": "Shots before next reload", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ShotsBeforeNextReload" }, @@ -23835,6 +23835,8 @@ "type": "Number", "label": "Total shots fired", "description": "Regardless of how many bullets are created, only 1 shot will be counted per frame", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalShotsFired" }, @@ -23842,6 +23844,9 @@ "value": "0", "type": "Number", "label": "Total bullets created", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalBulletsCreated" }, @@ -23849,7 +23854,9 @@ "value": "0", "type": "Number", "label": "Starting ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "StartingAmmo" }, @@ -23857,6 +23864,9 @@ "value": "0", "type": "Number", "label": "Total reloads completed", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalReloadsCompleted" }, @@ -23864,7 +23874,9 @@ "value": "true", "type": "Boolean", "label": "Unlimited ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "UnlimitedAmmo" }, @@ -23872,6 +23884,9 @@ "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ReloadInProgress" }, @@ -23881,6 +23896,7 @@ "label": "Heat increase per shot (between 0 and 1)", "description": " Object is overheated when Heat reaches 1.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "HeatIncreasePerShot" }, @@ -23888,6 +23904,9 @@ "value": "0", "type": "Number", "label": "Heat level (Range: 0 to 1)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HeatLevel" }, @@ -23895,7 +23914,9 @@ "value": "true", "type": "Boolean", "label": "Reload automatically", + "description": "", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "AutomaticReloading" }, @@ -23906,6 +23927,7 @@ "label": "Overheat duration", "description": "Object cannot shoot while overheat duration is active.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "OverheatDuration" }, @@ -23913,7 +23935,9 @@ "value": "0.1", "type": "Number", "label": "Linear cooling rate (per second)", + "description": "", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "LinearCoolingRate" }, @@ -23927,7 +23951,6 @@ "Linear", "Exponential" ], - "choices": [], "advanced": true, "name": "ExponentialCoolingRate" }, @@ -23937,6 +23960,7 @@ "label": "Layer the bullets are created on", "description": "Base layer by default.", "group": "Shooting configuration", + "extraInformation": [], "hidden": true, "name": "BulletLayer" }, @@ -23944,6 +23968,9 @@ "value": "0", "type": "Number", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "RandomizedAngle" } diff --git a/examples/fire-bullet/fire-bullet.json b/examples/fire-bullet/fire-bullet.json index b74ab9ec2..fc451225a 100644 --- a/examples/fire-bullet/fire-bullet.json +++ b/examples/fire-bullet/fire-bullet.json @@ -25742,14 +25742,14 @@ "author": "@4ian", "category": "Game mechanic", "extensionNamespace": "", - "fullName": "Fire bullets", "gdevelopVersion": ">=5.5.222", + "fullName": "Fire bullets", "helpPath": "/extensions/fire-bullet/details", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", "name": "FireBullet", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", "shortDescription": "Fire bullets, manage ammo, reloading and overheating.", - "version": "0.9.1", + "version": "0.9.2", "description": [ "This extension allows objects to fire bullets. To use it, add the behavior to the object that will shoot, then use the provided action to launch another object as the bullet.", "", @@ -25760,7 +25760,7 @@ "- Overheat", "", "The speed can be specified when using the actions to fire the bullets.", - "The bullets are automatically given a permanent force to make them move (no need to use a linear movement or move them with another behavior).", + "The bullets are automatically given a permanent force to make them move in the 2D plane (no need to use a linear movement or move them with another behavior).", "", "It can be used for:", "- Twin-stick shooters ([open the project online](https://editor.gdevelop.io/?project=example://conviction-of-gun-dude-desktop))", @@ -25795,7 +25795,7 @@ "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "Fire bullets, manage ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior action in your events to fire another object as a bullet. This action will also make the bullet move (using a permanent force) at the speed specified in the action.", + "description": "Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).", "fullName": "Fire bullets", "name": "FireBullet", "objectType": "", @@ -26369,11 +26369,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward an object at a specified speed.", + "description": "Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an object", "functionType": "Action", "name": "FireTowardObject", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -26438,11 +26438,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward a position at a specified speed.", + "description": "Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward a position", "functionType": "Action", "name": "FireTowardPosition", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -26512,11 +26512,11 @@ "objectGroups": [] }, { - "description": "Fire bullets in the direction of a given angle at a specified speed.", + "description": "Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an angle", "functionType": "Action", "name": "Fire", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -30477,12 +30477,17 @@ "unit": "Second", "label": "Firing cooldown", "description": "Objects cannot shoot while firing cooldown is active.", + "group": "", + "extraInformation": [], "name": "FireCooldown" }, { "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HasJustFired" }, @@ -30490,6 +30495,9 @@ "value": "true", "type": "Boolean", "label": "Rotate bullets to match their trajectory", + "description": "", + "group": "", + "extraInformation": [], "name": "RotateBullet" }, { @@ -30499,6 +30507,7 @@ "label": "Firing arc", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "FiringArc" }, { @@ -30507,6 +30516,7 @@ "label": "Number of bullets created at once", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "BulletQuantity" }, { @@ -30516,6 +30526,7 @@ "label": "Angle variance", "description": "Make imperfect aim (between 0 and 180 degrees).", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "AngleVariance" }, @@ -30526,6 +30537,7 @@ "label": "Bullet speed variance", "description": "Bullet speed will be adjusted by a random value within this range.", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "BulletSpeedVariance" }, @@ -30533,6 +30545,9 @@ "value": "0", "type": "Number", "label": "Ammo quantity (current)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "AmmoQuantity" }, @@ -30542,6 +30557,7 @@ "label": "Shots per reload ", "description": "Use 0 to disable reloading.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ShotsPerReload" }, @@ -30552,6 +30568,7 @@ "label": "Reloading duration", "description": "Objects cannot shoot while reloading is in progress.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ReloadDuration" }, @@ -30559,7 +30576,9 @@ "value": "0", "type": "Number", "label": "Max ammo ", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "MaxAmmo" }, @@ -30567,6 +30586,9 @@ "value": "0", "type": "Number", "label": "Shots before next reload", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ShotsBeforeNextReload" }, @@ -30575,6 +30597,8 @@ "type": "Number", "label": "Total shots fired", "description": "Regardless of how many bullets are created, only 1 shot will be counted per frame", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalShotsFired" }, @@ -30582,6 +30606,9 @@ "value": "0", "type": "Number", "label": "Total bullets created", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalBulletsCreated" }, @@ -30589,7 +30616,9 @@ "value": "0", "type": "Number", "label": "Starting ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "StartingAmmo" }, @@ -30597,6 +30626,9 @@ "value": "0", "type": "Number", "label": "Total reloads completed", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalReloadsCompleted" }, @@ -30604,7 +30636,9 @@ "value": "true", "type": "Boolean", "label": "Unlimited ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "UnlimitedAmmo" }, @@ -30612,6 +30646,9 @@ "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ReloadInProgress" }, @@ -30621,6 +30658,7 @@ "label": "Heat increase per shot (between 0 and 1)", "description": " Object is overheated when Heat reaches 1.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "HeatIncreasePerShot" }, @@ -30628,6 +30666,9 @@ "value": "0", "type": "Number", "label": "Heat level (Range: 0 to 1)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HeatLevel" }, @@ -30635,7 +30676,9 @@ "value": "true", "type": "Boolean", "label": "Reload automatically", + "description": "", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "AutomaticReloading" }, @@ -30646,6 +30689,7 @@ "label": "Overheat duration", "description": "Object cannot shoot while overheat duration is active.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "OverheatDuration" }, @@ -30653,7 +30697,9 @@ "value": "0.1", "type": "Number", "label": "Linear cooling rate (per second)", + "description": "", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "LinearCoolingRate" }, @@ -30667,7 +30713,6 @@ "Linear", "Exponential" ], - "choices": [], "advanced": true, "name": "ExponentialCoolingRate" }, @@ -30677,6 +30722,7 @@ "label": "Layer the bullets are created on", "description": "Base layer by default.", "group": "Shooting configuration", + "extraInformation": [], "hidden": true, "name": "BulletLayer" }, @@ -30684,6 +30730,9 @@ "value": "0", "type": "Number", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "RandomizedAngle" } diff --git a/examples/firing-patterns/firing-patterns.json b/examples/firing-patterns/firing-patterns.json index 8d1b4e9e2..e98ed586a 100644 --- a/examples/firing-patterns/firing-patterns.json +++ b/examples/firing-patterns/firing-patterns.json @@ -4244,41 +4244,31 @@ "author": "@4ian", "category": "Game mechanic", "extensionNamespace": "", + "gdevelopVersion": ">=5.5.222", "fullName": "Fire bullets", - "gdevelopVersion": "", - "helpPath": "https://gdevelop.io/game-example/fire-bullet", + "helpPath": "/extensions/fire-bullet/details", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", "name": "FireBullet", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", - "shortDescription": "Fire bullets, manage ammo, reloading, and overheating.", - "version": "0.6.1", + "shortDescription": "Fire bullets, manage ammo, reloading and overheating.", + "version": "0.9.2", "description": [ - "Fire bullets, manage ammo, reloading, and overheating.", + "This extension allows objects to fire bullets. To use it, add the behavior to the object that will shoot, then use the provided action to launch another object as the bullet.", "", - "Firing bullets:", - "- Cooldown: Time between shots (seconds)", - "- Bullet Quantity: Number of bullets created each time Fire Bullet action is used. ", - "- Firing Arc: Range of angles (in degrees) that bullets will shoot. Bullets are evenly spread within this range.", - "- Rotate bullet: Change the angle of each bullet to match the direction it is travelling (enabled by default)", - "- Angle Variance: Each bullet trajectory will be adjusted by a random value within this range (degrees)", - "- Bullet speed variance: Each bullet speed will be adjusted by a random value within this range (pixels/second)", + "The properties of the behavior can be used to customize:", + "- Cooldown between shots", + "- Firing multiple bullets at a time ([open the project online](https://editor.gdevelop.io/?project=example://fire-bullet))", + "- Ammo management", + "- Overheat", "", - " Ammo:", - "- Starting ammo", - "- Max ammo", - "- Shots per reload. Use 0 to disable reloading", - "- Reload duration", - "- Automatic reloading is enabled by default, but it can also be done manually.", + "The speed can be specified when using the actions to fire the bullets.", + "The bullets are automatically given a permanent force to make them move in the 2D plane (no need to use a linear movement or move them with another behavior).", "", - "Overheat:", - "- Heat increase per shot. Object is Overheated when Heat reaches 1.", - "- Cooling rate per second", - "- When overheated, the object cannot fire any bullets", + "It can be used for:", + "- Twin-stick shooters ([open the project online](https://editor.gdevelop.io/?project=example://conviction-of-gun-dude-desktop))", + "- Shoot'em up ([open the project online](https://editor.gdevelop.io/?project=example://space-shooter))", "", - "Statistics:", - "- Total bullets created", - "- Total shots taken", - "- Total reloads completed" + "A simple example shows how to make firing patterns ([open the project online](https://editor.gdevelop.io/?project=example://firing-patterns))." ], "origin": { "identifier": "FireBullet", @@ -4307,7 +4297,7 @@ "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "Fire bullets, manage ammo, reloading, and overheating.", + "description": "Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).", "fullName": "Fire bullets", "name": "FireBullet", "objectType": "", @@ -4333,24 +4323,22 @@ }, { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AmmoQuantity", "=", - "Object.Behavior::PropertyStartingAmmo()" + "StartingAmmo" ] }, { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", "=", - "Object.Behavior::PropertyShotsPerReload()" + "ShotsPerReload" ] } ] @@ -4403,114 +4391,93 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHasJustFired" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "HasJustFired", + "True", + "" ] } ], - "actions": [], - "events": [ + "actions": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Reset firing cooldown", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__FireBullet.FiringCooldown\"" - ] - } - ] - } - ], - "parameters": [] + "type": { + "value": "SetBooleanVariable" + }, + "parameters": [ + "HasJustFired", + "False", + "" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__FireBullet.FiringCooldown\"" + ] }, + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "TotalShotsFired", + "+", + "1" + ] + } + ], + "events": [ { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, - "name": "Update ammo", + "name": "Ammo", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Subtract 1 from ammo (if not unlimited ammo)" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "inverted": true, - "value": "FireBullet::FireBullet::PropertyUnlimitedAmmo" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "UnlimitedAmmo", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", - "-", - "1" + "AmmoQuantity", + "=", + "max(0, AmmoQuantity - 1)" ] } ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update reloading counter", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyShotsPerReload" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsPerReload", ">", "0" ] @@ -4519,39 +4486,27 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", "-", "1" ] } ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Automatically reload gun when needed", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyAutomaticReloading" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "AutomaticReloading", + "True", + "" ] }, { @@ -4597,32 +4552,19 @@ "colorG": 176, "colorR": 74, "creationTime": 0, - "name": "Update Overheat", + "name": "Overheat", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Increase heat (if needed)" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHeatIncreasePerShot" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatIncreasePerShot", ">", "0" ] @@ -4631,39 +4573,25 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyHeatLevel" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatLevel", "+", - "Object.Behavior::PropertyHeatIncreasePerShot()" + "HeatIncreasePerShot" ] } ], "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Check if this caused overheat" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyOverheatDuration" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "OverheatDuration", ">", "0" ] @@ -4695,63 +4623,6 @@ } ], "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update statistics", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalShotsFired" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "1" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Reset firing detection", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyHasJustFired" - }, - "parameters": [ - "Object", - "Behavior", - "=" - ] - } - ] - } - ], - "parameters": [] } ] } @@ -4763,7 +4634,7 @@ "colorG": 176, "colorR": 74, "creationTime": 0, - "name": "Reload gun when needed", + "name": "Reload", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ @@ -4800,30 +4671,29 @@ "Object", "\"__FireBullet.ReloadingTimer\"", ">=", - "Object.Behavior::PropertyReloadDuration()" + "ReloadDuration" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalReloadsCompleted" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "TotalReloadsCompleted", "+", "1" ] }, { "type": { - "value": "FireBullet::FireBullet::SetPropertyReloadInProgress" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "no" + "ReloadInProgress", + "False", + "" ] } ], @@ -4845,13 +4715,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", "=", - "Object.Behavior::PropertyShotsPerReload()" + "ShotsPerReload" ] } ] @@ -4886,13 +4755,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", "=", - "min(Object.Behavior::PropertyShotsPerReload(), Object.Behavior::PropertyAmmoQuantity())" + "min(ShotsPerReload, AmmoQuantity)" ] } ] @@ -4907,7 +4775,7 @@ "colorG": 176, "colorR": 74, "creationTime": 0, - "name": "Reduce heat level (based on cooling rate)", + "name": "Cooling", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ @@ -4919,7 +4787,7 @@ "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ - "Object.Behavior::HeatLevel()", + "HeatLevel", ">", "0" ] @@ -4932,11 +4800,10 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyExponentialCoolingRate" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ExponentialCoolingRate", ">", "0" ] @@ -4945,13 +4812,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyHeatLevel" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatLevel", "=", - "max(0, Object.Behavior::PropertyHeatLevel() - TimeDelta() * Object.Behavior::PropertyExponentialCoolingRate() * Object.Behavior::PropertyHeatLevel())" + "max(0, HeatLevel - TimeDelta() * ExponentialCoolingRate * HeatLevel)" ] } ] @@ -4961,11 +4827,10 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyLinearCoolingRate" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "LinearCoolingRate", ">", "0" ] @@ -4974,13 +4839,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyHeatLevel" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatLevel", "=", - "max(0, Object.Behavior::PropertyHeatLevel() - TimeDelta() * Object.Behavior::PropertyLinearCoolingRate())" + "max(0, HeatLevel - TimeDelta() * LinearCoolingRate)" ] } ] @@ -5007,44 +4871,32 @@ "objectGroups": [] }, { - "description": "Fire bullets toward a position.", - "fullName": "Fire bullets toward a position", + "description": "Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", + "fullName": "Fire bullets toward an object", "functionType": "Action", - "name": "FireTowardPosition", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", + "name": "FireTowardObject", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", "events": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Calculate the trajectory angle and use the \"Fire bullets\" action", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::Fire" - }, - "parameters": [ - "Object", - "Behavior", - "GetArgumentAsNumber(\"XPosition\")", - "GetArgumentAsNumber(\"YPosition\")", - "Bullet", - "Object.AngleToPosition(GetArgumentAsNumber(\"TargetXPosition\"),GetArgumentAsNumber(\"TargetYPosition\"))", - "GetArgumentAsNumber(\"Speed\")", - "" - ] - } + "type": { + "value": "FireBullet::FireBullet::Fire" + }, + "parameters": [ + "Object", + "Behavior", + "XPosition", + "YPosition", + "Bullet", + "Object.AngleToObject(TargetObject)", + "Speed", + "" ] } - ], - "parameters": [] + ] } ], "parameters": [ @@ -5072,15 +4924,84 @@ { "description": "The bullet object", "name": "Bullet", - "type": "objectList" + "type": "objectListOrEmptyIfJustDeclared" }, { - "description": "Target X position", - "name": "TargetXPosition", - "type": "expression" + "description": "Target object", + "name": "TargetObject", + "type": "objectList" }, { - "description": "Target Y position", + "description": "Speed of the bullet, in pixels per second", + "name": "Speed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", + "fullName": "Fire bullets toward a position", + "functionType": "Action", + "name": "FireTowardPosition", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::Fire" + }, + "parameters": [ + "Object", + "Behavior", + "XPosition", + "YPosition", + "Bullet", + "Object.AngleToPosition(TargetXPosition, TargetYPosition)", + "Speed", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "X position, where to create the bullet", + "name": "XPosition", + "type": "expression" + }, + { + "description": "Y position, where to create the bullet", + "name": "YPosition", + "type": "expression" + }, + { + "description": "The bullet object", + "name": "Bullet", + "type": "objectListOrEmptyIfJustDeclared" + }, + { + "description": "Target X position", + "name": "TargetXPosition", + "type": "expression" + }, + { + "description": "Target Y position", "name": "TargetYPosition", "type": "expression" }, @@ -5093,143 +5014,170 @@ "objectGroups": [] }, { - "description": "Fire bullets in the direction of a given angle.", + "description": "Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an angle", "functionType": "Action", "name": "Fire", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", "events": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Check if ready to shoot", - "source": "", - "type": "BuiltinCommonInstructions::Group", + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::IsReadyToShoot" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetBooleanVariable" + }, + "parameters": [ + "HasJustFired", + "True", + "" + ] + } + ], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "FireBullet::FireBullet::IsReadyToShoot" + "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ - "Object", - "Behavior", - "" + "BulletQuantity", + "=", + "1" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyHasJustFired" + "value": "FireBullet::FireBullet::FireSingleBullet" }, "parameters": [ "Object", "Behavior", - "yes" + "XPosition", + "YPosition", + "Bullet", + "Angle", + "Speed", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "BulletQuantity", + ">", + "1" ] } ], + "actions": [], "events": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Single bullet", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "Object.Behavior::PropertyBulletQuantity()", - "=", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::FireSingleBullet" - }, - "parameters": [ - "Object", - "Behavior", - "GetArgumentAsNumber(\"XPosition\")", - "GetArgumentAsNumber(\"YPosition\")", - "Bullet", - "GetArgumentAsNumber(\"Angle\")", - "GetArgumentAsNumber(\"Speed\")", - "" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Multiple bullets", - "source": "", - "type": "BuiltinCommonInstructions::Group", + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [], "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "BulletQuantity", + "conditions": [], + "actions": [], + "events": [ { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "Object.Behavior::PropertyBulletQuantity()", - ">", - "1" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::FiringArc" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "360", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "MultiShotAngle", + "=", + "Angle + lerp(-FiringArc / 2, FiringArc / 2, BulletIndex / (BulletQuantity - 1)) " + ] + } ] - } - ], - "actions": [ + }, { - "type": { - "value": "ModVarObjet" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "Object", - "__FireBullet.CurrentBulletAngle", - "=", - "GetArgumentAsNumber(\"Angle\") - Object.Behavior::PropertyFiringArc()/2" - ] + "comment": "When firing in a full circle, prevent first and last bullet from using the same angle" }, { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__FireBullet.BatchOrderID", - "=", - "0" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::FiringArc" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "360", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "MultiShotAngle", + "=", + "Angle + lerp(-FiringArc / 2, FiringArc / 2, BulletIndex / BulletQuantity) " + ] + } ] - } - ], - "events": [ + }, { - "type": "BuiltinCommonInstructions::Repeat", - "repeatExpression": "Object.Behavior::PropertyBulletQuantity()", + "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { @@ -5239,54 +5187,22 @@ "parameters": [ "Object", "Behavior", - "GetArgumentAsNumber(\"XPosition\")", - "GetArgumentAsNumber(\"YPosition\")", + "XPosition", + "YPosition", "Bullet", - "Object.Variable(__FireBullet.CurrentBulletAngle) + RandomInRange(-Object.Behavior::PropertyAngleVariance(),Object.Behavior::PropertyAngleVariance())", - "GetArgumentAsNumber(\"Speed\")", + "MultiShotAngle", + "Speed", "" ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move temp variable to the next angle a bullet will be sent" }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__FireBullet.CurrentBulletAngle", - "+", - "Object.Behavior::PropertyFiringArc() / (Object.Behavior::PropertyBulletQuantity() - 1)" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__FireBullet.BatchOrderID", - "+", - "1" - ] - } + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "BulletIndex", + "+", + "1" ] } ] @@ -5294,12 +5210,23 @@ ] } ], - "parameters": [] + "variables": [ + { + "folded": true, + "name": "MultiShotAngle", + "type": "number", + "value": 0 + }, + { + "name": "BulletIndex", + "type": "number", + "value": 0 + } + ] } ] } - ], - "parameters": [] + ] } ], "parameters": [ @@ -5327,7 +5254,7 @@ { "description": "The bullet object", "name": "Bullet", - "type": "objectList" + "type": "objectListOrEmptyIfJustDeclared" }, { "description": "Angle of the bullet, in degrees", @@ -5383,9 +5310,9 @@ "parameters": [ "", "Bullet", - "GetArgumentAsNumber(\"XPosition\")", - "GetArgumentAsNumber(\"YPosition\")", - "Object.Behavior::PropertyBulletLayer()" + "XPosition", + "YPosition", + "BulletLayer" ] } ], @@ -5408,13 +5335,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyRandomizedAngle" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "RandomizedAngle", "=", - "GetArgumentAsNumber(\"Angle\") + RandomInRange(-Object.Behavior::PropertyAngleVariance(), Object.Behavior::PropertyAngleVariance())" + "Angle + RandomInRange(-AngleVariance, AngleVariance)" ] }, { @@ -5423,64 +5349,13 @@ }, "parameters": [ "Bullet", - "Object.Behavior::PropertyRandomizedAngle()", - "GetArgumentAsNumber(\"Speed\") + RandomInRange(-Object.Behavior::PropertyBulletSpeedVariance(), Object.Behavior::PropertyBulletSpeedVariance())", + "RandomizedAngle", + "Speed + RandomInRange(-BulletSpeedVariance, BulletSpeedVariance)", "1" ] } ] }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Add identifier variables (to enable advanced picking by users)" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Bullet", - "__FireBullet.BulletID", - "=", - "Object.Behavior::PropertyTotalBulletsCreated()" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Bullet", - "__FireBullet.BatchID", - "=", - "Object.Behavior::PropertyTotalShotsFired()" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Bullet", - "__FireBullet.BatchOrderID", - "=", - "0" - ] - } - ] - }, { "type": "BuiltinCommonInstructions::Comment", "color": { @@ -5498,11 +5373,12 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyRotateBullet" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "RotateBullet", + "True", + "" ] } ], @@ -5514,7 +5390,7 @@ "parameters": [ "Bullet", "=", - "Object.Behavior::PropertyRandomizedAngle()" + "RandomizedAngle" ] } ] @@ -5539,11 +5415,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalBulletsCreated" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "TotalBulletsCreated", "+", "1" ] @@ -5579,7 +5454,7 @@ { "description": "The bullet object", "name": "Bullet", - "type": "objectList" + "type": "objectListOrEmptyIfJustDeclared" }, { "description": "Angle of the bullet, in degrees", @@ -5619,12 +5494,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyReloadInProgress" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "yes" + "ReloadInProgress", + "True", + "" ] }, { @@ -5662,30 +5537,17 @@ "name": "HasJustFired", "sentence": "_PARAM0_ has just fired", "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHasJustFired" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "HasJustFired", + "True", + "" ] } ], @@ -5729,11 +5591,12 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyRotateBullet" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "RotateBullet", + "True", + "" ] } ], @@ -5781,7 +5644,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyFiringArc()" + "FiringArc" ] } ] @@ -5818,13 +5681,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyFiringArc" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "FiringArc", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -5871,7 +5733,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -5915,7 +5777,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyAngleVariance()" + "AngleVariance" ] } ] @@ -5952,13 +5814,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAngleVariance" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AngleVariance", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -6005,7 +5866,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -6049,7 +5910,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyBulletSpeedVariance()" + "BulletSpeedVariance" ] } ] @@ -6086,13 +5947,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyBulletSpeedVariance" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "BulletSpeedVariance", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -6139,7 +5999,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -6183,7 +6043,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyBulletQuantity()" + "BulletQuantity" ] } ] @@ -6220,13 +6080,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyBulletQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "BulletQuantity", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -6273,7 +6132,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -6314,13 +6173,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyBulletLayer" + "value": "SetStringVariable" }, "parameters": [ - "Object", - "Behavior", + "BulletLayer", "=", - "GetArgumentAsString(\"Value\")" + "Value" ] } ] @@ -6360,22 +6218,24 @@ { "type": { "inverted": true, - "value": "GetArgumentAsBoolean" + "value": "BooleanVariable" }, "parameters": [ - "\"RotateBullet\"" + "Value", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyRotateBullet" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "no" + "RotateBullet", + "False", + "" ] } ] @@ -6385,22 +6245,24 @@ "conditions": [ { "type": { - "value": "GetArgumentAsBoolean" + "value": "BooleanVariable" }, "parameters": [ - "\"RotateBullet\"" + "Value", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyRotateBullet" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "yes" + "RotateBullet", + "True", + "" ] } ] @@ -6421,7 +6283,7 @@ { "defaultValue": "yes", "description": "Rotate bullet to match trajetory", - "name": "RotateBullet", + "name": "Value", "optional": true, "type": "yesorno" } @@ -6442,22 +6304,24 @@ { "type": { "inverted": true, - "value": "GetArgumentAsBoolean" + "value": "BooleanVariable" }, "parameters": [ - "\"UnlimitedAmmo\"" + "Value", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyUnlimitedAmmo" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "no" + "UnlimitedAmmo", + "False", + "" ] } ] @@ -6467,22 +6331,24 @@ "conditions": [ { "type": { - "value": "GetArgumentAsBoolean" + "value": "BooleanVariable" }, "parameters": [ - "\"UnlimitedAmmo\"" + "Value", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyUnlimitedAmmo" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "yes" + "UnlimitedAmmo", + "True", + "" ] } ] @@ -6503,7 +6369,7 @@ { "defaultValue": "yes", "description": "Unlimited ammo", - "name": "UnlimitedAmmo", + "name": "Value", "optional": true, "type": "yesorno" } @@ -6527,7 +6393,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyFireCooldown()" + "FireCooldown" ] } ] @@ -6564,13 +6430,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyFireCooldown" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "FireCooldown", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -6617,7 +6482,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"NewCooldown\")", + "Value", "" ] } @@ -6638,7 +6503,7 @@ }, { "description": "Cooldown in seconds", - "name": "NewCooldown", + "name": "Value", "type": "expression" } ], @@ -6661,7 +6526,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyReloadDuration()" + "ReloadDuration" ] } ] @@ -6698,13 +6563,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyReloadDuration" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ReloadDuration", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -6751,7 +6615,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -6795,7 +6659,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyOverheatDuration()" + "OverheatDuration" ] } ] @@ -6832,13 +6696,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyOverheatDuration" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "OverheatDuration", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -6885,7 +6748,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -6929,7 +6792,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyAmmoQuantity()" + "AmmoQuantity" ] } ] @@ -6966,13 +6829,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AmmoQuantity", "=", - "GetArgumentAsNumber(\"Value\")" + "max(0, Value)" ] } ] @@ -7019,7 +6881,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "max(0, Value)", "" ] } @@ -7063,7 +6925,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyHeatIncreasePerShot()" + "HeatIncreasePerShot" ] } ] @@ -7100,13 +6962,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyHeatIncreasePerShot" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatIncreasePerShot", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -7153,7 +7014,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -7197,7 +7058,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyMaxAmmo()" + "MaxAmmo" ] } ] @@ -7234,13 +7095,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyMaxAmmo" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "MaxAmmo", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -7250,11 +7110,10 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyMaxAmmo" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "MaxAmmo", ">", "0" ] @@ -7263,13 +7122,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AmmoQuantity", "=", - "min(Object.Behavior::MaxAmmo(),Object.Behavior::AmmoQuantity())" + "min(MaxAmmo, AmmoQuantity)" ] } ] @@ -7316,7 +7174,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -7357,11 +7215,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalShotsFired" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "TotalShotsFired", "=", "0" ] @@ -7398,11 +7255,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalBulletsCreated" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "TotalBulletsCreated", "=", "0" ] @@ -7439,11 +7295,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalReloadsCompleted" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "TotalReloadsCompleted", "=", "0" ] @@ -7483,7 +7338,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyShotsPerReload()" + "ShotsPerReload" ] } ] @@ -7520,13 +7375,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsPerReload" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsPerReload", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -7536,26 +7390,24 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyShotsBeforeNextReload" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", ">", - "Object.Behavior::PropertyShotsPerReload()" + "ShotsPerReload" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", "=", - "Object.Behavior::PropertyShotsPerReload()" + "ShotsPerReload" ] } ] @@ -7602,7 +7454,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -7643,12 +7495,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAutomaticReloading" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "=" + "AutomaticReloading", + "False", + "" ] } ] @@ -7658,22 +7510,24 @@ "conditions": [ { "type": { - "value": "GetArgumentAsBoolean" + "value": "BooleanVariable" }, "parameters": [ - "\"Value\"" + "Value", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAutomaticReloading" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "yes" + "AutomaticReloading", + "True", + "" ] } ] @@ -7718,7 +7572,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyLinearCoolingRate()" + "LinearCoolingRate" ] } ] @@ -7755,13 +7609,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyLinearCoolingRate" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "LinearCoolingRate", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -7808,7 +7661,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -7852,7 +7705,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyExponentialCoolingRate()" + "ExponentialCoolingRate" ] } ] @@ -7889,13 +7742,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyExponentialCoolingRate" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ExponentialCoolingRate", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -7943,7 +7795,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -7984,13 +7836,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AmmoQuantity", "+", - "GetArgumentAsNumber(\"AmmoGained\")" + "AmmoGained" ] } ] @@ -8012,11 +7863,10 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyMaxAmmo" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "MaxAmmo", ">", "0" ] @@ -8025,13 +7875,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AmmoQuantity", "=", - "min(Object.Behavior::MaxAmmo(),Object.Behavior::AmmoQuantity())" + "min(MaxAmmo, AmmoQuantity)" ] } ] @@ -8051,11 +7900,12 @@ }, { "type": { - "value": "FireBullet::FireBullet::PropertyAutomaticReloading" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "AutomaticReloading", + "True", + "" ] } ], @@ -8110,7 +7960,7 @@ "value": "SetReturnString" }, "parameters": [ - "Object.Behavior::PropertyBulletLayer()" + "BulletLayer" ] } ] @@ -8151,7 +8001,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "min(1,Object.Behavior::PropertyHeatLevel())" + "min(1, HeatLevel)" ] } ] @@ -8192,7 +8042,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyTotalShotsFired()" + "TotalShotsFired" ] } ] @@ -8233,7 +8083,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyTotalBulletsCreated()" + "TotalBulletsCreated" ] } ] @@ -8274,7 +8124,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyTotalReloadsCompleted()" + "TotalReloadsCompleted" ] } ] @@ -8315,7 +8165,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyShotsBeforeNextReload()" + "ShotsBeforeNextReload" ] } ] @@ -8356,7 +8206,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "max(0,Object.Behavior::Cooldown() - Object.ObjectTimerElapsedTime(\"__FireBullet.FiringCooldown\"))" + "max(0, FireCooldown - Object.ObjectTimerElapsedTime(\"__FireBullet.FiringCooldown\"))" ] } ] @@ -8409,7 +8259,60 @@ "value": "SetReturnNumber" }, "parameters": [ - "max(0, Object.Behavior::PropertyOverheatDuration() - Object.ObjectTimerElapsedTime(\"__FireBullet.OverheatDuration\"))" + "max(0, OverheatDuration - Object.ObjectTimerElapsedTime(\"__FireBullet.OverheatDuration\"))" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the remaining duration before the reload finishes, in seconds.", + "fullName": "Duration before the reload finishes", + "functionType": "ExpressionAndCondition", + "group": "Reload", + "name": "ReloadTimeLeft", + "sentence": "the remaining duration before the reload finishes", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__FireBullet.ReloadingTimer\"", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "max(0, ReloadDuration - Object.ObjectTimerElapsedTime(\"__FireBullet.ReloadingTimer\"))" ] } ] @@ -8460,11 +8363,12 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyReloadInProgress" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "ReloadInProgress", + "True", + "" ] } ], @@ -8528,11 +8432,12 @@ "subInstructions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHasJustFired" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "HasJustFired", + "True", + "" ] }, { @@ -8664,11 +8569,12 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyAutomaticReloading" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "AutomaticReloading", + "True", + "" ] } ], @@ -8726,11 +8632,12 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyUnlimitedAmmo" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "UnlimitedAmmo", + "True", + "" ] } ], @@ -8799,12 +8706,11 @@ }, { "type": { - "value": "FireBullet::FireBullet::PropertyAmmoQuantity" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", - "=", + "AmmoQuantity", + "<=", "0" ] } @@ -8875,22 +8781,20 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyShotsPerReload" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsPerReload", ">", "0" ] }, { "type": { - "value": "FireBullet::FireBullet::PropertyShotsBeforeNextReload" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", "=", "0" ] @@ -8956,11 +8860,10 @@ "subInstructions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHeatLevel" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatLevel", ">=", "1" ] @@ -9075,16 +8978,30 @@ "type": "Number", "unit": "Second", "label": "Firing cooldown", - "description": "Objects cannot shoot while firing cooldown is active", + "description": "Objects cannot shoot while firing cooldown is active.", + "group": "", + "extraInformation": [], "name": "FireCooldown" }, { "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HasJustFired" }, + { + "value": "true", + "type": "Boolean", + "label": "Rotate bullets to match their trajectory", + "description": "", + "group": "", + "extraInformation": [], + "name": "RotateBullet" + }, { "value": "45", "type": "Number", @@ -9092,14 +9009,16 @@ "label": "Firing arc", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "FiringArc" }, { "value": "1", "type": "Number", - "label": "Number of bullets created at once (Multi-Fire)", + "label": "Number of bullets created at once", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "BulletQuantity" }, { @@ -9107,20 +9026,30 @@ "type": "Number", "unit": "DegreeAngle", "label": "Angle variance", - "description": "Make imperfect aim (Range: 0 to 180 degrees)", + "description": "Make imperfect aim (between 0 and 180 degrees).", "group": "Firing variance", + "extraInformation": [], + "advanced": true, "name": "AngleVariance" }, { - "value": "true", - "type": "Boolean", - "label": "Rotate bullets to match their trajectory", - "name": "RotateBullet" + "value": "0", + "type": "Number", + "unit": "PixelSpeed", + "label": "Bullet speed variance", + "description": "Bullet speed will be adjusted by a random value within this range.", + "group": "Firing variance", + "extraInformation": [], + "advanced": true, + "name": "BulletSpeedVariance" }, { "value": "0", "type": "Number", "label": "Ammo quantity (current)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "AmmoQuantity" }, @@ -9128,8 +9057,10 @@ "value": "0", "type": "Number", "label": "Shots per reload ", - "description": "Use 0 to disable reloading", + "description": "Use 0 to disable reloading.", "group": "Reload", + "extraInformation": [], + "advanced": true, "name": "ShotsPerReload" }, { @@ -9137,21 +9068,29 @@ "type": "Number", "unit": "Second", "label": "Reloading duration", - "description": "Objects cannot shoot while reloading is in progress", + "description": "Objects cannot shoot while reloading is in progress.", "group": "Reload", + "extraInformation": [], + "advanced": true, "name": "ReloadDuration" }, { "value": "0", "type": "Number", "label": "Max ammo ", + "description": "", "group": "Ammo", + "extraInformation": [], + "advanced": true, "name": "MaxAmmo" }, { "value": "0", "type": "Number", "label": "Shots before next reload", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ShotsBeforeNextReload" }, @@ -9160,6 +9099,8 @@ "type": "Number", "label": "Total shots fired", "description": "Regardless of how many bullets are created, only 1 shot will be counted per frame", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalShotsFired" }, @@ -9167,6 +9108,9 @@ "value": "0", "type": "Number", "label": "Total bullets created", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalBulletsCreated" }, @@ -9174,13 +9118,19 @@ "value": "0", "type": "Number", "label": "Starting ammo", + "description": "", "group": "Ammo", + "extraInformation": [], + "advanced": true, "name": "StartingAmmo" }, { "value": "0", "type": "Number", "label": "Total reloads completed", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalReloadsCompleted" }, @@ -9188,28 +9138,39 @@ "value": "true", "type": "Boolean", "label": "Unlimited ammo", + "description": "", "group": "Ammo", + "extraInformation": [], + "advanced": true, "name": "UnlimitedAmmo" }, { "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ReloadInProgress" }, { "value": "0", "type": "Number", - "label": "Heat increase per shot (Range: 0 to 1)", - "description": " Object is overheated when Heat reaches 1", + "label": "Heat increase per shot (between 0 and 1)", + "description": " Object is overheated when Heat reaches 1.", "group": "Overheat", + "extraInformation": [], + "advanced": true, "name": "HeatIncreasePerShot" }, { "value": "0", "type": "Number", "label": "Heat level (Range: 0 to 1)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HeatLevel" }, @@ -9217,7 +9178,10 @@ "value": "true", "type": "Boolean", "label": "Reload automatically", + "description": "", "group": "Reload", + "extraInformation": [], + "advanced": true, "name": "AutomaticReloading" }, { @@ -9225,36 +9189,42 @@ "type": "Number", "unit": "Second", "label": "Overheat duration", - "description": "Object cannot shoot while overheat duration is active", + "description": "Object cannot shoot while overheat duration is active.", "group": "Overheat", + "extraInformation": [], + "advanced": true, "name": "OverheatDuration" }, { "value": "0.1", "type": "Number", "label": "Linear cooling rate (per second)", + "description": "", "group": "Overheat", + "extraInformation": [], + "advanced": true, "name": "LinearCoolingRate" }, { "value": "0.3", "type": "Number", "label": "Exponential cooling rate (per second)", - "description": "Happens faster when heat is high and slower when heat is low", + "description": "Happens faster when heat is high and slower when heat is low.", "group": "Overheat", "extraInformation": [ "Linear", "Exponential" ], - "choices": [], + "advanced": true, "name": "ExponentialCoolingRate" }, { "value": "", "type": "String", "label": "Layer the bullets are created on", - "description": "Base layer by default", + "description": "Base layer by default.", "group": "Shooting configuration", + "extraInformation": [], "hidden": true, "name": "BulletLayer" }, @@ -9262,17 +9232,11 @@ "value": "0", "type": "Number", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "RandomizedAngle" - }, - { - "value": "0", - "type": "Number", - "unit": "PixelSpeed", - "label": "Bullet speed variance", - "description": "Bullet speed will be adjusted by a random value within this range", - "group": "Firing variance", - "name": "BulletSpeedVariance" } ], "sharedPropertyDescriptors": [] diff --git a/examples/game-feel-demo/game-feel-demo.json b/examples/game-feel-demo/game-feel-demo.json index 72492bf38..2e3cd2e0f 100644 --- a/examples/game-feel-demo/game-feel-demo.json +++ b/examples/game-feel-demo/game-feel-demo.json @@ -8619,22 +8619,26 @@ "author": "@4ian", "category": "Game mechanic", "extensionNamespace": "", + "gdevelopVersion": ">=5.5.222", "fullName": "Fire bullets", "helpPath": "/extensions/fire-bullet/details", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", "name": "FireBullet", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", "shortDescription": "Fire bullets, manage ammo, reloading and overheating.", - "version": "0.7.0", + "version": "0.9.2", "description": [ - "This extension allows objects to fire bullets.", + "This extension allows objects to fire bullets. To use it, add the behavior to the object that will shoot, then use the provided action to launch another object as the bullet.", "", - "It handles:", + "The properties of the behavior can be used to customize:", "- Cooldown between shots", "- Firing multiple bullets at a time ([open the project online](https://editor.gdevelop.io/?project=example://fire-bullet))", "- Ammo management", "- Overheat", "", + "The speed can be specified when using the actions to fire the bullets.", + "The bullets are automatically given a permanent force to make them move in the 2D plane (no need to use a linear movement or move them with another behavior).", + "", "It can be used for:", "- Twin-stick shooters ([open the project online](https://editor.gdevelop.io/?project=example://conviction-of-gun-dude-desktop))", "- Shoot'em up ([open the project online](https://editor.gdevelop.io/?project=example://space-shooter))", @@ -8668,7 +8672,7 @@ "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "Fire bullets, manage ammo, reloading, and overheating.", + "description": "Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).", "fullName": "Fire bullets", "name": "FireBullet", "objectType": "", @@ -8694,24 +8698,22 @@ }, { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AmmoQuantity", "=", - "Object.Behavior::PropertyStartingAmmo()" + "StartingAmmo" ] }, { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", "=", - "Object.Behavior::PropertyShotsPerReload()" + "ShotsPerReload" ] } ] @@ -8764,114 +8766,93 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHasJustFired" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "HasJustFired", + "True", + "" ] } ], - "actions": [], - "events": [ + "actions": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Reset firing cooldown", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__FireBullet.FiringCooldown\"" - ] - } - ] - } - ], - "parameters": [] + "type": { + "value": "SetBooleanVariable" + }, + "parameters": [ + "HasJustFired", + "False", + "" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__FireBullet.FiringCooldown\"" + ] }, + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "TotalShotsFired", + "+", + "1" + ] + } + ], + "events": [ { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, - "name": "Update ammo", + "name": "Ammo", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Subtract 1 from ammo (if not unlimited ammo)" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "inverted": true, - "value": "FireBullet::FireBullet::PropertyUnlimitedAmmo" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "UnlimitedAmmo", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AmmoQuantity", "=", - "max(0,Object.Behavior::AmmoQuantity() - 1)" + "max(0, AmmoQuantity - 1)" ] } ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update reloading counter", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyShotsPerReload" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsPerReload", ">", "0" ] @@ -8880,39 +8861,27 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", "-", "1" ] } ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Automatically reload gun when needed", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyAutomaticReloading" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "AutomaticReloading", + "True", + "" ] }, { @@ -8958,32 +8927,19 @@ "colorG": 176, "colorR": 74, "creationTime": 0, - "name": "Update Overheat", + "name": "Overheat", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Increase heat (if needed)" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHeatIncreasePerShot" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatIncreasePerShot", ">", "0" ] @@ -8992,39 +8948,25 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyHeatLevel" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatLevel", "+", - "Object.Behavior::PropertyHeatIncreasePerShot()" + "HeatIncreasePerShot" ] } ], "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Check if this caused overheat" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyOverheatDuration" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "OverheatDuration", ">", "0" ] @@ -9056,63 +8998,6 @@ } ], "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update statistics", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalShotsFired" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "1" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Reset firing detection", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyHasJustFired" - }, - "parameters": [ - "Object", - "Behavior", - "=" - ] - } - ] - } - ], - "parameters": [] } ] } @@ -9124,7 +9009,7 @@ "colorG": 176, "colorR": 74, "creationTime": 0, - "name": "Reload gun when needed", + "name": "Reload", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ @@ -9161,30 +9046,29 @@ "Object", "\"__FireBullet.ReloadingTimer\"", ">=", - "Object.Behavior::PropertyReloadDuration()" + "ReloadDuration" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalReloadsCompleted" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "TotalReloadsCompleted", "+", "1" ] }, { "type": { - "value": "FireBullet::FireBullet::SetPropertyReloadInProgress" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "no" + "ReloadInProgress", + "False", + "" ] } ], @@ -9206,13 +9090,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", "=", - "Object.Behavior::PropertyShotsPerReload()" + "ShotsPerReload" ] } ] @@ -9247,13 +9130,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", "=", - "min(Object.Behavior::PropertyShotsPerReload(), Object.Behavior::PropertyAmmoQuantity())" + "min(ShotsPerReload, AmmoQuantity)" ] } ] @@ -9268,7 +9150,7 @@ "colorG": 176, "colorR": 74, "creationTime": 0, - "name": "Reduce heat level (based on cooling rate)", + "name": "Cooling", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ @@ -9280,7 +9162,7 @@ "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ - "Object.Behavior::HeatLevel()", + "HeatLevel", ">", "0" ] @@ -9293,11 +9175,10 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyExponentialCoolingRate" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ExponentialCoolingRate", ">", "0" ] @@ -9306,13 +9187,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyHeatLevel" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatLevel", "=", - "max(0, Object.Behavior::PropertyHeatLevel() - TimeDelta() * Object.Behavior::PropertyExponentialCoolingRate() * Object.Behavior::PropertyHeatLevel())" + "max(0, HeatLevel - TimeDelta() * ExponentialCoolingRate * HeatLevel)" ] } ] @@ -9322,11 +9202,10 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyLinearCoolingRate" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "LinearCoolingRate", ">", "0" ] @@ -9335,13 +9214,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyHeatLevel" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatLevel", "=", - "max(0, Object.Behavior::PropertyHeatLevel() - TimeDelta() * Object.Behavior::PropertyLinearCoolingRate())" + "max(0, HeatLevel - TimeDelta() * LinearCoolingRate)" ] } ] @@ -9368,44 +9246,32 @@ "objectGroups": [] }, { - "description": "Fire bullets toward an object.", + "description": "Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an object", "functionType": "Action", "name": "FireTowardObject", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", "events": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Calculate the trajectory angle and use the \"Fire bullets\" action", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::Fire" - }, - "parameters": [ - "Object", - "Behavior", - "GetArgumentAsNumber(\"XPosition\")", - "GetArgumentAsNumber(\"YPosition\")", - "Bullet", - "Object.AngleToObject(TargetObject)", - "GetArgumentAsNumber(\"Speed\")", - "" - ] - } + "type": { + "value": "FireBullet::FireBullet::Fire" + }, + "parameters": [ + "Object", + "Behavior", + "XPosition", + "YPosition", + "Bullet", + "Object.AngleToObject(TargetObject)", + "Speed", + "" ] } - ], - "parameters": [] + ] } ], "parameters": [ @@ -9449,44 +9315,32 @@ "objectGroups": [] }, { - "description": "Fire bullets toward a position.", + "description": "Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward a position", "functionType": "Action", "name": "FireTowardPosition", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", "events": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Calculate the trajectory angle and use the \"Fire bullets\" action", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::Fire" - }, - "parameters": [ - "Object", - "Behavior", - "GetArgumentAsNumber(\"XPosition\")", - "GetArgumentAsNumber(\"YPosition\")", - "Bullet", - "Object.AngleToPosition(GetArgumentAsNumber(\"TargetXPosition\"), GetArgumentAsNumber(\"TargetYPosition\"))", - "GetArgumentAsNumber(\"Speed\")", - "" - ] - } + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::Fire" + }, + "parameters": [ + "Object", + "Behavior", + "XPosition", + "YPosition", + "Bullet", + "Object.AngleToPosition(TargetXPosition, TargetYPosition)", + "Speed", + "" ] } - ], - "parameters": [] + ] } ], "parameters": [ @@ -9535,249 +9389,195 @@ "objectGroups": [] }, { - "description": "Fire bullets in the direction of a given angle.", + "description": "Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an angle", "functionType": "Action", "name": "Fire", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", "events": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Check if ready to shoot", - "source": "", - "type": "BuiltinCommonInstructions::Group", + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::IsReadyToShoot" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetBooleanVariable" + }, + "parameters": [ + "HasJustFired", + "True", + "" + ] + } + ], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "FireBullet::FireBullet::IsReadyToShoot" + "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ - "Object", - "Behavior", - "" + "BulletQuantity", + "=", + "1" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyHasJustFired" + "value": "FireBullet::FireBullet::FireSingleBullet" }, "parameters": [ "Object", "Behavior", - "yes" + "XPosition", + "YPosition", + "Bullet", + "Angle", + "Speed", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "BulletQuantity", + ">", + "1" ] } ], + "actions": [], "events": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Single bullet", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "Object.Behavior::PropertyBulletQuantity()", - "=", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::FireSingleBullet" - }, - "parameters": [ - "Object", - "Behavior", - "GetArgumentAsNumber(\"XPosition\")", - "GetArgumentAsNumber(\"YPosition\")", - "Bullet", - "GetArgumentAsNumber(\"Angle\")", - "GetArgumentAsNumber(\"Speed\")", - "" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Multiple bullets", - "source": "", - "type": "BuiltinCommonInstructions::Group", + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [], "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "Object.Behavior::PropertyBulletQuantity()", - ">", - "1" - ] - } - ], - "actions": [ + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "BulletQuantity", + "conditions": [], + "actions": [], + "events": [ { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__FireBullet.BatchOrderID", - "=", - "0" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::FiringArc" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "360", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "MultiShotAngle", + "=", + "Angle + lerp(-FiringArc / 2, FiringArc / 2, BulletIndex / (BulletQuantity - 1)) " + ] + } ] }, { - "type": { - "value": "ModVarObjet" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "Object", - "__FireBullet.CurrentBulletAngle", - "=", - "GetArgumentAsNumber(\"Angle\") - Object.Behavior::PropertyFiringArc()/2" - ] - } - ], - "events": [ + "comment": "When firing in a full circle, prevent first and last bullet from using the same angle" + }, { - "type": "BuiltinCommonInstructions::Repeat", - "repeatExpression": "Object.Behavior::PropertyBulletQuantity()", - "conditions": [], - "actions": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "FireBullet::FireBullet::FireSingleBullet" + "value": "FireBullet::FireBullet::FiringArc" }, "parameters": [ "Object", "Behavior", - "GetArgumentAsNumber(\"XPosition\")", - "GetArgumentAsNumber(\"YPosition\")", - "Bullet", - "Object.Variable(__FireBullet.CurrentBulletAngle) + RandomInRange(-Object.Behavior::PropertyAngleVariance(),Object.Behavior::PropertyAngleVariance())", - "GetArgumentAsNumber(\"Speed\")", + "=", + "360", "" ] } ], - "events": [ + "actions": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "SetNumberVariable" }, - "comment": "When firing in a full circle, prevent first and last bullet from using the same angle" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::FiringArc" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "360", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__FireBullet.CurrentBulletAngle", - "+", - "Object.Behavior::PropertyFiringArc() / (Object.Behavior::PropertyBulletQuantity())" - ] - } + "parameters": [ + "MultiShotAngle", + "=", + "Angle + lerp(-FiringArc / 2, FiringArc / 2, BulletIndex / BulletQuantity) " ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::FiringArc" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "360", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__FireBullet.CurrentBulletAngle", - "+", - "Object.Behavior::PropertyFiringArc() / (Object.Behavior::PropertyBulletQuantity() - 1)" - ] - } + "type": { + "value": "FireBullet::FireBullet::FireSingleBullet" + }, + "parameters": [ + "Object", + "Behavior", + "XPosition", + "YPosition", + "Bullet", + "MultiShotAngle", + "Speed", + "" ] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__FireBullet.BatchOrderID", - "+", - "1" - ] - } + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "BulletIndex", + "+", + "1" ] } ] @@ -9785,12 +9585,23 @@ ] } ], - "parameters": [] + "variables": [ + { + "folded": true, + "name": "MultiShotAngle", + "type": "number", + "value": 0 + }, + { + "name": "BulletIndex", + "type": "number", + "value": 0 + } + ] } ] } - ], - "parameters": [] + ] } ], "parameters": [ @@ -9874,9 +9685,9 @@ "parameters": [ "", "Bullet", - "GetArgumentAsNumber(\"XPosition\")", - "GetArgumentAsNumber(\"YPosition\")", - "Object.Behavior::PropertyBulletLayer()" + "XPosition", + "YPosition", + "BulletLayer" ] } ], @@ -9899,13 +9710,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyRandomizedAngle" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "RandomizedAngle", "=", - "GetArgumentAsNumber(\"Angle\") + RandomInRange(-Object.Behavior::PropertyAngleVariance(), Object.Behavior::PropertyAngleVariance())" + "Angle + RandomInRange(-AngleVariance, AngleVariance)" ] }, { @@ -9914,64 +9724,13 @@ }, "parameters": [ "Bullet", - "Object.Behavior::PropertyRandomizedAngle()", - "GetArgumentAsNumber(\"Speed\") + RandomInRange(-Object.Behavior::PropertyBulletSpeedVariance(), Object.Behavior::PropertyBulletSpeedVariance())", + "RandomizedAngle", + "Speed + RandomInRange(-BulletSpeedVariance, BulletSpeedVariance)", "1" ] } ] }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Add identifier variables (to enable advanced picking by users)" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Bullet", - "__FireBullet.BulletID", - "=", - "Object.Behavior::PropertyTotalBulletsCreated()" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Bullet", - "__FireBullet.BatchID", - "=", - "Object.Behavior::PropertyTotalShotsFired()" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Bullet", - "__FireBullet.BatchOrderID", - "=", - "0" - ] - } - ] - }, { "type": "BuiltinCommonInstructions::Comment", "color": { @@ -9989,11 +9748,12 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyRotateBullet" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "RotateBullet", + "True", + "" ] } ], @@ -10005,7 +9765,7 @@ "parameters": [ "Bullet", "=", - "Object.Behavior::PropertyRandomizedAngle()" + "RandomizedAngle" ] } ] @@ -10030,11 +9790,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalBulletsCreated" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "TotalBulletsCreated", "+", "1" ] @@ -10110,12 +9869,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyReloadInProgress" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "yes" + "ReloadInProgress", + "True", + "" ] }, { @@ -10153,30 +9912,17 @@ "name": "HasJustFired", "sentence": "_PARAM0_ has just fired", "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHasJustFired" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "HasJustFired", + "True", + "" ] } ], @@ -10220,11 +9966,12 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyRotateBullet" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "RotateBullet", + "True", + "" ] } ], @@ -10272,7 +10019,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyFiringArc()" + "FiringArc" ] } ] @@ -10309,13 +10056,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyFiringArc" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "FiringArc", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -10362,7 +10108,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -10406,7 +10152,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyAngleVariance()" + "AngleVariance" ] } ] @@ -10443,13 +10189,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAngleVariance" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AngleVariance", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -10496,7 +10241,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -10540,7 +10285,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyBulletSpeedVariance()" + "BulletSpeedVariance" ] } ] @@ -10577,13 +10322,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyBulletSpeedVariance" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "BulletSpeedVariance", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -10630,7 +10374,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -10674,7 +10418,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyBulletQuantity()" + "BulletQuantity" ] } ] @@ -10711,13 +10455,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyBulletQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "BulletQuantity", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -10764,7 +10507,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -10805,13 +10548,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyBulletLayer" + "value": "SetStringVariable" }, "parameters": [ - "Object", - "Behavior", + "BulletLayer", "=", - "GetArgumentAsString(\"Value\")" + "Value" ] } ] @@ -10851,22 +10593,24 @@ { "type": { "inverted": true, - "value": "GetArgumentAsBoolean" + "value": "BooleanVariable" }, "parameters": [ - "\"RotateBullet\"" + "Value", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyRotateBullet" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "no" + "RotateBullet", + "False", + "" ] } ] @@ -10876,22 +10620,24 @@ "conditions": [ { "type": { - "value": "GetArgumentAsBoolean" + "value": "BooleanVariable" }, "parameters": [ - "\"RotateBullet\"" + "Value", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyRotateBullet" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "yes" + "RotateBullet", + "True", + "" ] } ] @@ -10912,7 +10658,7 @@ { "defaultValue": "yes", "description": "Rotate bullet to match trajetory", - "name": "RotateBullet", + "name": "Value", "optional": true, "type": "yesorno" } @@ -10933,22 +10679,24 @@ { "type": { "inverted": true, - "value": "GetArgumentAsBoolean" + "value": "BooleanVariable" }, "parameters": [ - "\"UnlimitedAmmo\"" + "Value", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyUnlimitedAmmo" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "no" + "UnlimitedAmmo", + "False", + "" ] } ] @@ -10958,22 +10706,24 @@ "conditions": [ { "type": { - "value": "GetArgumentAsBoolean" + "value": "BooleanVariable" }, "parameters": [ - "\"UnlimitedAmmo\"" + "Value", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyUnlimitedAmmo" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "yes" + "UnlimitedAmmo", + "True", + "" ] } ] @@ -10994,7 +10744,7 @@ { "defaultValue": "yes", "description": "Unlimited ammo", - "name": "UnlimitedAmmo", + "name": "Value", "optional": true, "type": "yesorno" } @@ -11018,7 +10768,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyFireCooldown()" + "FireCooldown" ] } ] @@ -11055,13 +10805,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyFireCooldown" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "FireCooldown", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -11108,7 +10857,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"NewCooldown\")", + "Value", "" ] } @@ -11129,7 +10878,7 @@ }, { "description": "Cooldown in seconds", - "name": "NewCooldown", + "name": "Value", "type": "expression" } ], @@ -11152,7 +10901,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyReloadDuration()" + "ReloadDuration" ] } ] @@ -11189,13 +10938,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyReloadDuration" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ReloadDuration", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -11242,7 +10990,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -11286,7 +11034,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyOverheatDuration()" + "OverheatDuration" ] } ] @@ -11323,13 +11071,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyOverheatDuration" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "OverheatDuration", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -11376,7 +11123,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -11420,7 +11167,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyAmmoQuantity()" + "AmmoQuantity" ] } ] @@ -11457,13 +11204,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AmmoQuantity", "=", - "max(0,Value)" + "max(0, Value)" ] } ] @@ -11510,7 +11256,7 @@ "Object", "Behavior", "=", - "max(0,Value)", + "max(0, Value)", "" ] } @@ -11554,7 +11300,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyHeatIncreasePerShot()" + "HeatIncreasePerShot" ] } ] @@ -11591,13 +11337,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyHeatIncreasePerShot" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatIncreasePerShot", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -11644,7 +11389,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -11688,7 +11433,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyMaxAmmo()" + "MaxAmmo" ] } ] @@ -11725,13 +11470,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyMaxAmmo" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "MaxAmmo", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -11741,11 +11485,10 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyMaxAmmo" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "MaxAmmo", ">", "0" ] @@ -11754,13 +11497,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AmmoQuantity", "=", - "min(Object.Behavior::MaxAmmo(),Object.Behavior::AmmoQuantity())" + "min(MaxAmmo, AmmoQuantity)" ] } ] @@ -11807,7 +11549,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -11848,11 +11590,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalShotsFired" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "TotalShotsFired", "=", "0" ] @@ -11889,11 +11630,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalBulletsCreated" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "TotalBulletsCreated", "=", "0" ] @@ -11930,11 +11670,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalReloadsCompleted" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "TotalReloadsCompleted", "=", "0" ] @@ -11974,7 +11713,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyShotsPerReload()" + "ShotsPerReload" ] } ] @@ -12011,13 +11750,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsPerReload" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsPerReload", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -12027,26 +11765,24 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyShotsBeforeNextReload" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", ">", - "Object.Behavior::PropertyShotsPerReload()" + "ShotsPerReload" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", "=", - "Object.Behavior::PropertyShotsPerReload()" + "ShotsPerReload" ] } ] @@ -12093,7 +11829,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -12134,12 +11870,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAutomaticReloading" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "=" + "AutomaticReloading", + "False", + "" ] } ] @@ -12149,22 +11885,24 @@ "conditions": [ { "type": { - "value": "GetArgumentAsBoolean" + "value": "BooleanVariable" }, "parameters": [ - "\"Value\"" + "Value", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAutomaticReloading" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "yes" + "AutomaticReloading", + "True", + "" ] } ] @@ -12209,7 +11947,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyLinearCoolingRate()" + "LinearCoolingRate" ] } ] @@ -12246,13 +11984,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyLinearCoolingRate" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "LinearCoolingRate", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -12299,7 +12036,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -12343,7 +12080,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyExponentialCoolingRate()" + "ExponentialCoolingRate" ] } ] @@ -12380,13 +12117,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyExponentialCoolingRate" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ExponentialCoolingRate", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -12434,7 +12170,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -12475,13 +12211,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AmmoQuantity", "+", - "GetArgumentAsNumber(\"AmmoGained\")" + "AmmoGained" ] } ] @@ -12503,11 +12238,10 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyMaxAmmo" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "MaxAmmo", ">", "0" ] @@ -12516,13 +12250,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AmmoQuantity", "=", - "min(Object.Behavior::MaxAmmo(),Object.Behavior::AmmoQuantity())" + "min(MaxAmmo, AmmoQuantity)" ] } ] @@ -12542,11 +12275,12 @@ }, { "type": { - "value": "FireBullet::FireBullet::PropertyAutomaticReloading" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "AutomaticReloading", + "True", + "" ] } ], @@ -12601,7 +12335,7 @@ "value": "SetReturnString" }, "parameters": [ - "Object.Behavior::PropertyBulletLayer()" + "BulletLayer" ] } ] @@ -12642,7 +12376,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "min(1,Object.Behavior::PropertyHeatLevel())" + "min(1, HeatLevel)" ] } ] @@ -12683,7 +12417,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyTotalShotsFired()" + "TotalShotsFired" ] } ] @@ -12724,7 +12458,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyTotalBulletsCreated()" + "TotalBulletsCreated" ] } ] @@ -12765,7 +12499,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyTotalReloadsCompleted()" + "TotalReloadsCompleted" ] } ] @@ -12806,7 +12540,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyShotsBeforeNextReload()" + "ShotsBeforeNextReload" ] } ] @@ -12847,7 +12581,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "max(0,Object.Behavior::Cooldown() - Object.ObjectTimerElapsedTime(\"__FireBullet.FiringCooldown\"))" + "max(0, FireCooldown - Object.ObjectTimerElapsedTime(\"__FireBullet.FiringCooldown\"))" ] } ] @@ -12900,7 +12634,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "max(0, Object.Behavior::PropertyOverheatDuration() - Object.ObjectTimerElapsedTime(\"__FireBullet.OverheatDuration\"))" + "max(0, OverheatDuration - Object.ObjectTimerElapsedTime(\"__FireBullet.OverheatDuration\"))" ] } ] @@ -12953,7 +12687,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "max(0, Object.Behavior::PropertyReloadDuration() - Object.ObjectTimerElapsedTime(\"__FireBullet.ReloadingTimer\"))" + "max(0, ReloadDuration - Object.ObjectTimerElapsedTime(\"__FireBullet.ReloadingTimer\"))" ] } ] @@ -13004,11 +12738,12 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyReloadInProgress" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "ReloadInProgress", + "True", + "" ] } ], @@ -13072,11 +12807,12 @@ "subInstructions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHasJustFired" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "HasJustFired", + "True", + "" ] }, { @@ -13208,11 +12944,12 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyAutomaticReloading" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "AutomaticReloading", + "True", + "" ] } ], @@ -13270,11 +13007,12 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyUnlimitedAmmo" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "UnlimitedAmmo", + "True", + "" ] } ], @@ -13343,11 +13081,10 @@ }, { "type": { - "value": "FireBullet::FireBullet::PropertyAmmoQuantity" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AmmoQuantity", "<=", "0" ] @@ -13419,22 +13156,20 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyShotsPerReload" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsPerReload", ">", "0" ] }, { "type": { - "value": "FireBullet::FireBullet::PropertyShotsBeforeNextReload" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", "=", "0" ] @@ -13500,11 +13235,10 @@ "subInstructions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHeatLevel" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatLevel", ">=", "1" ] diff --git a/examples/smoothy/smoothy.json b/examples/smoothy/smoothy.json index 2b71586dd..471f2bb94 100644 --- a/examples/smoothy/smoothy.json +++ b/examples/smoothy/smoothy.json @@ -35595,23 +35595,26 @@ "author": "@4ian", "category": "Game mechanic", "extensionNamespace": "", + "gdevelopVersion": ">=5.5.222", "fullName": "Fire bullets", - "gdevelopVersion": "", "helpPath": "/extensions/fire-bullet/details", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", "name": "FireBullet", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", "shortDescription": "Fire bullets, manage ammo, reloading and overheating.", - "version": "0.6.3", + "version": "0.9.2", "description": [ - "This extension allows objects to fire bullets.", + "This extension allows objects to fire bullets. To use it, add the behavior to the object that will shoot, then use the provided action to launch another object as the bullet.", "", - "It handles:", + "The properties of the behavior can be used to customize:", "- Cooldown between shots", "- Firing multiple bullets at a time ([open the project online](https://editor.gdevelop.io/?project=example://fire-bullet))", "- Ammo management", "- Overheat", "", + "The speed can be specified when using the actions to fire the bullets.", + "The bullets are automatically given a permanent force to make them move in the 2D plane (no need to use a linear movement or move them with another behavior).", + "", "It can be used for:", "- Twin-stick shooters ([open the project online](https://editor.gdevelop.io/?project=example://conviction-of-gun-dude-desktop))", "- Shoot'em up ([open the project online](https://editor.gdevelop.io/?project=example://space-shooter))", @@ -35645,7 +35648,7 @@ "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "Fire bullets, manage ammo, reloading, and overheating.", + "description": "Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).", "fullName": "Fire bullets", "name": "FireBullet", "objectType": "", @@ -35671,24 +35674,22 @@ }, { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AmmoQuantity", "=", - "Object.Behavior::PropertyStartingAmmo()" + "StartingAmmo" ] }, { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", "=", - "Object.Behavior::PropertyShotsPerReload()" + "ShotsPerReload" ] } ] @@ -35741,114 +35742,93 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHasJustFired" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "HasJustFired", + "True", + "" ] } ], - "actions": [], - "events": [ + "actions": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Reset firing cooldown", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__FireBullet.FiringCooldown\"" - ] - } - ] - } - ], - "parameters": [] + "type": { + "value": "SetBooleanVariable" + }, + "parameters": [ + "HasJustFired", + "False", + "" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__FireBullet.FiringCooldown\"" + ] }, + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "TotalShotsFired", + "+", + "1" + ] + } + ], + "events": [ { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, - "name": "Update ammo", + "name": "Ammo", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Subtract 1 from ammo (if not unlimited ammo)" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { "inverted": true, - "value": "FireBullet::FireBullet::PropertyUnlimitedAmmo" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "UnlimitedAmmo", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", - "-", - "1" + "AmmoQuantity", + "=", + "max(0, AmmoQuantity - 1)" ] } ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update reloading counter", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyShotsPerReload" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsPerReload", ">", "0" ] @@ -35857,39 +35837,27 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", "-", "1" ] } ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Automatically reload gun when needed", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyAutomaticReloading" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "AutomaticReloading", + "True", + "" ] }, { @@ -35935,32 +35903,19 @@ "colorG": 176, "colorR": 74, "creationTime": 0, - "name": "Update Overheat", + "name": "Overheat", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Increase heat (if needed)" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHeatIncreasePerShot" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatIncreasePerShot", ">", "0" ] @@ -35969,39 +35924,25 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyHeatLevel" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatLevel", "+", - "Object.Behavior::PropertyHeatIncreasePerShot()" + "HeatIncreasePerShot" ] } ], "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Check if this caused overheat" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyOverheatDuration" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "OverheatDuration", ">", "0" ] @@ -36033,63 +35974,6 @@ } ], "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update statistics", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalShotsFired" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "1" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Reset firing detection", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyHasJustFired" - }, - "parameters": [ - "Object", - "Behavior", - "=" - ] - } - ] - } - ], - "parameters": [] } ] } @@ -36101,7 +35985,7 @@ "colorG": 176, "colorR": 74, "creationTime": 0, - "name": "Reload gun when needed", + "name": "Reload", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ @@ -36138,30 +36022,29 @@ "Object", "\"__FireBullet.ReloadingTimer\"", ">=", - "Object.Behavior::PropertyReloadDuration()" + "ReloadDuration" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalReloadsCompleted" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "TotalReloadsCompleted", "+", "1" ] }, { "type": { - "value": "FireBullet::FireBullet::SetPropertyReloadInProgress" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "no" + "ReloadInProgress", + "False", + "" ] } ], @@ -36183,13 +36066,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", "=", - "Object.Behavior::PropertyShotsPerReload()" + "ShotsPerReload" ] } ] @@ -36224,13 +36106,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", "=", - "min(Object.Behavior::PropertyShotsPerReload(), Object.Behavior::PropertyAmmoQuantity())" + "min(ShotsPerReload, AmmoQuantity)" ] } ] @@ -36245,7 +36126,7 @@ "colorG": 176, "colorR": 74, "creationTime": 0, - "name": "Reduce heat level (based on cooling rate)", + "name": "Cooling", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ @@ -36257,7 +36138,7 @@ "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ - "Object.Behavior::HeatLevel()", + "HeatLevel", ">", "0" ] @@ -36270,11 +36151,10 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyExponentialCoolingRate" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ExponentialCoolingRate", ">", "0" ] @@ -36283,13 +36163,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyHeatLevel" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatLevel", "=", - "max(0, Object.Behavior::PropertyHeatLevel() - TimeDelta() * Object.Behavior::PropertyExponentialCoolingRate() * Object.Behavior::PropertyHeatLevel())" + "max(0, HeatLevel - TimeDelta() * ExponentialCoolingRate * HeatLevel)" ] } ] @@ -36299,11 +36178,10 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyLinearCoolingRate" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "LinearCoolingRate", ">", "0" ] @@ -36312,13 +36190,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyHeatLevel" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatLevel", "=", - "max(0, Object.Behavior::PropertyHeatLevel() - TimeDelta() * Object.Behavior::PropertyLinearCoolingRate())" + "max(0, HeatLevel - TimeDelta() * LinearCoolingRate)" ] } ] @@ -36345,44 +36222,32 @@ "objectGroups": [] }, { - "description": "Fire bullets toward an object.", + "description": "Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an object", "functionType": "Action", "name": "FireTowardObject", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", "events": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Calculate the trajectory angle and use the \"Fire bullets\" action", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::Fire" - }, - "parameters": [ - "Object", - "Behavior", - "GetArgumentAsNumber(\"XPosition\")", - "GetArgumentAsNumber(\"YPosition\")", - "Bullet", - "Object.AngleToObject(TargetObject)", - "GetArgumentAsNumber(\"Speed\")", - "" - ] - } + "type": { + "value": "FireBullet::FireBullet::Fire" + }, + "parameters": [ + "Object", + "Behavior", + "XPosition", + "YPosition", + "Bullet", + "Object.AngleToObject(TargetObject)", + "Speed", + "" ] } - ], - "parameters": [] + ] } ], "parameters": [ @@ -36426,44 +36291,32 @@ "objectGroups": [] }, { - "description": "Fire bullets toward a position.", + "description": "Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward a position", "functionType": "Action", "name": "FireTowardPosition", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", "events": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Calculate the trajectory angle and use the \"Fire bullets\" action", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::Fire" - }, - "parameters": [ - "Object", - "Behavior", - "GetArgumentAsNumber(\"XPosition\")", - "GetArgumentAsNumber(\"YPosition\")", - "Bullet", - "Object.AngleToPosition(GetArgumentAsNumber(\"TargetXPosition\"), GetArgumentAsNumber(\"TargetYPosition\"))", - "GetArgumentAsNumber(\"Speed\")", - "" - ] - } + "type": { + "value": "FireBullet::FireBullet::Fire" + }, + "parameters": [ + "Object", + "Behavior", + "XPosition", + "YPosition", + "Bullet", + "Object.AngleToPosition(TargetXPosition, TargetYPosition)", + "Speed", + "" ] } - ], - "parameters": [] + ] } ], "parameters": [ @@ -36512,143 +36365,170 @@ "objectGroups": [] }, { - "description": "Fire bullets in the direction of a given angle.", + "description": "Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an angle", "functionType": "Action", "name": "Fire", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", "events": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Check if ready to shoot", - "source": "", - "type": "BuiltinCommonInstructions::Group", + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::IsReadyToShoot" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetBooleanVariable" + }, + "parameters": [ + "HasJustFired", + "True", + "" + ] + } + ], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "FireBullet::FireBullet::IsReadyToShoot" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyHasJustFired" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Single bullet", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "Object.Behavior::PropertyBulletQuantity()", - "=", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::FireSingleBullet" - }, - "parameters": [ - "Object", - "Behavior", - "GetArgumentAsNumber(\"XPosition\")", - "GetArgumentAsNumber(\"YPosition\")", - "Bullet", - "GetArgumentAsNumber(\"Angle\")", - "GetArgumentAsNumber(\"Speed\")", - "" - ] - } - ] - } - ], - "parameters": [] - }, + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "BulletQuantity", + "=", + "1" + ] + } + ], + "actions": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Multiple bullets", - "source": "", - "type": "BuiltinCommonInstructions::Group", + "type": { + "value": "FireBullet::FireBullet::FireSingleBullet" + }, + "parameters": [ + "Object", + "Behavior", + "XPosition", + "YPosition", + "Bullet", + "Angle", + "Speed", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "BulletQuantity", + ">", + "1" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [], "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "BulletQuantity", + "conditions": [], + "actions": [], + "events": [ { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "Object.Behavior::PropertyBulletQuantity()", - ">", - "1" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::FiringArc" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "360", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "MultiShotAngle", + "=", + "Angle + lerp(-FiringArc / 2, FiringArc / 2, BulletIndex / (BulletQuantity - 1)) " + ] + } ] - } - ], - "actions": [ + }, { - "type": { - "value": "ModVarObjet" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "Object", - "__FireBullet.CurrentBulletAngle", - "=", - "GetArgumentAsNumber(\"Angle\") - Object.Behavior::PropertyFiringArc()/2" - ] + "comment": "When firing in a full circle, prevent first and last bullet from using the same angle" }, { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__FireBullet.BatchOrderID", - "=", - "0" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::FiringArc" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "360", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "MultiShotAngle", + "=", + "Angle + lerp(-FiringArc / 2, FiringArc / 2, BulletIndex / BulletQuantity) " + ] + } ] - } - ], - "events": [ + }, { - "type": "BuiltinCommonInstructions::Repeat", - "repeatExpression": "Object.Behavior::PropertyBulletQuantity()", + "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { @@ -36658,54 +36538,22 @@ "parameters": [ "Object", "Behavior", - "GetArgumentAsNumber(\"XPosition\")", - "GetArgumentAsNumber(\"YPosition\")", + "XPosition", + "YPosition", "Bullet", - "Object.Variable(__FireBullet.CurrentBulletAngle) + RandomInRange(-Object.Behavior::PropertyAngleVariance(),Object.Behavior::PropertyAngleVariance())", - "GetArgumentAsNumber(\"Speed\")", + "MultiShotAngle", + "Speed", "" ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move temp variable to the next angle a bullet will be sent" }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__FireBullet.CurrentBulletAngle", - "+", - "Object.Behavior::PropertyFiringArc() / (Object.Behavior::PropertyBulletQuantity() - 1)" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__FireBullet.BatchOrderID", - "+", - "1" - ] - } + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "BulletIndex", + "+", + "1" ] } ] @@ -36713,12 +36561,23 @@ ] } ], - "parameters": [] + "variables": [ + { + "folded": true, + "name": "MultiShotAngle", + "type": "number", + "value": 0 + }, + { + "name": "BulletIndex", + "type": "number", + "value": 0 + } + ] } ] } - ], - "parameters": [] + ] } ], "parameters": [ @@ -36802,9 +36661,9 @@ "parameters": [ "", "Bullet", - "GetArgumentAsNumber(\"XPosition\")", - "GetArgumentAsNumber(\"YPosition\")", - "Object.Behavior::PropertyBulletLayer()" + "XPosition", + "YPosition", + "BulletLayer" ] } ], @@ -36827,13 +36686,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyRandomizedAngle" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "RandomizedAngle", "=", - "GetArgumentAsNumber(\"Angle\") + RandomInRange(-Object.Behavior::PropertyAngleVariance(), Object.Behavior::PropertyAngleVariance())" + "Angle + RandomInRange(-AngleVariance, AngleVariance)" ] }, { @@ -36842,64 +36700,13 @@ }, "parameters": [ "Bullet", - "Object.Behavior::PropertyRandomizedAngle()", - "GetArgumentAsNumber(\"Speed\") + RandomInRange(-Object.Behavior::PropertyBulletSpeedVariance(), Object.Behavior::PropertyBulletSpeedVariance())", + "RandomizedAngle", + "Speed + RandomInRange(-BulletSpeedVariance, BulletSpeedVariance)", "1" ] } ] }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Add identifier variables (to enable advanced picking by users)" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Bullet", - "__FireBullet.BulletID", - "=", - "Object.Behavior::PropertyTotalBulletsCreated()" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Bullet", - "__FireBullet.BatchID", - "=", - "Object.Behavior::PropertyTotalShotsFired()" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Bullet", - "__FireBullet.BatchOrderID", - "=", - "0" - ] - } - ] - }, { "type": "BuiltinCommonInstructions::Comment", "color": { @@ -36917,11 +36724,12 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyRotateBullet" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "RotateBullet", + "True", + "" ] } ], @@ -36933,7 +36741,7 @@ "parameters": [ "Bullet", "=", - "Object.Behavior::PropertyRandomizedAngle()" + "RandomizedAngle" ] } ] @@ -36958,11 +36766,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalBulletsCreated" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "TotalBulletsCreated", "+", "1" ] @@ -37038,12 +36845,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyReloadInProgress" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "yes" + "ReloadInProgress", + "True", + "" ] }, { @@ -37081,30 +36888,17 @@ "name": "HasJustFired", "sentence": "_PARAM0_ has just fired", "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHasJustFired" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "HasJustFired", + "True", + "" ] } ], @@ -37148,11 +36942,12 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyRotateBullet" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "RotateBullet", + "True", + "" ] } ], @@ -37200,7 +36995,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyFiringArc()" + "FiringArc" ] } ] @@ -37237,13 +37032,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyFiringArc" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "FiringArc", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -37290,7 +37084,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -37334,7 +37128,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyAngleVariance()" + "AngleVariance" ] } ] @@ -37371,13 +37165,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAngleVariance" + "value": "SetNumberVariable" }, - "parameters": [ - "Object", - "Behavior", + "parameters": [ + "AngleVariance", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -37424,7 +37217,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -37468,7 +37261,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyBulletSpeedVariance()" + "BulletSpeedVariance" ] } ] @@ -37505,13 +37298,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyBulletSpeedVariance" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "BulletSpeedVariance", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -37558,7 +37350,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -37602,7 +37394,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyBulletQuantity()" + "BulletQuantity" ] } ] @@ -37639,13 +37431,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyBulletQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "BulletQuantity", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -37692,7 +37483,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -37733,13 +37524,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyBulletLayer" + "value": "SetStringVariable" }, "parameters": [ - "Object", - "Behavior", + "BulletLayer", "=", - "GetArgumentAsString(\"Value\")" + "Value" ] } ] @@ -37779,22 +37569,24 @@ { "type": { "inverted": true, - "value": "GetArgumentAsBoolean" + "value": "BooleanVariable" }, "parameters": [ - "\"RotateBullet\"" + "Value", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyRotateBullet" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "no" + "RotateBullet", + "False", + "" ] } ] @@ -37804,22 +37596,24 @@ "conditions": [ { "type": { - "value": "GetArgumentAsBoolean" + "value": "BooleanVariable" }, "parameters": [ - "\"RotateBullet\"" + "Value", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyRotateBullet" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "yes" + "RotateBullet", + "True", + "" ] } ] @@ -37840,7 +37634,7 @@ { "defaultValue": "yes", "description": "Rotate bullet to match trajetory", - "name": "RotateBullet", + "name": "Value", "optional": true, "type": "yesorno" } @@ -37861,22 +37655,24 @@ { "type": { "inverted": true, - "value": "GetArgumentAsBoolean" + "value": "BooleanVariable" }, "parameters": [ - "\"UnlimitedAmmo\"" + "Value", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyUnlimitedAmmo" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "no" + "UnlimitedAmmo", + "False", + "" ] } ] @@ -37886,22 +37682,24 @@ "conditions": [ { "type": { - "value": "GetArgumentAsBoolean" + "value": "BooleanVariable" }, "parameters": [ - "\"UnlimitedAmmo\"" + "Value", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyUnlimitedAmmo" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "yes" + "UnlimitedAmmo", + "True", + "" ] } ] @@ -37922,7 +37720,7 @@ { "defaultValue": "yes", "description": "Unlimited ammo", - "name": "UnlimitedAmmo", + "name": "Value", "optional": true, "type": "yesorno" } @@ -37946,7 +37744,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyFireCooldown()" + "FireCooldown" ] } ] @@ -37983,13 +37781,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyFireCooldown" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "FireCooldown", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -38036,7 +37833,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"NewCooldown\")", + "Value", "" ] } @@ -38057,7 +37854,7 @@ }, { "description": "Cooldown in seconds", - "name": "NewCooldown", + "name": "Value", "type": "expression" } ], @@ -38080,7 +37877,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyReloadDuration()" + "ReloadDuration" ] } ] @@ -38117,13 +37914,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyReloadDuration" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ReloadDuration", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -38170,7 +37966,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -38214,7 +38010,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyOverheatDuration()" + "OverheatDuration" ] } ] @@ -38251,13 +38047,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyOverheatDuration" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "OverheatDuration", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -38304,7 +38099,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -38348,7 +38143,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyAmmoQuantity()" + "AmmoQuantity" ] } ] @@ -38385,13 +38180,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AmmoQuantity", "=", - "GetArgumentAsNumber(\"Value\")" + "max(0, Value)" ] } ] @@ -38438,7 +38232,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "max(0, Value)", "" ] } @@ -38482,7 +38276,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyHeatIncreasePerShot()" + "HeatIncreasePerShot" ] } ] @@ -38519,13 +38313,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyHeatIncreasePerShot" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatIncreasePerShot", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -38572,7 +38365,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -38616,7 +38409,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyMaxAmmo()" + "MaxAmmo" ] } ] @@ -38653,13 +38446,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyMaxAmmo" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "MaxAmmo", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -38669,11 +38461,10 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyMaxAmmo" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "MaxAmmo", ">", "0" ] @@ -38682,13 +38473,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AmmoQuantity", "=", - "min(Object.Behavior::MaxAmmo(),Object.Behavior::AmmoQuantity())" + "min(MaxAmmo, AmmoQuantity)" ] } ] @@ -38735,7 +38525,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -38776,11 +38566,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalShotsFired" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "TotalShotsFired", "=", "0" ] @@ -38817,11 +38606,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalBulletsCreated" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "TotalBulletsCreated", "=", "0" ] @@ -38858,11 +38646,10 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalReloadsCompleted" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "TotalReloadsCompleted", "=", "0" ] @@ -38902,7 +38689,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyShotsPerReload()" + "ShotsPerReload" ] } ] @@ -38939,13 +38726,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsPerReload" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsPerReload", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -38955,26 +38741,24 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyShotsBeforeNextReload" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", ">", - "Object.Behavior::PropertyShotsPerReload()" + "ShotsPerReload" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", "=", - "Object.Behavior::PropertyShotsPerReload()" + "ShotsPerReload" ] } ] @@ -39021,7 +38805,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -39062,12 +38846,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAutomaticReloading" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "=" + "AutomaticReloading", + "False", + "" ] } ] @@ -39077,22 +38861,24 @@ "conditions": [ { "type": { - "value": "GetArgumentAsBoolean" + "value": "BooleanVariable" }, "parameters": [ - "\"Value\"" + "Value", + "True", + "" ] } ], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAutomaticReloading" + "value": "SetBooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "yes" + "AutomaticReloading", + "True", + "" ] } ] @@ -39137,7 +38923,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyLinearCoolingRate()" + "LinearCoolingRate" ] } ] @@ -39174,13 +38960,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyLinearCoolingRate" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "LinearCoolingRate", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -39227,7 +39012,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -39271,7 +39056,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyExponentialCoolingRate()" + "ExponentialCoolingRate" ] } ] @@ -39308,13 +39093,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyExponentialCoolingRate" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ExponentialCoolingRate", "=", - "GetArgumentAsNumber(\"Value\")" + "Value" ] } ] @@ -39362,7 +39146,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", + "Value", "" ] } @@ -39403,13 +39187,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AmmoQuantity", "+", - "GetArgumentAsNumber(\"AmmoGained\")" + "AmmoGained" ] } ] @@ -39431,11 +39214,10 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyMaxAmmo" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "MaxAmmo", ">", "0" ] @@ -39444,13 +39226,12 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "SetNumberVariable" }, "parameters": [ - "Object", - "Behavior", + "AmmoQuantity", "=", - "min(Object.Behavior::MaxAmmo(),Object.Behavior::AmmoQuantity())" + "min(MaxAmmo, AmmoQuantity)" ] } ] @@ -39470,11 +39251,12 @@ }, { "type": { - "value": "FireBullet::FireBullet::PropertyAutomaticReloading" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "AutomaticReloading", + "True", + "" ] } ], @@ -39529,7 +39311,7 @@ "value": "SetReturnString" }, "parameters": [ - "Object.Behavior::PropertyBulletLayer()" + "BulletLayer" ] } ] @@ -39570,7 +39352,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "min(1,Object.Behavior::PropertyHeatLevel())" + "min(1, HeatLevel)" ] } ] @@ -39611,7 +39393,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyTotalShotsFired()" + "TotalShotsFired" ] } ] @@ -39652,7 +39434,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyTotalBulletsCreated()" + "TotalBulletsCreated" ] } ] @@ -39693,7 +39475,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyTotalReloadsCompleted()" + "TotalReloadsCompleted" ] } ] @@ -39734,7 +39516,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyShotsBeforeNextReload()" + "ShotsBeforeNextReload" ] } ] @@ -39775,7 +39557,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "max(0,Object.Behavior::Cooldown() - Object.ObjectTimerElapsedTime(\"__FireBullet.FiringCooldown\"))" + "max(0, FireCooldown - Object.ObjectTimerElapsedTime(\"__FireBullet.FiringCooldown\"))" ] } ] @@ -39828,7 +39610,60 @@ "value": "SetReturnNumber" }, "parameters": [ - "max(0, Object.Behavior::PropertyOverheatDuration() - Object.ObjectTimerElapsedTime(\"__FireBullet.OverheatDuration\"))" + "max(0, OverheatDuration - Object.ObjectTimerElapsedTime(\"__FireBullet.OverheatDuration\"))" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the remaining duration before the reload finishes, in seconds.", + "fullName": "Duration before the reload finishes", + "functionType": "ExpressionAndCondition", + "group": "Reload", + "name": "ReloadTimeLeft", + "sentence": "the remaining duration before the reload finishes", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__FireBullet.ReloadingTimer\"", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "max(0, ReloadDuration - Object.ObjectTimerElapsedTime(\"__FireBullet.ReloadingTimer\"))" ] } ] @@ -39879,11 +39714,12 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyReloadInProgress" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "ReloadInProgress", + "True", + "" ] } ], @@ -39947,11 +39783,12 @@ "subInstructions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHasJustFired" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "HasJustFired", + "True", + "" ] }, { @@ -40083,11 +39920,12 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyAutomaticReloading" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "AutomaticReloading", + "True", + "" ] } ], @@ -40145,11 +39983,12 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyUnlimitedAmmo" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "UnlimitedAmmo", + "True", + "" ] } ], @@ -40218,12 +40057,11 @@ }, { "type": { - "value": "FireBullet::FireBullet::PropertyAmmoQuantity" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", - "=", + "AmmoQuantity", + "<=", "0" ] } @@ -40294,22 +40132,20 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyShotsPerReload" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsPerReload", ">", "0" ] }, { "type": { - "value": "FireBullet::FireBullet::PropertyShotsBeforeNextReload" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "ShotsBeforeNextReload", "=", "0" ] @@ -40375,11 +40211,10 @@ "subInstructions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHeatLevel" + "value": "NumberVariable" }, "parameters": [ - "Object", - "Behavior", + "HeatLevel", ">=", "1" ] @@ -40494,16 +40329,30 @@ "type": "Number", "unit": "Second", "label": "Firing cooldown", - "description": "Objects cannot shoot while firing cooldown is active", + "description": "Objects cannot shoot while firing cooldown is active.", + "group": "", + "extraInformation": [], "name": "FireCooldown" }, { "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HasJustFired" }, + { + "value": "true", + "type": "Boolean", + "label": "Rotate bullets to match their trajectory", + "description": "", + "group": "", + "extraInformation": [], + "name": "RotateBullet" + }, { "value": "45", "type": "Number", @@ -40511,14 +40360,16 @@ "label": "Firing arc", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "FiringArc" }, { "value": "1", "type": "Number", - "label": "Number of bullets created at once (Multi-Fire)", + "label": "Number of bullets created at once", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "BulletQuantity" }, { @@ -40526,20 +40377,30 @@ "type": "Number", "unit": "DegreeAngle", "label": "Angle variance", - "description": "Make imperfect aim (Range: 0 to 180 degrees)", + "description": "Make imperfect aim (between 0 and 180 degrees).", "group": "Firing variance", + "extraInformation": [], + "advanced": true, "name": "AngleVariance" }, { - "value": "true", - "type": "Boolean", - "label": "Rotate bullets to match their trajectory", - "name": "RotateBullet" + "value": "0", + "type": "Number", + "unit": "PixelSpeed", + "label": "Bullet speed variance", + "description": "Bullet speed will be adjusted by a random value within this range.", + "group": "Firing variance", + "extraInformation": [], + "advanced": true, + "name": "BulletSpeedVariance" }, { "value": "0", "type": "Number", "label": "Ammo quantity (current)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "AmmoQuantity" }, @@ -40547,8 +40408,10 @@ "value": "0", "type": "Number", "label": "Shots per reload ", - "description": "Use 0 to disable reloading", + "description": "Use 0 to disable reloading.", "group": "Reload", + "extraInformation": [], + "advanced": true, "name": "ShotsPerReload" }, { @@ -40556,21 +40419,29 @@ "type": "Number", "unit": "Second", "label": "Reloading duration", - "description": "Objects cannot shoot while reloading is in progress", + "description": "Objects cannot shoot while reloading is in progress.", "group": "Reload", + "extraInformation": [], + "advanced": true, "name": "ReloadDuration" }, { "value": "0", "type": "Number", "label": "Max ammo ", + "description": "", "group": "Ammo", + "extraInformation": [], + "advanced": true, "name": "MaxAmmo" }, { "value": "0", "type": "Number", "label": "Shots before next reload", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ShotsBeforeNextReload" }, @@ -40579,6 +40450,8 @@ "type": "Number", "label": "Total shots fired", "description": "Regardless of how many bullets are created, only 1 shot will be counted per frame", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalShotsFired" }, @@ -40586,6 +40459,9 @@ "value": "0", "type": "Number", "label": "Total bullets created", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalBulletsCreated" }, @@ -40593,13 +40469,19 @@ "value": "0", "type": "Number", "label": "Starting ammo", + "description": "", "group": "Ammo", + "extraInformation": [], + "advanced": true, "name": "StartingAmmo" }, { "value": "0", "type": "Number", "label": "Total reloads completed", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalReloadsCompleted" }, @@ -40607,28 +40489,39 @@ "value": "true", "type": "Boolean", "label": "Unlimited ammo", + "description": "", "group": "Ammo", + "extraInformation": [], + "advanced": true, "name": "UnlimitedAmmo" }, { "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ReloadInProgress" }, { "value": "0", "type": "Number", - "label": "Heat increase per shot (Range: 0 to 1)", - "description": " Object is overheated when Heat reaches 1", + "label": "Heat increase per shot (between 0 and 1)", + "description": " Object is overheated when Heat reaches 1.", "group": "Overheat", + "extraInformation": [], + "advanced": true, "name": "HeatIncreasePerShot" }, { "value": "0", "type": "Number", "label": "Heat level (Range: 0 to 1)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HeatLevel" }, @@ -40636,7 +40529,10 @@ "value": "true", "type": "Boolean", "label": "Reload automatically", + "description": "", "group": "Reload", + "extraInformation": [], + "advanced": true, "name": "AutomaticReloading" }, { @@ -40644,36 +40540,42 @@ "type": "Number", "unit": "Second", "label": "Overheat duration", - "description": "Object cannot shoot while overheat duration is active", + "description": "Object cannot shoot while overheat duration is active.", "group": "Overheat", + "extraInformation": [], + "advanced": true, "name": "OverheatDuration" }, { "value": "0.1", "type": "Number", "label": "Linear cooling rate (per second)", + "description": "", "group": "Overheat", + "extraInformation": [], + "advanced": true, "name": "LinearCoolingRate" }, { "value": "0.3", "type": "Number", "label": "Exponential cooling rate (per second)", - "description": "Happens faster when heat is high and slower when heat is low", + "description": "Happens faster when heat is high and slower when heat is low.", "group": "Overheat", "extraInformation": [ "Linear", "Exponential" ], - "choices": [], + "advanced": true, "name": "ExponentialCoolingRate" }, { "value": "", "type": "String", "label": "Layer the bullets are created on", - "description": "Base layer by default", + "description": "Base layer by default.", "group": "Shooting configuration", + "extraInformation": [], "hidden": true, "name": "BulletLayer" }, @@ -40681,17 +40583,11 @@ "value": "0", "type": "Number", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "RandomizedAngle" - }, - { - "value": "0", - "type": "Number", - "unit": "PixelSpeed", - "label": "Bullet speed variance", - "description": "Bullet speed will be adjusted by a random value within this range", - "group": "Firing variance", - "name": "BulletSpeedVariance" } ], "sharedPropertyDescriptors": [] diff --git a/examples/space-asteroids/space-asteroids.json b/examples/space-asteroids/space-asteroids.json index 46cf493bf..220660caa 100644 --- a/examples/space-asteroids/space-asteroids.json +++ b/examples/space-asteroids/space-asteroids.json @@ -4328,14 +4328,14 @@ "author": "@4ian", "category": "Game mechanic", "extensionNamespace": "", - "fullName": "Fire bullets", "gdevelopVersion": ">=5.5.222", + "fullName": "Fire bullets", "helpPath": "/extensions/fire-bullet/details", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", "name": "FireBullet", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", "shortDescription": "Fire bullets, manage ammo, reloading and overheating.", - "version": "0.9.1", + "version": "0.9.2", "description": [ "This extension allows objects to fire bullets. To use it, add the behavior to the object that will shoot, then use the provided action to launch another object as the bullet.", "", @@ -4345,6 +4345,9 @@ "- Ammo management", "- Overheat", "", + "The speed can be specified when using the actions to fire the bullets.", + "The bullets are automatically given a permanent force to make them move in the 2D plane (no need to use a linear movement or move them with another behavior).", + "", "It can be used for:", "- Twin-stick shooters ([open the project online](https://editor.gdevelop.io/?project=example://conviction-of-gun-dude-desktop))", "- Shoot'em up ([open the project online](https://editor.gdevelop.io/?project=example://space-shooter))", @@ -4378,7 +4381,7 @@ "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "Fire bullets, manage ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior action in your events to fire another object as a bullet.", + "description": "Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).", "fullName": "Fire bullets", "name": "FireBullet", "objectType": "", @@ -4952,11 +4955,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward an object.", + "description": "Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an object", "functionType": "Action", "name": "FireTowardObject", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -5021,11 +5024,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward a position.", + "description": "Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward a position", "functionType": "Action", "name": "FireTowardPosition", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -5095,11 +5098,11 @@ "objectGroups": [] }, { - "description": "Fire bullets in the direction of a given angle.", + "description": "Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an angle", "functionType": "Action", "name": "Fire", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -9060,12 +9063,17 @@ "unit": "Second", "label": "Firing cooldown", "description": "Objects cannot shoot while firing cooldown is active.", + "group": "", + "extraInformation": [], "name": "FireCooldown" }, { "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HasJustFired" }, @@ -9073,6 +9081,9 @@ "value": "true", "type": "Boolean", "label": "Rotate bullets to match their trajectory", + "description": "", + "group": "", + "extraInformation": [], "name": "RotateBullet" }, { @@ -9082,6 +9093,7 @@ "label": "Firing arc", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "FiringArc" }, { @@ -9090,6 +9102,7 @@ "label": "Number of bullets created at once", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "BulletQuantity" }, { @@ -9099,6 +9112,7 @@ "label": "Angle variance", "description": "Make imperfect aim (between 0 and 180 degrees).", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "AngleVariance" }, @@ -9109,6 +9123,7 @@ "label": "Bullet speed variance", "description": "Bullet speed will be adjusted by a random value within this range.", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "BulletSpeedVariance" }, @@ -9116,6 +9131,9 @@ "value": "0", "type": "Number", "label": "Ammo quantity (current)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "AmmoQuantity" }, @@ -9125,6 +9143,7 @@ "label": "Shots per reload ", "description": "Use 0 to disable reloading.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ShotsPerReload" }, @@ -9135,6 +9154,7 @@ "label": "Reloading duration", "description": "Objects cannot shoot while reloading is in progress.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ReloadDuration" }, @@ -9142,7 +9162,9 @@ "value": "0", "type": "Number", "label": "Max ammo ", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "MaxAmmo" }, @@ -9150,6 +9172,9 @@ "value": "0", "type": "Number", "label": "Shots before next reload", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ShotsBeforeNextReload" }, @@ -9158,6 +9183,8 @@ "type": "Number", "label": "Total shots fired", "description": "Regardless of how many bullets are created, only 1 shot will be counted per frame", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalShotsFired" }, @@ -9165,6 +9192,9 @@ "value": "0", "type": "Number", "label": "Total bullets created", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalBulletsCreated" }, @@ -9172,7 +9202,9 @@ "value": "0", "type": "Number", "label": "Starting ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "StartingAmmo" }, @@ -9180,6 +9212,9 @@ "value": "0", "type": "Number", "label": "Total reloads completed", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalReloadsCompleted" }, @@ -9187,7 +9222,9 @@ "value": "true", "type": "Boolean", "label": "Unlimited ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "UnlimitedAmmo" }, @@ -9195,6 +9232,9 @@ "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ReloadInProgress" }, @@ -9204,6 +9244,7 @@ "label": "Heat increase per shot (between 0 and 1)", "description": " Object is overheated when Heat reaches 1.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "HeatIncreasePerShot" }, @@ -9211,6 +9252,9 @@ "value": "0", "type": "Number", "label": "Heat level (Range: 0 to 1)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HeatLevel" }, @@ -9218,7 +9262,9 @@ "value": "true", "type": "Boolean", "label": "Reload automatically", + "description": "", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "AutomaticReloading" }, @@ -9229,6 +9275,7 @@ "label": "Overheat duration", "description": "Object cannot shoot while overheat duration is active.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "OverheatDuration" }, @@ -9236,7 +9283,9 @@ "value": "0.1", "type": "Number", "label": "Linear cooling rate (per second)", + "description": "", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "LinearCoolingRate" }, @@ -9259,6 +9308,7 @@ "label": "Layer the bullets are created on", "description": "Base layer by default.", "group": "Shooting configuration", + "extraInformation": [], "hidden": true, "name": "BulletLayer" }, @@ -9266,6 +9316,9 @@ "value": "0", "type": "Number", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "RandomizedAngle" } diff --git a/examples/space-shooter/space-shooter.json b/examples/space-shooter/space-shooter.json index b508ad958..f088159e8 100644 --- a/examples/space-shooter/space-shooter.json +++ b/examples/space-shooter/space-shooter.json @@ -14636,14 +14636,14 @@ "author": "@4ian", "category": "Game mechanic", "extensionNamespace": "", - "fullName": "Fire bullets", "gdevelopVersion": ">=5.5.222", + "fullName": "Fire bullets", "helpPath": "/extensions/fire-bullet/details", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", "name": "FireBullet", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", "shortDescription": "Fire bullets, manage ammo, reloading and overheating.", - "version": "0.9.1", + "version": "0.9.2", "description": [ "This extension allows objects to fire bullets. To use it, add the behavior to the object that will shoot, then use the provided action to launch another object as the bullet.", "", @@ -14653,6 +14653,9 @@ "- Ammo management", "- Overheat", "", + "The speed can be specified when using the actions to fire the bullets.", + "The bullets are automatically given a permanent force to make them move in the 2D plane (no need to use a linear movement or move them with another behavior).", + "", "It can be used for:", "- Twin-stick shooters ([open the project online](https://editor.gdevelop.io/?project=example://conviction-of-gun-dude-desktop))", "- Shoot'em up ([open the project online](https://editor.gdevelop.io/?project=example://space-shooter))", @@ -14686,7 +14689,7 @@ "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "Fire bullets, manage ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior action in your events to fire another object as a bullet.", + "description": "Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).", "fullName": "Fire bullets", "name": "FireBullet", "objectType": "", @@ -15260,11 +15263,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward an object.", + "description": "Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an object", "functionType": "Action", "name": "FireTowardObject", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -15329,11 +15332,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward a position.", + "description": "Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward a position", "functionType": "Action", "name": "FireTowardPosition", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -15403,11 +15406,11 @@ "objectGroups": [] }, { - "description": "Fire bullets in the direction of a given angle.", + "description": "Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an angle", "functionType": "Action", "name": "Fire", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -19368,12 +19371,17 @@ "unit": "Second", "label": "Firing cooldown", "description": "Objects cannot shoot while firing cooldown is active.", + "group": "", + "extraInformation": [], "name": "FireCooldown" }, { "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HasJustFired" }, @@ -19381,6 +19389,9 @@ "value": "true", "type": "Boolean", "label": "Rotate bullets to match their trajectory", + "description": "", + "group": "", + "extraInformation": [], "name": "RotateBullet" }, { @@ -19390,6 +19401,7 @@ "label": "Firing arc", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "FiringArc" }, { @@ -19398,6 +19410,7 @@ "label": "Number of bullets created at once", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "BulletQuantity" }, { @@ -19407,6 +19420,7 @@ "label": "Angle variance", "description": "Make imperfect aim (between 0 and 180 degrees).", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "AngleVariance" }, @@ -19417,6 +19431,7 @@ "label": "Bullet speed variance", "description": "Bullet speed will be adjusted by a random value within this range.", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "BulletSpeedVariance" }, @@ -19424,6 +19439,9 @@ "value": "0", "type": "Number", "label": "Ammo quantity (current)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "AmmoQuantity" }, @@ -19433,6 +19451,7 @@ "label": "Shots per reload ", "description": "Use 0 to disable reloading.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ShotsPerReload" }, @@ -19443,6 +19462,7 @@ "label": "Reloading duration", "description": "Objects cannot shoot while reloading is in progress.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ReloadDuration" }, @@ -19450,7 +19470,9 @@ "value": "0", "type": "Number", "label": "Max ammo ", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "MaxAmmo" }, @@ -19458,6 +19480,9 @@ "value": "0", "type": "Number", "label": "Shots before next reload", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ShotsBeforeNextReload" }, @@ -19466,6 +19491,8 @@ "type": "Number", "label": "Total shots fired", "description": "Regardless of how many bullets are created, only 1 shot will be counted per frame", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalShotsFired" }, @@ -19473,6 +19500,9 @@ "value": "0", "type": "Number", "label": "Total bullets created", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalBulletsCreated" }, @@ -19480,7 +19510,9 @@ "value": "0", "type": "Number", "label": "Starting ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "StartingAmmo" }, @@ -19488,6 +19520,9 @@ "value": "0", "type": "Number", "label": "Total reloads completed", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalReloadsCompleted" }, @@ -19495,7 +19530,9 @@ "value": "true", "type": "Boolean", "label": "Unlimited ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "UnlimitedAmmo" }, @@ -19503,6 +19540,9 @@ "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ReloadInProgress" }, @@ -19512,6 +19552,7 @@ "label": "Heat increase per shot (between 0 and 1)", "description": " Object is overheated when Heat reaches 1.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "HeatIncreasePerShot" }, @@ -19519,6 +19560,9 @@ "value": "0", "type": "Number", "label": "Heat level (Range: 0 to 1)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HeatLevel" }, @@ -19526,7 +19570,9 @@ "value": "true", "type": "Boolean", "label": "Reload automatically", + "description": "", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "AutomaticReloading" }, @@ -19537,6 +19583,7 @@ "label": "Overheat duration", "description": "Object cannot shoot while overheat duration is active.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "OverheatDuration" }, @@ -19544,7 +19591,9 @@ "value": "0.1", "type": "Number", "label": "Linear cooling rate (per second)", + "description": "", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "LinearCoolingRate" }, @@ -19567,6 +19616,7 @@ "label": "Layer the bullets are created on", "description": "Base layer by default.", "group": "Shooting configuration", + "extraInformation": [], "hidden": true, "name": "BulletLayer" }, @@ -19574,6 +19624,9 @@ "value": "0", "type": "Number", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "RandomizedAngle" } diff --git a/examples/starting-2d-platformer-shooter/starting-2d-platformer-shooter.json b/examples/starting-2d-platformer-shooter/starting-2d-platformer-shooter.json index ab39073ca..bea17a48d 100644 --- a/examples/starting-2d-platformer-shooter/starting-2d-platformer-shooter.json +++ b/examples/starting-2d-platformer-shooter/starting-2d-platformer-shooter.json @@ -20513,14 +20513,14 @@ "author": "@4ian", "category": "Game mechanic", "extensionNamespace": "", - "fullName": "Fire bullets", "gdevelopVersion": ">=5.5.222", + "fullName": "Fire bullets", "helpPath": "/extensions/fire-bullet/details", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", "name": "FireBullet", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", "shortDescription": "Fire bullets, manage ammo, reloading and overheating.", - "version": "0.9.1", + "version": "0.9.2", "description": [ "This extension allows objects to fire bullets. To use it, add the behavior to the object that will shoot, then use the provided action to launch another object as the bullet.", "", @@ -20531,7 +20531,7 @@ "- Overheat", "", "The speed can be specified when using the actions to fire the bullets.", - "The bullets are automatically given a permanent force to make them move (no need to use a linear movement or move them with another behavior).", + "The bullets are automatically given a permanent force to make them move in the 2D plane (no need to use a linear movement or move them with another behavior).", "", "It can be used for:", "- Twin-stick shooters ([open the project online](https://editor.gdevelop.io/?project=example://conviction-of-gun-dude-desktop))", @@ -20566,7 +20566,7 @@ "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "Fire bullets, manage ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior action in your events to fire another object as a bullet. This action will also make the bullet move (using a permanent force) at the speed specified in the action.", + "description": "Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).", "fullName": "Fire bullets", "name": "FireBullet", "objectType": "", @@ -21140,11 +21140,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward an object at a specified speed.", + "description": "Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an object", "functionType": "Action", "name": "FireTowardObject", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -21209,11 +21209,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward a position at a specified speed.", + "description": "Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward a position", "functionType": "Action", "name": "FireTowardPosition", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -21283,11 +21283,11 @@ "objectGroups": [] }, { - "description": "Fire bullets in the direction of a given angle at a specified speed.", + "description": "Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an angle", "functionType": "Action", "name": "Fire", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -25248,12 +25248,17 @@ "unit": "Second", "label": "Firing cooldown", "description": "Objects cannot shoot while firing cooldown is active.", + "group": "", + "extraInformation": [], "name": "FireCooldown" }, { "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HasJustFired" }, @@ -25261,6 +25266,9 @@ "value": "true", "type": "Boolean", "label": "Rotate bullets to match their trajectory", + "description": "", + "group": "", + "extraInformation": [], "name": "RotateBullet" }, { @@ -25270,6 +25278,7 @@ "label": "Firing arc", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "FiringArc" }, { @@ -25278,6 +25287,7 @@ "label": "Number of bullets created at once", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "BulletQuantity" }, { @@ -25287,6 +25297,7 @@ "label": "Angle variance", "description": "Make imperfect aim (between 0 and 180 degrees).", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "AngleVariance" }, @@ -25297,6 +25308,7 @@ "label": "Bullet speed variance", "description": "Bullet speed will be adjusted by a random value within this range.", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "BulletSpeedVariance" }, @@ -25304,6 +25316,9 @@ "value": "0", "type": "Number", "label": "Ammo quantity (current)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "AmmoQuantity" }, @@ -25313,6 +25328,7 @@ "label": "Shots per reload ", "description": "Use 0 to disable reloading.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ShotsPerReload" }, @@ -25323,6 +25339,7 @@ "label": "Reloading duration", "description": "Objects cannot shoot while reloading is in progress.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ReloadDuration" }, @@ -25330,7 +25347,9 @@ "value": "0", "type": "Number", "label": "Max ammo ", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "MaxAmmo" }, @@ -25338,6 +25357,9 @@ "value": "0", "type": "Number", "label": "Shots before next reload", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ShotsBeforeNextReload" }, @@ -25346,6 +25368,8 @@ "type": "Number", "label": "Total shots fired", "description": "Regardless of how many bullets are created, only 1 shot will be counted per frame", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalShotsFired" }, @@ -25353,6 +25377,9 @@ "value": "0", "type": "Number", "label": "Total bullets created", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalBulletsCreated" }, @@ -25360,7 +25387,9 @@ "value": "0", "type": "Number", "label": "Starting ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "StartingAmmo" }, @@ -25368,6 +25397,9 @@ "value": "0", "type": "Number", "label": "Total reloads completed", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalReloadsCompleted" }, @@ -25375,7 +25407,9 @@ "value": "true", "type": "Boolean", "label": "Unlimited ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "UnlimitedAmmo" }, @@ -25383,6 +25417,9 @@ "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ReloadInProgress" }, @@ -25392,6 +25429,7 @@ "label": "Heat increase per shot (between 0 and 1)", "description": " Object is overheated when Heat reaches 1.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "HeatIncreasePerShot" }, @@ -25399,6 +25437,9 @@ "value": "0", "type": "Number", "label": "Heat level (Range: 0 to 1)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HeatLevel" }, @@ -25406,7 +25447,9 @@ "value": "true", "type": "Boolean", "label": "Reload automatically", + "description": "", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "AutomaticReloading" }, @@ -25417,6 +25460,7 @@ "label": "Overheat duration", "description": "Object cannot shoot while overheat duration is active.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "OverheatDuration" }, @@ -25424,7 +25468,9 @@ "value": "0.1", "type": "Number", "label": "Linear cooling rate (per second)", + "description": "", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "LinearCoolingRate" }, @@ -25438,7 +25484,6 @@ "Linear", "Exponential" ], - "choices": [], "advanced": true, "name": "ExponentialCoolingRate" }, @@ -25448,6 +25493,7 @@ "label": "Layer the bullets are created on", "description": "Base layer by default.", "group": "Shooting configuration", + "extraInformation": [], "hidden": true, "name": "BulletLayer" }, @@ -25455,6 +25501,9 @@ "value": "0", "type": "Number", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "RandomizedAngle" } diff --git a/examples/starting-3d-shootemup/starting-3d-shootemup.json b/examples/starting-3d-shootemup/starting-3d-shootemup.json index a84a18aaa..9833fd3a7 100644 --- a/examples/starting-3d-shootemup/starting-3d-shootemup.json +++ b/examples/starting-3d-shootemup/starting-3d-shootemup.json @@ -8807,14 +8807,14 @@ "author": "@4ian", "category": "Game mechanic", "extensionNamespace": "", - "fullName": "Fire bullets", "gdevelopVersion": ">=5.5.222", + "fullName": "Fire bullets", "helpPath": "/extensions/fire-bullet/details", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", "name": "FireBullet", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", "shortDescription": "Fire bullets, manage ammo, reloading and overheating.", - "version": "0.9.1", + "version": "0.9.2", "description": [ "This extension allows objects to fire bullets. To use it, add the behavior to the object that will shoot, then use the provided action to launch another object as the bullet.", "", @@ -8825,7 +8825,7 @@ "- Overheat", "", "The speed can be specified when using the actions to fire the bullets.", - "The bullets are automatically given a permanent force to make them move (no need to use a linear movement or move them with another behavior).", + "The bullets are automatically given a permanent force to make them move in the 2D plane (no need to use a linear movement or move them with another behavior).", "", "It can be used for:", "- Twin-stick shooters ([open the project online](https://editor.gdevelop.io/?project=example://conviction-of-gun-dude-desktop))", @@ -8860,7 +8860,7 @@ "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "Fire bullets, manage ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior action in your events to fire another object as a bullet. This action will also make the bullet move (using a permanent force) at the speed specified in the action.", + "description": "Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).", "fullName": "Fire bullets", "name": "FireBullet", "objectType": "", @@ -9434,11 +9434,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward an object at a specified speed.", + "description": "Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an object", "functionType": "Action", "name": "FireTowardObject", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -9503,11 +9503,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward a position at a specified speed.", + "description": "Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward a position", "functionType": "Action", "name": "FireTowardPosition", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -9577,11 +9577,11 @@ "objectGroups": [] }, { - "description": "Fire bullets in the direction of a given angle at a specified speed.", + "description": "Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an angle", "functionType": "Action", "name": "Fire", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -13542,12 +13542,17 @@ "unit": "Second", "label": "Firing cooldown", "description": "Objects cannot shoot while firing cooldown is active.", + "group": "", + "extraInformation": [], "name": "FireCooldown" }, { "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HasJustFired" }, @@ -13555,6 +13560,9 @@ "value": "true", "type": "Boolean", "label": "Rotate bullets to match their trajectory", + "description": "", + "group": "", + "extraInformation": [], "name": "RotateBullet" }, { @@ -13564,6 +13572,7 @@ "label": "Firing arc", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "FiringArc" }, { @@ -13572,6 +13581,7 @@ "label": "Number of bullets created at once", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "BulletQuantity" }, { @@ -13581,6 +13591,7 @@ "label": "Angle variance", "description": "Make imperfect aim (between 0 and 180 degrees).", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "AngleVariance" }, @@ -13591,6 +13602,7 @@ "label": "Bullet speed variance", "description": "Bullet speed will be adjusted by a random value within this range.", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "BulletSpeedVariance" }, @@ -13598,6 +13610,9 @@ "value": "0", "type": "Number", "label": "Ammo quantity (current)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "AmmoQuantity" }, @@ -13607,6 +13622,7 @@ "label": "Shots per reload ", "description": "Use 0 to disable reloading.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ShotsPerReload" }, @@ -13617,6 +13633,7 @@ "label": "Reloading duration", "description": "Objects cannot shoot while reloading is in progress.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ReloadDuration" }, @@ -13624,7 +13641,9 @@ "value": "0", "type": "Number", "label": "Max ammo ", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "MaxAmmo" }, @@ -13632,6 +13651,9 @@ "value": "0", "type": "Number", "label": "Shots before next reload", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ShotsBeforeNextReload" }, @@ -13640,6 +13662,8 @@ "type": "Number", "label": "Total shots fired", "description": "Regardless of how many bullets are created, only 1 shot will be counted per frame", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalShotsFired" }, @@ -13647,6 +13671,9 @@ "value": "0", "type": "Number", "label": "Total bullets created", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalBulletsCreated" }, @@ -13654,7 +13681,9 @@ "value": "0", "type": "Number", "label": "Starting ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "StartingAmmo" }, @@ -13662,6 +13691,9 @@ "value": "0", "type": "Number", "label": "Total reloads completed", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalReloadsCompleted" }, @@ -13669,7 +13701,9 @@ "value": "true", "type": "Boolean", "label": "Unlimited ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "UnlimitedAmmo" }, @@ -13677,6 +13711,9 @@ "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ReloadInProgress" }, @@ -13686,6 +13723,7 @@ "label": "Heat increase per shot (between 0 and 1)", "description": " Object is overheated when Heat reaches 1.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "HeatIncreasePerShot" }, @@ -13693,6 +13731,9 @@ "value": "0", "type": "Number", "label": "Heat level (Range: 0 to 1)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HeatLevel" }, @@ -13700,7 +13741,9 @@ "value": "true", "type": "Boolean", "label": "Reload automatically", + "description": "", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "AutomaticReloading" }, @@ -13711,6 +13754,7 @@ "label": "Overheat duration", "description": "Object cannot shoot while overheat duration is active.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "OverheatDuration" }, @@ -13718,7 +13762,9 @@ "value": "0.1", "type": "Number", "label": "Linear cooling rate (per second)", + "description": "", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "LinearCoolingRate" }, @@ -13732,7 +13778,6 @@ "Linear", "Exponential" ], - "choices": [], "advanced": true, "name": "ExponentialCoolingRate" }, @@ -13742,6 +13787,7 @@ "label": "Layer the bullets are created on", "description": "Base layer by default.", "group": "Shooting configuration", + "extraInformation": [], "hidden": true, "name": "BulletLayer" }, @@ -13749,123 +13795,14 @@ "value": "0", "type": "Number", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "RandomizedAngle" } ], - "propertiesFolderStructure": { - "folderName": "__ROOT", - "children": [ - { - "propertyName": "FireCooldown" - }, - { - "propertyName": "HasJustFired" - }, - { - "propertyName": "RotateBullet" - }, - { - "folderName": "Multi-Fire", - "children": [ - { - "propertyName": "FiringArc" - }, - { - "propertyName": "BulletQuantity" - } - ] - }, - { - "folderName": "Firing variance", - "children": [ - { - "propertyName": "AngleVariance" - }, - { - "propertyName": "BulletSpeedVariance" - } - ] - }, - { - "propertyName": "AmmoQuantity" - }, - { - "folderName": "Reload", - "children": [ - { - "propertyName": "ShotsPerReload" - }, - { - "propertyName": "ReloadDuration" - }, - { - "propertyName": "AutomaticReloading" - } - ] - }, - { - "folderName": "Ammo", - "children": [ - { - "propertyName": "MaxAmmo" - }, - { - "propertyName": "StartingAmmo" - }, - { - "propertyName": "UnlimitedAmmo" - } - ] - }, - { - "propertyName": "ShotsBeforeNextReload" - }, - { - "propertyName": "TotalShotsFired" - }, - { - "propertyName": "TotalBulletsCreated" - }, - { - "propertyName": "TotalReloadsCompleted" - }, - { - "propertyName": "ReloadInProgress" - }, - { - "folderName": "Overheat", - "children": [ - { - "propertyName": "HeatIncreasePerShot" - }, - { - "propertyName": "OverheatDuration" - }, - { - "propertyName": "LinearCoolingRate" - }, - { - "propertyName": "ExponentialCoolingRate" - } - ] - }, - { - "propertyName": "HeatLevel" - }, - { - "folderName": "Shooting configuration", - "children": [ - { - "propertyName": "BulletLayer" - } - ] - }, - { - "propertyName": "RandomizedAngle" - } - ] - } + "sharedPropertyDescriptors": [] } ], "eventsBasedObjects": [] diff --git a/examples/starting-3d-twin-stick-shooter/starting-3d-twin-stick-shooter.json b/examples/starting-3d-twin-stick-shooter/starting-3d-twin-stick-shooter.json index d8f317ec5..68db1b4e6 100644 --- a/examples/starting-3d-twin-stick-shooter/starting-3d-twin-stick-shooter.json +++ b/examples/starting-3d-twin-stick-shooter/starting-3d-twin-stick-shooter.json @@ -14363,14 +14363,14 @@ "author": "@4ian", "category": "Game mechanic", "extensionNamespace": "", - "fullName": "Fire bullets", "gdevelopVersion": ">=5.5.222", + "fullName": "Fire bullets", "helpPath": "/extensions/fire-bullet/details", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", "name": "FireBullet", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", "shortDescription": "Fire bullets, manage ammo, reloading and overheating.", - "version": "0.9.1", + "version": "0.9.2", "description": [ "This extension allows objects to fire bullets. To use it, add the behavior to the object that will shoot, then use the provided action to launch another object as the bullet.", "", @@ -14381,7 +14381,7 @@ "- Overheat", "", "The speed can be specified when using the actions to fire the bullets.", - "The bullets are automatically given a permanent force to make them move (no need to use a linear movement or move them with another behavior).", + "The bullets are automatically given a permanent force to make them move in the 2D plane (no need to use a linear movement or move them with another behavior).", "", "It can be used for:", "- Twin-stick shooters ([open the project online](https://editor.gdevelop.io/?project=example://conviction-of-gun-dude-desktop))", @@ -14416,7 +14416,7 @@ "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "Fire bullets, manage ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior action in your events to fire another object as a bullet. This action will also make the bullet move (using a permanent force) at the speed specified in the action.", + "description": "Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).", "fullName": "Fire bullets", "name": "FireBullet", "objectType": "", @@ -14990,11 +14990,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward an object at a specified speed.", + "description": "Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an object", "functionType": "Action", "name": "FireTowardObject", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -15059,11 +15059,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward a position at a specified speed.", + "description": "Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward a position", "functionType": "Action", "name": "FireTowardPosition", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -15133,11 +15133,11 @@ "objectGroups": [] }, { - "description": "Fire bullets in the direction of a given angle at a specified speed.", + "description": "Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an angle", "functionType": "Action", "name": "Fire", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -19098,12 +19098,17 @@ "unit": "Second", "label": "Firing cooldown", "description": "Objects cannot shoot while firing cooldown is active.", + "group": "", + "extraInformation": [], "name": "FireCooldown" }, { "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HasJustFired" }, @@ -19111,6 +19116,9 @@ "value": "true", "type": "Boolean", "label": "Rotate bullets to match their trajectory", + "description": "", + "group": "", + "extraInformation": [], "name": "RotateBullet" }, { @@ -19120,6 +19128,7 @@ "label": "Firing arc", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "FiringArc" }, { @@ -19128,6 +19137,7 @@ "label": "Number of bullets created at once", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "BulletQuantity" }, { @@ -19137,6 +19147,7 @@ "label": "Angle variance", "description": "Make imperfect aim (between 0 and 180 degrees).", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "AngleVariance" }, @@ -19147,6 +19158,7 @@ "label": "Bullet speed variance", "description": "Bullet speed will be adjusted by a random value within this range.", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "BulletSpeedVariance" }, @@ -19154,6 +19166,9 @@ "value": "0", "type": "Number", "label": "Ammo quantity (current)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "AmmoQuantity" }, @@ -19163,6 +19178,7 @@ "label": "Shots per reload ", "description": "Use 0 to disable reloading.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ShotsPerReload" }, @@ -19173,6 +19189,7 @@ "label": "Reloading duration", "description": "Objects cannot shoot while reloading is in progress.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ReloadDuration" }, @@ -19180,7 +19197,9 @@ "value": "0", "type": "Number", "label": "Max ammo ", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "MaxAmmo" }, @@ -19188,6 +19207,9 @@ "value": "0", "type": "Number", "label": "Shots before next reload", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ShotsBeforeNextReload" }, @@ -19196,6 +19218,8 @@ "type": "Number", "label": "Total shots fired", "description": "Regardless of how many bullets are created, only 1 shot will be counted per frame", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalShotsFired" }, @@ -19203,6 +19227,9 @@ "value": "0", "type": "Number", "label": "Total bullets created", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalBulletsCreated" }, @@ -19210,7 +19237,9 @@ "value": "0", "type": "Number", "label": "Starting ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "StartingAmmo" }, @@ -19218,6 +19247,9 @@ "value": "0", "type": "Number", "label": "Total reloads completed", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalReloadsCompleted" }, @@ -19225,7 +19257,9 @@ "value": "true", "type": "Boolean", "label": "Unlimited ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "UnlimitedAmmo" }, @@ -19233,6 +19267,9 @@ "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ReloadInProgress" }, @@ -19242,6 +19279,7 @@ "label": "Heat increase per shot (between 0 and 1)", "description": " Object is overheated when Heat reaches 1.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "HeatIncreasePerShot" }, @@ -19249,6 +19287,9 @@ "value": "0", "type": "Number", "label": "Heat level (Range: 0 to 1)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HeatLevel" }, @@ -19256,7 +19297,9 @@ "value": "true", "type": "Boolean", "label": "Reload automatically", + "description": "", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "AutomaticReloading" }, @@ -19267,6 +19310,7 @@ "label": "Overheat duration", "description": "Object cannot shoot while overheat duration is active.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "OverheatDuration" }, @@ -19274,7 +19318,9 @@ "value": "0.1", "type": "Number", "label": "Linear cooling rate (per second)", + "description": "", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "LinearCoolingRate" }, @@ -19288,7 +19334,6 @@ "Linear", "Exponential" ], - "choices": [], "advanced": true, "name": "ExponentialCoolingRate" }, @@ -19298,6 +19343,7 @@ "label": "Layer the bullets are created on", "description": "Base layer by default.", "group": "Shooting configuration", + "extraInformation": [], "hidden": true, "name": "BulletLayer" }, @@ -19305,123 +19351,14 @@ "value": "0", "type": "Number", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "RandomizedAngle" } ], - "propertiesFolderStructure": { - "folderName": "__ROOT", - "children": [ - { - "propertyName": "FireCooldown" - }, - { - "propertyName": "HasJustFired" - }, - { - "propertyName": "RotateBullet" - }, - { - "folderName": "Multi-Fire", - "children": [ - { - "propertyName": "FiringArc" - }, - { - "propertyName": "BulletQuantity" - } - ] - }, - { - "folderName": "Firing variance", - "children": [ - { - "propertyName": "AngleVariance" - }, - { - "propertyName": "BulletSpeedVariance" - } - ] - }, - { - "propertyName": "AmmoQuantity" - }, - { - "folderName": "Reload", - "children": [ - { - "propertyName": "ShotsPerReload" - }, - { - "propertyName": "ReloadDuration" - }, - { - "propertyName": "AutomaticReloading" - } - ] - }, - { - "folderName": "Ammo", - "children": [ - { - "propertyName": "MaxAmmo" - }, - { - "propertyName": "StartingAmmo" - }, - { - "propertyName": "UnlimitedAmmo" - } - ] - }, - { - "propertyName": "ShotsBeforeNextReload" - }, - { - "propertyName": "TotalShotsFired" - }, - { - "propertyName": "TotalBulletsCreated" - }, - { - "propertyName": "TotalReloadsCompleted" - }, - { - "propertyName": "ReloadInProgress" - }, - { - "folderName": "Overheat", - "children": [ - { - "propertyName": "HeatIncreasePerShot" - }, - { - "propertyName": "OverheatDuration" - }, - { - "propertyName": "LinearCoolingRate" - }, - { - "propertyName": "ExponentialCoolingRate" - } - ] - }, - { - "propertyName": "HeatLevel" - }, - { - "folderName": "Shooting configuration", - "children": [ - { - "propertyName": "BulletLayer" - } - ] - }, - { - "propertyName": "RandomizedAngle" - } - ] - } + "sharedPropertyDescriptors": [] } ], "eventsBasedObjects": [] diff --git a/examples/starting-3d-vampire-survivor/starting-3d-vampire-survivor.json b/examples/starting-3d-vampire-survivor/starting-3d-vampire-survivor.json index b07092a02..5529e4795 100644 --- a/examples/starting-3d-vampire-survivor/starting-3d-vampire-survivor.json +++ b/examples/starting-3d-vampire-survivor/starting-3d-vampire-survivor.json @@ -14186,14 +14186,14 @@ "author": "@4ian", "category": "Game mechanic", "extensionNamespace": "", - "fullName": "Fire bullets", "gdevelopVersion": ">=5.5.222", + "fullName": "Fire bullets", "helpPath": "/extensions/fire-bullet/details", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", "name": "FireBullet", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", "shortDescription": "Fire bullets, manage ammo, reloading and overheating.", - "version": "0.9.1", + "version": "0.9.2", "description": [ "This extension allows objects to fire bullets. To use it, add the behavior to the object that will shoot, then use the provided action to launch another object as the bullet.", "", @@ -14204,7 +14204,7 @@ "- Overheat", "", "The speed can be specified when using the actions to fire the bullets.", - "The bullets are automatically given a permanent force to make them move (no need to use a linear movement or move them with another behavior).", + "The bullets are automatically given a permanent force to make them move in the 2D plane (no need to use a linear movement or move them with another behavior).", "", "It can be used for:", "- Twin-stick shooters ([open the project online](https://editor.gdevelop.io/?project=example://conviction-of-gun-dude-desktop))", @@ -14239,7 +14239,7 @@ "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "Fire bullets, manage ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior action in your events to fire another object as a bullet. This action will also make the bullet move (using a permanent force) at the speed specified in the action.", + "description": "Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).", "fullName": "Fire bullets", "name": "FireBullet", "objectType": "", @@ -14813,11 +14813,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward an object at a specified speed.", + "description": "Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an object", "functionType": "Action", "name": "FireTowardObject", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -14882,11 +14882,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward a position at a specified speed.", + "description": "Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward a position", "functionType": "Action", "name": "FireTowardPosition", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -14956,11 +14956,11 @@ "objectGroups": [] }, { - "description": "Fire bullets in the direction of a given angle at a specified speed.", + "description": "Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an angle", "functionType": "Action", "name": "Fire", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -18921,12 +18921,17 @@ "unit": "Second", "label": "Firing cooldown", "description": "Objects cannot shoot while firing cooldown is active.", + "group": "", + "extraInformation": [], "name": "FireCooldown" }, { "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HasJustFired" }, @@ -18934,6 +18939,9 @@ "value": "true", "type": "Boolean", "label": "Rotate bullets to match their trajectory", + "description": "", + "group": "", + "extraInformation": [], "name": "RotateBullet" }, { @@ -18943,6 +18951,7 @@ "label": "Firing arc", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "FiringArc" }, { @@ -18951,6 +18960,7 @@ "label": "Number of bullets created at once", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "BulletQuantity" }, { @@ -18960,6 +18970,7 @@ "label": "Angle variance", "description": "Make imperfect aim (between 0 and 180 degrees).", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "AngleVariance" }, @@ -18970,6 +18981,7 @@ "label": "Bullet speed variance", "description": "Bullet speed will be adjusted by a random value within this range.", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "BulletSpeedVariance" }, @@ -18977,6 +18989,9 @@ "value": "0", "type": "Number", "label": "Ammo quantity (current)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "AmmoQuantity" }, @@ -18986,6 +19001,7 @@ "label": "Shots per reload ", "description": "Use 0 to disable reloading.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ShotsPerReload" }, @@ -18996,6 +19012,7 @@ "label": "Reloading duration", "description": "Objects cannot shoot while reloading is in progress.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ReloadDuration" }, @@ -19003,7 +19020,9 @@ "value": "0", "type": "Number", "label": "Max ammo ", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "MaxAmmo" }, @@ -19011,6 +19030,9 @@ "value": "0", "type": "Number", "label": "Shots before next reload", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ShotsBeforeNextReload" }, @@ -19019,6 +19041,8 @@ "type": "Number", "label": "Total shots fired", "description": "Regardless of how many bullets are created, only 1 shot will be counted per frame", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalShotsFired" }, @@ -19026,6 +19050,9 @@ "value": "0", "type": "Number", "label": "Total bullets created", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalBulletsCreated" }, @@ -19033,7 +19060,9 @@ "value": "0", "type": "Number", "label": "Starting ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "StartingAmmo" }, @@ -19041,6 +19070,9 @@ "value": "0", "type": "Number", "label": "Total reloads completed", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalReloadsCompleted" }, @@ -19048,7 +19080,9 @@ "value": "true", "type": "Boolean", "label": "Unlimited ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "UnlimitedAmmo" }, @@ -19056,6 +19090,9 @@ "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ReloadInProgress" }, @@ -19065,6 +19102,7 @@ "label": "Heat increase per shot (between 0 and 1)", "description": " Object is overheated when Heat reaches 1.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "HeatIncreasePerShot" }, @@ -19072,6 +19110,9 @@ "value": "0", "type": "Number", "label": "Heat level (Range: 0 to 1)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HeatLevel" }, @@ -19079,7 +19120,9 @@ "value": "true", "type": "Boolean", "label": "Reload automatically", + "description": "", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "AutomaticReloading" }, @@ -19090,6 +19133,7 @@ "label": "Overheat duration", "description": "Object cannot shoot while overheat duration is active.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "OverheatDuration" }, @@ -19097,7 +19141,9 @@ "value": "0.1", "type": "Number", "label": "Linear cooling rate (per second)", + "description": "", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "LinearCoolingRate" }, @@ -19111,7 +19157,6 @@ "Linear", "Exponential" ], - "choices": [], "advanced": true, "name": "ExponentialCoolingRate" }, @@ -19121,6 +19166,7 @@ "label": "Layer the bullets are created on", "description": "Base layer by default.", "group": "Shooting configuration", + "extraInformation": [], "hidden": true, "name": "BulletLayer" }, @@ -19128,123 +19174,14 @@ "value": "0", "type": "Number", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "RandomizedAngle" } ], - "propertiesFolderStructure": { - "folderName": "__ROOT", - "children": [ - { - "propertyName": "FireCooldown" - }, - { - "propertyName": "HasJustFired" - }, - { - "propertyName": "RotateBullet" - }, - { - "folderName": "Multi-Fire", - "children": [ - { - "propertyName": "FiringArc" - }, - { - "propertyName": "BulletQuantity" - } - ] - }, - { - "folderName": "Firing variance", - "children": [ - { - "propertyName": "AngleVariance" - }, - { - "propertyName": "BulletSpeedVariance" - } - ] - }, - { - "propertyName": "AmmoQuantity" - }, - { - "folderName": "Reload", - "children": [ - { - "propertyName": "ShotsPerReload" - }, - { - "propertyName": "ReloadDuration" - }, - { - "propertyName": "AutomaticReloading" - } - ] - }, - { - "folderName": "Ammo", - "children": [ - { - "propertyName": "MaxAmmo" - }, - { - "propertyName": "StartingAmmo" - }, - { - "propertyName": "UnlimitedAmmo" - } - ] - }, - { - "propertyName": "ShotsBeforeNextReload" - }, - { - "propertyName": "TotalShotsFired" - }, - { - "propertyName": "TotalBulletsCreated" - }, - { - "propertyName": "TotalReloadsCompleted" - }, - { - "propertyName": "ReloadInProgress" - }, - { - "folderName": "Overheat", - "children": [ - { - "propertyName": "HeatIncreasePerShot" - }, - { - "propertyName": "OverheatDuration" - }, - { - "propertyName": "LinearCoolingRate" - }, - { - "propertyName": "ExponentialCoolingRate" - } - ] - }, - { - "propertyName": "HeatLevel" - }, - { - "folderName": "Shooting configuration", - "children": [ - { - "propertyName": "BulletLayer" - } - ] - }, - { - "propertyName": "RandomizedAngle" - } - ] - } + "sharedPropertyDescriptors": [] } ], "eventsBasedObjects": [] diff --git a/examples/starting-shootemup/starting-shootemup.json b/examples/starting-shootemup/starting-shootemup.json index 28b8774c5..06b2922f9 100644 --- a/examples/starting-shootemup/starting-shootemup.json +++ b/examples/starting-shootemup/starting-shootemup.json @@ -8515,14 +8515,14 @@ "author": "@4ian", "category": "Game mechanic", "extensionNamespace": "", - "fullName": "Fire bullets", "gdevelopVersion": ">=5.5.222", + "fullName": "Fire bullets", "helpPath": "/extensions/fire-bullet/details", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", "name": "FireBullet", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", "shortDescription": "Fire bullets, manage ammo, reloading and overheating.", - "version": "0.9.1", + "version": "0.9.2", "description": [ "This extension allows objects to fire bullets. To use it, add the behavior to the object that will shoot, then use the provided action to launch another object as the bullet.", "", @@ -8533,7 +8533,7 @@ "- Overheat", "", "The speed can be specified when using the actions to fire the bullets.", - "The bullets are automatically given a permanent force to make them move (no need to use a linear movement or move them with another behavior).", + "The bullets are automatically given a permanent force to make them move in the 2D plane (no need to use a linear movement or move them with another behavior).", "", "It can be used for:", "- Twin-stick shooters ([open the project online](https://editor.gdevelop.io/?project=example://conviction-of-gun-dude-desktop))", @@ -8568,7 +8568,7 @@ "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "Fire bullets, manage ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior action in your events to fire another object as a bullet. This action will also make the bullet move (using a permanent force) at the speed specified in the action.", + "description": "Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).", "fullName": "Fire bullets", "name": "FireBullet", "objectType": "", @@ -9142,11 +9142,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward an object at a specified speed.", + "description": "Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an object", "functionType": "Action", "name": "FireTowardObject", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -9211,11 +9211,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward a position at a specified speed.", + "description": "Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward a position", "functionType": "Action", "name": "FireTowardPosition", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -9285,11 +9285,11 @@ "objectGroups": [] }, { - "description": "Fire bullets in the direction of a given angle at a specified speed.", + "description": "Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an angle", "functionType": "Action", "name": "Fire", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -13250,12 +13250,17 @@ "unit": "Second", "label": "Firing cooldown", "description": "Objects cannot shoot while firing cooldown is active.", + "group": "", + "extraInformation": [], "name": "FireCooldown" }, { "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HasJustFired" }, @@ -13263,6 +13268,9 @@ "value": "true", "type": "Boolean", "label": "Rotate bullets to match their trajectory", + "description": "", + "group": "", + "extraInformation": [], "name": "RotateBullet" }, { @@ -13272,6 +13280,7 @@ "label": "Firing arc", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "FiringArc" }, { @@ -13280,6 +13289,7 @@ "label": "Number of bullets created at once", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "BulletQuantity" }, { @@ -13289,6 +13299,7 @@ "label": "Angle variance", "description": "Make imperfect aim (between 0 and 180 degrees).", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "AngleVariance" }, @@ -13299,6 +13310,7 @@ "label": "Bullet speed variance", "description": "Bullet speed will be adjusted by a random value within this range.", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "BulletSpeedVariance" }, @@ -13306,6 +13318,9 @@ "value": "0", "type": "Number", "label": "Ammo quantity (current)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "AmmoQuantity" }, @@ -13315,6 +13330,7 @@ "label": "Shots per reload ", "description": "Use 0 to disable reloading.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ShotsPerReload" }, @@ -13325,6 +13341,7 @@ "label": "Reloading duration", "description": "Objects cannot shoot while reloading is in progress.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ReloadDuration" }, @@ -13332,7 +13349,9 @@ "value": "0", "type": "Number", "label": "Max ammo ", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "MaxAmmo" }, @@ -13340,6 +13359,9 @@ "value": "0", "type": "Number", "label": "Shots before next reload", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ShotsBeforeNextReload" }, @@ -13348,6 +13370,8 @@ "type": "Number", "label": "Total shots fired", "description": "Regardless of how many bullets are created, only 1 shot will be counted per frame", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalShotsFired" }, @@ -13355,6 +13379,9 @@ "value": "0", "type": "Number", "label": "Total bullets created", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalBulletsCreated" }, @@ -13362,7 +13389,9 @@ "value": "0", "type": "Number", "label": "Starting ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "StartingAmmo" }, @@ -13370,6 +13399,9 @@ "value": "0", "type": "Number", "label": "Total reloads completed", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalReloadsCompleted" }, @@ -13377,7 +13409,9 @@ "value": "true", "type": "Boolean", "label": "Unlimited ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "UnlimitedAmmo" }, @@ -13385,6 +13419,9 @@ "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ReloadInProgress" }, @@ -13394,6 +13431,7 @@ "label": "Heat increase per shot (between 0 and 1)", "description": " Object is overheated when Heat reaches 1.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "HeatIncreasePerShot" }, @@ -13401,6 +13439,9 @@ "value": "0", "type": "Number", "label": "Heat level (Range: 0 to 1)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HeatLevel" }, @@ -13408,7 +13449,9 @@ "value": "true", "type": "Boolean", "label": "Reload automatically", + "description": "", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "AutomaticReloading" }, @@ -13419,6 +13462,7 @@ "label": "Overheat duration", "description": "Object cannot shoot while overheat duration is active.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "OverheatDuration" }, @@ -13426,7 +13470,9 @@ "value": "0.1", "type": "Number", "label": "Linear cooling rate (per second)", + "description": "", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "LinearCoolingRate" }, @@ -13440,7 +13486,6 @@ "Linear", "Exponential" ], - "choices": [], "advanced": true, "name": "ExponentialCoolingRate" }, @@ -13450,6 +13495,7 @@ "label": "Layer the bullets are created on", "description": "Base layer by default.", "group": "Shooting configuration", + "extraInformation": [], "hidden": true, "name": "BulletLayer" }, @@ -13457,6 +13503,9 @@ "value": "0", "type": "Number", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "RandomizedAngle" } diff --git a/examples/starting-twin-stick-shooter/starting-twin-stick-shooter.json b/examples/starting-twin-stick-shooter/starting-twin-stick-shooter.json index 85f1a38a8..95d7ae3ea 100644 --- a/examples/starting-twin-stick-shooter/starting-twin-stick-shooter.json +++ b/examples/starting-twin-stick-shooter/starting-twin-stick-shooter.json @@ -13827,14 +13827,14 @@ "author": "@4ian", "category": "Game mechanic", "extensionNamespace": "", - "fullName": "Fire bullets", "gdevelopVersion": ">=5.5.222", + "fullName": "Fire bullets", "helpPath": "/extensions/fire-bullet/details", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", "name": "FireBullet", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", "shortDescription": "Fire bullets, manage ammo, reloading and overheating.", - "version": "0.9.1", + "version": "0.9.2", "description": [ "This extension allows objects to fire bullets. To use it, add the behavior to the object that will shoot, then use the provided action to launch another object as the bullet.", "", @@ -13845,7 +13845,7 @@ "- Overheat", "", "The speed can be specified when using the actions to fire the bullets.", - "The bullets are automatically given a permanent force to make them move (no need to use a linear movement or move them with another behavior).", + "The bullets are automatically given a permanent force to make them move in the 2D plane (no need to use a linear movement or move them with another behavior).", "", "It can be used for:", "- Twin-stick shooters ([open the project online](https://editor.gdevelop.io/?project=example://conviction-of-gun-dude-desktop))", @@ -13880,7 +13880,7 @@ "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "Fire bullets, manage ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior action in your events to fire another object as a bullet. This action will also make the bullet move (using a permanent force) at the speed specified in the action.", + "description": "Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).", "fullName": "Fire bullets", "name": "FireBullet", "objectType": "", @@ -14454,11 +14454,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward an object at a specified speed.", + "description": "Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an object", "functionType": "Action", "name": "FireTowardObject", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -14523,11 +14523,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward a position at a specified speed.", + "description": "Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward a position", "functionType": "Action", "name": "FireTowardPosition", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -14597,11 +14597,11 @@ "objectGroups": [] }, { - "description": "Fire bullets in the direction of a given angle at a specified speed.", + "description": "Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an angle", "functionType": "Action", "name": "Fire", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -18562,12 +18562,17 @@ "unit": "Second", "label": "Firing cooldown", "description": "Objects cannot shoot while firing cooldown is active.", + "group": "", + "extraInformation": [], "name": "FireCooldown" }, { "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HasJustFired" }, @@ -18575,6 +18580,9 @@ "value": "true", "type": "Boolean", "label": "Rotate bullets to match their trajectory", + "description": "", + "group": "", + "extraInformation": [], "name": "RotateBullet" }, { @@ -18584,6 +18592,7 @@ "label": "Firing arc", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "FiringArc" }, { @@ -18592,6 +18601,7 @@ "label": "Number of bullets created at once", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "BulletQuantity" }, { @@ -18601,6 +18611,7 @@ "label": "Angle variance", "description": "Make imperfect aim (between 0 and 180 degrees).", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "AngleVariance" }, @@ -18611,6 +18622,7 @@ "label": "Bullet speed variance", "description": "Bullet speed will be adjusted by a random value within this range.", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "BulletSpeedVariance" }, @@ -18618,6 +18630,9 @@ "value": "0", "type": "Number", "label": "Ammo quantity (current)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "AmmoQuantity" }, @@ -18627,6 +18642,7 @@ "label": "Shots per reload ", "description": "Use 0 to disable reloading.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ShotsPerReload" }, @@ -18637,6 +18653,7 @@ "label": "Reloading duration", "description": "Objects cannot shoot while reloading is in progress.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ReloadDuration" }, @@ -18644,7 +18661,9 @@ "value": "0", "type": "Number", "label": "Max ammo ", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "MaxAmmo" }, @@ -18652,6 +18671,9 @@ "value": "0", "type": "Number", "label": "Shots before next reload", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ShotsBeforeNextReload" }, @@ -18660,6 +18682,8 @@ "type": "Number", "label": "Total shots fired", "description": "Regardless of how many bullets are created, only 1 shot will be counted per frame", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalShotsFired" }, @@ -18667,6 +18691,9 @@ "value": "0", "type": "Number", "label": "Total bullets created", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalBulletsCreated" }, @@ -18674,7 +18701,9 @@ "value": "0", "type": "Number", "label": "Starting ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "StartingAmmo" }, @@ -18682,6 +18711,9 @@ "value": "0", "type": "Number", "label": "Total reloads completed", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalReloadsCompleted" }, @@ -18689,7 +18721,9 @@ "value": "true", "type": "Boolean", "label": "Unlimited ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "UnlimitedAmmo" }, @@ -18697,6 +18731,9 @@ "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ReloadInProgress" }, @@ -18706,6 +18743,7 @@ "label": "Heat increase per shot (between 0 and 1)", "description": " Object is overheated when Heat reaches 1.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "HeatIncreasePerShot" }, @@ -18713,6 +18751,9 @@ "value": "0", "type": "Number", "label": "Heat level (Range: 0 to 1)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HeatLevel" }, @@ -18720,7 +18761,9 @@ "value": "true", "type": "Boolean", "label": "Reload automatically", + "description": "", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "AutomaticReloading" }, @@ -18731,6 +18774,7 @@ "label": "Overheat duration", "description": "Object cannot shoot while overheat duration is active.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "OverheatDuration" }, @@ -18738,7 +18782,9 @@ "value": "0.1", "type": "Number", "label": "Linear cooling rate (per second)", + "description": "", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "LinearCoolingRate" }, @@ -18752,7 +18798,6 @@ "Linear", "Exponential" ], - "choices": [], "advanced": true, "name": "ExponentialCoolingRate" }, @@ -18762,6 +18807,7 @@ "label": "Layer the bullets are created on", "description": "Base layer by default.", "group": "Shooting configuration", + "extraInformation": [], "hidden": true, "name": "BulletLayer" }, @@ -18769,6 +18815,9 @@ "value": "0", "type": "Number", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "RandomizedAngle" } diff --git a/examples/starting-vampire-survivor/starting-vampire-survivor.json b/examples/starting-vampire-survivor/starting-vampire-survivor.json index 2d9a76f6d..5afda07fc 100644 --- a/examples/starting-vampire-survivor/starting-vampire-survivor.json +++ b/examples/starting-vampire-survivor/starting-vampire-survivor.json @@ -13640,14 +13640,14 @@ "author": "@4ian", "category": "Game mechanic", "extensionNamespace": "", - "fullName": "Fire bullets", "gdevelopVersion": ">=5.5.222", + "fullName": "Fire bullets", "helpPath": "/extensions/fire-bullet/details", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", "name": "FireBullet", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", "shortDescription": "Fire bullets, manage ammo, reloading and overheating.", - "version": "0.9.1", + "version": "0.9.2", "description": [ "This extension allows objects to fire bullets. To use it, add the behavior to the object that will shoot, then use the provided action to launch another object as the bullet.", "", @@ -13658,7 +13658,7 @@ "- Overheat", "", "The speed can be specified when using the actions to fire the bullets.", - "The bullets are automatically given a permanent force to make them move (no need to use a linear movement or move them with another behavior).", + "The bullets are automatically given a permanent force to make them move in the 2D plane (no need to use a linear movement or move them with another behavior).", "", "It can be used for:", "- Twin-stick shooters ([open the project online](https://editor.gdevelop.io/?project=example://conviction-of-gun-dude-desktop))", @@ -13693,7 +13693,7 @@ "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "Fire bullets, manage ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior action in your events to fire another object as a bullet. This action will also make the bullet move (using a permanent force) at the speed specified in the action.", + "description": "Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).", "fullName": "Fire bullets", "name": "FireBullet", "objectType": "", @@ -14267,11 +14267,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward an object at a specified speed.", + "description": "Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an object", "functionType": "Action", "name": "FireTowardObject", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -14336,11 +14336,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward a position at a specified speed.", + "description": "Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward a position", "functionType": "Action", "name": "FireTowardPosition", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -14410,11 +14410,11 @@ "objectGroups": [] }, { - "description": "Fire bullets in the direction of a given angle at a specified speed.", + "description": "Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an angle", "functionType": "Action", "name": "Fire", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -18375,12 +18375,17 @@ "unit": "Second", "label": "Firing cooldown", "description": "Objects cannot shoot while firing cooldown is active.", + "group": "", + "extraInformation": [], "name": "FireCooldown" }, { "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HasJustFired" }, @@ -18388,6 +18393,9 @@ "value": "true", "type": "Boolean", "label": "Rotate bullets to match their trajectory", + "description": "", + "group": "", + "extraInformation": [], "name": "RotateBullet" }, { @@ -18397,6 +18405,7 @@ "label": "Firing arc", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "FiringArc" }, { @@ -18405,6 +18414,7 @@ "label": "Number of bullets created at once", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "BulletQuantity" }, { @@ -18414,6 +18424,7 @@ "label": "Angle variance", "description": "Make imperfect aim (between 0 and 180 degrees).", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "AngleVariance" }, @@ -18424,6 +18435,7 @@ "label": "Bullet speed variance", "description": "Bullet speed will be adjusted by a random value within this range.", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "BulletSpeedVariance" }, @@ -18431,6 +18443,9 @@ "value": "0", "type": "Number", "label": "Ammo quantity (current)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "AmmoQuantity" }, @@ -18440,6 +18455,7 @@ "label": "Shots per reload ", "description": "Use 0 to disable reloading.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ShotsPerReload" }, @@ -18450,6 +18466,7 @@ "label": "Reloading duration", "description": "Objects cannot shoot while reloading is in progress.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ReloadDuration" }, @@ -18457,7 +18474,9 @@ "value": "0", "type": "Number", "label": "Max ammo ", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "MaxAmmo" }, @@ -18465,6 +18484,9 @@ "value": "0", "type": "Number", "label": "Shots before next reload", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ShotsBeforeNextReload" }, @@ -18473,6 +18495,8 @@ "type": "Number", "label": "Total shots fired", "description": "Regardless of how many bullets are created, only 1 shot will be counted per frame", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalShotsFired" }, @@ -18480,6 +18504,9 @@ "value": "0", "type": "Number", "label": "Total bullets created", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalBulletsCreated" }, @@ -18487,7 +18514,9 @@ "value": "0", "type": "Number", "label": "Starting ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "StartingAmmo" }, @@ -18495,6 +18524,9 @@ "value": "0", "type": "Number", "label": "Total reloads completed", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalReloadsCompleted" }, @@ -18502,7 +18534,9 @@ "value": "true", "type": "Boolean", "label": "Unlimited ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "UnlimitedAmmo" }, @@ -18510,6 +18544,9 @@ "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ReloadInProgress" }, @@ -18519,6 +18556,7 @@ "label": "Heat increase per shot (between 0 and 1)", "description": " Object is overheated when Heat reaches 1.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "HeatIncreasePerShot" }, @@ -18526,6 +18564,9 @@ "value": "0", "type": "Number", "label": "Heat level (Range: 0 to 1)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HeatLevel" }, @@ -18533,7 +18574,9 @@ "value": "true", "type": "Boolean", "label": "Reload automatically", + "description": "", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "AutomaticReloading" }, @@ -18544,6 +18587,7 @@ "label": "Overheat duration", "description": "Object cannot shoot while overheat duration is active.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "OverheatDuration" }, @@ -18551,7 +18595,9 @@ "value": "0.1", "type": "Number", "label": "Linear cooling rate (per second)", + "description": "", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "LinearCoolingRate" }, @@ -18565,7 +18611,6 @@ "Linear", "Exponential" ], - "choices": [], "advanced": true, "name": "ExponentialCoolingRate" }, @@ -18575,6 +18620,7 @@ "label": "Layer the bullets are created on", "description": "Base layer by default.", "group": "Shooting configuration", + "extraInformation": [], "hidden": true, "name": "BulletLayer" }, @@ -18582,6 +18628,9 @@ "value": "0", "type": "Number", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "RandomizedAngle" } diff --git a/examples/tower-defense-war/tower-defense-war.json b/examples/tower-defense-war/tower-defense-war.json index 04f253c94..2ba4e1fc2 100644 --- a/examples/tower-defense-war/tower-defense-war.json +++ b/examples/tower-defense-war/tower-defense-war.json @@ -9276,14 +9276,14 @@ "author": "@4ian", "category": "Game mechanic", "extensionNamespace": "", - "fullName": "Fire bullets", "gdevelopVersion": ">=5.5.222", + "fullName": "Fire bullets", "helpPath": "/extensions/fire-bullet/details", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", "name": "FireBullet", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", "shortDescription": "Fire bullets, manage ammo, reloading and overheating.", - "version": "0.9.1", + "version": "0.9.2", "description": [ "This extension allows objects to fire bullets. To use it, add the behavior to the object that will shoot, then use the provided action to launch another object as the bullet.", "", @@ -9293,6 +9293,9 @@ "- Ammo management", "- Overheat", "", + "The speed can be specified when using the actions to fire the bullets.", + "The bullets are automatically given a permanent force to make them move in the 2D plane (no need to use a linear movement or move them with another behavior).", + "", "It can be used for:", "- Twin-stick shooters ([open the project online](https://editor.gdevelop.io/?project=example://conviction-of-gun-dude-desktop))", "- Shoot'em up ([open the project online](https://editor.gdevelop.io/?project=example://space-shooter))", @@ -9326,7 +9329,7 @@ "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "Fire bullets, manage ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior action in your events to fire another object as a bullet.", + "description": "Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).", "fullName": "Fire bullets", "name": "FireBullet", "objectType": "", @@ -9900,11 +9903,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward an object.", + "description": "Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an object", "functionType": "Action", "name": "FireTowardObject", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -9969,11 +9972,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward a position.", + "description": "Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward a position", "functionType": "Action", "name": "FireTowardPosition", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -10043,11 +10046,11 @@ "objectGroups": [] }, { - "description": "Fire bullets in the direction of a given angle.", + "description": "Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an angle", "functionType": "Action", "name": "Fire", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -14008,12 +14011,17 @@ "unit": "Second", "label": "Firing cooldown", "description": "Objects cannot shoot while firing cooldown is active.", + "group": "", + "extraInformation": [], "name": "FireCooldown" }, { "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HasJustFired" }, @@ -14021,6 +14029,9 @@ "value": "true", "type": "Boolean", "label": "Rotate bullets to match their trajectory", + "description": "", + "group": "", + "extraInformation": [], "name": "RotateBullet" }, { @@ -14030,6 +14041,7 @@ "label": "Firing arc", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "FiringArc" }, { @@ -14038,6 +14050,7 @@ "label": "Number of bullets created at once", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "BulletQuantity" }, { @@ -14047,6 +14060,7 @@ "label": "Angle variance", "description": "Make imperfect aim (between 0 and 180 degrees).", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "AngleVariance" }, @@ -14057,6 +14071,7 @@ "label": "Bullet speed variance", "description": "Bullet speed will be adjusted by a random value within this range.", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "BulletSpeedVariance" }, @@ -14064,6 +14079,9 @@ "value": "0", "type": "Number", "label": "Ammo quantity (current)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "AmmoQuantity" }, @@ -14073,6 +14091,7 @@ "label": "Shots per reload ", "description": "Use 0 to disable reloading.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ShotsPerReload" }, @@ -14083,6 +14102,7 @@ "label": "Reloading duration", "description": "Objects cannot shoot while reloading is in progress.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ReloadDuration" }, @@ -14090,7 +14110,9 @@ "value": "0", "type": "Number", "label": "Max ammo ", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "MaxAmmo" }, @@ -14098,6 +14120,9 @@ "value": "0", "type": "Number", "label": "Shots before next reload", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ShotsBeforeNextReload" }, @@ -14106,6 +14131,8 @@ "type": "Number", "label": "Total shots fired", "description": "Regardless of how many bullets are created, only 1 shot will be counted per frame", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalShotsFired" }, @@ -14113,6 +14140,9 @@ "value": "0", "type": "Number", "label": "Total bullets created", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalBulletsCreated" }, @@ -14120,7 +14150,9 @@ "value": "0", "type": "Number", "label": "Starting ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "StartingAmmo" }, @@ -14128,6 +14160,9 @@ "value": "0", "type": "Number", "label": "Total reloads completed", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalReloadsCompleted" }, @@ -14135,7 +14170,9 @@ "value": "true", "type": "Boolean", "label": "Unlimited ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "UnlimitedAmmo" }, @@ -14143,6 +14180,9 @@ "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ReloadInProgress" }, @@ -14152,6 +14192,7 @@ "label": "Heat increase per shot (between 0 and 1)", "description": " Object is overheated when Heat reaches 1.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "HeatIncreasePerShot" }, @@ -14159,6 +14200,9 @@ "value": "0", "type": "Number", "label": "Heat level (Range: 0 to 1)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HeatLevel" }, @@ -14166,7 +14210,9 @@ "value": "true", "type": "Boolean", "label": "Reload automatically", + "description": "", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "AutomaticReloading" }, @@ -14177,6 +14223,7 @@ "label": "Overheat duration", "description": "Object cannot shoot while overheat duration is active.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "OverheatDuration" }, @@ -14184,7 +14231,9 @@ "value": "0.1", "type": "Number", "label": "Linear cooling rate (per second)", + "description": "", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "LinearCoolingRate" }, @@ -14198,7 +14247,6 @@ "Linear", "Exponential" ], - "choices": [], "advanced": true, "name": "ExponentialCoolingRate" }, @@ -14208,6 +14256,7 @@ "label": "Layer the bullets are created on", "description": "Base layer by default.", "group": "Shooting configuration", + "extraInformation": [], "hidden": true, "name": "BulletLayer" }, @@ -14215,6 +14264,9 @@ "value": "0", "type": "Number", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "RandomizedAngle" } diff --git a/examples/virtual-joystick/virtual-joystick.json b/examples/virtual-joystick/virtual-joystick.json index f38f4b525..8ce550b84 100644 --- a/examples/virtual-joystick/virtual-joystick.json +++ b/examples/virtual-joystick/virtual-joystick.json @@ -10994,16 +10994,34 @@ }, { "author": "@4ian", - "category": "", + "category": "Game mechanic", "extensionNamespace": "", + "gdevelopVersion": ">=5.5.222", "fullName": "Fire bullets", - "helpPath": "", + "helpPath": "/extensions/fire-bullet/details", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", "name": "FireBullet", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", - "shortDescription": "Allow the object to fire bullets, with customizable speed, angle and fire rate.", - "version": "0.1.0", - "description": "Allow the object to fire bullets, with customizable speed, angle and fire rate.", + "shortDescription": "Fire bullets, manage ammo, reloading and overheating.", + "version": "0.9.2", + "description": [ + "This extension allows objects to fire bullets. To use it, add the behavior to the object that will shoot, then use the provided action to launch another object as the bullet.", + "", + "The properties of the behavior can be used to customize:", + "- Cooldown between shots", + "- Firing multiple bullets at a time ([open the project online](https://editor.gdevelop.io/?project=example://fire-bullet))", + "- Ammo management", + "- Overheat", + "", + "The speed can be specified when using the actions to fire the bullets.", + "The bullets are automatically given a permanent force to make them move in the 2D plane (no need to use a linear movement or move them with another behavior).", + "", + "It can be used for:", + "- Twin-stick shooters ([open the project online](https://editor.gdevelop.io/?project=example://conviction-of-gun-dude-desktop))", + "- Shoot'em up ([open the project online](https://editor.gdevelop.io/?project=example://space-shooter))", + "", + "A simple example shows how to make firing patterns ([open the project online](https://editor.gdevelop.io/?project=example://firing-patterns))." + ], "origin": { "identifier": "FireBullet", "name": "gdevelop-extension-store" @@ -11012,88 +11030,4250 @@ "fire", "bullet", "spawn", - "firerate" + "firerate", + "reload", + "weapon", + "ranged", + "ammo", + "overheat" ], "authorIds": [ "wWP8BSlAW0UP4NeaHa2LcmmDzmH2", "xpwUwByyImTDcHEqDUqfyg0oRBt1", - "2OwwM8ToR9dx9RJ2sAKTcrLmCB92" + "2OwwM8ToR9dx9RJ2sAKTcrLmCB92", + "gqDaZjCfevOOxBYkK6zlhtZnXCg1" ], "dependencies": [], + "globalVariables": [], + "sceneVariables": [], "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "Allow the object to fire bullets, with customizable speed, angle and fire rate.", - "fullName": "Fire Bullet", + "description": "Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).", + "fullName": "Fire bullets", "name": "FireBullet", "objectType": "", "eventsFunctions": [ { - "description": "Fire a bullet toward a position.", - "fullName": "Fire a bullet toward a position", + "fullName": "", "functionType": "Action", - "name": "FireTowardPosition", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_;_PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", + "name": "onCreated", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "conditions": [], + "actions": [ { "type": { - "value": "ObjectTimer" + "value": "ResetObjectTimer" }, "parameters": [ "Object", - "\"FireCooldown\"", - "Object.Behavior::PropertyFireCooldown()" + "\"__FireBullet.FiringCooldown\"" + ] + }, + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "AmmoQuantity", + "=", + "StartingAmmo" + ] + }, + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "ShotsBeforeNextReload", + "=", + "ShotsPerReload" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "colorB": 224, + "colorG": 16, + "colorR": 189, + "creationTime": 0, + "name": "Take a shot (if triggered)", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Creators can use the \"FireBullet\" action multiple times in a frame and it will be counted as a single \"shot\"." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BooleanVariable" + }, + "parameters": [ + "HasJustFired", + "True", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetBooleanVariable" + }, + "parameters": [ + "HasJustFired", + "False", + "" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__FireBullet.FiringCooldown\"" + ] + }, + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "TotalShotsFired", + "+", + "1" + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Ammo", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "BooleanVariable" + }, + "parameters": [ + "UnlimitedAmmo", + "True", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "AmmoQuantity", + "=", + "max(0, AmmoQuantity - 1)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "NumberVariable" + }, + "parameters": [ + "ShotsPerReload", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "ShotsBeforeNextReload", + "-", + "1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BooleanVariable" + }, + "parameters": [ + "AutomaticReloading", + "True", + "" + ] + }, + { + "type": { + "value": "FireBullet::FireBullet::IsReloadNeeded" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsReloadInProgress" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::ReloadAmmo" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Overheat", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "NumberVariable" + }, + "parameters": [ + "HeatIncreasePerShot", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "HeatLevel", + "+", + "HeatIncreasePerShot" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "NumberVariable" + }, + "parameters": [ + "OverheatDuration", + ">", + "0" + ] + }, + { + "type": { + "value": "FireBullet::FireBullet::IsOverheated" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__FireBullet.OverheatDuration\"" + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Reload", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Detect when reload is completed" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::IsReloadInProgress" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__FireBullet.ReloadingTimer\"", + ">=", + "ReloadDuration" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "TotalReloadsCompleted", + "+", + "1" + ] + }, + { + "type": { + "value": "SetBooleanVariable" + }, + "parameters": [ + "ReloadInProgress", + "False", + "" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::IsUnlimitedAmmo" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "ShotsBeforeNextReload", + "=", + "ShotsPerReload" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Only reload the amount of ammo available" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsUnlimitedAmmo" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "ShotsBeforeNextReload", + "=", + "min(ShotsPerReload, AmmoQuantity)" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Cooling", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "HeatLevel", + ">", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "NumberVariable" + }, + "parameters": [ + "ExponentialCoolingRate", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "HeatLevel", + "=", + "max(0, HeatLevel - TimeDelta() * ExponentialCoolingRate * HeatLevel)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "NumberVariable" + }, + "parameters": [ + "LinearCoolingRate", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "HeatLevel", + "=", + "max(0, HeatLevel - TimeDelta() * LinearCoolingRate)" + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", + "fullName": "Fire bullets toward an object", + "functionType": "Action", + "name": "FireTowardObject", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::Fire" + }, + "parameters": [ + "Object", + "Behavior", + "XPosition", + "YPosition", + "Bullet", + "Object.AngleToObject(TargetObject)", + "Speed", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "X position, where to create the bullet", + "name": "XPosition", + "type": "expression" + }, + { + "description": "Y position, where to create the bullet", + "name": "YPosition", + "type": "expression" + }, + { + "description": "The bullet object", + "name": "Bullet", + "type": "objectListOrEmptyIfJustDeclared" + }, + { + "description": "Target object", + "name": "TargetObject", + "type": "objectList" + }, + { + "description": "Speed of the bullet, in pixels per second", + "name": "Speed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", + "fullName": "Fire bullets toward a position", + "functionType": "Action", + "name": "FireTowardPosition", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::Fire" + }, + "parameters": [ + "Object", + "Behavior", + "XPosition", + "YPosition", + "Bullet", + "Object.AngleToPosition(TargetXPosition, TargetYPosition)", + "Speed", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "X position, where to create the bullet", + "name": "XPosition", + "type": "expression" + }, + { + "description": "Y position, where to create the bullet", + "name": "YPosition", + "type": "expression" + }, + { + "description": "The bullet object", + "name": "Bullet", + "type": "objectListOrEmptyIfJustDeclared" + }, + { + "description": "Target X position", + "name": "TargetXPosition", + "type": "expression" + }, + { + "description": "Target Y position", + "name": "TargetYPosition", + "type": "expression" + }, + { + "description": "Speed of the bullet, in pixels per second", + "name": "Speed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", + "fullName": "Fire bullets toward an angle", + "functionType": "Action", + "name": "Fire", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::IsReadyToShoot" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetBooleanVariable" + }, + "parameters": [ + "HasJustFired", + "True", + "" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "BulletQuantity", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::FireSingleBullet" + }, + "parameters": [ + "Object", + "Behavior", + "XPosition", + "YPosition", + "Bullet", + "Angle", + "Speed", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "BulletQuantity", + ">", + "1" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "BulletQuantity", + "conditions": [], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::FiringArc" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "360", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "MultiShotAngle", + "=", + "Angle + lerp(-FiringArc / 2, FiringArc / 2, BulletIndex / (BulletQuantity - 1)) " + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "When firing in a full circle, prevent first and last bullet from using the same angle" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::FiringArc" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "360", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "MultiShotAngle", + "=", + "Angle + lerp(-FiringArc / 2, FiringArc / 2, BulletIndex / BulletQuantity) " + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::FireSingleBullet" + }, + "parameters": [ + "Object", + "Behavior", + "XPosition", + "YPosition", + "Bullet", + "MultiShotAngle", + "Speed", + "" + ] + }, + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "BulletIndex", + "+", + "1" + ] + } + ] + } + ] + } + ], + "variables": [ + { + "folded": true, + "name": "MultiShotAngle", + "type": "number", + "value": 0 + }, + { + "name": "BulletIndex", + "type": "number", + "value": 0 + } + ] + } + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "X position, where to create the bullet", + "name": "XPosition", + "type": "expression" + }, + { + "description": "Y position, where to create the bullet", + "name": "YPosition", + "type": "expression" + }, + { + "description": "The bullet object", + "name": "Bullet", + "type": "objectListOrEmptyIfJustDeclared" + }, + { + "description": "Angle of the bullet, in degrees", + "name": "Angle", + "type": "expression" + }, + { + "description": "Speed of the bullet, in pixels per second", + "name": "Speed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Fire a single bullet. This is only meant to be used inside the \"Fire bullet\" action.", + "fullName": "Fire a single bullet", + "functionType": "Action", + "group": "Firing", + "name": "FireSingleBullet", + "private": true, + "sentence": "Fire a single bullet _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, with angle _PARAM5_ and speed _PARAM6_ px/s", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Fire a single bullet", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Create bullet" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Bullet", + "XPosition", + "YPosition", + "BulletLayer" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move bullet (apply angle and bullet speed variances)" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "RandomizedAngle", + "=", + "Angle + RandomInRange(-AngleVariance, AngleVariance)" + ] + }, + { + "type": { + "value": "AddForceAL" + }, + "parameters": [ + "Bullet", + "RandomizedAngle", + "Speed + RandomInRange(-BulletSpeedVariance, BulletSpeedVariance)", + "1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Rotate newly created bullet, if needed" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BooleanVariable" + }, + "parameters": [ + "RotateBullet", + "True", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Bullet", + "=", + "RandomizedAngle" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Update statistics" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "TotalBulletsCreated", + "+", + "1" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "X position, where to create the bullet", + "name": "XPosition", + "type": "expression" + }, + { + "description": "Y position, where to create the bullet", + "name": "YPosition", + "type": "expression" + }, + { + "description": "The bullet object", + "name": "Bullet", + "type": "objectListOrEmptyIfJustDeclared" + }, + { + "description": "Angle of the bullet, in degrees", + "name": "Angle", + "type": "expression" + }, + { + "description": "Speed of the bullet, in pixels per second", + "name": "Speed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Reload ammo.", + "fullName": "Reload ammo", + "functionType": "Action", + "name": "ReloadAmmo", + "sentence": "Reload ammo on _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsOutOfAmmo" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetBooleanVariable" + }, + "parameters": [ + "ReloadInProgress", + "True", + "" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__FireBullet.ReloadingTimer\"" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the object has just fired something.", + "fullName": "Has just fired", + "functionType": "Condition", + "group": "Firing", + "name": "HasJustFired", + "sentence": "_PARAM0_ has just fired", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BooleanVariable" + }, + "parameters": [ + "HasJustFired", + "True", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if bullet rotates to match trajectory.", + "fullName": "Is bullet rotation enabled", + "functionType": "Condition", + "group": "Firing", + "name": "BulletRotationEnabled", + "sentence": "Bullet rotation enabled on _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BooleanVariable" + }, + "parameters": [ + "RotateBullet", + "True", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the firing arc (in degrees) where bullets are shot. Bullets are evenly spaced out inside the firing arc.", + "fullName": "Firing arc", + "functionType": "ExpressionAndCondition", + "group": "Multi-Fire", + "name": "FiringArc", + "sentence": "the firing arc", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "FiringArc" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "FiringArc", + "name": "SetFiringArcOp", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "FiringArc", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Firing arc (degrees) Range: 0 to 360", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the firing arc (in degrees) where bullets will be shot. Bullets will be evenly spaced out inside the firing arc.", + "fullName": "Set firing arc (deprecated)", + "functionType": "Action", + "group": "Multi-Fire", + "name": "SetFiringArc", + "private": true, + "sentence": "Set firing arc of _PARAM0_ to _PARAM2_ degrees", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetFiringArcOp" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Firing arc (degrees) Range: 0 to 360", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the angle variance (in degrees) applied to each bullet.", + "fullName": "Angle variance", + "functionType": "ExpressionAndCondition", + "group": "Firing variance", + "name": "AngleVariance", + "sentence": "the angle variance", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "AngleVariance" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "AngleVariance", + "name": "SetAngleVarianceOp", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "AngleVariance", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Angle variance (degrees) Range: 0 to 180", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the angle variance (in degrees) applied to each bullet.", + "fullName": "Set angle variance (deprecated)", + "functionType": "Action", + "group": "Firing", + "name": "SetAngleVariance", + "private": true, + "sentence": "Set angle variance of _PARAM0_ to _PARAM2_ degrees", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetAngleVarianceOp" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Angle variance (degrees) Range: 0 to 180", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the bullet speed variance (pixels per second) applied to each bullet.", + "fullName": "Bullet speed variance", + "functionType": "ExpressionAndCondition", + "group": "Firing variance", + "name": "BulletSpeedVariance", + "sentence": "the bullet speed variance", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "BulletSpeedVariance" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "BulletSpeedVariance", + "name": "SetBulletSpeedVarianceOp", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "BulletSpeedVariance", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Angle variance (degrees) Range: 0 to 180", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the speed variance (pixels per second) applied to each bullet.", + "fullName": "Set bullet speed variance (deprecated)", + "functionType": "Action", + "group": "Multi-Fire", + "name": "SetBulletSpeedVariance", + "private": true, + "sentence": "Set bullet speed variance of _PARAM0_ to _PARAM2_ pixels per second", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetBulletSpeedVarianceOp" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Angle variance (degrees) Range: 0 to 180", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the number of bullets shot every time the \"fire bullet\" action is used.", + "fullName": "Bullets per shot", + "functionType": "ExpressionAndCondition", + "group": "Multi-Fire", + "name": "BulletQuantity", + "sentence": "the number of bullets per shot", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "BulletQuantity" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "BulletQuantity", + "name": "SetBulletQuantityOp", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "BulletQuantity", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Bullets", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the number of bullets shot every time the \"fire bullet\" action is used.", + "fullName": "Set number of bullets per shot (deprecated)", + "functionType": "Action", + "group": "Multi-Fire", + "name": "SetBulletQuantity", + "private": true, + "sentence": "Set number of bullets per shot of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetBulletQuantityOp" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Bullets", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the layer that bullets are created on.", + "fullName": "Set bullet layer", + "functionType": "Action", + "group": "Firing", + "name": "SetBulletLayer", + "sentence": "Set the layer used to create bullets fired by _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetStringVariable" + }, + "parameters": [ + "BulletLayer", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Layer", + "name": "Value", + "type": "layer" + } + ], + "objectGroups": [] + }, + { + "description": "Enable bullet rotation.", + "fullName": "Enable (or disable) bullet rotation", + "functionType": "Action", + "group": "Firing", + "name": "SetRotateBullet", + "sentence": "Enable bullet rotation on _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "BooleanVariable" + }, + "parameters": [ + "Value", + "True", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetBooleanVariable" + }, + "parameters": [ + "RotateBullet", + "False", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BooleanVariable" + }, + "parameters": [ + "Value", + "True", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetBooleanVariable" + }, + "parameters": [ + "RotateBullet", + "True", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "defaultValue": "yes", + "description": "Rotate bullet to match trajetory", + "name": "Value", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Enable unlimited ammo.", + "fullName": "Enable (or disable) unlimited ammo", + "functionType": "Action", + "group": "Ammo", + "name": "SetUnlimitedAmmo", + "sentence": "Enable unlimited ammo on _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "BooleanVariable" + }, + "parameters": [ + "Value", + "True", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetBooleanVariable" + }, + "parameters": [ + "UnlimitedAmmo", + "False", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BooleanVariable" + }, + "parameters": [ + "Value", + "True", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetBooleanVariable" + }, + "parameters": [ + "UnlimitedAmmo", + "True", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "defaultValue": "yes", + "description": "Unlimited ammo", + "name": "Value", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "the firing cooldown (in seconds) also known as rate of fire.", + "fullName": "Firing cooldown", + "functionType": "ExpressionAndCondition", + "group": "Firing", + "name": "Cooldown", + "sentence": "the firing cooldown", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "FireCooldown" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "Cooldown", + "name": "SetCooldownOp", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "FireCooldown", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Cooldown in seconds", + "name": "NewCooldown", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the firing cooldown, which changes the rate of fire.", + "fullName": "Set firing cooldown (deprecated)", + "functionType": "Action", + "group": "Firing", + "name": "SetCooldown", + "private": true, + "sentence": "Set the fire rate of _PARAM0_ to _PARAM2_ seconds", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetCooldownOp" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Cooldown in seconds", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the reload duration (in seconds).", + "fullName": "Reload duration", + "functionType": "ExpressionAndCondition", + "group": "Reload", + "name": "ReloadDuration", + "sentence": "the reload duration", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "ReloadDuration" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "ReloadDuration", + "name": "SetReloadDurationOp", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "ReloadDuration", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Reload duration (seconds)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the duration to reload ammo.", + "fullName": "Set reload duration (deprecated)", + "functionType": "Action", + "group": "Reload", + "name": "SetReloadDuration", + "private": true, + "sentence": "Set the reload duration of _PARAM0_ to _PARAM2_ seconds", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetReloadDurationOp" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Reload duration (seconds)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the overheat duration (in seconds). When an object is overheated, it can't fire for this duration.", + "fullName": "Overheat duration", + "functionType": "ExpressionAndCondition", + "group": "Overheat", + "name": "OverheatDuration", + "sentence": "the overheat duration", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "OverheatDuration" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "OverheatDuration", + "name": "SetOverheatDurationOp", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "OverheatDuration", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Overheat duration (seconds)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the duration after becoming overheated.", + "fullName": "Set overheat duration (deprecated)", + "functionType": "Action", + "group": "Overheat", + "name": "SetOverheatDuration", + "private": true, + "sentence": "Set the overheat duration of _PARAM0_ to _PARAM2_ seconds", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetOverheatDurationOp" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Overheat duration (seconds)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the ammo quantity.", + "fullName": "Ammo quantity", + "functionType": "ExpressionAndCondition", + "group": "Ammo", + "name": "AmmoQuantity", + "sentence": "the ammo quantity", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "AmmoQuantity" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "AmmoQuantity", + "name": "SetAmmoQuantityOp", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "AmmoQuantity", + "=", + "max(0, Value)" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Ammo", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the quantity of ammo.", + "fullName": "Set ammo quantity (deprecated)", + "functionType": "Action", + "group": "Ammo", + "name": "SetAmmoQuantity", + "private": true, + "sentence": "Set the ammo quantity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetAmmoQuantityOp" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0, Value)", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Ammo", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the heat increase per shot.", + "fullName": "Heat increase per shot", + "functionType": "ExpressionAndCondition", + "group": "Overheat", + "name": "HeatIncreasePerShot", + "sentence": "the heat increase per shot", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "HeatIncreasePerShot" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "HeatIncreasePerShot", + "name": "SetHeatPerShotOp", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "HeatIncreasePerShot", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Heat increase per shot (Range: 0 to 1)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the heat increase per shot.", + "fullName": "Set heat increase per shot (deprecated)", + "functionType": "Action", + "group": "Overheat", + "name": "SetHeatPerShot", + "private": true, + "sentence": "Set the heat increase of _PARAM0_ to _PARAM2_ per shot", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetHeatPerShotOp" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Heat increase per shot (Range: 0 to 1)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the max ammo.", + "fullName": "Max ammo", + "functionType": "ExpressionAndCondition", + "group": "Ammo", + "name": "MaxAmmo", + "sentence": "the max ammo", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "MaxAmmo" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "MaxAmmo", + "name": "SetMaxAmmoOp", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "MaxAmmo", + "=", + "Value" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "NumberVariable" + }, + "parameters": [ + "MaxAmmo", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "AmmoQuantity", + "=", + "min(MaxAmmo, AmmoQuantity)" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Max ammo", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the max ammo.", + "fullName": "Set max ammo (deprecated)", + "functionType": "Action", + "group": "Ammo", + "name": "SetMaxAmmo", + "private": true, + "sentence": "Set the max ammo of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetMaxAmmoOp" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Max ammo", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Reset total shots fired.", + "fullName": "Reset total shots fired", + "functionType": "Action", + "group": "Stats", + "name": "ResetTotalShotsFired", + "sentence": "Reset total shots fired by _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "TotalShotsFired", + "=", + "0" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Reset total bullets created.", + "fullName": "Reset total bullets created", + "functionType": "Action", + "group": "Stats", + "name": "ResetTotalBulletsCreated", + "sentence": "Reset total bullets created by _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "TotalBulletsCreated", + "=", + "0" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Reset total reloads completed.", + "fullName": "Reset total reloads completed", + "functionType": "Action", + "group": "Stats", + "name": "ResetTotalReloadsCompleted", + "sentence": "Reset total reloads completed by _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "TotalReloadsCompleted", + "=", + "0" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the number of shots per reload.", + "fullName": "Shots per reload", + "functionType": "ExpressionAndCondition", + "group": "Reload", + "name": "ShotsPerReload", + "sentence": "the shots per reload", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "ShotsPerReload" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "ShotsPerReload", + "name": "SetShotsPerReloadOp", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "ShotsPerReload", + "=", + "Value" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "NumberVariable" + }, + "parameters": [ + "ShotsBeforeNextReload", + ">", + "ShotsPerReload" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "ShotsBeforeNextReload", + "=", + "ShotsPerReload" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Shots per reload", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the number of shots per reload.", + "fullName": "Set shots per reload (deprecated)", + "functionType": "Action", + "group": "Reload", + "name": "SetShotsPerReload", + "private": true, + "sentence": "Set the shots per reload of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetShotsPerReloadOp" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Shots per reload", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Enable (or disable) automatic reloading.", + "fullName": "Enable (or disable) automatic reloading", + "functionType": "Action", + "group": "Reload", + "name": "SetAutomaticReload", + "sentence": "Enable automatic reloading on _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetBooleanVariable" + }, + "parameters": [ + "AutomaticReloading", + "False", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BooleanVariable" + }, + "parameters": [ + "Value", + "True", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetBooleanVariable" + }, + "parameters": [ + "AutomaticReloading", + "True", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "defaultValue": "yes", + "description": "Enable automatic reloading", + "name": "Value", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "the linear cooling rate (per second).", + "fullName": "Linear cooling rate", + "functionType": "ExpressionAndCondition", + "group": "Overheat", + "name": "LinearCoolingRate", + "sentence": "the linear cooling rate", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "LinearCoolingRate" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "LinearCoolingRate", + "name": "SetLinearCoolingRateOp", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "LinearCoolingRate", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Heat cooling rate (per second)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the linear rate of cooling.", + "fullName": "Set linear cooling rate (deprecated)", + "functionType": "Action", + "group": "Overheat", + "name": "SetLinearCoolingRate", + "private": true, + "sentence": "Set the linear cooling rate of _PARAM0_ to _PARAM2_ per second", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetLinearCoolingRateOp" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Heat cooling rate (per second)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the exponential cooling rate, per second.", + "fullName": "Exponential cooling rate", + "functionType": "ExpressionAndCondition", + "group": "Overheat", + "name": "ExponentialCoolingRate", + "sentence": "the exponential cooling rate", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "ExponentialCoolingRate" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "ExponentialCoolingRate", + "name": "SetExponentialCoolingRateOp", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "ExponentialCoolingRate", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Exponential cooling rate", + "name": "Value", + "supplementaryInformation": "[\"Exponential\",\"Linear\"]", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the exponential rate of cooling.", + "fullName": "Set exponential cooling rate (deprecated)", + "functionType": "Action", + "group": "Overheat", + "name": "SetExponentialCoolingRate", + "private": true, + "sentence": "Set the exponential cooling rate of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetExponentialCoolingRateOp" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Exponential cooling rate", + "name": "Value", + "supplementaryInformation": "[\"Exponential\",\"Linear\"]", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Increase ammo quantity.", + "fullName": "Increase ammo", + "functionType": "Action", + "name": "IncreaseAmmo", + "sentence": "Increase ammo of _PARAM0_ by _PARAM2_ shots", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "AmmoQuantity", + "+", + "AmmoGained" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "If Max Ammo is set, do not exceed the value" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "NumberVariable" + }, + "parameters": [ + "MaxAmmo", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "AmmoQuantity", + "=", + "min(MaxAmmo, AmmoQuantity)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::IsReloadNeeded" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "BooleanVariable" + }, + "parameters": [ + "AutomaticReloading", + "True", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::ReloadAmmo" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Ammo gained", + "name": "AmmoGained", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Layer that bullets are created on.", + "fullName": "Bullet layer", + "functionType": "StringExpression", + "group": "Multi-Fire", + "name": "BulletLayer", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "BulletLayer" + ] + } + ] + } + ], + "expressionType": { + "type": "layer" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the heat level (range: 0 to 1).", + "fullName": "Heat level", + "functionType": "ExpressionAndCondition", + "group": "Overheat", + "name": "HeatLevel", + "sentence": "the heat level", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "min(1, HeatLevel)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Total shots fired (multi-bullet shots are considered one shot).", + "fullName": "Shots fired", + "functionType": "Expression", + "group": "Stats", + "name": "TotalShotsFired", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "TotalShotsFired" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Total bullets created.", + "fullName": "Bullets created", + "functionType": "Expression", + "group": "Stats", + "name": "TotalBulletsCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "TotalBulletsCreated" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Reloads completed.", + "fullName": "Reloads completed", + "functionType": "Expression", + "group": "Stats", + "name": "TotalReloadsCompleted", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "TotalReloadsCompleted" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the remaining shots before the next reload is required.", + "fullName": "Shots before next reload", + "functionType": "ExpressionAndCondition", + "group": "Reload", + "name": "ShotsBeforeNextReload", + "sentence": "the remaining shots (before the next reload)", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "ShotsBeforeNextReload" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the remaining duration before the cooldown will permit a bullet to be fired, in seconds.", + "fullName": "Duration before cooldown end", + "functionType": "ExpressionAndCondition", + "group": "Firing", + "name": "CooldownTimeLeft", + "sentence": "the remaining duration before the cooldown end", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "max(0, FireCooldown - Object.ObjectTimerElapsedTime(\"__FireBullet.FiringCooldown\"))" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the remaining duration before the overheat penalty ends, in seconds.", + "fullName": "Duration before overheat end", + "functionType": "ExpressionAndCondition", + "group": "Overheat", + "name": "OverheatTimeLeft", + "sentence": "the remaining duration before the overheat end", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__FireBullet.OverheatDuration\"", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "max(0, OverheatDuration - Object.ObjectTimerElapsedTime(\"__FireBullet.OverheatDuration\"))" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the remaining duration before the reload finishes, in seconds.", + "fullName": "Duration before the reload finishes", + "functionType": "ExpressionAndCondition", + "group": "Reload", + "name": "ReloadTimeLeft", + "sentence": "the remaining duration before the reload finishes", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__FireBullet.ReloadingTimer\"", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "max(0, ReloadDuration - Object.ObjectTimerElapsedTime(\"__FireBullet.ReloadingTimer\"))" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if object is currently performing an ammo reload.", + "fullName": "Is ammo reloading in progress", + "functionType": "Condition", + "group": "Reload", + "name": "IsReloadInProgress", + "sentence": "_PARAM0_ is reloading ammo", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BooleanVariable" + }, + "parameters": [ + "ReloadInProgress", + "True", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if object is ready to shoot.", + "fullName": "Is ready to shoot", + "functionType": "Condition", + "group": "Firing", + "name": "IsReadyToShoot", + "sentence": "_PARAM0_ is ready to shoot", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "BooleanVariable" + }, + "parameters": [ + "HasJustFired", + "True", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::And" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "BehaviorActivated" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsOutOfAmmo" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsReloadNeeded" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsReloadInProgress" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsFiringCooldownActive" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsOverheated" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } ] } ], "actions": [ { "type": { - "value": "Create" - }, - "parameters": [ - "", - "Bullet", - "GetArgumentAsNumber(\"XPosition\")", - "GetArgumentAsNumber(\"YPosition\")", - "\"\"" - ] - }, - { - "type": { - "value": "AddForceVersPos" - }, - "parameters": [ - "Bullet", - "GetArgumentAsNumber(\"TargetXPosition\")", - "GetArgumentAsNumber(\"TargetYPosition\")", - "GetArgumentAsNumber(\"Speed\")", - "1" - ] - }, - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyHasJustFired" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - }, - { - "type": { - "value": "RotateTowardPosition" + "value": "SetReturnBoolean" }, "parameters": [ - "Bullet", - "GetArgumentAsNumber(\"TargetXPosition\")", - "GetArgumentAsNumber(\"TargetYPosition\")", - "0", - "" + "True" ] } ] @@ -11110,103 +15290,53 @@ "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" - }, - { - "description": "X position, where to create the bullet", - "name": "XPosition", - "type": "expression" - }, - { - "description": "Y position, where to create the bullet", - "name": "YPosition", - "type": "expression" - }, - { - "description": "The bullet object", - "name": "Bullet", - "type": "objectList" - }, - { - "description": "Target X position", - "name": "TargetXPosition", - "type": "expression" - }, - { - "description": "Target Y position", - "name": "TargetYPosition", - "type": "expression" - }, - { - "description": "Speed of the bullet, in pixels per second", - "name": "Speed", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Fire a bullet.", - "fullName": "Fire a bullet", - "functionType": "Action", - "name": "Fire", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_;_PARAM3_, with angle _PARAM5_ and speed _PARAM6_ px/s", + "description": "Check if automatic reloading is enabled.", + "fullName": "Is automatic reloading enabled", + "functionType": "Condition", + "group": "Reload", + "name": "IsAutomaticReloadingEnabled", + "sentence": "Automatic reloading is enabled on_PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ObjectTimer" - }, - "parameters": [ - "Object", - "\"FireCooldown\"", - "Object.Behavior::PropertyFireCooldown()" - ] - } - ], + "conditions": [], "actions": [ { "type": { - "value": "Create" - }, - "parameters": [ - "", - "Bullet", - "GetArgumentAsNumber(\"XPosition\")", - "GetArgumentAsNumber(\"YPosition\")", - "\"\"" - ] - }, - { - "type": { - "value": "AddForceAL" + "value": "SetReturnBoolean" }, "parameters": [ - "Bullet", - "GetArgumentAsNumber(\"Angle\")", - "GetArgumentAsNumber(\"Speed\")", - "1" + "False" ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyHasJustFired" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior", - "yes" + "AutomaticReloading", + "True", + "" ] - }, + } + ], + "actions": [ { "type": { - "value": "SetAngle" + "value": "SetReturnBoolean" }, "parameters": [ - "Bullet", - "=", - "GetArgumentAsNumber(\"Angle\")" + "True" ] } ] @@ -11223,41 +15353,17 @@ "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" - }, - { - "description": "X position, where to create the bullet", - "name": "XPosition", - "type": "expression" - }, - { - "description": "Y position, where to create the bullet", - "name": "YPosition", - "type": "expression" - }, - { - "description": "The bullet object", - "name": "Bullet", - "type": "objectList" - }, - { - "description": "Angle of the bullet, in degrees", - "name": "Angle", - "type": "expression" - }, - { - "description": "Speed of the bullet, in pixels per second", - "name": "Speed", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Check if the object has just fired something.", - "fullName": "Has just fired", + "description": "Check if ammo is unlimited.", + "fullName": "Is ammo unlimited", "functionType": "Condition", - "name": "HasJustFired", - "sentence": "_PARAM0_ has just fired", + "group": "Ammo", + "name": "IsUnlimitedAmmo", + "sentence": "_PARAM0_ has unlimited ammo", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -11278,11 +15384,12 @@ "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHasJustFired" + "value": "BooleanVariable" }, "parameters": [ - "Object", - "Behavior" + "UnlimitedAmmo", + "True", + "" ] } ], @@ -11314,10 +15421,12 @@ "objectGroups": [] }, { - "fullName": "", - "functionType": "Action", - "name": "doStepPreEvents", - "sentence": "", + "description": "Check if object has no ammo available.", + "fullName": "Is out of ammo", + "functionType": "Condition", + "group": "Ammo", + "name": "IsOutOfAmmo", + "sentence": "_PARAM0_ is out of ammo", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -11325,12 +15434,46 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyHasJustFired" + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsUnlimitedAmmo" }, "parameters": [ "Object", "Behavior", - "=" + "" + ] + }, + { + "type": { + "value": "NumberVariable" + }, + "parameters": [ + "AmmoQuantity", + "<=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" ] } ] @@ -11352,10 +15495,12 @@ "objectGroups": [] }, { - "fullName": "", - "functionType": "Action", - "name": "onCreated", - "sentence": "", + "description": "Check if object needs to reload ammo.", + "fullName": "Is a reload needed", + "functionType": "Condition", + "group": "Reload", + "name": "IsReloadNeeded", + "sentence": "_PARAM0_ needs to reload ammo", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -11363,11 +15508,57 @@ "actions": [ { "type": { - "value": "ResetObjectTimer" + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Shots per reload must not be \"0\"" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "NumberVariable" + }, + "parameters": [ + "ShotsPerReload", + ">", + "0" + ] + }, + { + "type": { + "value": "NumberVariable" + }, + "parameters": [ + "ShotsBeforeNextReload", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" }, "parameters": [ - "Object", - "\"FireCooldown\"" + "True" ] } ] @@ -11389,32 +15580,66 @@ "objectGroups": [] }, { - "fullName": "", - "functionType": "Action", - "name": "doStepPostEvents", - "sentence": "", + "description": "Check if object is overheated.", + "fullName": "Is overheated", + "functionType": "Condition", + "group": "Overheat", + "name": "IsOverheated", + "sentence": "_PARAM0_ is overheated", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "conditions": [], + "actions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHasJustFired" + "value": "SetReturnBoolean" }, "parameters": [ - "Object", - "Behavior" + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "NumberVariable" + }, + "parameters": [ + "HeatLevel", + ">=", + "1" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::OverheatTimeLeft()", + ">", + "0" + ] + } ] } ], "actions": [ { "type": { - "value": "ResetObjectTimer" + "value": "SetReturnBoolean" }, "parameters": [ - "Object", - "\"FireCooldown\"" + "True" ] } ] @@ -11436,11 +15661,12 @@ "objectGroups": [] }, { - "description": "Change the cooldown of the fire rate.", - "fullName": "Set cooldown", - "functionType": "Action", - "name": "SetCooldown", - "sentence": "Set the fire rate of _PARAM0_ to _PARAM2_ seconds", + "description": "Check if firing cooldown is active.", + "fullName": "Is firing cooldown active", + "functionType": "Condition", + "group": "Firing", + "name": "IsFiringCooldownActive", + "sentence": "Firing cooldown is active on _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -11448,63 +15674,40 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyFireCooldown" + "value": "SetReturnBoolean" }, "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"NewCooldown\")" + "False" ] } ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" }, - { - "description": "Cooldown in seconds", - "name": "NewCooldown", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Cooldown of the fire rate in seconds.", - "fullName": "Cooldown", - "functionType": "Expression", - "name": "Cooldown", - "sentence": "", - "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::CooldownTimeLeft()", + ">", + "0" + ] + } + ], "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "SetReturnBoolean" }, "parameters": [ - "Object.Behavior::PropertyFireCooldown()" + "True" ] } ] } ], - "expressionType": { - "type": "expression" - }, "parameters": [ { "description": "Object", @@ -11525,11 +15728,11 @@ { "value": "0.1", "type": "Number", - "label": "Cooldown, in seconds, before firing again", - "description": "", + "unit": "Second", + "label": "Firing cooldown", + "description": "Objects cannot shoot while firing cooldown is active.", "group": "", "extraInformation": [], - "hidden": false, "name": "FireCooldown" }, { @@ -11541,6 +15744,251 @@ "extraInformation": [], "hidden": true, "name": "HasJustFired" + }, + { + "value": "true", + "type": "Boolean", + "label": "Rotate bullets to match their trajectory", + "description": "", + "group": "", + "extraInformation": [], + "name": "RotateBullet" + }, + { + "value": "45", + "type": "Number", + "unit": "DegreeAngle", + "label": "Firing arc", + "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", + "group": "Multi-Fire", + "extraInformation": [], + "name": "FiringArc" + }, + { + "value": "1", + "type": "Number", + "label": "Number of bullets created at once", + "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", + "group": "Multi-Fire", + "extraInformation": [], + "name": "BulletQuantity" + }, + { + "value": "0", + "type": "Number", + "unit": "DegreeAngle", + "label": "Angle variance", + "description": "Make imperfect aim (between 0 and 180 degrees).", + "group": "Firing variance", + "extraInformation": [], + "advanced": true, + "name": "AngleVariance" + }, + { + "value": "0", + "type": "Number", + "unit": "PixelSpeed", + "label": "Bullet speed variance", + "description": "Bullet speed will be adjusted by a random value within this range.", + "group": "Firing variance", + "extraInformation": [], + "advanced": true, + "name": "BulletSpeedVariance" + }, + { + "value": "0", + "type": "Number", + "label": "Ammo quantity (current)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "AmmoQuantity" + }, + { + "value": "0", + "type": "Number", + "label": "Shots per reload ", + "description": "Use 0 to disable reloading.", + "group": "Reload", + "extraInformation": [], + "advanced": true, + "name": "ShotsPerReload" + }, + { + "value": "1", + "type": "Number", + "unit": "Second", + "label": "Reloading duration", + "description": "Objects cannot shoot while reloading is in progress.", + "group": "Reload", + "extraInformation": [], + "advanced": true, + "name": "ReloadDuration" + }, + { + "value": "0", + "type": "Number", + "label": "Max ammo ", + "description": "", + "group": "Ammo", + "extraInformation": [], + "advanced": true, + "name": "MaxAmmo" + }, + { + "value": "0", + "type": "Number", + "label": "Shots before next reload", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ShotsBeforeNextReload" + }, + { + "value": "0", + "type": "Number", + "label": "Total shots fired", + "description": "Regardless of how many bullets are created, only 1 shot will be counted per frame", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TotalShotsFired" + }, + { + "value": "0", + "type": "Number", + "label": "Total bullets created", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TotalBulletsCreated" + }, + { + "value": "0", + "type": "Number", + "label": "Starting ammo", + "description": "", + "group": "Ammo", + "extraInformation": [], + "advanced": true, + "name": "StartingAmmo" + }, + { + "value": "0", + "type": "Number", + "label": "Total reloads completed", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TotalReloadsCompleted" + }, + { + "value": "true", + "type": "Boolean", + "label": "Unlimited ammo", + "description": "", + "group": "Ammo", + "extraInformation": [], + "advanced": true, + "name": "UnlimitedAmmo" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ReloadInProgress" + }, + { + "value": "0", + "type": "Number", + "label": "Heat increase per shot (between 0 and 1)", + "description": " Object is overheated when Heat reaches 1.", + "group": "Overheat", + "extraInformation": [], + "advanced": true, + "name": "HeatIncreasePerShot" + }, + { + "value": "0", + "type": "Number", + "label": "Heat level (Range: 0 to 1)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "HeatLevel" + }, + { + "value": "true", + "type": "Boolean", + "label": "Reload automatically", + "description": "", + "group": "Reload", + "extraInformation": [], + "advanced": true, + "name": "AutomaticReloading" + }, + { + "value": "0", + "type": "Number", + "unit": "Second", + "label": "Overheat duration", + "description": "Object cannot shoot while overheat duration is active.", + "group": "Overheat", + "extraInformation": [], + "advanced": true, + "name": "OverheatDuration" + }, + { + "value": "0.1", + "type": "Number", + "label": "Linear cooling rate (per second)", + "description": "", + "group": "Overheat", + "extraInformation": [], + "advanced": true, + "name": "LinearCoolingRate" + }, + { + "value": "0.3", + "type": "Number", + "label": "Exponential cooling rate (per second)", + "description": "Happens faster when heat is high and slower when heat is low.", + "group": "Overheat", + "extraInformation": [ + "Linear", + "Exponential" + ], + "advanced": true, + "name": "ExponentialCoolingRate" + }, + { + "value": "", + "type": "String", + "label": "Layer the bullets are created on", + "description": "Base layer by default.", + "group": "Shooting configuration", + "extraInformation": [], + "hidden": true, + "name": "BulletLayer" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "RandomizedAngle" } ], "sharedPropertyDescriptors": [] diff --git a/examples/wave-defense-shooter/wave-defense-shooter.json b/examples/wave-defense-shooter/wave-defense-shooter.json index 751a420cf..f63eb2789 100644 --- a/examples/wave-defense-shooter/wave-defense-shooter.json +++ b/examples/wave-defense-shooter/wave-defense-shooter.json @@ -47540,14 +47540,14 @@ "author": "@4ian", "category": "Game mechanic", "extensionNamespace": "", - "fullName": "Fire bullets", "gdevelopVersion": ">=5.5.222", + "fullName": "Fire bullets", "helpPath": "/extensions/fire-bullet/details", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", "name": "FireBullet", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", "shortDescription": "Fire bullets, manage ammo, reloading and overheating.", - "version": "0.9.1", + "version": "0.9.2", "description": [ "This extension allows objects to fire bullets. To use it, add the behavior to the object that will shoot, then use the provided action to launch another object as the bullet.", "", @@ -47557,6 +47557,9 @@ "- Ammo management", "- Overheat", "", + "The speed can be specified when using the actions to fire the bullets.", + "The bullets are automatically given a permanent force to make them move in the 2D plane (no need to use a linear movement or move them with another behavior).", + "", "It can be used for:", "- Twin-stick shooters ([open the project online](https://editor.gdevelop.io/?project=example://conviction-of-gun-dude-desktop))", "- Shoot'em up ([open the project online](https://editor.gdevelop.io/?project=example://space-shooter))", @@ -47590,7 +47593,7 @@ "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "Fire bullets, manage ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior action in your events to fire another object as a bullet.", + "description": "Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).", "fullName": "Fire bullets", "name": "FireBullet", "objectType": "", @@ -48164,11 +48167,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward an object.", + "description": "Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an object", "functionType": "Action", "name": "FireTowardObject", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -48233,11 +48236,11 @@ "objectGroups": [] }, { - "description": "Fire bullets toward a position.", + "description": "Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward a position", "functionType": "Action", "name": "FireTowardPosition", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -48307,11 +48310,11 @@ "objectGroups": [] }, { - "description": "Fire bullets in the direction of a given angle.", + "description": "Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.", "fullName": "Fire bullets toward an angle", "functionType": "Action", "name": "Fire", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", + "sentence": "Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -52272,12 +52275,17 @@ "unit": "Second", "label": "Firing cooldown", "description": "Objects cannot shoot while firing cooldown is active.", + "group": "", + "extraInformation": [], "name": "FireCooldown" }, { "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HasJustFired" }, @@ -52285,6 +52293,9 @@ "value": "true", "type": "Boolean", "label": "Rotate bullets to match their trajectory", + "description": "", + "group": "", + "extraInformation": [], "name": "RotateBullet" }, { @@ -52294,6 +52305,7 @@ "label": "Firing arc", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "FiringArc" }, { @@ -52302,6 +52314,7 @@ "label": "Number of bullets created at once", "description": "Multi-Fire bullets will be evenly spaced inside the firing arc", "group": "Multi-Fire", + "extraInformation": [], "name": "BulletQuantity" }, { @@ -52311,6 +52324,7 @@ "label": "Angle variance", "description": "Make imperfect aim (between 0 and 180 degrees).", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "AngleVariance" }, @@ -52321,6 +52335,7 @@ "label": "Bullet speed variance", "description": "Bullet speed will be adjusted by a random value within this range.", "group": "Firing variance", + "extraInformation": [], "advanced": true, "name": "BulletSpeedVariance" }, @@ -52328,6 +52343,9 @@ "value": "0", "type": "Number", "label": "Ammo quantity (current)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "AmmoQuantity" }, @@ -52337,6 +52355,7 @@ "label": "Shots per reload ", "description": "Use 0 to disable reloading.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ShotsPerReload" }, @@ -52347,6 +52366,7 @@ "label": "Reloading duration", "description": "Objects cannot shoot while reloading is in progress.", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "ReloadDuration" }, @@ -52354,7 +52374,9 @@ "value": "0", "type": "Number", "label": "Max ammo ", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "MaxAmmo" }, @@ -52362,6 +52384,9 @@ "value": "0", "type": "Number", "label": "Shots before next reload", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ShotsBeforeNextReload" }, @@ -52370,6 +52395,8 @@ "type": "Number", "label": "Total shots fired", "description": "Regardless of how many bullets are created, only 1 shot will be counted per frame", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalShotsFired" }, @@ -52377,6 +52404,9 @@ "value": "0", "type": "Number", "label": "Total bullets created", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalBulletsCreated" }, @@ -52384,7 +52414,9 @@ "value": "0", "type": "Number", "label": "Starting ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "StartingAmmo" }, @@ -52392,6 +52424,9 @@ "value": "0", "type": "Number", "label": "Total reloads completed", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "TotalReloadsCompleted" }, @@ -52399,7 +52434,9 @@ "value": "true", "type": "Boolean", "label": "Unlimited ammo", + "description": "", "group": "Ammo", + "extraInformation": [], "advanced": true, "name": "UnlimitedAmmo" }, @@ -52407,6 +52444,9 @@ "value": "", "type": "Boolean", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "ReloadInProgress" }, @@ -52416,6 +52456,7 @@ "label": "Heat increase per shot (between 0 and 1)", "description": " Object is overheated when Heat reaches 1.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "HeatIncreasePerShot" }, @@ -52423,6 +52464,9 @@ "value": "0", "type": "Number", "label": "Heat level (Range: 0 to 1)", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "HeatLevel" }, @@ -52430,7 +52474,9 @@ "value": "true", "type": "Boolean", "label": "Reload automatically", + "description": "", "group": "Reload", + "extraInformation": [], "advanced": true, "name": "AutomaticReloading" }, @@ -52441,6 +52487,7 @@ "label": "Overheat duration", "description": "Object cannot shoot while overheat duration is active.", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "OverheatDuration" }, @@ -52448,7 +52495,9 @@ "value": "0.1", "type": "Number", "label": "Linear cooling rate (per second)", + "description": "", "group": "Overheat", + "extraInformation": [], "advanced": true, "name": "LinearCoolingRate" }, @@ -52462,7 +52511,6 @@ "Linear", "Exponential" ], - "choices": [], "advanced": true, "name": "ExponentialCoolingRate" }, @@ -52472,6 +52520,7 @@ "label": "Layer the bullets are created on", "description": "Base layer by default.", "group": "Shooting configuration", + "extraInformation": [], "hidden": true, "name": "BulletLayer" }, @@ -52479,6 +52528,9 @@ "value": "0", "type": "Number", "label": "", + "description": "", + "group": "", + "extraInformation": [], "hidden": true, "name": "RandomizedAngle" }