{"id":17018263,"url":"https://github.com/zlatnaspirala/visual-ts-game-engine","last_synced_at":"2025-06-13T05:04:34.265Z","repository":{"id":34932068,"uuid":"147728675","full_name":"zlatnaspirala/visual-ts-game-engine","owner":"zlatnaspirala","description":"Typescript project based on matter.ts, used webpack, GamePlay based on canvas2D. Multiplayer real time for platformer gameplay. Video chat webRTC supported by kurento OV server signalling. RocketCraftingServer used for account session. Node.js for server part. Powerfull ! ®zlatnaspirala","archived":false,"fork":false,"pushed_at":"2025-02-13T00:09:02.000Z","size":41408,"stargazers_count":22,"open_issues_count":0,"forks_count":5,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-05-26T13:21:21.596Z","etag":null,"topics":["canvas2d","game-development","game-engine","gameplay","javascript","matter-js","mongodb","multiplayer","openvidu","session","session-staff","standalone-videochat","typescript","video-chat","visual-js","visual-ts","webrtc","websocket"],"latest_commit_sha":null,"homepage":"https://maximumroulette.com","language":"JavaScript","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/zlatnaspirala.png","metadata":{"files":{"readme":"readme.md","changelog":"CHANGES.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","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},"funding":{"custom":"https://maximumroulette.com"}},"created_at":"2018-09-06T20:19:14.000Z","updated_at":"2025-02-13T00:09:01.000Z","dependencies_parsed_at":"2024-12-15T23:34:02.398Z","dependency_job_id":null,"html_url":"https://github.com/zlatnaspirala/visual-ts-game-engine","commit_stats":null,"previous_names":["zlatnaspirala/visual-ts-game-engie"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/zlatnaspirala/visual-ts-game-engine","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zlatnaspirala%2Fvisual-ts-game-engine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zlatnaspirala%2Fvisual-ts-game-engine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zlatnaspirala%2Fvisual-ts-game-engine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zlatnaspirala%2Fvisual-ts-game-engine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zlatnaspirala","download_url":"https://codeload.github.com/zlatnaspirala/visual-ts-game-engine/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zlatnaspirala%2Fvisual-ts-game-engine/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259584783,"owners_count":22880198,"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":["canvas2d","game-development","game-engine","gameplay","javascript","matter-js","mongodb","multiplayer","openvidu","session","session-staff","standalone-videochat","typescript","video-chat","visual-js","visual-ts","webrtc","websocket"],"created_at":"2024-10-14T06:45:14.658Z","updated_at":"2025-06-13T05:04:29.250Z","avatar_url":"https://github.com/zlatnaspirala.png","language":"JavaScript","funding_links":["https://maximumroulette.com"],"categories":[],"sub_categories":[],"readme":"# Project: Visual TS\n## Current Version `1.0.0` 2025 BETA\n\n### Status:\n- From 1.0.0 new networking driver based on kurento media server.\n- From 0.7.0 Migrate to webpack5 version\n  [If you have some trouble try to deleting node_modules/ and install again]\n\n#### 2d canvas game engine based on Matter.js 2D physics engine for the web supported with kurento/OVServer and visual GUI tool 2d map creator/python3.\n\nI use my own concept: `take lib only for the great benefits`. It means that i import only stuff that i can't make in proper way in proper time, all other coming from head. For example `Physics` was imported in role of npm package for typescript matter.js/ts variant and i keep dependency healthy. \n\nOld networking point [If you dont want kurento in backend and you wanna your own server code]\nIt is nice if you wanna try. This works on 5$ VPS (node.js).\nhttps://github.com/zlatnaspirala/visual-ts-game-engine/tree/POINT_WITH_OWN_SERVER_OLD\n\nIn networking aspect i use full-duplex connection under web-rtc protocol. Pretty nice working combination of physics and realtime-multiplayer connetions. HTMLRequest used only for loading html parts in run time (on request) and accounts{wip}  because i want clear single page application with all PWA features inside. Also video chat is integrated based on OV server/kurento.\nYou can start recording canvas gameplay with implemented `record-canvas`.\n\n### For npm users\n\nTake a look project examples on:\nhttps://github.com/zlatnaspirala/visual-ts-examples\n\nIt is nice starter project. Fixed all deps to make `npm i visual-ts` usable.\n\n[API Documentation](https://maximumroulette.com/apps/visual-ts/multiplayer/api-doc/)\n\n### For github users\n\n`git clone --recurse-submodules https://github.com/zlatnaspirala/visual-ts-game-engine`\nAfter this command you can run GUI Python map creator tool.\n\n### Whats good in this project:\n\n- visual-ts correspondent with RocketCraftingServer/mongoDB in context of session accounts.\n- Fast `full-duplex` connections based on webRTC [middleware/node.js] based on kurento OV server.\n- Multiplatform/Realtime Multiplayer features + Video chat comes with visual-ts.\n- No need for forums just follow stackoverflow.com and wc3.\n- Easy stage/production switch\n- Fast rebuild - Build single endpoint, Rebuild all\n- Luanch/Attacher debugger options implemented [for visual code]\n- Lib is not to much `inself` closed. Every intervention or used\n  feature is exposed in high level in that way you can make very fast\n  implementation of your own logic what ever will be.\n- You are not forced to use typescript you can always downgrade to javascript this comes\n  with typescript inself.\n- Example multiplayer\n- Migrated to webpack5\n\n### Simple there is nothing between you and making the app.\n\n- Written in typescript current version 4.2.4.\n- Package tool used webpack 5.5.0.\n- Text editor used and recommended: Last version of `Visual Studio Code` [1.95.x].\n  Luanch debugger configuration comes with this project (for server part).\n  Or run server on `Javascript Debug Terminal`.\n- Physics engine based on `Matter.js - Matter.ts` (npm project).\n- Mobile controls / Tested on android\n  Based on touch area bounds LEFT , UP, RIGHT (for platformer based gameplay, for now).\n\n## Logo\n\n![](https://github.com/zlatnaspirala/visual-ts-game-engine/blob/master/src/icon/favicon-96x96.png)\n\n## Landscape logo\n\n![visualTS](https://github.com/zlatnaspirala/visual-ts/blob/master/nonproject-files/logo.png)\n\n### VisualTsGameEngine GUI tool 2d Map Creator made in python:\n\n![visualTS](https://github.com/zlatnaspirala/visual-ts/blob/master/nonproject-files/creatorlogo.png)\n\n#### Much more easyest way to make yor gameplay table sets is `creator-2dmap` python script. After installation of all needed modules vie pip3 for python3, you need to run:\n\n@Note If you use\n`git clone --recurse-submodules https://github.com/zlatnaspirala/visual-ts-game-engine`\n\nThen run creator@dmap with `npm run creator`\n\n```js\n  // Windows\n  python.exe tool.py\n  // Macos - linux\n  python3 ./tool.py\n```\n\nPossible bug on oldies linux os mint. Bug related with tkinter lib.\n\nYou need to change self.absolutePacksPath from defaults.py config file.\nPut example platformer pack folder path: `src\\examples\\platformer\\scripts\\packs` but path must be absolute, my personal path is (For windows users : use double \\ for escape ):\n\nThis is example for windows users:\n\n```bash\nE:\\\\web_server\\\\xampp\\htdocs\\\\PRIVATE_SERVER\\\\visual-ts\\\\project\\\\visual-ts\\\\src\\\\examples\\\\platformer\\\\scripts\\\\packs\\\\\"\n```\n\n![Creator 2d map](https://github.com/zlatnaspirala/creator-2dmap/blob/master/creator-2d-map.image.png)\nThis is separated and added like git submodules.\n\n- This is freeware / opensource. There is no any limitation in this project.\n  You can use video stream as gamePlay objects , multiplayer feature is also free.\n- Please don't use fake email address to test public maximumroulette.com platformer example.\n  Project even in dev stage is totally `production` approach. You can't pass registration with fake email.\n  Just clone, install and run in local (client \u0026 server). You need to install and run also MongoDB on\n  your system. Change flag in databased confimed to the `true` value to skip registration confirmation process.\n\n## Client part\n\n#### To make all dependency works in build proccess we need some plugins.\n\n```javascript\n  npm install\n```\n\nCommand (current: single player solution build):\n\n```javascript\n  npm run dev\n  // or\n  npm run dev-all\n```\n\nOutput for (npm run dev):\n\n\u003cpre\u003e\n\n├── build/  (This is auto generated)\n|   ├── externals/\n|   ├── imgs/\n|   ├── styles/\n|   ├── templates/\n|   ├── app.html\n|   ├── manifest.web\n|   ├── offline.html\n|   ├── visualjs2.js\n|   ├── worker.js\n\n\u003c/pre\u003e\n\n\u003cb\u003e Navigate in browser /build/app.html to see client app in action \u003c/b\u003e\n\n### New way of building multi entries.\n\nCommand is `npm run dev-all` . This is test for multi instancing webpack capabilities.\nWebpack in this case use `webpack.multicompile.config.js`.\nThanks for common object definition:\n\nThis is best place to manage status of your build action.\nJust comment or uncomment specific webpack object in this place =\u003e\n\n`webpack.multicompile.config.js`\n\n```javascript\nmodule.exports = [\n  webPackModuleMultiPlayerSolution,\n  webPackModuleSingleSimpleSolution,\n  webPackModuleMultiChatBasketBall,\n  webPackModuleTutorialsDemo1,\n  // webPackModuleTutorialsDemo2  DISABLE HERE WHOLE SUB BUILD\n];\n```\n\nPoint of Multi entries is to make independent healthy builds end point\nfor our application. Current export's for 3 solutions looks like\n(runs webpack.multicompile.config.js) :\n\nCommand:\n\n```javascript\n  npm run dev-all\n```\n\nOutput (npm run dev-all):\n\n\u003cpre\u003e\n\n├── build/  (This is auto generated)\n|   ├── multiplayer/\n|   ├── singleplaye/\n|   ├── demo1/\n|   ├── demo2/\n|   ├── sprite-animation/\n|   ├── basket-ball-chat/ [WIP]\n\n\u003c/pre\u003e\n\n-Client part is browser web application. No reloading or redirecting. This is single page\napplication. I use html request only for loading local/staged html (like register, login etc.).\nNetworking is based on webSocket full-duplex communication only. This is good cross for old\nfasion native programmers not for web server REST oriented skills. No `mix` in communication usage.\nYou must be conform with classic socket connection methodology and your own idea about connections.\nwebRTC can be used for many proporsion.\n\nAlready implemented:\n\n- video chat webRTC (SIP) chat and data communication.\n  based on multiRTC3 for all modern browser's and hybryd implementation\n  (android, ios etc.) (UDP/TCP). Running on socket.\n- Bonus connections options - Coordinator another brodcaster.\n  Parallel multiRTC connections. Coordinator is disabled by default\n  but can be used in same way just like broadcaster.\n- Simple facebook api script (addson).\n\n-Class 'Connector' (native webSocket) used for user session staff.\n\n- For main account session staff like login, register etc.\n\n### Client config\n\nIf you want web app without any networking then setup:\n\n\u003ccode\u003e appUseNetwork: boolean = false; \u003c/code\u003e\n\nYou want to use communication for multiplayer but you don't want to use server database\naccount sessions. The setup this on false in main client config class.\n\u003ccode\u003e appUseAccountsSystem: boolean = false; \u003c/code\u003e\n\n- Networking is disabled or enabled depens on current dev status.\n\nFind configuration for client part at ./src/lib/client-config.ts\n\nPlease read [About Client Configuration](https://github.com/zlatnaspirala/visual-ts-game-engine/blob/master/client-config-readme.md)\n\n### Start dependency system from app.ts\n\n- First game template is Platformer.\n  This is high level programming in this software. Class Platformer run\n  with . Class Starter is base class for my canvas part\n  (matter.js/ts).\n  It is injected to the Platformer to make full operated work.\n- gamesList args for ioc constructor is for now just simbolic for now. (WIP)\n- In ioc you can make strong class dependency relations.\n  Use it for your own structural changes. If you want to make light version for build\n  than use ioc to remove everything you don't need in build.\n\nioc.ts files located at: `src\\controllers`. In ioc file i import choosen classes and\ncreate instance or bind. Ioc also save (singleton) instance's and we never make same\nclass instance again (this is the role). We just call game.ioc.get.NAME_OF_INSTANCE.\nObject `.get` is key access object not array.\nBest practice is to use only one ioc. In that way you will get clear build without\nbig shared in most time unnecessary data. If you application is big project.Than\nbest way is still use one ioc.ts for per web page. In that way i use refresh\nor redirect moment to load optimised script bundle for current page.\n\n#### Main dependency file\n\n- Current version:\n\n```typescript\n/**\n * Import global css\n */\nrequire(\"./style/animations.css\");\nrequire(\"./style/styles.css\");\n\nimport AppIcon from \"./app-icon\";\nimport GamePlay from \"./examples/platformer/scripts/game-play\";\nimport Ioc from \"./controllers/ioc\";\n\n/**\n * plarformerGameInfo\n * This is strong connection.\n * html-components are on the same level with app.ts\n * Put any parameters here.\n */\nconst plarformerGameInfo = {\n  name: \"Platformer\",\n  title: \"Start Platformer game play\",\n};\n\nconst gamesList: any[] = [plarformerGameInfo];\n\nconst master = new Ioc(gamesList);\nconst appIcon: AppIcon = new AppIcon(master.get.Browser);\nmaster.singlton(GamePlay, master.get.Starter);\nconsole.log(\"Platformer: \", master.get.GamePlay);\n\nmaster.get.GamePlay.attachAppEvents();\n\n/**\n * Make it global for fast access in console testing.\n * (window as any).platformer = master.get.GamePlay;\n */\n(window as any).master = master;\n(window as any).platformer = master.get.GamePlay;\n```\n\n### Recording your game\n\nSetup in `client-config.ts`:\n\n```ts\n  public recordCanvasOption: any = {\n    injectCanvas: () =\u003e document.getElementsByTagName(\"canvas\")[0],\n    frameRequestRate: 30,\n    videoDuration: 20,\n    outputFilename: \"record-gameplay.mp4\",\n    mineType: \"video/mp4\",\n    resolutions: '800x600'\n  }\n```\n\nYou can use this call:\n\n```ts\nplatformer.starter.ioc.get.RecordGamePlay.recordCanvas.run();\n```\n\n#### About runup gameplay\n\n@Note Somethimes i override autoStartGamePlay!\n\nIn client-config :\n\n`Disabled at the moment for single-player solution.`\njavascript\n\n```\n  private autoStartGamePlay: boolean = false;\n```\n\nIf you setup 'autoStartGamePlay' to false you need to run gamePlay\nwith :\n\njavascript\n\n```\n  master.get.GamePlay.load()\n```\n\nNote : Only singleton object instance from master start with upcase letters.\n\n### Project structure\n\n- build/ is autogenerated. Don't edit or add content in this folder.\n- src/ is main client part (Browser web application).\n  Main file : app.ts\n- src/libs/ is common and smart pack of classes, interfaces etc.\n  easy access.\n- server/ folder is fully indipendent server size. I use one git repo\n  but consider '/server' represent standalone application. There's server\n  package.json independently from client part also config is not the common.\n  I just like it like that.\n\n\u003cpre\u003e\n\n├── package.json\n├── package-lock.json\n├── webpack.config.js\n├── tsconfig.json\n├── tslint.json\n├── launch.json\n├── workplace.code-workspace\n├── LICENCE\nlogo.png\nLICENSE\n├── build/  (This is auto generated)\n|   ├── externals/\n|   ├── templates/\n|   ├── imgs/\n|   ├── styles/\n|   |   └── favicon.ico\n|   ├── visualjs2.js\n|   ├── app.html\n├── src/\n|   ├── style/\n|   |   ├── styles.css\n|   ├── controllers/\n|   |   ├── ioc.ts\n|   |   ├── ioc-single-player.ts\n|   ├── libs/\n|   |   ├── class/\n|   |   |   ├── networking/\n|   |   |   |   ├── rtc-multi-connection/\n|   |   |   |   |   ├── FileBufferReader.js\n|   |   |   |   |   ├── RTCMultiConnection2.js\n|   |   |   |   |   ├── RTCMultiConnection3.js\n|   |   |   |   |   ├── linkify.js\n|   |   |   |   |   ├── getHTMLMediaElement.js\n|   |   |   |   |   ├── socket.io.js\n|   |   |   |   ├── broadcaster.ts\n|   |   |   |   ├── coordinator.ts\n|   |   |   |   ├── connector.ts\n|   |   |   |   ├── network.ts\n|   |   |   ├── visual-methods/\n|   |   |   |   ├── sprite-animation.ts\n|   |   |   |   ├── text.ts\n|   |   |   |   ├── texture.ts\n|   |   |   ├── bot-behavior.ts\n|   |   |   ├── browser.ts\n|   |   |   ├── math.ts\n|   |   |   ├── position.ts\n|   |   |   ├── resources.ts\n|   |   |   ├── sound.ts\n|   |   |   ├── system.ts\n|   |   |   ├── view-port.ts\n|   |   |   ├── visual-render.ts\n|   |   ├── interface/\n|   |   |   ├── controls.ts\n|   |   |   ├── drawI.ts\n|   |   |   ├── global.ts\n|   |   |   ├── visual-components.ts\n|   |   |   ├── networking.ts\n|   |   ├── multiplatform/\n|   |   |   ├── mobile/\n|   |   |   |   ├── player-controls.ts\n|   |   |   ├── global-event.ts\n|   |   ├── types/\n|   |   |   ├── global.ts\n|   |   ├── client-config.ts\n|   |   ├── ioc.ts\n|   |   ├── starter.ts\n|   ├── icon/ ...\n|   ├── examples/\n|   |   ├── platformer/\n|   |   ├── platformer-single-player/\n|   |   ├── basket-ball-chat/\n|   |   ├── tutorials/      (Most simple example of usage)\n|   |   |   ├── add-camera-stream-to-gameplay/\n|   |   |   ├── add-element/\n|   ├── html-components/\n|   |   ├── register.html\n|   |   ├── login.html\n|   |   ├── games-list.html\n|   |   ├── user-profile.html\n|   |   ├── store.html\n|   |   ├── broadcaster.html\n|   ├── index.html\n|   ├── app-icon.ts\n|   └── app.ts\n|   └── manifest.web\n└── server/\n|   ├── package.json\n|   ├── package-lock.json\n|   ├── server-config.js\n|   ├── database/\n|   |   ├── database.js\n|   |   ├── common/\n|   |   ├── email/\n|   |   |   ├── templates/\n|   |   |   |   ├── confirmation.html.js\n|   |   |   ├── nocommit.js (no commited for now)\n|   |   └── data/ (ignored - db system folder)\n|   ├── rtc/\n|   |   ├── server.ts\n|   |   ├── connector.ts\n|   |   ├── self-cert/\n\n\u003c/pre\u003e\n\n### About Dev Prodc regime\n\nEnum: `dev`, `prod`, `mongodb.net` or `mongodb.net-dev`\n\nExplanation for:\nthis.serverMode = \"mongodb.net-dev\";\nIf you wanna use mongod.net database but you wanna use it from localhost.\nMultiplayer (with videochat or realtime net) still use `https`.\nFor single player variant you can use `http`.\n\n### Audios\n\nAudios are not loaded by defoult if you use it in IOC controller.\nYou create audio instance from code.\nYou can mute it all.\n\n#### Add new sound\n\n- Open webpack and add line:\n  [After this you need to restart webpack.]\n\n```\nnew CopyWebpackPlugin([\n  ...\n  // Audios\n  {from: \"./src/examples/platformer-single-player/audios/player/dead.mp3\", to: \"audios/newAudio1.mp3\"}\n  {from: \"./src/examples/platformer-single-player/audios/player/dead.mp3\", to: \"audios/newAudio2.mp3\"}\n], { debug: 'warn' })\n```\n\n- Find nice place for creating instance:\n\n```js\nmyInstance.starter.ioc.get.Sound.createAudio(\n  \"./audios/newAudio1.mp3\",\n  \"newAudio1\"\n);\nmyInstance.starter.ioc.get.Sound.createAudio(\n  \"./audios/newAudio2.mp3\",\n  \"newAudio2\"\n);\n```\n\n- Find place where you wanna run play:\n\n```js\nroot.starter.ioc.get.Sound.playById(\"jump\");\n```\n\n\n### General networking config:\n\n#### About generating localhost certs\n\n[Read more about cert](https://github.com/zlatnaspirala/visual-ts-game-engine/blob/dev/server/rtc/apache-local-cert/help.md)\nserverMode `dev` od `prod` use `https` protocol to make full works on both regime (If you using multiplayer example).\nYou need to install cert (mmc.exe) (for User or local Mashine), also in browser:\n\n![](https://github.com/zlatnaspirala/visual-ts-game-engine/blob/dev/nonproject-files/browser-selfsign-allow.png)\n\n\n### GUI Tools\n\nTo get GUI tools first download python3 for your OS.\n`creator2dmap` is python3 canvas oriented application.\n\n```javascript\n  cd tools\n  git submodule init\n  git submodule update\n  // or\n  git clone --recurse-submodules https://github.com/zlatnaspirala/visual-ts-game-engine\n\n  // update\n  git fetch\n  git merge\n```\n\nIn this way you will get project: https://github.com/zlatnaspirala/creator-2dmap\nintro `tools/creator2dmap/` folder.\n\nStart application with:\n\n```\n  python.exe tool.py (win)\n  ./python3 tool.py (macos)\n```\n\n## Documentation:\n\nFollow link for API: [WIP]\n[Application documentation](https://maximumroulette.com/apps/visual-ts/multiplayer/api-doc/)\n\nPossible to install from (It's good for instancing new clear base project):\n\n```\n  npm i --save visual-ts\n```\n\nTake a look this repo (it is example for approach `npm i visual-ts`)\nhttps://github.com/zlatnaspirala/visual-ts-module\n\nIf you wanna generate doc you will need manual remove comment\nfrom plugin section in webpack.config.js. Restart 'npm run dev'\n\nIf you wanna insert some new html page just define it intro\nwebpack.config.js:\n\n```javascript\nplugins : [\n        new HtmlWebpackPlugin({\n            filename: '/templates/myGameLobby.html',\n            template: 'src/html-components/myGameLobby.html'\n        }),\n...\n```\n\n- See register and login example.\n\n### Code format :\n\n```javascript\n  npm run fix\n  npm run tslint\n```\n\nor use :\n\n```javascript\n  tslint -c tslint.json 'src/**/*.ts' --fix\n  tslint -c tslint.json 'src/**/*.ts'\n```\n\n## Abour visual tools\n\nBased on python3 tk tech.It is standalone git project imported like\ngit submodule.\n\nhttps://github.com/zlatnaspirala/creator-2dmap\n\n[Important - About tools setup](https://github.com/zlatnaspirala/visual-ts-game-engine/blob/dev/tools/readme.md)\n\nAfter setup run python app from cli with command:\n\n```javascript\n  npm run creator\n```\n\n![Creator 2d map](https://github.com/zlatnaspirala/visual-ts-game-engine/blob/dev/nonproject-files/creator2dmap.png)\n\n\u003c/br\u003e\n\n## Public stage server / Tutorial demos\n\nACTUALLY SERVER IS RUNNING - You need to register.\n\n#### Basic examples - How to create instance of engine. With minimum elements and features.\n\n- #### [Static object vs Free](https://maximumroulette.com/apps/visual-ts/demo1/app.html)\n- #### [Webcam stream loaded as player skin](https://maximumroulette.com/apps/visual-ts/demo2/app.html)\n\n#### Platformer example without networking, without account session\n\n- #### [Single player platformer](https://maximumroulette.com/apps/visual-ts/singleplayer/app.html)\n\n#### Multiplayer - Without Account session\n\n- #### [Video chat platformer](https://maximumroulette.com/apps/visual-ts/basket-ball-chat/app.html)\n\n#### Multiplayer/webCam inside gamePlay - With Account session\n\n- #### [Video chat platformer](https://maximumroulette.com/apps/visual-ts/multiplayer/app.html)\n\n\u003c/br\u003e\n\n## Licence \u0026\u0026 Credits\n\nVisual Typescript Game engine is under:\n\n#### MIT License generaly\n\nexcept ./src/lib. Folder lib is under:\n#### GNU LESSER GENERAL PUBLIC LICENSE Version 3\n\n### External licence in this project:\n\n\u003cb\u003e- Networking based on:\u003c/b\u003e \u003cbr/\u003e\nKurento OpenVidu server [openvidu-browser-2.20.0]\nhttps://openvidu.io/\u003cbr/\u003e\n\n\u003cb\u003e- Base physics beased on :\u003c/b\u003e \u003cbr/\u003e\nMatter.js https://github.com/liabru/matter-js \u003cbr/\u003e\n\n\u003cb\u003eSprites downloaded from (freebies/no licence sites):\u003c/b\u003e\n\n- https://craftpix.net/\n- https://dumbmanex.com\n- https://opengameart.org/content/animated-flame-texture\n- https://www.gameart2d.com/\n- https://www.behance.net/JunikStudio\n\n\u003cb\u003eIn Dreams by Scott Buckley | www.scottbuckley.com.au\u003c/b\u003e\nMusic promoted by https://www.chosic.com/free-music/all/\nAttribution 4.0 International (CC BY 4.0)\nhttps://creativecommons.org/licenses/by/4.0/\n\u003c/br\u003e\n\n## Todo list for 2025\n\n\u003cb\u003eI'am still far a away from project objective :\u003c/b\u003e\n\n- Create examples demos in minimum 20 game play variants\n  (table games, actions , platformers , basic demo trow the api doc etc.).\n\n\u003c/br\u003e\n\n![Platformer](https://github.com/zlatnaspirala/visual-ts/blob/master/nonproject-files/platformer-typescript.png)\n\n## Donate my work\n\n### https://buy.stripe.com/test_7sIcQ13nz0pq8zS8ww\n\n## Please join this project and make collaboration\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzlatnaspirala%2Fvisual-ts-game-engine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzlatnaspirala%2Fvisual-ts-game-engine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzlatnaspirala%2Fvisual-ts-game-engine/lists"}