I am creating a Point-and-Click engine, especially for my newest game project, ‘PixelParody.’ This project began after the release of my iOS game, The Lost Adventures. One of the issues with this game was the complexity of the scripts used for the rooms. These scripts were challenging to maintain. What I actually discovered was that I wanted to have a DSL (domain-specific language) as the main driver for the rooms.
So how would such a DSL look and still maintains the power of Groovy or Lua when necessary?
onUsingObject(doorknocker){
tasks {
task boris.moveCharacterTowards("doorknocker")
task boris.orientUp()
task room.playSound("doorknock.wav")
task boris.waitSomeTime(2)
task bobby.say("670238B1-D087-440B-814E-252020EB0149", "They probably know it is you at the door and won't let you in !")
}
}
What this set of tasks does is create a series of ‘Closures’ that run sequentially. This allows the character to walk toward the desired object, orient themselves correctly, and play a door knocking sound. A snide remark by an NPC is triggered after 2 seconds.
What this scripting also enables is an AI Tool like ChatGPT to generate these scripts for you if you tell it what to do in natural language. This works especially well. In the future, tools will also be able to display a GUI interface and should be as easy to use as Scratch.
Making my game a ‘Talkie’
What remained the same as in ‘The Lost Adventures’ is the voice and lipsync in the new engine. But especially I made new tooling to support me in generating the Rhubarb lipsync sequence. You can find the github project here, it is called lipsync-flux-api. It uses Flux API to be able to track the progress as the Lipsync process can take up quite some amount of time.
As this project supports a runnable GUI and a Rest API (with Open API support) it can be incorporated in any kind of build pipeline. But you can also use the GUI for quick processing
Blocky NavMesh Pathfinding
Another big advancement in this engine is the Pathfinding (the Lost Adventures used a tile based A* algorithm). This engine uses a dense Navigation Mesh and an algorithm to reduce the waypoints to get that ‘blocky’ walk pattern you often see in classic Point and Click games.
The green points are the inputs for the Navmesh.
A tool is converting these ‘holes’ into a Wavefront obj file that has an empty value for Z (normally UP in 3D), loaded in the Game engine. So if you need to tweak the mesh, you can easily do that in Blender.
The Tool is a little bit of a ‘Frankenstein’ tool that takes a ‘.wimpy’ file and converts this into a wavefront file with a containerized Blender.
It sounds as a lot of work. But without automating of these tasks, it will become a drag on your flow and the game will take much more time to make.
So always Automate,Automate, Automate…….!
Reinvented Inventory Interaction
One of the most enjoyable aspects of this game is the inventory interaction. I’ve examined numerous Point-and-Click games, and in many cases, inventory management felt somewhat awkward. In ‘Fate of Atlantis,’ for example, the inventory is always visible, but it occupies a significant portion of the screen. Some games attempt to address this by implementing a collapsible inventory, but I found that approach to be less than ideal as well. So, I began to wonder: Can I make the inventory pop up in the center of the screen while still allowing the room to remain visible, complete with all its details?
This approach has some drawbacks as well. I wanted to avoid forcing players to constantly combine ‘Look At’ or ‘Use’ actions on inventory items. Instead, interaction occurs by simply dragging the item to any location, object, NPC, or playable character. When you drag it onto a playable character, it provides a description of the item and offers a hint to drag it again if the character needs to use it. For example, in a scenario like ‘Use the potion to gain strength,’ this interaction method felt very intuitive.
An outline gives feedback what is combined. You can drag :
- Inventory items on other inventory items.
- Inventory items on NPC’s
- Inventory items on Playable Character
- Inventory items on scenery items
Releasing
The latest innovation is once again ‘Automation,’ particularly in the release process. The plan is to begin with itch.io as the distribution platform. It is free, and this game requires more ‘Adventures’ before it can be considered ‘marketable’ to casual Point and Click enthusiasts. I have created a Jenkins pipeline to generate releases for Mac and Windows, and in the future, I will also incorporate pipeline tools for Itch and Steam