{"id":19179271,"url":"https://github.com/nearhuscarl/scriptlinker","last_synced_at":"2025-10-10T21:39:03.798Z","repository":{"id":42154951,"uuid":"176986066","full_name":"NearHuscarl/ScriptLinker","owner":"NearHuscarl","description":"Script Linker is a helper program for Superfighters Deluxe to help ease the process of scripting.","archived":false,"fork":false,"pushed_at":"2022-04-12T05:26:45.000Z","size":527,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-07T21:46:10.556Z","etag":null,"topics":["csharp","game","script","superfighters-deluxe"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NearHuscarl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-03-21T16:40:40.000Z","updated_at":"2024-06-10T22:36:08.000Z","dependencies_parsed_at":"2022-08-12T08:10:38.260Z","dependency_job_id":null,"html_url":"https://github.com/NearHuscarl/ScriptLinker","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/NearHuscarl/ScriptLinker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NearHuscarl%2FScriptLinker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NearHuscarl%2FScriptLinker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NearHuscarl%2FScriptLinker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NearHuscarl%2FScriptLinker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NearHuscarl","download_url":"https://codeload.github.com/NearHuscarl/ScriptLinker/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NearHuscarl%2FScriptLinker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279005418,"owners_count":26083883,"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","status":"online","status_checked_at":"2025-10-10T02:00:06.843Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["csharp","game","script","superfighters-deluxe"],"created_at":"2024-11-09T10:42:38.454Z","updated_at":"2025-10-10T21:39:03.783Z","avatar_url":"https://github.com/NearHuscarl.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Script Linker\n\nScript Linker is a helper program for [Superfighters Deluxe] (SFD) to help ease the process of scripting.\n\nCurrently, to script in SFD, you have to code in a built-in text editor that is basically a text area with a compile button which make scripting so much of a pain that only masochists will use said editor.\n\nIf you want to write anything more than a couple of classes, you should use Visual Studio/Vscode instead as it supports syntax highlighting, autocomplete, shortcuts like jump into file, see references...\n\nScript Linker tries to smooth the process of using both tools: An IDE (for coding) and the SFD text editor (for compiling). Remove the unnecessary metal load to help scripters write more quality scripts\n\nhttps://user-images.githubusercontent.com/23303775/162793252-f7ba9685-7830-4404-a812-8bfb4b2699c0.mp4\n\n## Features\n\n* Manage your scripts: Add, edit, search and remove script info (`sfde` files are not supported).\n* Populate new script with game script template (template can be changed in `ScriptTemplate.txt`)\n* Organize your code in multiple files and folders\n* Automate the compiling task via a global hotkey\n* Generate output file to SFD script folder.\n\n## Usage\n\n- Create a new project in Visual Studio.\n\n\u003cimg src='./images/NewProject.PNG' width=500\u003e\n\n- Rename the default `Class1.cs` file to `Main.cs` (or something more meaningful).\n\n\u003cimg src='./images/Class1.PNG'\u003e\n\n- Open ScriptLinker. Select `Script` \u003e `New`.\n\n\u003cimg src='./images/ScriptNew.PNG' width=500\u003e\n\n- Fill in the script detail:\n    - **Name**: *(Required)* Your script name. This field must be unique between scripts.\n    - **Entry Point**: *(Required)* The main file where you have the `GameScript` lifecycles like `OnStartup` or `OnUpdate`.\n    - **Project Directory**: *(Required)* The directory containing the `*.csproj` file.\n    - **Author**: Self-explanatory\n    - **Description**: Self-explanatory\n    - **Map Modes**: versus, custom, survival or campaign. This is my bad, I should have made a combobox.\n    - **Init game script template**: Initialize the Entry Point file with a starting template. The template can be modified in `ScriptTemplate.txt` \n\n\u003cimg src='./images/New.PNG' width=500\u003e\n\n- In your IDE, the `Main.cs` file now should look like this:\n\n\u003cimg src='./images/TemplateInit.PNG' width=700\u003e\n\n- To fix the error, add the `SFD.GameScriptInterface` assembly. Right click `Dependencies` \u003e `Add Project Preference...` \u003e `Browse`\n\n\u003cdiv\u003e\n    \u003cimg src='./images/AddProjectPreference.PNG' width=300\u003e\n    \u003cimg src='./images/BrowseAssembly.PNG' width=300\u003e\n\u003c/div\u003e\n\n- Find and select the `SFD.GameScriptInterface.dll` file. It's in where the game is installed \u003e Click `OK` to confirm.\n\n- Go to the Map Editor and make sure the Script tab is opened so the code can be pasted from the IDE.\n\nYou're pretty much done here. Now you can develop your script in Visual Studio and enjoy all of the IDE features like syntax highlighting, intellisense, codelen... You can also create multiple files and directories to orgnaize your code however you want, Note that cross project import is not supported.\n\nOnce you edit your code, hit **F8** to compile. This shortcut can be changed in the settings (`Tools` \u003e `Option`). You can see a short demo [here](https://youtu.be/q3M2rQQSNU4).\n\n*Tip*: When you reference the `IGame` instance outside of the `GameScriptInterface` subclass, the IDE will complain that the `Game` property does not exist. To work around it, create a helper class with the same property name and type:\n\n```c#\nusing SFDGameScriptInterface;\n\nnamespace YourProjectName\n{\n    public static class GameScriptUtil\n    {\n        public static readonly IGame Game;\n    }\n}\n```\n\nThen import the class in your file to make the member `Game` available in the scope: \n\n```c#\nusing static YourProjectName.GameScriptUtil;\n\nnamespace YourProjectName.MyLib\n{\n    public static class Library\n    {\n        public static IEnumerable\u003cIPlayer\u003e GetAlivePlayers()\n        {\n            // Game is available here\n            return Game.GetPlayers().Where(p =\u003e !p.IsDead);\n        }\n    }\n}\n```\n\n## Download\n\nDownload [here](https://github.com/NearHuscarl/ScriptLinker/releases) (ScriptLinker.zip)\n\n## Sample projects\n\n* [BotExtended]\n\n## Development\n\nFor anyone wondering why I dont have any Notification calls inside the properties from the ViewModel like this:\n\n```C#\nprivate string copyToClipboardHotkeyName;\npublic string CopyToClipboardHotkeyName\n{\n    get { return copyToClipboardHotkeyName; }\n    set { SetPropertyAndNotify(ref copyToClipboardHotkeyName, value); }\n}\n```\n\nbut just the shorthand auto property\n\n```C#\npublic string CopyToClipboardHotkeyName { get; set; }\n```\n\nThat's because I'm using this awesome Fody plugin [PropertyChanged] which help you cut down the verbose part when declaring binding property in WPF\n\n## Guides\n\n* [Set up Visual Studio]\n\n\n[Superfighters Deluxe]: https://mythologicinteractive.com/SuperfightersDeluxe\n[BotExtended]: https://github.com/NearHuscarl/BotExtended\n[PropertyChanged]: https://github.com/Fody/PropertyChanged\n[Set up Visual Studio]: https://www.mythologicinteractiveforums.com/viewtopic.php?f=15\u0026t=1588\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnearhuscarl%2Fscriptlinker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnearhuscarl%2Fscriptlinker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnearhuscarl%2Fscriptlinker/lists"}