{"id":13727389,"url":"https://github.com/hmmhmmhm/dva-engine","last_synced_at":"2025-04-16T00:31:53.239Z","repository":{"id":42338555,"uuid":"194819038","full_name":"hmmhmmhm/dva-engine","owner":"hmmhmmhm","description":"🎮 Advanced Script Engine for Overwatch Workshop with Typescript","archived":false,"fork":false,"pushed_at":"2022-07-07T10:55:41.000Z","size":1394,"stargazers_count":117,"open_issues_count":9,"forks_count":7,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-08-03T01:30:45.998Z","etag":null,"topics":["game","javascript","nodejs","overwatch","overwatch-workshop","ows","ruleset","typescript","typescript-interface","workshop","workshop-functions"],"latest_commit_sha":null,"homepage":"https://codesandbox.io/s/github/hmmhmmhm/dva-engine-codesandbox","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/hmmhmmhm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-07-02T08:13:04.000Z","updated_at":"2024-06-06T16:35:13.000Z","dependencies_parsed_at":"2022-09-09T09:31:07.612Z","dependency_job_id":null,"html_url":"https://github.com/hmmhmmhm/dva-engine","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hmmhmmhm%2Fdva-engine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hmmhmmhm%2Fdva-engine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hmmhmmhm%2Fdva-engine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hmmhmmhm%2Fdva-engine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hmmhmmhm","download_url":"https://codeload.github.com/hmmhmmhm/dva-engine/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223691115,"owners_count":17186747,"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":["game","javascript","nodejs","overwatch","overwatch-workshop","ows","ruleset","typescript","typescript-interface","workshop","workshop-functions"],"created_at":"2024-08-03T01:03:53.237Z","updated_at":"2024-11-08T13:26:47.152Z","avatar_url":"https://github.com/hmmhmmhm.png","language":"TypeScript","readme":"\n\n![FREE HONG KONG](https://i.imgur.com/KLvAahh.png)\n\n## 🌂 BOYCOTT BLIZZARD\n\n\u003e From Republic of Korea to Hong Kong\n\nThe D.Va Engine was developed by Korean. And we're 100% on Hong Kong's side. We are aware of the recent issue. Hong Kong gamers have shown their love for their country in interviews since the end of the tournament. \n\nOf course, We can understand Blizzard's position to remain politically neutral on the issue. However, Blizzard not only suspended the player's qualifications, but also reduced the prize money to zero, and then removed all that game match videos from the Internet. Does it make sense that the player will forfeit the prize money for suspension because of the actions he made in the post-game interview?\n\nBlizzard can of course punish the competition player. However, given the usual level of fines, Blizzard's consistency in action should have been a light fine. Even the one who posted the notice on Blizzard Reddit was a user who had mocked the Hong Kong protests.\n\nConsideration of Chinese people should be as same as that of Hong Kongers. Should have been as careful, and heedful in disciplinary proceedings, Blizzard was afraid of China and chose to keep Hong Kong’s mouth shut.\n\n💬 **Democratic** Senator Ron Wyden said:\n\n```\n“Blizzard shows it is willing to humiliate itself to please the Chinese Communist Party,” Sen. Ron Wyden (D-OR)\n```\n\n💬 **Republican** Senator Marco Rubio said:\n\n```\n“Recognize what’s happening here. People who don’t live in China must  either self censor or face dismissal \u0026 suspensions,” Sen. Marco  Rubio (R-FL)\n```\n\nIsn't Blizzard a company that values political correctness? Is this right as an American company? Blizzard had the opportunity to defend his players and democracy, but they did not. So it's time for gamers and custom game developers to tell Hong Kong instead of Blizzard.\n\nHong Kong is a totally different country from China, and it needs to be protected as a democratic country. many people will not be silent and all society's eyes are in Hong Kong. D.Va engine developers pray for Hong Kong's freedom.\n\n\n\n![D.VA Engine Logo of Pink](https://i.imgur.com/mDreImI.png)\n\n\n\n# 🌈 D.VA Engine\n\n🌺  Advanced Script Engine for Overwatch Workshop\n\n\u003e - Overwatch Workshop Ruleset with Typescript (+JavaScript)\n\n\n\n![D.VA Engine Logo of Blue](https://i.imgur.com/pjbtlQF.png)\n\n\u003e **DVA-ENGINE**: Transfiler engine for advanced developers.\n\n\n\n## 💬 Why?\n\nRecently, under the name of Workshop in Overwatch, a custom game mode has been created where users can program game rules. Workshop can be developed by setting up Event and Condition and Action in Rule.\n\nBut the ruleset of an overwatch workshop can be modified by default only within the game. for this reason, IDE with many functions is not available. (This is certainly not good news for modern developers.)\n\n## 💭 How?\n\nThat is why the **\u003cu\u003eD.VA Engine\u003c/u\u003e** (Before name: **\u003cu\u003eoverwatch-workshop-javascript\u003c/u\u003e**) is being developed. Overwatch's workshop code is saved as an extension file called `.ows`, and the editor code can be extracted or inserted through copy and paste from the editor. The goal is to redefine the code of these existing `.ows` files as typescript interface and run them on the web editor.\n\n\n\n![Why Do I Use this Image](https://i.imgur.com/bvYaVgw.png)\n\n\u003e D.Va Engine has been written of 100% Typescript!\n\n\n\n## 💡 What?\n\nWe purposed to make it possible to obtain the overwatch workshop code through typed or javascript coding on the web. This process will be provide automatic completion or exposure to interface descriptions so that even those who do not know javascript can easily use the basic grammar with a little knowledge.\n\n\n\n![Play now! In Online Browser! Image](https://i.imgur.com/DAoSu2i.png)\n\n\u003e D.Va engine can be used directly on the web browser!\n\n\n\n## 🌐 In Browser\n\n\u003e It's also available on mobile through the latest Chrome app.\n\n[NOW YOU CAN ENTER HERE](https://codesandbox.io/s/github/hmmhmmhm/dva-engine-codesandbox)\n\n\n\n## 💻 In Local\n\n### 📥 Prepare\n\n\u003e To use the D.Va engine on a regular PC (Windows, Mac, Linux), the following SW's must be installed:\n\n1. [Node.JS](https://nodejs.org/en/)\n\n   \u003e Node.js is a language runtime system that operates JavaScript on a PC (without browser). Please complete the installation on the Node.JS website. (It is recommended that you receive the latest possible version.)\n\n2. [Git Bash](https://git-scm.com/download/win)\n\n   \u003e Some OS doesn't have Git (version management system) and Bash (standard UNIX command system) by default. Therefore, it is recommended to install Git-SCM.\n\n3. [Visual Studio Code (VSCode)](https://code.visualstudio.com/)\n\n   \u003e VSCode is an IDE(Integrated Development Environment) development tool that supports Typescripts. It is safe to use various development tools such as Atom and Bracket. (The main project contributor has recommends VSCode.)\n\n### 📦 Download\n\n\u003e Run Terminal or Git Bash to enter the following command in the folder where you want to download and install (it also can be done in VSCode):\n\n```bash\ngit clone https://github.com/hmmhmmhm/dva-engine\ncd ./dva-engine\n```\n\n### 🚀 Run\n\n\u003e Enter the command below to run the engine. (It has be provide automatic install \u0026 initialize)\n\u003e\n\u003e (You do not need to pre-running commands such as `npm install`.)\n\n```bash\nnpm start\n```\n\nEverything is now done! It may take 1 to 2 minutes for the first run. (Engine is require time to download sub-modules and generate other source codes for the first time.)\n\n\n\n## 🌌 Automatic Update\n\n\u003e When the D.Va Engine is Starting, it'll be automatically check that it available to update. You can choose whether to run the update with Y (Yes) or N (No).\n\nMany developers thought that they would be burdened with engine updates each time. So I implemented the built-in engine auto-update feature. (This update system uses This Github Repo data. So I don't have any network traffic pressure.)\n\n\n\n## 👩‍💻 API Usage\n\n![D.VA ENGINE PLUG-IN SECTION Image](https://i.imgur.com/dFB36ZM.png)\n\n### ❔ How to Use\n\n\u003e In this page, We'll describe the process of coding on the development tool (**\u003cu\u003eVSCode\u003c/u\u003e**).\n\n\u003e **\u003cu\u003eThe engine must be running before following the instructions below.\u003c/u\u003e** (Files that have been converted to a pastable format are saved as **\u003cu\u003e'release/script.ts'\u003c/u\u003e**.)\n\n\u003e If executed via the command 'npm start' the file **\u003cu\u003e'release/script.ts'\u003c/u\u003e** is always recreated as soon as the code is saved. (Only at the beginning is slow, after which the conversion will require a speed of less than 1 second.)\n\n\n\n#### 📜 Check `src/script.ts`\n\nWhen the engine is fully running, a file 'src/script.ts' is created. If you open the `src/script.ts' file, you can see the following source code:\n\n![Code Example](https://i.imgur.com/5scnR9C.png)\n\n#### 🌐 Choose Language\n\nIf you look at the end of the second line, you can see that the name of the language is written. You can modify this section and choose which language to use.\n\n![Code Example](https://i.imgur.com/GCSTL6T.png)\n\n\n\n#### 🔎 Check Hint\n\n\u003e In VSCode, you can check the list of available functions automatically or you can check the description of the variable or function directly through a feature called Intellisense.\n\n\n\n##### ❔ Mouse Hint\n\nWhen there is a function or variable that you don't know, you can find a description of the code by placing the mouse at that location.\n\n![Code Example](https://i.imgur.com/ycILP1Z.png)\n\n\n\nYou can also see that the multi-lingual language description is well displayed.\n\n![Code Example](https://i.imgur.com/ujUGYSQ.png)\n\n\n\n##### ❔ Dot Hint\n\nWhen you type dot(.) after entering any class or namespace, you can see the list of available functions.\n\n![Code Example](https://i.imgur.com/JxQGf2P.png)\n\n\n\n##### ❔ Trigger Hint\n\nWhile typing a generic word, you can check the list of available variables through `Ctrl+Space` or `Ctrl+Alt+Space`.\n\n![Code Example](https://i.imgur.com/TAP3GjL.png)\n\n\n\n##### ❔ Trigger Hint Setup Guide\n\nIf entering `Ctrl+Space` or `Ctrl+Alt+Space` does not provide a hint, enter `Ctrl+K` and `Ctrk+S` and reset the hint shortcut by searching for `triggerSuggest`.\n\n![Editor Example](https://i.imgur.com/N5WVlv6.png)\n\n\n\n#### 👩‍💻 Advanced Parameter Intellisense\n\n\u003e When using a workshop function, be sure to check which function is available in the parameters hints on the list.\n\n![Code Example](https://i.imgur.com/WScPfpO.png)\n\nThe parameter classification name that you can enter at that location, such as `Type.*` is displayed as a hint. If you enter it the same way, you can see the list of functions available at that parameter.\n\n![Code Example](https://i.imgur.com/jqfiM1h.png)\n\nThe sub-parameter is also fully described.\n\n\n\n#### 👩‍💻 Rule Coding Guide\n\nThe Rule consists of a  class. When you type like a `new Rule ({...})`, the information you need to enter is displayed.\n\n![Code Example](https://i.imgur.com/1bHHST9.png)\n\n- **description**\n  - Here you can enter a string description for the rule.\n  - We may not have to use the rule descriptions. Because We can remain code comments through `// BlaBla` or `/* BlaBla */` in our scripts.\n  - But if you write down the rule description here, it will be displayed on the In-Game Rule Editor.\n- **event**\n  - All available events can be checked by entering `RuleEvent.`\n  - Since there can be multiple conditions for the execution of the rule, it must be entered within the array (like a `condition: [...]`)\n- **condition**\n  - Indicates the conditions for the action of the rule to be executed.\n  - You can write conditional expression or reference the condition variable.\n  - Condition operator is must use one of the following: `==`, `!=`, `\u003c`, `\u003c=`, `\u003e`, `\u003e=`, `===`\n  - To view a list of conditional value functions, Type `Value.`\n  - It doesn't matter what form the conditional statement is entered, provided the above conditions are observed. (The engine will be converted to the workshop code, no matter how complicated the conditions may be.)\n    ![Code Example](https://i.imgur.com/OfNtdM6.png)\n  - The results for the above code are as follows. ![Code Example](https://i.imgur.com/gVt4fjI.png)\n- **action**\n  - All available events can be checked by entering `Action.`\n  - Since there can be multiple action for the execution of the rule, it must be entered within the array (like a `action: [...]`)\n\n\n\n#### 👩‍💻 Categorized functions Guide\n\n![Code Example](https://i.imgur.com/z8MKM9s.png)\n\n\u003e This is the most basic set of functions of the typescript workshop interface.\n\n- **RuleEvent**\n  - A collection of event functions that are used to create rules.\n- **Value**\n  - A collection of function values that you can write to a conditional statement and some action functions when you create a rule.\n- **Action**\n  - A collection of action functions that you can use to create rules.\n- **Level**\n  - A collection of functions related to an overwatch game map.\n- **Server**\n  - A collection of functions related to an overwatch workshop server.\n- **Match**\n  - A collection of functions related to an overwatch workshop competition.\n- **Util**\n  - A collection of utility functions that can be used to develop an overwatch workshop.\n- **Type**\n  - Classified collection of functions that can be used as parameter values when calling all workshop functions.\n- **Classes**\n  - A collection of functions classified according to the parameters of an overwatch workshop.\n\n\n\n#### 👩‍💻 Class Types Guide\n\n![Code Example](https://i.imgur.com/m6HpeCr.png)\n\n\u003e A collection of functions classified according to the parameters of an overwatch workshop.\n\n- **Rule**\n  - Rule class for overwatch workshop rules.\n- **Player**\n  - ![Code Example](https://i.imgur.com/feyOKRo.png)\n  - If you give the Player a value when you create a class, it shows the available functions associated with that game player and automatically binds the player at the same time. (You don't have to pass the player as a parameter each time you use a player-related function.)\n- **Event**\n  - ![Code Example](https://i.imgur.com/w3tUkGr.png)\n  - A class that provides function related to an event in static function. There is currently no function directly related to the event, so there is no function as a class instance that binds parameters.\n- **Entity**\n  - ![Example Code](https://i.imgur.com/7rGd3MM.png)\n  - Class that binds functions associated with an entity (the current entity-related function is very small and is not practical)\n- **Team**\n  - ![Code Example](https://i.imgur.com/xsKZLzV.png)\n  - A class that binds functions related to a team.\n- **Vector**\n  - ![Code Example](https://i.imgur.com/m8h8reP.png)\n  - A class that binds functions related to a vector.\n\n\n\n#### 👩‍💻 Data Types Guide\n\n![Code Example](https://i.imgur.com/i5sr4vE.png)\n\n\u003e Overwatch Workshop functions classified for use as the default data type.\n\n- **Bool**\n  - A collection of functions that return values for an bool type.\n- **Number**\n  - A collection of functions that return values for an number type.\n- **Array**\n  - A collection of functions that return values for an array type.\n  - **TODO**: Binding support for typescript grammar of array is not yet available.\n- **String**\n  - A collection of functions that return values for an string type.\n\n\n\n#### 👩‍💻 Number Coding Guide\n\nAny function that returns a numeric value or a numeric value can be computed using the operator of an existing typescript. (It fully functional!)\n\n##### Before Transpile\n\n![Code Example](https://i.imgur.com/byQN3TA.png)\n\n##### After Transpile\n\n![](https://i.imgur.com/PswHbry.png)\n\n\n\n#### 👩‍💻 Plug-In Guide\n\n\u003e **TODO**: D.Va Engine is developing a plug-in system that allows other users to re-use user-generated rules. After downloading scripts like 'myRuleset.ts' through 'npm', we are developing a structure that can be distributed over the Internet to other users.\n\n\n\n##### Plug-in Template\n\n**TODO**: This feature is currently in the process of working.\n\n\n\n##### Naming convention\n\nThe targets for which the engine binds typescript to workshop grammar are specific files with the following naming conventions: Files that do not conform to the naming conventions below will not bind to workshop grammar.\n\n\u003e If you want to write a code that is not relevant to the Overwatch Workshop, it must be written in a separate file that is not included in the naming convention below.\n\n- script.ts\n- script_`*`.ts\n- @`*`.ts\n\n\n\n### ❔ How to Apply\n\n\u003e Procedure for applying the conversion result of the engine code to the overwatch workshop is as follows.\n\n\n\n![](https://i.imgur.com/vpCAw92.png)\n\nCopy the contents of the 'release/script.ows' file.\n\n\n\n![](https://i.imgur.com/01TrS8V.png)\n\nEnter the `GAME BROWSER` from the game play.\n\n\n\n![](https://i.imgur.com/BJ3Yvol.png)\n\nClick the `CREATE` button.\n\n\n\n![](https://i.imgur.com/iRDAVeg.png)\n\nClick the `WORKSHOP` button.\n\n\n\n![](https://i.imgur.com/Omtg6m7.png)\n\nIf you don't have any set rules, create a rule with the `+` button.\n\n\n\n![](https://i.imgur.com/xdv2PfM.png)\n\nClick the `SELECT ALL` button.\n\n\n\n![](https://i.imgur.com/lt9Cola.png)\n\nClick the `PASTE RULE` button. (If the Paste button does not appear, please copy the contents of the 'release/script.ows' file once more.)\n\n\n\n### 📔 Command List\n\n#### 📔 User Commands\n\n\u003e The following commands are the most basic user commands.\n\n- `npm start` (or `npm run start`)\n  - A command that can run the engine. The engine may take about a minute to start, and after it runs, it automatically converts the overwatch workshop files in less than a second whenever the file changes.\n- `npm run build`\n  - A command to convert to a workshop file without running the engine. It takes less than 7 seconds.\n- `npm run build:fast`\n  - A command to perform a workshop file conversion without a module inspection and Github update check. It takes less than 4 seconds\n\n\n\n#### 📔 Core Commands\n\n\u003e The commands below are for developers developing the inside of the engine.\n\n- `npm run lint`\n  - A command to modify the indent of project files according to the project creation rules.\n- `npm run clean`\n  - This command deletes the dist folder and the release folder in the project. It is good to use if the core build is incorrect or if there is a problem.\n- `npm run generate`\n  - This command creates the `bin/release` folder for the engine. If the `bin/release` folder already exists, delete it and recreate it from the beginning.\n\n\n\n#### 📔 Maintain Commands\n\n\u003e Script commands for developers who maintain inside the engine.\n\n##### 📔 Fix \u0026 Correction\n\n\u003e A command that can be modified if the function name of the overwatch workshop has been changed or is incorrectly recorded on the engine.\n\n- `npm run maintain:rename`\n  - Replace a function name.\n\n##### 📔 Update \u0026 Lab\n\n\u003e This folder contains the automation scripts that are available when new functions or events are added to the Overwatch Workshop.\n\n- `npm run maintain:event`\n  - Add a new event.\n- `npm run maintain:value`\n  - Add a new value.\n- `npm run maintain:action`\n  - Add a new action.\n- `npm run language:extract`\n  - A command script that runs when the `npm run language:extractor` command is entered. In the folder `bin/release`, all comments written in the interface file of a specific language that has already been created are extracted in JSON format, and all interface comments are extracted from the interface file that has been replaced by the language code. These extracted files are extracted to the folder `/dist/_extracted`.\n\n- `npm run maintain:run`\n  - For developers who modify the ttypescript transpiler code, recreate the release folder and proceed with the workshop file generation.\n\n\n\n#### 📔 Module Commands\n\n\u003e The commands below are reused within the command.\n\n- `npm run install`\n  - This command generates an effect similar to `npm install`. If there are no modules to install, the command will be completed immediately.\n- `npm run update`\n  - A command that generates an effect similar to `git pull`. If there is no update, the command will be completed immediately.\n  - If you have files created separately in a folder other than the `src/*` folder and the `node_modules/*` folder, they will all be deleted.\n- `npm run generate:silent`\n  - This command generates an effect similar to `npm run generate`. If there is no update, the command will be completed.\n- `npm run ttsc`\n  - A command that proceeds with the ttypescript conversion of all project files.\n\n\n\n## 🌏 Multilingual Support\n\n![D.VA ENGINE HAS A MULTILINGUAL Image](https://i.imgur.com/sjaHn8i.png)\n\n## ✅ Please make a contribution to the translation work.\n\n\u003e The main project contributor cannot read languages other than English and Korean. It means that no other language can be supported by Engine without the help of other contributors.\n\n[Go to read the Language/README.md file](https://github.com/hmmhmmhm/dva-engine/tree/master/bin/core/language)\n\n\n\n## 📮 Contribute\n\n![CONTRIBUTE GUIDELINE LOGO IMAGE](https://i.imgur.com/AeMjvYw.png)\n\n\u003e If you want to contribute to the development of this project, please read the CONTRIBUTING.md file.\n\n[Go to read the CONTRIBUTING.md file](https://github.com/hmmhmmhm/dva-engine/blob/master/CONTRIBUTING.md)\n\n\n\n## 🎯 TODO\n\n- [x] Typescript binding of all overwatch workshop function structures\n- [x] Copy all function statements \u0026 Multilingual Support System for Interface File Comments (English and Korean)\n- [x] Githeub Repo-Based Engine Automatic Update System\n- [x] TypeScript Grammar Binding for Event Conditional Statement\n- [x] TypeScript Grammar Binding for Numeric Value Operators\n- [x] Quickly apply hot module Replacements (HMRs) based on dynamic compilation\n- [ ] Support direct use of Rule condition without condition statement of function with return value boolean\n- [ ] Support for redefining Typescript sequencing grammar\n- [ ] Ruleless System - Implicit rule generation via if statement (default to onGoingGlobal when event designation is not present)\n- [ ] Additional documentation of internal structure APIs\n- [ ] Method chaining - returns the Reaper class instance by default without the user creating the Reformer class each time\n\n\n\n## ✅ License\n\n\u003e Translation data is owned by Blizzard (Only source code is guaranteed MIT License).\n\nMIT Licensed.","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhmmhmmhm%2Fdva-engine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhmmhmmhm%2Fdva-engine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhmmhmmhm%2Fdva-engine/lists"}