{"id":15659690,"url":"https://github.com/servb/pph","last_synced_at":"2025-05-05T19:42:47.221Z","repository":{"id":55041677,"uuid":"127517427","full_name":"SerVB/pph","owner":"SerVB","description":"Pocket Palm Heroes – a turn-based strategy made in the style and feel of the old-school \"Heroes of Might and Magic\" game. Native full version: https://github.com/SerVB/pph-native","archived":false,"fork":false,"pushed_at":"2021-07-18T17:16:08.000Z","size":16369,"stargazers_count":21,"open_issues_count":14,"forks_count":4,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-30T23:11:09.285Z","etag":null,"topics":["game","korge","kotlin","pocket-palm-heroes"],"latest_commit_sha":null,"homepage":"https://servb.github.io/pph/","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SerVB.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-03-31T09:17:09.000Z","updated_at":"2025-03-10T19:45:22.000Z","dependencies_parsed_at":"2022-08-14T09:50:55.226Z","dependency_job_id":null,"html_url":"https://github.com/SerVB/pph","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/SerVB%2Fpph","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SerVB%2Fpph/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SerVB%2Fpph/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SerVB%2Fpph/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SerVB","download_url":"https://codeload.github.com/SerVB/pph/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252563923,"owners_count":21768548,"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","korge","kotlin","pocket-palm-heroes"],"created_at":"2024-10-03T13:18:15.190Z","updated_at":"2025-05-05T19:42:47.191Z","avatar_url":"https://github.com/SerVB.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Pocket Palm Heroes [![Discord](https://img.shields.io/discord/563755662866251786.svg?label=Join%20PPH%20on%20Discord!)](https://discord.gg/Rw95NQx) ![Build](https://github.com/SerVB/pph/workflows/Build/badge.svg) [![Deploy to GitHub Pages](https://github.com/SerVB/pph/actions/workflows/gh-pages.yml/badge.svg)](https://servb.github.io/pph/)\n\nThis project tries to bring good old Palm Heroes/Pocket Heroes back to life. The work was started in 2017.\n\n![Screenshots image](pictures/good-old-gif.gif)\n\nPocket Palm Heroes is an original turn-based strategy for different devices, that is made in the style and feel of the\nold-school \"Heroes of Might and Magic\" game. Pocket Palm Heroes plunges you into the atmosphere of exciting fantasy\nadventures and epic battles! Lead your heroes as a barbarian orc chief, a noble knight, a mighty wizard, a fast\nbeautiful sorceress, a warlock, or a creepy undead necromancer! As your kingdom grows in size, and your heroes get more\npowerful, you will discover new places, learn new skills and magic, and fight different monsters!\n\n## Play online!\n\nIt's available at GitHub Pages: \u003chttps://servb.github.io/pph/\u003e.\n\n## Running from sources\n\nTo run the game, clone the repo and execute the following commands:\n\n```shell\n# Pack resources (needed only once or after changes in resources):\n./gradlew :packResources      # for Linux/Mac\n.\\gradlew.bat :packResources  # for Windows\n```\n\n```shell\n# Run app:\n./gradlew :runJvm      # for Linux/Mac\n.\\gradlew.bat :runJvm  # for Windows\n```\n\nJava needs to be installed on the computer.\n\n## What we have\n\n### Sources of different versions\n\nUnsurprisingly, this project is based on the following source codes:\n\n1. \u003chttps://github.com/sigman78/pocketheroes/\u003e (available under Apache 2.0 license) \u0026mdash; 1.04 beta. Can be compiled\n   even in Visual Studio 2019 (Community) but with some effort (feel free to ask for help at Discord if you want to\n   compile them).\n1. \u003chttps://sourceforge.net/projects/palmheroes/\u003e (available under Apache 2.0 license) \u0026mdash; seems to be 1.03. Can't\n   be compiled because of lack of some files. Also, there is many code that is related to licence registration (take a\n   look at commits).\n\nThe sources are old (not the latest 1.05). Let's primarily use the 1.04 beta version.\n\n### Change logs\n\nChange logs are needed to fix the old sources and upgrade the version to the final known one \u0026mdash; 1.05.\n\n* [0.02, 0.03, 0.041](http://hpc.ru/soft/software.phtml?id=9712).\n* [1.01, 1.03](http://hpc.ru/soft/software.phtml?id=18685).\n* [1.04, 1.05](https://4pda.ru/forum/index.php?showtopic=104972).\n\n### File prefixes\nMany source files has prefixes.\n\nPrefix|Possible description\n---|---\ngxl|Main framework\nxxl|Extensions for the main framework\nxau|Audio compression\nxjp|Image compression\nhe|\"Helium\" library\n\n### Game menus\n\nMenu classes|Description|Menu items\n---|---|---\n`MenuView`/`iMainMenuDlg`|Main menu screen|`TRID_MENU_NEWGAME`, `TRID_MENU_LOADGAME`, `TRID_MENU_HIGHSCORE`, `TRID_MENU_CREDITS`, `TRID_MENU_EXITGAME`\n`GameMenuDlg`/`iGameMenuDlg`|Small menu dialog in the corner of the screen during the game|Settings, Save game, Main menu, Quit, Return to game\n\n## What we do\n\nPort the existing sources to Kotlin. Use [KorGE](https://korge.org/) (available under Apache 2.0 license) to draw\npicture, process user input, and provide binaries for different platforms.\n\n### Progress\n\nThe progress can be seen under the [Issues](https://github.com/anonymous-frog-studio/pph/issues) tab.\n\nThere are some screencasts of what's working:\n\n* [Progress bar](https://youtu.be/gDINi7vj29k).\n* [Main menu](https://youtu.be/jZVkJDCNsCQ).\n* [Language selector and credits](https://youtu.be/2puY83JPWbw).\n\n### Practices\n\nThere are some practices of rewriting C++ code to JVM-related code.\n\n#### Constant references\n\nMany objects are passed to functions as constants. To archive this in Kotlin, it's needed to write an interface with\nconstant (read-only) methods and another interface or class with other methods that extends/implements the constant\ninterface. The interface should have the \"I\" prefix (from \"Immutable\"). You can find many examples in the ported\nsources.\n\nMaybe Kotlin will have such a concept in the future: [KT-44173](https://youtrack.jetbrains.com/issue/KT-44173).\n\n#### Pointers\n\nSome arguments are passed as pointers and are modified inside the function. For these purposes, just pass mutable\nobject. If the type is immutable, for example, `String` or `Int`, we have a special wrapper called `Mutable\u003cT\u003e`. Find\nexamples in the ported sources.\n\n#### Remove super classes\n\n* `iIListNode`.\n* `TypeAware`.\n\n#### Use standard Kotlin classes\n\nKotlin class|Initial type\n---|---\n`String`|`_T(\"String content\")`, `L\"String content\"`, `LPCTSTR`, `iStringTemplate\u003cE\u003e`, `iStringW`, `iStringA`, `iStringT`\n`Byte`|`sint8`\n`UByte`|`uint8`\n`Short`|`sint16`\n`UShort`|`uint16`\n`Int`|`sint32`\n`UInt`|`uint32`\n`Long`|`sint64`\n`ULong`|`uint64`\n\n#### Code folding\n\nIDEs such as IDEA or NetBeans can fold code. It's useful to hide huge pieces of code by default:\n\n```html\n//\u003ceditor-fold defaultstate=\"collapsed\" desc=\"hashCode \u0026 equals\"\u003e\ncustom hashCode and equals methods here\n//\u003c/editor-fold\u003e\n``` \n\n## Other links\n\n* Pocket Heroes aka Palm Heroes history \u0026mdash; \u003chttp://wiki.ioupg.com/doku.php/ioupgteam:pocket_heroes\u003e. Has some info\n  about the game resources compression. Interesting in general ;)\n* Group with fans of Palm Kingdoms, the descendant game \u0026mdash; \u003chttps://vk.com/palmkingdoms\u003e.\n* Previous repo of this porting effort \u0026mdash; \u003chttps://github.com/anonymous-frog-studio/new-ph-legacy\u003e \u0026mdash; obsolete\n  and archived.\n\n## License\n\nThis work is available under Apache 2.0 license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fservb%2Fpph","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fservb%2Fpph","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fservb%2Fpph/lists"}