After masak is done with his July of blogging and separates Adventure::Engine from his game, I’ll be taking it and during the month of August crafting a game with it, adding various improvements to the engine. Here’s a list of the general things I’ve planned so far.
Note: this list may change depending on what masak does in the last couple days of his blogging month.
- Modify Adventure::Engine to implement game objects as objects
- Grammar/Actions for the game commands.
- NPCs!
- in-program descriptions
- Curses!
Let me explain:
OOP’d Objects
This I’ll most likely be doing first. While masak’s Adventure::Engine this year is great, it doesn’t use objects for the in-game objects. Instead, it uses hashes and lists to keep track of the features of various objects. I personally would like to group information about objects into, well, objects. I will, however, avoid becoming too class-happy like masak’s solution to an adventure game last year (making every game object its own class is just a wee bit class-happy in my opinion).
I’d accomplish this either by taking Adventure::Engine and having a local copy in the repo to modify, or by using augment
and/or supercede
in my own code, which would be a good opportunity to show off those rarely-used keywords.
The one problem I’d face is that it’s harder to have lists of objects when you’ve gone OOP. It’s (AFAICT) much easier to get a list of all the objects in the game in masak’s current Adventure::Engine. Oh well, I spy some binding will come into play \o/.
Grammar for commands
This is just a small little thing for me. I’ll have a Grammar and Actions turn the input on the commandline into something nicer to handle in the rest of the code.
NPC characters
Even though in any normal IF game I’d write, I’d avoid a story that needs any NPCs, I figured I’d implement NPCs and after August release it as, say, Adventure::Engine::NPC (depending).
Descriptions in Code
This is a non-item almost, I’ll just modify Adventure::Engine to have descriptions in-game.
Curses!
Because I want a status line at the top (like ye olde Infocom), why not (n)curses? If there is no existing Perl 6 module to interface with curses, I’ll write one (NativeCall GO!). I considered writing a module (if there is no existing curses module) that uses a laborious amount of print statements and \e characters, but I’ll try to interface with ncurses first.
Although I don’t know if I can do a month of blogging, I’ll try to fit it all within the month of August.