{"id":26299811,"url":"https://github.com/lostinmind-dev/lost-c3","last_synced_at":"2025-03-15T07:03:33.278Z","repository":{"id":257890856,"uuid":"873108381","full_name":"lostinmind-dev/lost-c3","owner":"lostinmind-dev","description":"Lost for easy making Construct 3 Addons.","archived":false,"fork":false,"pushed_at":"2025-01-13T10:11:41.000Z","size":5010,"stargazers_count":3,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-13T11:27:09.715Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lostinmind-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-15T16:02:25.000Z","updated_at":"2024-12-21T20:52:29.000Z","dependencies_parsed_at":"2024-10-16T22:41:27.709Z","dependency_job_id":"d80b36ef-3244-4f39-b11f-82b85a59bf74","html_url":"https://github.com/lostinmind-dev/lost-c3","commit_stats":null,"previous_names":["lostinmind-dev/lost-c3"],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lostinmind-dev%2Flost-c3","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lostinmind-dev%2Flost-c3/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lostinmind-dev%2Flost-c3/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lostinmind-dev%2Flost-c3/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lostinmind-dev","download_url":"https://codeload.github.com/lostinmind-dev/lost-c3/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243695541,"owners_count":20332629,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-15T07:01:02.786Z","updated_at":"2025-03-15T07:03:33.262Z","avatar_url":"https://github.com/lostinmind-dev.png","language":"TypeScript","funding_links":[],"categories":["Addon Development"],"sub_categories":["Construct 3"],"readme":"![Lost by lostinmind.](https://raw.githubusercontent.com/lostinmind-dev/lost-c3/refs/heads/master/cover.png)\n\n\u003cdiv align=\"center\"\u003e\n  \u003ch3\u003e\n    Lost for easy making Construct 3 Addons. \u003cbr /\u003e\n    v3.2.3\n  \u003c/h3\u003e\n\u003c/div\u003e\n\n**Lost** is a framework for easy making Construct 3 addons using\n**[Deno (JavaScript runtime)](https://deno.com)** that was created by\nlostinmind.\n\n## Navigation\n\n\u003c!-- - __[Examples](https://github.com/lostinmindd/lost-c3-examples)__ --\u003e\n\n- **[💪 Advantages](#-advantages)**\n- **[🚀 Quickstart](#-quickstart)**\n- **[🔌 Creating ***`Plugin`*** addon](#-creating-plugin-addon)**\n- **[🎛️ Creating ***`Behavior`*** addon](#️-creating-behavior-addon)**\n- **[🏗️ Building addon](#️-building-addon)**\n- **[🧪 Testing addon](#-testing-addons-in-developer-mode)**\n\n# 💪 Advantages\n\nHere I've compiled some of the benefits from standard addon creation for\n**Construct 3**.\n\u003e - ⚡️ **Using the powerful _**JavaScript Runtime**_ [Deno](https://deno.com).**\n\u003e - ❌ **Error detecting before installization of your Addon!**\n\u003e - 📝 **Only _**Typescript**_ and no _**Javascript**_ for your addon**\n\u003e - E **___Typescript___ support for addon scripts!**\n\u003e - 🚀 **Fast compilation to .c3addon format!**\n\u003e - 🧪 **Built-in addon testing using\n\u003e   [Developer Mode in Construct 3](https://www.construct.net/en/make-games/manuals/addon-sdk/guide/using-developer-mode)**.\n\u003e - 📂 **No need to configure separately _**aces.json**_ and _**en-US.json**_\n\u003e   files for addon. All necessary properties for _**aces.json**_ and\n\u003e   _**en-US.json**_ are defined together with the function implementation.**\n\u003e - 🔍 **There is no need to configure addon _.js_ scripts/files. _**Lost**_\n\u003e   automatically detects the addon scripts/files!**\n\u003e - 📜 **Structured categorization of all addon _**Actions, Conditions,\n\u003e   Expressions**_. Categories are separated files like _MyCategory.ts._**\n\u003e - 🚫 **Possibility to mark all _**Actions, Conditions, Expressions**_ in a\n\u003e   category as _Deprecated_ instead of having to configure each _**Action,\n\u003e   Condition, Expression**_ separately.**\n\u003e - ✨ **Additional tools to format the displayed text in Construct 3 itself by\n\u003e   using built-in functions - formatting the text into a specific BBCode tag.**\n\n# 🚀 Quickstart\n\n- **Install [Deno (JavaScript runtime)](https://docs.deno.com/runtime/)**\n- **Install [Lost CLI](https://jsr.io/@lost-c3/lib) by using**\n  `deno install --name lost jsr:@lost-c3/lib/cli --global -f -A`\n- **Create empty folder which will be used as main folder for your addon.**\n\n```bash\ndeno install --name lost jsr:@lost-c3/lib/cli --global -f -A\nlost create\n```\n- **Create a bare-bones project for addon by using one of the following commands:**\n```bash\nlost create --plugin    # Creates a bare-bones project for 'Plugin' addon\n```\n\n```bash\nlost create --drawing-plugin    # Creates a bare-bones project for 'Drawing Plugin' addon\n```\n\n```bash\nlost create --behavior    # Creates a bare-bones project for 'Behavior' addon\n```\n\n\n\n\u003e[!IMPORTANT] Check and install the latest version of Lost CLI!\n\u003e deno install --name lost jsr:@lost-c3/lib@LAST_VERSION/cli --global -f -A\n\n# 📝 Documentation\n\n## 🔌 Creating `Plugin` addon\n```bash\nlost create --plugin    # Creates a bare-bones project for 'plugin' addon\n```\n\n### 🧱 File structure\n```bash\n├── Addon/                      # Addon runtime classes folder\n│   ├── Categories/             # Categories folder\n│   ├── DomSide/                # Addon DOM side scripts folder\n│   ├── Files/                  # Addon files folder\n│   ├── Scripts/                # Addon scripts folder\n│   ├── Modules/                # Addon modules folder\n│   ├── Types/                  # Addon scripts folder\n│       └── global.d.ts         # Declaration file for your purposes\n│   ├── icon.svg                # Your .svg OR .png addon icon\n│   ├── Instance.ts             # Addon runtime Instance class\n│   ├── Plugin.ts               # Addon runtime Plugin class\n│   └── Type.ts                 # Addon runtime Type class\n├── Builds/                     # Builds folder\n│   ├── Source/                 # Final Construct 3 addon folder\n│       └── ...\n│   └── AddonId_Version.c3addon # Final .c3addon file\n├── Editor/                     # Builds folder\n│   ├── Instance.ts             # Editor Instance class\n│   └── Type.ts                 # Editor Type class\n├── deno.json                   # deno.json file for Deno enviroment\n├── addon.ts                    # Main addon file\n├── lost.config.ts              # Addon config file\n```\n\n### ⚙️ Config setup\nLet's setup _`lost.config.ts`_ config file at first.\n\n```typescript\nimport { defineConfig } from \"jsr:@lost-c3/lib\";\n\nexport default defineConfig\u003c'plugin'\u003e({\n    /**\n     * Set addon type\n     */\n    type: 'plugin',\n    /**\n     * Set plugin type\n     */\n    pluginType: 'object' | 'world',\n    /**\n     * Set a boolean of whether the addon is deprecated or not.\n     */\n    deprecated?: false,\n\n    /**\n     * A boolean indicating whether the addon supports Construct's worker mode, where the entire runtime is hosted in a Web Worker instead of the main thread.\n     */\n    supportsWorkerMode?: false,\n    /**\n     * The minimum Construct version required to load your addon, e.g. \"r399\".\n     */\n    minConstructVersion?: 'r416', \n    /**\n     * Pass false to prevent the addon from being bundled via the Bundle addons project property.\n     */\n    canBeBundled?: false,\n    /**\n     * Pass true to set the plugin to be a single-global type.\n     */\n    isSingleGlobal?: true,\n\n    /**\n     * An object name that will applied after plugin was installed/added to project.\n     */\n    objectName: 'LostPluginName',\n\n    addonId: 'Lost_MyAddon',\n    addonName: 'Lost addon for Construct 3',\n    addonDescription: 'Amazing addon made with Lost.',\n    category: 'general',\n    version: '1.0.0.0',\n    author: 'lostinmind.',\n    websiteUrl: `https://addon.com`,\n    docsUrl: `https://docs.addon.com`,\n    helpUrl: {\n        EN: 'https://myaddon.com/help/en'\n    }\n})\n```\n\n### ⚙️ Addon setup\nLet's setup _`addon.ts`_ file at second.\n\n```typescript\nimport { defineAddon, Plugin, Property } from 'jsr:@lost-c3/lib';\nimport type { EditorInstance } from \"@Editor/Instance.ts\";\nimport type { EditorType } from \"@Editor/Type.ts\";\nimport config from \"./lost.config.ts\";\n\nexport default defineAddon(\n    new Plugin\u003cEditorInstance, EditorType\u003e(config)\n        .addFilesToOutput()\n\n        .setRuntimeScripts()\n\n        .addRemoteScripts('https://cdn/index.js')\n\n        /** @Properties  */\n        .addProperty('integer', 'Integer', { type: Property.Integer })\n        .addProperty('float', 'Float', { type: Property.Float })\n        .addProperty('percent', 'Percent', { type: Property.Percent })\n        .addProperty('text', 'Text', { type: Property.Text })\n        .addProperty('longText', 'Long Text', { type: Property.LongText })\n        .addProperty('check', 'Check', { type: Property.Checkbox })\n        .addProperty('font', 'Font', { type: Property.Font })\n        .addProperty('combo', 'Combo', {\n            type: Property.Combo,\n            items: [['item1', 'item2']]\n        })\n        .addProperty('color', 'Color', { type: Property.Color, initialValue: [255, 210, 155] })\n        .createGroup('group', 'Awesome Group')\n            .addProperty('info', 'Info', {\n                type: Property.Info,\n                callback: (inst) =\u003e {\n                    return '';\n                }\n            })\n            .addProperty('link', 'Link', {\n                type: Property.Link,\n                linkText: 'Do ...',\n                callbackType: 'for-each-instance',\n                callback: (inst) =\u003e {\n                    console.log('Link property for each instance');\n                }\n            })\n            .addProperty('link2', 'Link', {\n                type: Property.Link,\n                linkText: 'Do ...',\n                callbackType: 'once-for-type',\n                callback: (type) =\u003e {\n                    console.log('Link property once for type');\n                }\n            })\n)\n```\n\n### 📁 Creating category\nTo create category you should create new **`CategoryName.ts`** file in path:\n`./Addon/Categories` folder. Then you can use code snippet from bare-bones\nproject **`!cc`** to create default Category structure or copy-paste below\nscript.\n\n```typescript\nimport { Category, Action, Condition, Expression, addParam } from \"jsr:@lost-c3/lib\";\nimport type { Instance } from \"../Instance.ts\";\n\n@Category('myCategory', 'Category Name', { isDeprecated: false, inDevelopment: false })\nexport default class {\n    /** @Actions */\n\n    /** @Conditions */\n\n    /** @Expressions */\n}\n```\n\n\u003e[!INFO] *isDeprecated* property in options for category in @Category decorator deprecates all category Actions, Conditions, Expressions.\n\n\u003e[!WARNING] *inDevelopment* property in options for category in @Category decorator removes all category Actions, Conditions, Expressions from addon.\n\n#### ⚡️ Create action\n\nTo create actions for your addon you should use _`@Action`_ method decorator\nin your category class.\n\nExample\n\n```typescript\nimport { Category, Action, Condition, Expression } from 'jsr:@lost-c3/lib';\nimport type { Instance } from '../Instance.ts';\n\n/**\n * Setup your category settings here\n */\n@Category('categoryId', 'Category Name')\nexport default class MyCategory {\n    @Action(\n        /**\n         * A string specifying a unique ID for the ACE.\n         */\n        `doSomething`,\n        /**\n         * The name that appears in the action picker dialog.\n         */\n        `Do something`,\n        /**\n         * The text that appears in the event sheet. \n         * You can use simple BBCode tags like [b] and [i], and use {0}, {1} etc. as parameter placeholders.\n         * For easy BBCode import functions from @lost-c3/lib --\u003e Bold, Italic, Underline, Strikethrough, Code\n         */\n        `Do something`,\n        /**\n         * A description of the action or condition, which appears as a tip at the top of the condition/action picker dialog.\n         */\n        `Awesome description...`,\n        {\n            /**\n             * Set to true to mark the action as asynchronous. \n             */\n            isAsync: false,\n            /**\n             * Set to true to deprecate.\n             */\n            isDeprecated: false,\n            /*\n             * Set to true to highlight.\n             */\n            highlight: true,\n            /**\n             * Setup your parameters here.\n             */\n            params: []\n        }\n    )\n    doSomething() {\n        console.log('Do something');\n    };    \n}\n```\n\n\u003e [!TIP]\n\u003e You can use build-in [BBCode](#-fast-bbcode-features) functions for fast and\n\u003e beautiful development.\n\n#### ❓ Create condition\n\nTo create conditions for your addon you should use _`@Condition`_ method\ndecorator in your category class.\n\nExample\n\n```typescript\nimport { Category, Action, Condition, Expression } from 'jsr:@lost-c3/lib';\nimport type { Instance } from '../Instance.ts';\n\n@Category('categoryId', 'Category Name')\nexport default class {\n    @Condition(\n        `onEvent`,\n        `On event`,\n        `On event`,\n        'Trigger when something done...',\n        {\n            /**\n             * Specifies a trigger condition.\n             */\n            isTrigger: true,\n            /**\n             * Allow the condition to be used in the same branch as a trigger.\n             */\n            isCompatibleWithTriggers: false,\n            /**\n             * Specifies a fake trigger.\n             */\n            isFakeTrigger: false,\n            /**\n             * Allow the condition to be inverted in the event sheet.\n             */\n            isInvertible: false,\n            /**\n             * Display an icon in the event sheet to indicate the condition loops.\n             */\n            isLooping: false,\n            /**\n             * Normally, the condition runtime method is executed once per picked instance.\n             */\n            isStatic: false,\n            isDeprecated: false,\n            highlight: false,\n            params: []\n        }\n    )\n    onEvent(this: Instance) { return true };\n}\n```\n\n\u003e [!TIP]\n\u003e You can use build-in [BBCode](#-fast-bbcode-features) functions for fast and\n\u003e beautiful development.\n\n#### 🧮 Create expression\n\nTo create expressions for your addon you should use _`@Expression`_ decorator in\nyour category class.\n\nExample\n\n```typescript\nimport { Category, Action, Condition, Expression } from 'jsr:@lost-c3/lib';\nimport type { Instance } from '../Instance.ts';\n\n@Category('categoryId', 'Category Name')\nexport default class {\n    @Expression(\n        `getValue`,\n        `GetValue`,\n        `Returns some value`,\n        {\n            /**\n             *  \"number\" OR \"string\" OR \"any\".\n             */\n            returnType: 'string',\n            /**\n             * Allow the user to enter any number of parameters beyond those defined.\n             */\n            isVariadicParameters: false,\n            isDeprecated: false,\n            highlight: false,\n            params: []\n        }\n    )\n    getValue(this: Instance) { return 'value' };\n}\n```\n\n\u003e [!TIP]\n\u003e You can use build-in [BBCode](#-fast-bbcode-features) functions for fast and\n\u003e beautiful development.\n\n#### 🔧 Setting up Action/Condition/Expression parameters\n\nTo setup parameters in your Action/Condition/Expression you should use 'params'\nfield when you creating on of the entity. Also you should use `addParam()` method AND `Param` enum that you can import from library.\n\n**List of available parameter types:**\n\n| Type | Description |\n| ----------- | ----------- |\n| ```\"Number\"``` | **A number parameter.** |\n| ```\"String\"``` | **A string parameter.** |\n| ```\"Any\"``` | **Either a number or a string.** |\n| ```\"Boolean\"``` | **A boolean parameter, displayed as a checkbox.** |\n| ```\"Combo\"``` | **A dropdown list.** |\n| ```\"Cmp\"``` | **A dropdown list with comparison options like \"equal to\", \"less than\" etc.** |\n| ```\"Object\"``` | **An object picker.** |\n| ```\"ObjectName\"``` | **A string parameter which is interpreted as an object name.** |\n| ```\"Layer\"``` | **A string parameter which is interpreted as a layer name.** |\n| ```\"Layout\"``` | **A dropdown list with every layout in the project.** |\n| ```\"Keyb\"``` | **A keyboard key picker.** |\n| ```\"InstanceVar\"``` | **A dropdown list with the non-boolean instance variables the object has.** |\n| ```\"InstanceVarBool\"``` | **A dropdown list with the boolean instance variables the object has.** |\n| ```\"EventVar\"``` | **A dropdown list with non-boolean event variables in scope.** |\n| ```\"EventVarBool\"``` | **A dropdown list with boolean event variables in scope.** |\n| ```\"Animation\"``` | **A string parameter which is interpreted as an animation name in the object.** |\n| ```\"ObjInstanceVar\"``` | **A dropdown list with non-boolean instance variables available in a prior \"object\" parameter.** |\n\n*Example*\n\n```typescript\nimport { Category, Action, Condition, Expression, addParam, Param } from 'jsr:@lost-c3/lib';\nimport { bold } from 'jsr:@lost-c3/lib/misc';\nimport type { Instance } from '../Instance.ts';\n\n@Category('categoryId', 'Category Name')\nexport default class {\n    @Action({\n        `doActionWithParams`,\n        `Do action`,\n        `Do action with value: ${Bold('{0}')}`,\n        {\n            params: [\n                addParam('value', 'Value', { type: Param.String, initialValue?: '' })\n            ]\n        }\n    })\n    doActionWithParams(this: Instance, value: string) {\n        console.log('Do action with value', value);\n    };\n}\n```\n\n#### 💢 Deprecating _Actions_, _Conditions_, _Expressions_\n\n\u003e [!CAUTION]\n\u003e Do not delete any actions, conditions, expressions from your category file.\n\u003e Because it can break projects that are using your addon inside.\n\u003e\n\u003e Read more info:\n\u003e https://www.construct.net/en/make-games/manuals/addon-sdk/guide/defining-aces#internalH1Link0\n\nHow to mark any Action, Condition OR Expression as deprecated? Each Action,\nCondition OR Expression has _isDeprecated_ property in decorator options property, so you can set\nit to _`true`_ to deprecate.\n\nExample\n\n```typescript\nimport { Action, Category, Condition, Expression } from 'jsr:@lost-c3/lib';\nimport type { Instance } from '../Instance.ts';\n\n@Category('categoryId', 'Category Name')\nexport default class {\n    @Action(`doAction`, `Do action`, `Do action`, {\n        /**\n         * Default is False. Set to true to deprecate the ACE.\n         */\n        isDeprecated: true\n    })\n    doActionWithParams() { /* do something */ }\n}\n```\n\n### 🌳 Using Instance\nUse Instance class to implement your custom logic to addon. Main instance file\nis available at path: `./Addon/Instance.ts`.\n\nExample of using Instance properties and functions inside any category entity\n(Action/Condition/Expression).\n\n_Instance.ts_\n\n```typescript\nclass LostInstance extends globalThis.ISDKInstanceBase {\n    readonly value: string = 'My property value';\n    /**\n     * Use this property to call any condition in your addon\n     */\n    readonly Conditions = C3.Plugins[Lost.addonId].Cnds;\n\n    constructor() {\n        super();\n        const properties = this._getInitProperties();\n\n        if (properties) {\n            /**\n             * Here you can find your plugin properties\n             */\n        }\n    }\n\n    _release() {\n        super\n            ._release();\n    }\n\n    /**\n     * Here is our instance method\n     */\n    _getPropertyValue() {\n        return this.value;\n    }\n}\n\nexport type { LostInstance as Instance };\n```\n\n_MyCategory.ts_\n\n```typescript\nimport { Action, Category, Condition, Expression } from 'jsr:@lost-c3/lib';\n/**\n * Import your instance type\n */\nimport type { Instance } from '../Instance.ts';\n\n@Category('categoryId', 'Category Name')\nexport default class {\n    @Expression(`getValue`, `GetValue`)\n    /**\n     * Set the first argument of your method to: this: Instance\n     */\n    GetValue(this: Instance) {\n        return this._getPropertyValue();\n    }\n}\n```\n\n### 📚 Using Scripts (Javascript / Typescript)\nIt's available to use custom **Javascript** OR **Typescript** script in your addon.\n\nTo use any script you should copy OR create _**script.js**_ OR _**script.ts**_ file at path:\n`./Addon/Scripts`. Your script will automatically will be loaded with type:\n**external-dom-script**.\n\n\n- To use any file you should copy your _**file.css**_ OR _**data.txt**_ file to\n  path: `./Addon/Files`. If you added any **.css** file it will automatically\n  loaded with type: _**external-css**_. If you added file with any other\n  extension it will automatically loaded with type: _**copy-to-output**_.\n\n\u003e [!NOTE]\n\u003e All **Typescript** files will be compiled into .js files after addon building.\n\n\u003e [!NOTE]\n\u003e If you want to load your script with type **external-runtime-script**, you\n\u003e should call `setRuntimeScripts(path)` in your Addon object in _**`addon.ts`**_ file.\n\n*Example*\n\n```typescript\nimport { Plugin, Property } from 'jsr:@lost-c3/lib';\nimport type { EditorInstance } from \"@Editor/Instance.ts\";\nimport type { EditorType } from \"@Editor/Type.ts\";\nimport config from \"./lost.config.ts\";\n\nexport default defineAddon(\n    new Plugin\u003cEditorInstance, EditorType\u003e(config)\n        .setRuntimeScripts('myscript1.ts', 'main/myscript.ts')\n)\n```\n\n### 📄 Using Files\nIt's available to use files in your addon.\n\nTo use any file you should copy OR create _**file.***_ file at path:\n`./Addon/Files`. Your file will automatically will be loaded with auto-detected type.\n\n\u003e [!NOTE]\n\u003e If you want to include your file in project build, you should call `addFilesToOutput(path)` in your Addon object in _**`addon.ts`**_ file.\n\n*Example*\n\n```typescript\nimport { Plugin, Property } from 'jsr:@lost-c3/lib';\nimport type { EditorInstance } from \"@Editor/Instance.ts\";\nimport type { EditorType } from \"@Editor/Type.ts\";\nimport config from \"./lost.config.ts\";\n\nexport default defineAddon(\n    new Plugin\u003cEditorInstance, EditorType\u003e(config)\n        .addFilesToOutput('myfile.wasm')\n)\n```\n\n### 📦 Using Modules\nIt's available to use custom **Javascript** OR **Typescript** module in your addon.\n\nTo use any module you should copy OR create _**mymodule.js**_ file at path:\n`./Addon/Modules`.\n\n*Example*\n\n```typescript\nimport * as MyModule from './Modules/mymodule.ts';\n\nclass LostInstance extends globalThis.ISDKInstanceBase {\n\n\treadonly PluginConditions = C3.Plugins[Lost.addonId].Cnds;\n\tconstructor() {\n\t\tsuper();\n\t\tconst properties = this._getInitProperties();\n\n\t\tconsole.log(MyModule.VAR);\n\n        if (properties) {\n\n        }\n\n\t}\n\n\t_release() {\n\t\tsuper._release();\n\t}\n\n};\n\nexport type { LostInstance as Instance };\n```\n\n\u003e [!NOTE]\n\u003e All **Typescript** files will be compiled into .js files after addon building.\n\n\u003e[!WARNING] Note this is only supported from r401+.\n\n\u003e[!INFO] 📖 For more info checkout official docs:\n\u003e\n\u003ehttps://www.construct.net/en/make-games/manuals/addon-sdk/guide/runtime-scripts/sdk-v2\n\n### 🔤 Fast BBCode features\nFor *fast* and *beautiful* development there is a few functions that can help you\ncustomize displaying text in your addon.\n\n**List of available BBCode functions:**\n\n| Function | Result |\n| ----------- | ----------- |\n| ```bold('Do action')``` | **Do action** |\n| ```italic('Do action')``` | *Do action* |\n| ```strikethrough('Do action')``` | ~~Do action~~ |\n| ```underline('Do action')``` | \u003cu\u003eDo action\u003c/u\u003e |\n| ```code('Do action')``` | \u003ccode\u003eDo action\u003c/code\u003e |\n\n*Example*\n\n```typescript\nimport { bold, code, italic, strikethrough, underline } from 'jsr:@lost-c3/lib/misc';\nimport { Action, Category } from 'jsr:@lost-c3/lib';\nimport type { Instance } from '../Instance.ts';\n\n@Category('categoryId', 'Category Name')\nexport default class {\n    @Action(\n        `doAction`,\n        `${bold('Action name')}`,\n        `${italic('Do something')} and ${strikethrough('NOT')}`,\n        `${underline('Underlined description...')} with ${code('SOMETHING')}`\n    )\n    doAction(this: Instance) { /* do something */}\n}\n```\n\n## 🏗️ Building addon\n\nTo build addon into **`.c3addon`** file you can use one of the following\ncommands:\n\n- `lost build`\n\n**`addon.c3addon`** file will be available at path: `./Builds/my_addon_1.0.0.0.c3addon`\n\n## 🧪 Testing addons in Developer Mode\n\nTo test your addon you can use one of the following commands:\n\n- `lost serve`\n\n\u003e [!IMPORTANT]\n\u003e Read more info about Developer Mode in Construct 3:\n\u003e\n\u003e https://www.construct.net/en/make-games/manuals/addon-sdk/guide/using-developer-mode\n\n\n# 🪪 License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flostinmind-dev%2Flost-c3","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flostinmind-dev%2Flost-c3","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flostinmind-dev%2Flost-c3/lists"}