This is a bit fragmented but its a rough account of my experience with calc programming and such. There is loads skipped over and missed (I could seriously write half a book haha), but its a small insight for anyone who can be bothered reading it
.
My story starts in the late 90's when I was a youngster and got my hands on a TI-83 graphing calculator. I always had an interest in gizmo's and the like so the calculator was really cool in my eyes. After messing around drawing pictures and such I realised that the calculator actually had a lot of built in functionality. I didn't have much programming experience, though I knew the basics and began messing around with the oncalc BASIC editor to make simple programs and math helpers etc. People were passing around BASIC games like race and falldown for example and playing these in math class was fun.
Then everything changed ...
Someone got a hold of a different game, Spaze Invaders.
The graphics were clean and the speed was amazing! "What, how, who?!". A friend (and resident school genius) said that obviously the game was coded in assembly. We had limited access to the internet at school back then (I know, right?) and I had to 'yahoo' ti-83 assembly and found tid-bits of information. I finally stumbled upon ticalc.org which had a lot of resources as well as tutorials like AsmGuru for the TI-83.
Like some coders today I charged into assembly coding underprepared. I messed with examples and made some small programs but I really didn't understand it that well. At this point I stagnated for a while where I would mainly download and play new games and was quiet from a programming perspective. I never made anything of significance and was on the verge of giving it away.
Then things changed again ... !
Simply put, grayscale. I stumbled upon a demonstration program on ticalc.org that would allow you to view images on the TI-83 in grayscale. "Eh?!" I thought, "The LCD is black and white?". To me, this was even more impressive than assembly games in general. This was doing things that didn’t even seem possible! The cleverness of flashing portions of images at different rates, taking advantage of the LCD refresh etc was remarkable. But the images would flicker and bit and as mentioned, it was only for images. "Would this be possible with games?". A short while later I discovered the IRC channel #tcpa. Back then, this was where all of the legendary titan's and forefathers of this community hung out. One person in particular was Kalimero (Tijl Cossemans). He was the author of many things including a different kind of grayscale routine. An interrupt driven one that used masks to help eliminate flickering. Working on from this another user Duck (Durk Kingma) had released a test version of a library that made grayscale easier, the GPP (Grayscale Programming Package). Durk was a member of a 'programming group' called MaxCoderz, and they had a forum. I signed up and my interest was piqued. I downloaded the GPP and simply had to figure this out. I simply must learn z80 assembly. I grabbed all of the information that I could and began reading - from the start this time. I had downloaded some graphics tools, CalcGS for example and began drawing grayscale sprites and tiles, for a 'dream game' that I wanted to make (I never thought I would be able to pull it off). With the GPP I was able to easily draw and move the sprites onscreen. There was a speed hit, but it was acceptable and for the grayscale payoff - worth it! My next hurdle came in the form of tilemaps. None of the example code made sense, since the examples I had were specialised. It wasn’t until I realised that it was really just 2 for( loops that things clicked. (This was when I realised I could prototype in other languages and then translate once it was working). I made a very simple, nonscrolling tilemap and the foundation for my first ever actual calc project 'Desolate' was born. With the self-satisfaction of rapidly learning I charged ahead with the game. I came up with a story, puzzle ideas, items, enemies and even made a topic on MaxCoderz about it. The support was fantastic, people were offering great ideas and lots of coding help. Duck was very happy that his lib was being used. But there was a problem. A problem that a large percentage of coders face; I had slacked off. The exciting parts like coding the engine were mainly complete, but the content wasn’t. I had entered a rut and the project was in danger. Then one week I got really ill. I had felt bad about the game but didn’t have the motivation. Then MaxCoderz emailed me asking if I wanted to join their team. It was amazing that this group of great coders wanted me to join them. I accepted and the motivation to finish was returned. I created a 'room editor' to speed up the content process and powered through it. Soon enough the game was done and I was glad to see that many people enjoyed it. It received positive reviews on ticalc.org and came runner up in POTY.
After that I dove deeper into assembly coding. Concerned with the slower speed on grayscale in games I embarked on creating various grayscale routines of my own. Jim e sprung up and had some great ideas which led to lots of improvements from the interrupt side of things (leading to his own library, RGP). In the end I created dozens of different grayscale libs, with 4lvl and even 8lvl grayscale optimized so much it fit inside the confines of a fastcopy routine. I started a few projects like Smash Bros. and Mario but unfortunately those faded away.
It wasn’t until a breakthrough BASIC programmer Kevin Ouellet joined the community that things took a twist. BASIC was frowned upon in the community, no way could it contest with the might of assembly - especially for games. Well Kevin proved that notion wrong with some fantastic pure BASIC games. I remember someone on the UTI forums wondered if it would be possible to draw a sprite and a simple tilemap from a BASIC program with the help of an Asm lib. I did a few tests and made a library called zBase. This wasn’t actually released, but it showed some promise I thought. Omnicalc was out and it had loads of great features, including sprites. Kevin had used this to great effect so when he mentioned that he would like a lib that had tilemap features, the ability to store PIC's as well as use bitwise logic with images - xLIB was born. In reality the lib was created exclusively for Kevin and his games, but soon other programmers wanted to use it and there were loads of great ideas for feature requests. The lib was a massive hackjob to be honest, but it worked and I was glad that it was helping people created games - very rewarding. It was great to see the functionality mirrored in DCS and also see the creation of other similar libs as well.
After xLIB, many years went passed and I knew I didn’t have the commitment to complete a large scale project due to life and stuff, although I wanted to. I started many projects, completing only a few but learned a LOT, but mainly stuck to helping out other people with coding and stuff on forums like MaxCoderz, Omnimaga, UnitedTI and on IRC.
Since then I turned my attention to other subjects for the calc. Grayscale had been conquered - now for the next phase - 3D. Long story short I have been working on 3D engines on-and-off for a while and ended up with some useable demos and such. There is a lot of math involved and whole lot of code to control a small number of filled polygons in 3D. For the calc it’s pretty sweet.
There was a period where I actually spent too much time on my PC coding and being on IRC and looking at forums and such. These were dark days really where I didn’t achieve much with my projects, nor did I in life. However things changed when I met a girl and I realised that a good social/computing balance would actually make me a much more happier and more importantly, more productive person. I diversified my programming expertise and picked up other languages quite a bit more easily than I had before, due to my calc experience. My job gave me exposure to proprietary software systems and such. I did a lot of investigating and managed to leverage a lot of existing knowledge to get ahead at work. However calc coding was never gone.
With the release of the 84C my interest in calc coding has once again risen. I always wanted to rewrite xLIB to handle certain things more efficiently, and this was the opportunity. A colour lib for a fresh new calc would be pretty handy in my eyes. Kerm and Cemetech were the main hub for all things 84C, so I began hanging out here more regularly. Kerm was working on a version of DCS for the 84C and was including his own Asm libs. Although xLIB was a standalone APP, I thought "Why have competing libs?" So I put the idea to Kerm to see if he would like xLIB integrated into DCS. Kerm was quite pleased with the idea and it was good for me since motivation to complete the project was high since I had too much respect for Christopher to let him down. Kerm did amazing work with DCS and was rewarded POTY 2013 - with xLIB tacked on I felt like I had contributed to the success as well. In all honesty it was the closest to a collaborative project that I had been involved in, a rewarding experience
.
Sadly this past month I suffered a string of device failures which has seen a decade of work and hundreds of calc projects and experiments lost forever. In my time I have created 3,4,5,7,8,9,11 lvl grayscale routine library's (with tilemappers and sprites for each), 3D point, wireframe, solid & colour engines, mode7 tests, hundreds of tilemapping and sprite routines, lots of barebones games demos (C&C RTS test, 7 different Mario’s (scrolling & 2.5D), Sonic, Metroid, Fighting games, Smash Bros, 4 Racing games, bluetooth utilities, various Asm libs and more) that I've forgotten and never mentioned to anyone, let alone the large array of graphics and game mock-ups and such ... so it sucks, but that’s the way things happen sometimes. I do have more recent stuff backed up, so it isn’t a total loss however.
In life programming has bought me great success thus far. For my job - as many of you likely are - I am the go to IT guy. However more than that I have been able to optimize a lot of processes at work (some drastically) through custom utilities, databases, spreadsheets and even a large interactive inventory planning tool. This has earned me around 5 big promotions in a couple of years and I'm afforded a lot of freedom in my role. This was achieved through work/life/coding balance along with patience and respect for the process. But there is no doubt that at present, life is good, because of a calculator I got in high school
.