Well, since Ridge's project is called off for now, I reckon I should try to make headway on other things since I really need to start being useful again...
I've been thinking of picking up a project I started years ago since it seems like something I'd enjoy working on again, since I did in the past at least. Not sure if I mentioned it before, but it's called "Project Mask" which is a bit of a tongue-in-cheek jab at a similar project started ages ago (2007-2008 iirc) by someone else that didn't even make it beyond the planning stage.
It's essentially a playable game of a Mario TCG that a friend made the ruleset and card design for. I originally did it in Java and made many mistakes as I worked on it (along with an annoying bug that caused instantiated Item objects to have a Use count of 0 which made them unusable) so I decided to scrap it. I'm going to re-do it in C++... well, the master server at least.
I've been rethinking the design the last couple of days. I originally divided the problem of defining cards with unique attributes down to database entries and small "modules" called Effects that I could add to Abilities, Card Attributes like spikey or firey chars and Badges etc.
Ultimately, this would've prevented the need to have a separate Object for every damn card in the game, which seems like bad design to me.
I made a dumb though; I coded Effects as Java Objects so I would've had to recompile and restart the master server every single time I wanted to add a new Effect to enable a new card to exist... say, I had some Bowser card variation that summoned weak minions for stat boosts and stuff, or a Yux that throws up Mini-Yux to defend itself; I'd need to make a generic Effect like SummonMinions that I could apply arguments to in order to add that functionality to Mask. I've decided to add in a scripting engine to Mask v2 in order to allow me to add stuff to the game without even needing to restart the master server; just add the Effect, bugtest it, add Bowser's information to the database and then add the new Bowser card to the store for people to get to add to their rosters!
I've also been thinking about event notification and observer-type design to approach this problem. I was originally thinking of making a generic EventHandler interface with a method or two to handle events and respond to them (like when a card is damaged by an attack; might want to block it if the damaged has a spiked ability and the attacker has no spike shield badge), but I'm beginning to think that might not work out; to this end I think I might go with a separate function or method for each unique type of event like CardDamaged or ItemUsed; Effects could then listen for these events and react accordingly. It feels inefficient if it just notifies every Effect in play for every event though, so I was thinking of having a way to subscribe for event notifications from the game session itself.
Only problem here though is that I'll either need to make it to you need to explicitly tell the game what events this Effect in particular listens for (which could introduce puzzling bugs if I forget to subscribe to an event this Effect listens for) or I'll need to find some way to automatically detect when an Effect implements one of the event listener functions in the Effect script. I don't know what terms to search that could help me research this avenue though, so I was wondering if some of the talented programmers here could help me out?
Also while we're on the talk of scripting, I still don't know what language I should use for this. I'm stuck between Python and Lua currently; both seem very good in their own rights and I can't decide right now. I admit I have some more experience with Lua though, never used Python. Are there any other scripting languages one might recommend, too?