{"id":24698736,"url":"https://github.com/kleineluka/terra","last_synced_at":"2026-03-09T21:02:56.911Z","repository":{"id":273293676,"uuid":"919233503","full_name":"kleineluka/terra","owner":"kleineluka","description":"Server emulation for U.B. Funkeys. 🌏","archived":false,"fork":false,"pushed_at":"2025-03-29T10:14:43.000Z","size":155,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-07T21:44:42.564Z","etag":null,"topics":["flash","funkeys","private-server","server","server-emulator","ub","ub-funkeys","ubfunkey","ubfunkeys"],"latest_commit_sha":null,"homepage":"","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/kleineluka.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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}},"created_at":"2025-01-20T02:28:24.000Z","updated_at":"2025-03-29T10:31:02.000Z","dependencies_parsed_at":null,"dependency_job_id":"a66305a2-9cdb-4fc4-a415-161f3818c440","html_url":"https://github.com/kleineluka/terra","commit_stats":null,"previous_names":["kleineluka/terra"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kleineluka/terra","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kleineluka%2Fterra","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kleineluka%2Fterra/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kleineluka%2Fterra/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kleineluka%2Fterra/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kleineluka","download_url":"https://codeload.github.com/kleineluka/terra/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kleineluka%2Fterra/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30312130,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T20:05:46.299Z","status":"ssl_error","status_checked_at":"2026-03-09T19:57:04.425Z","response_time":61,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["flash","funkeys","private-server","server","server-emulator","ub","ub-funkeys","ubfunkey","ubfunkeys"],"created_at":"2025-01-27T04:29:55.478Z","updated_at":"2026-03-09T21:02:56.905Z","avatar_url":"https://github.com/kleineluka.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Terra 🌏\nCapitalism toy-selling video game server emulator from my childhood built in Node and Express. I've called it Terra because that's what the world of UB Funkeys is called! **Not done yet. Please also be aware that the logs WILL be flooded with information while in development, and not a clean user experience.**\n\n# Highlights 🌈\n- Stupidly simple and secure accounts with bcrypt.\n- Fast, portable and no-setup database with SQLite.\n- Readable and organised code with extensive comments (from my annoying brain).\n- Highly configurable by compartmentalising settings into JSON files.\n- Robust error handling and debugging system for further development.\n\n# Progress Tracking 📌\n\n\u003c!-- Details List --\u003e\n\u003cdetails\u003e\n\u003csummary\u003eServer Emulator (6/7)\u003c/summary\u003e\n\n- [x] Database\n- [x] Environment (config, cache, user data)\n- [x] TCP Server\n- [x] HTTP Server\n- [x] Packet Formatting\n- [x] Active Connection Manager\n- [ ] Better Error Handling\n\n\u003c/details\u003e\n\n\u003c!-- Core Features --\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCore Features (6/7)\u003c/summary\u003e\n\n- [x] Guest Login\n- [x] Host Details\n- [x] Server Details\n- [x] Account Creation\n- [x] Account Login\n- [ ] Another Login\n- [x] Heartbeat\n\n\u003c/details\u003e\n\n\u003c!-- User Features --\u003e\n\u003cdetails\u003e\n\u003csummary\u003eUser Features (3/10)\u003c/summary\u003e\n\n- [x] Friend List\n- [x] Chat Status\n- [x] Phone Status\n- [ ] Add Friend\n- [ ] Accept Friend\n- [ ] Delete Friend\n- [ ] Send DM\n- [ ] Delete DM\n- [ ] Send Invite\n- [ ] Respond to Invite\n\n\u003c/details\u003e\n\n\u003c!-- Chat Features --\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChat Features (0/12)\u003c/summary\u003e\n\n- [ ] Create Room\n- [ ] Change Properties\n- [ ] Item Activation\n- [ ] Join Room\n- [ ] Kick Out\n- [ ] Chat Message\n- [ ] Player Move\n- [ ] Open Door\n- [ ] Put Item\n- [ ] Player Location\n- [ ] Remove Item\n- [ ] Send Event\n\n\u003c/details\u003e\n\n\u003c!-- Boxing Minigame --\u003e\n\u003cdetails\u003e\n\u003csummary\u003eBoxing Minigame in Nightmare Rift (0/1)\u003c/summary\u003e\n\n- [ ] Boxing Action\n\n\u003c/details\u003e\n\n\u003c!-- Soccer Minigame --\u003e\n\u003cdetails\u003e\n\u003csummary\u003eSoccer Minigame in Daydream Oasis (0/4)\u003c/summary\u003e\n\n- [ ] Ball Save\n- [ ] Character Chosen\n- [ ] Send Moving\n- [ ] Strike Parameter\n\n\u003c/details\u003e\n\n\u003c!-- Mahjong Minigame --\u003e\n\u003cdetails\u003e\n\u003csummary\u003eMahjong Minigame (0/3)\u003c/summary\u003e\n\n- [ ] Freeze Game\n- [ ] Remove Tile Pair\n- [ ] Reset Tiles\n\n\u003c/details\u003e\n\n\u003c!-- Pool Minigame --\u003e\n\u003cdetails\u003e\n\u003csummary\u003ePool Minigame in Nightmare Rift (0/4)\u003c/summary\u003e\n\n- [ ] Release Cue\n- [ ] Motion End\n- [ ] Roll Update\n- [ ] Partner Hit\n\n\u003c/details\u003e\n\n\u003c!-- Fight Minigame --\u003e\n\u003cdetails\u003e\n\u003csummary\u003eFight Minigame (0/17)\u003c/summary\u003e\n\n- [ ] Block\n- [ ] Extended Punch\n- [ ] Headbutt\n- [ ] Health Reduction\n- [ ] Hit\n- [ ] Jump Kick\n- [ ] Jump\n- [ ] Kick\n- [ ] Move\n- [ ] Ping\n- [ ] Punch\n- [ ] RTT\n- [ ] Special Action\n- [ ] Score\n- [ ] Soft Reconciliation\n- [ ] Stop\n- [ ] Unblock\n\n\u003c/details\u003e\n\n\u003c!-- Chinese Checkers --\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChinese Checkers (0/2)\u003c/summary\u003e\n\n- [ ] Movement\n- [ ] Turn Notification\n\n\u003c/details\u003e\n\n\u003c!-- Worms in Paradox Green --\u003e\n\u003cdetails\u003e\n\u003csummary\u003eWorms in Paradox Green (0/0)\u003c/summary\u003e\n\n- Nothing Yet\n\n\u003c/details\u003e\n\n\u003c!-- Dominoes in Paradox Green --\u003e\n\u003cdetails\u003e\n\u003csummary\u003eDominoes in Paradox Green (0/0)\u003c/summary\u003e\n\n- Nothing Yet\n\n\u003c/details\u003e\n\n\u003c!-- Trunk Features --\u003e\n\u003cdetails\u003e\n\u003csummary\u003eTrunk Features (0/6)\u003c/summary\u003e\n\n- [ ] Get Assets\n- [ ] Balance\n- [ ] Product List\n- [ ] User Transactions\n- [ ] Buy Product (various subcommands)\n- [ ] Send Asset\n\n\u003c/details\u003e\n\n\u003c!-- Galaxy Features --\u003e\n\u003cdetails\u003e\n\u003csummary\u003eGalaxy Features (Cloud Storage) (2/5)\u003c/summary\u003e\n\n- [x] Profile Save Version\n- [x] Statistics Request\n- [ ] Save Profile\n- [ ] Load Profile\n- [ ] Leaderboards\n\n\u003c/details\u003e\n\n\u003c!-- Galaxy Features --\u003e\n\u003cdetails\u003e\n\u003csummary\u003eMultiplayer Features (0/6)\u003c/summary\u003e\n\n- [ ] Leave Game\n- [ ] Ready Up\n- [ ] Message Opponent\n- [ ] Play Again\n- [ ] Chat Message\n- [ ] Draw (yes/no subcommands)\n\n\u003c/details\u003e\n\n\u003c!-- Misc Features --\u003e\n\u003cdetails\u003e\n\u003csummary\u003eMisc. Features (0/10)\u003c/summary\u003e\n\n- [ ] Clean Up Code (ex. when done remove debugging features, useless imports/exports, clean up comments, etc.)\n- [ ] Figure Out More Response Codes\n- [ ] Documentation\n- [ ] Safety Filter (ex. account name)\n- [ ] Graceful disconnection (ex. remove connection statuses on socket close)\n- [ ] Conflicting Command Handling (based on context)\n- [ ] Web Panel for Admins\n- [ ] EULA Check (by using this you wont impersonate the game)\n- [ ] Clean up inactive users regularly\n- [ ] Any random \"todo\" comments \n- [ ] Convert to Typescript? ~~Hehehe.. Maybe one day..~~\n\n\u003c/details\u003e\n\n*Note: This is not an exhaustive list, just a frankenstein of A1Emu, UBFunkeysServer, and XmlMessageDoc. There are also a lot of overlapping commands, which will be properly organised in the future. Once these are complete, I will look for any missing niche commands!*\n\n# Why Node? Why not continue Java or C#? 😨\nBy choosing Node over Java and C#, setup is lightweight and easy. The drawback is that it will not scale as well, but for a Flash game, this is more than fine. Node has many libraries established for web communication like what Terra needs and is a straightforward approach. I am not familiar with the codebases well enough to continue the other projects and a fresh start is more appealing to me.\n\n# Acknowledgements 🥰\n- [A1Emu](https://github.com/GittyMac/A1Emu) (and by extension [UBFunkeysServer](https://github.com/Leahnaya/UBFunkeysServer)) was a reference for the progress tracking and the server emulator. I plan for this to be a \"re-implementation\" of these projects initially but grow from there.\n- [XmlMessageDoc](https://github.com/bluisblu/XmlMessageDoc) has a lot of useful information about the game's packets.\n- [OpenFK](https://github.com/GittyMac/OpenFK/), [JPEXS](https://github.com/jindrapetrik/jpexs-decompiler), and [Wireshark](https://github.com/wireshark/wireshark) for testing and reverse engineering the game client.\n- Mattel, Radica Games, and Arkadium for creating the game.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkleineluka%2Fterra","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkleineluka%2Fterra","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkleineluka%2Fterra/lists"}