Quoted from Evangelist:
1) Do you just start by documenting the rules/scoring when starting from scratch and then replicate it in Arduino code?
This is what I did. My plan was to emulate the game (Paragon) as the original. I would actually recommend this to anybody wanting to take a crack at things, because the base rulesets are fairly simply and doing so puts all the systems in place to make a more elaborate game operate. It also lets you "cut your teeth" on the idiosynchrasies of this type of work (of which there are plenty... typically when you're programming you're not likely to set something on fire if you make a mistake.. lol)
Then again, I'm working on a game that is already beloved in the community and is often used for competition, so I didn't want to make my version significantly different. I picked Paragon because I recently picked one up and planned to restore it. And it was a good example to learn on.
I've been wanting to redo certain games for awhile now. For example Spectrum is such a beautiful, unique game that has some fatal flaws in its design. I would really like to make that game play like it should. And other games would be just plain fun to mess with.
I think it's possible for anybody to approach this tech and get into it. Being more experience in programming definitely helps, and unfortunately, the more "old school" you are, probably the better. It's hard to compare C/C++ to the high level languages modern programmers use like Python, Java, etc. It's significantly different. The IDE doesn't hold your hand and check everything, so you have to be super diligent. If things go wrong, stuff blows up or the game just reboots with no errors or indication. On top of that the Arduino IDE is pretty awful with very limited features.
Luckily I've been working with this tech for quite awhile. I've been programming for 30+ years and have written a bunch of software systems that have been running on the Internet in C (where bugs will be found pretty quickly when you have thousands of people using stuff). So I'm used to doing mission critical work. One of my worries is if there's a ton of code for this technology floating around from varying levels of programmers who might not have fully-debugged their work - this can cause nasty things to happen with hardware if not handled properly. I completely understand why game makers don't want to give people easy access to mod the program design of their machines.
However I wouldn't discourage anybody from trying. But the coding skill is higher level because the program code is lower level than what most people are used to, and on top of that, the way the coding is implemented on Arduino is a lot different from typical coding. (The Aduino and pinball machine is in a constant loop and you have to program all the interrupts manually in such a way that it runs smoothly - at times it can melt your brain a bit because everything feels recursive).
That being said, the hardest part is just getting up to speed with the OS and the topology of the system. I spent probably 1-2 months just studying sample code. I took PinballMachineBase, and studied that. Then I picked a finished set of code and started poking around in that, moving and copying and forging my own set of routines into a framework. I think the base framework is a good start, but it doesn't include a lot of basics that you need to make the game do all the things you expect.
Do you mean save high scores or something else? It does all that and more. I'm looking forward to adding additional functionality with more powerful Arduino/RP versions (especially ones that can talk to the Internet.