Basically, what's your programming history. Just a fun topic to see where others started. And also, how did you get started with Allegro?
Around '83 we got a TI99/4a computer from one of those big warehouse stores. Best Space Invaders clone by the way is TI Invaders!!! The computer had TI Basic built in. I spent countless hours typing in programs from a book and get correct. Cassette tape saving/loading.
In '88 we got our first PC computer. 512k RAM, No hard drive, two 5 1/4" floppies, Hercules Graphics card with wonderful shades of green. That one came with GW BASIC. Took a while just to figure out how to save and load files to a disk.
Sometime in '89 to '91, I was in high school and a friend of mine knew I programmed. I showed him some of my games I made. He laughed that I was still using BASIC. With a choice of C or Pascal, he gave me a extremely bare copy of Borland Turbo Pascal. I did not have the hard drive space needed for C. And the Pascal compiler had such a tiny footprint. It was able to fit on a floppy.
Mostly with books from the library, I learned Pascal. QEdit was my editor of choice. The compiler came with a couple files for graphics, but they got corrupted early on. So I mainly made games with the ASCII text graphics.
I bought my own PC computer around '95/96. Around that time I also bought a book "Teach Yourself Game Programming in 21 Days" by Andre LaMothe. It came with a C compiler and graphics library. However, when I tried to my own make a game I had some memory constraint issues. It was an 8-bit compiler and I was using too many bytes. I needed something better.
The internet was just become popular with browsers and I found DJGPP. It was 16-bits and there was even a graphics library for it. That's when I found Allegro.
Also found a website called the Allegro Depot with games made from Allegro to download. Anyone remember that site? Downloaded quite a few of those and played with. Looked at the code when I could. One day, I went to that same website and it redirected here. I join in Nov 2000 (older account I don't have access to).
Also in 2000, I started State University. Earned my Bachelor's of Computer Science in 2005. I learned a few different languages while at school. The year I started, they just switched their beginning coursed from C++ to Java. Also had to learn Scheme, Prolog, SQL, PHP, Bison/Lex, Motorola Assembly for the 68HC11 processor. Loved that assembly class. It was for the engineering students. The, non-engineering students, like myself, had a different class where they learned Intel assembly. I took this harder class because I heard the teacher was good.
After graduating I took a year off to remodel some houses and a Condo. Housing market was great and though we could make a bit of money. Nope.
Unfortunately, my post-graduate education went in another direction. I only program for fun now and even that is not much.
My programming story started when I was around 8-10, playing around with GWBasic on our Leading Edge 8086. Would study code of games and write simple graphical applications. Somehow got out of it and lost interest for a while, but came back strong with DJGPP and Allegro and C++ around 2007 and stuck with it ever since.
Allegro was the first programming community I joined and it was really active at that time. Ah the old glory days of allegro.cc . Someday we will rebuild it all.
I was such a newb and leave it to people like X-G and Gnolam to school me in the proper coding techniques.
Nowadays kids brains are all scrambled with shit like Twitter and Reddit and it's hard to find a good community anymore. So I stuck with allegro.cc all this time and I'm never leaving. 
I started with QBasic. I think it was summer or so when I found DJGPP. Around that time, my dad had got me a copy of Visual J++ (I think that was the name), but I got annoyed that it didn't support all of the features of Java in the latest version. Never did anything too useful with Java though.
What was fun was making a game in GW BASIC that was so large that I ran out of memory. And printing the list was would just go to a crawl. Mostly because I was storing my data in the program itself instead of using files. I didn't have, or didn't know of, a text editor. This was pre-internet.
I really liked that QBasic could also compile into an exe file. Unfortunately, in later versions of QBasic that functionality was removed.
I enjoyed when programs were small enough they could be traced through their execution.
ABC80 during high school, simple BASIC in 1980.
Sharp PC-1401 including BASIC and machine code, around 1984.
Sinclair ZX81, BASIC and Z80 assembler by hand, around 1985.
Bondwell 16, my first real personal computer. BASIC, Pascal and SmallC, around 1987.
A few Mackintoshes from 1992 on. More Pascal, C and C++.
Struggled with getting Allegro work on Mac. Later I got Windows laptops from work and continued exploring Allegro.
Right now I have more or less lost interest in developing games for computers. I'm more into Arduinos. Still thinking in terms of gaming, though. Like with this little project:
Started learning about computers and programming around 1979.
Eventually in the 1980s I started to learn programming on the IBM PC Jr and TRS-80 Model 2, in BASIC on those machines.
I eventually bought a Commodore 64 and learned BASIC and some machine language programming on it. Upgraded to the Commodore Amiga 500, 1200 and 2000HD and programmed using AmigaBASIC on those until Commodore went bankrupt.
I switched to a PC that I build from old and new parts and started to do more programming using BASICA, QBasic and eventually QuickBASIC (which is the full version of QBASIC that allows you to compile your programs into an executable).
I stopped messing around on that and started to seriously design my first game using QuickBASIC but it was too slow for what i wanted to do so I bought a book called "QBASIC TO C" which taught you how to program in C by showing you how to do similar code you done in QBASIC and how you done that in C. The book didn't get good reviews, but I loved it.
To compile my programs in DOS, I found DJGPP, the free, 32bit GNU compiler which was a godsend as you didn't have to worry about memory limits with it. I started to program my own graphics routines but eventually I found Allegro, how or where, I don't know. This was before this website existed. I created my first, unfinished game with it and started on my second game, "Deluxe Pacman" which I originally created it (or recreated it) for DOS for my wife who missed playing it on the Amiga.
Been messing around with C on and off for years now. My wife died last year (five months ago) and my game, Deluxe Pacman 1 and 2 are still available for free (with source code) online at https://nitehackr.github.io/games_index.html
It's been quite the journey. I miss the old days with limited hardware. Seemed more fun back then.
Edit: I just realized it will be 20 years next month since I first joined this site. Wow
I started tinkering with DirectX 2D bits around 2003, but couldn't quite get to grips with it, and I found Allegro through someone at college who had tinkered with it, and started making games for friends, couple of fishing games and some fruit machinies (casino slots).
After Uni I got work as a programmer in the AV industry, writing controller code for various bits of hardware using C. I kept up the hobby of making little bits and pieces using graphics, mainly in C++ using Allegro. Couple of Speed/Santa hacks.
Now I work 90% using C#, developing a new framework to replace older hardware processors for the AV world, and writing smaller modules for individual pieces of hardware (mix of C/C#). Just started learning Java, and soon Flutter and Dart (for future GUI work).
Don't do much games programming anymore, mostly just programming for work. Always tempted to do something in games, but feel a bit old and tired of late. Still, never say never,
I was intimidated by programming until I picked up a book on Visual Basic .Net at 17. I started learning winforms vb.net. Eventually a site you may or may not have heard of called stack overflow opened up where I asked enough questions so that today I'm a top ranking member. I eventually moved to C++ where I made an API you may or may not have heard of called Agui. It was used to make the gui in a game you may or may not have heard of called Factorio. Boy am I glad I put in that clause about a license fe... oh wait hahah. So then I worked for a professor doing Objective C. I did some SQL for an AS 400 at one point. I also did a horrible internship in C#. My first proper job I was doing RubyOnRails. And then switched to C# fulltime. About a year ago I got into deep neural networks and got some Python exposure from that.
That's mostly it. I'm not as into coding as I once was. Now I'm like, trying to find a girlfriend or something, which is magnitudes harder than understanding vtables and pointer arithmetic. North American Online Dating is kind of a joke if you're short and not super good looking
I got hooked on the C64 Compute's! Gazette and Ahoy! magazines as soon as I could read. I painstakingly typed in the games from source code and was usually disappointed at how lame they were. It wasn't until I was older (~12 years) where I seriously started teaching myself how to program on DOS/QBasic.
Fast forward to now with 20 years of working on countless business apps for other people, I'm ready to retire and do something fun again.
Seriously, I'd rather be programming on my C64 today than that steaming pile of Javascript.
I got hooked on the C64 Compute's! Gazette and Ahoy!
Those were my favourite magazines as well. I still own a couple of them I bought way back in the 1980s. I miss programming the C64. Once I learned machine language on it I had a blast.
I think I miss programming for DOS on old PCs for VGA mode the most.
We should have a DOSHack competition, to create a game but only for DOS, can use Allegro or whatever and run on DOSBOX (so more open to more platforms as well).
I painstakingly typed in the games from source code and was usually disappointed at how lame they were.
So true. Or it didn't work and had to figure out what went wrong.
I used to also get a magazine, but for the PC. It always had a program, written in hex. I didn't even know what hex was back then. That was tedious to type in. Luckily MS DOS had a DEBUG program I could type in hex.
I started with Allegro in 1997 in a basement in Victoria, BC, Canada.
I had been trying to write a game for a long time.
In 1978, when I was 10, I learned BASIC on a Commodore PET
and wrote a few simple programs to manipulate and draw text.
From 1980-1987, I had access to an Apple II+ and spent a lot of time
learning how to program on that. (280 x 192 hires graphics mode!)
I made some games in BASIC, and assembly.
The BASIC games could not not get fast enough, no matter what.
Probably due to an interpreted language and my lack of skills.
Assembly was better, but my skills were not enough to write that
complex of a program in assembly.
For many years I had no access to a computer, or the time or
inclination to do anything about it.
I still wanted to create the game I had in my head, with a little man
running around a level, jumping from platform to platform.
Then in 1997, I was in a seasonal layoff from my job over the winter,
waiting on unemployment benefits, and I had a laptop and internet access.
I decided I was going to work on the game I had in my head.
I searched for some proper tools to create games. I was thinking even
if I had to pirate something, I was going to figure out how to make
my game a reality. All of the microsoft crap did not appeal to me,
but I resigned myself to go there if I had to.
What I found instead was Allegro. It looked awesome. The more I read,
the more I knew it was what I was looking for. And the best part was
that it was free! Nothing to pirate!
The only catch... I would have to learn how to program in C.
I downloaded DJGPP, used RHIDE as my IDE, and added Allegro 2.2.
As I learned C, I was amazed at how logical, simple, precise and elegant
it is. No gotos or line numbers. And it's really fast!
In my game I built everything from scratch. (Well, except for Allegro!)
I started by learning how to draw on the screen.
Then I made some shapes to blit here and there.
Early on I decided to make my game sprites 20x20 pixels.
I made an bitmap editor to draw and edit these sprites.
I built my own routine for saving and loading bitmaps to disk,
(one get_pixel and put_pixel at a time!)
I decided on a level size of 100x100 blocks made of these shapes.
I used an array of 10,000 ints, int l[100][100].
When I was figuring out how to run my game loop flicker free with a
screen buffer, I created a bitmap the size of the whole level:
2000 x 2000 pixels. 4 million pixels!
From 1997 to 2003 I call the first phase of the development.
I always knew I wanted to do some kind of multiplayer.
The game would just be so much better with more players.
It had to be simultaneous multiplayer, like Bubble Bobble.
Just two players taking turns was never even considered.
Initially, I came up with a split screen method.
I created a second player and re-wrote a lot of code that assumed
there was only ever going to be one player.
That worked, but the split screens were kind of small.
Still it was really cool to play simultaneously with another player.
I started to think about how amazing networked multiplayer would be.
I found libnet and made a simple packet exchange of moves.
Exchanging game move packets was easy, but synchronizing the game was not.
I spent a lot of time trying different concepts and abandoning them when
I realized they wouldn't work or I thought of a better way to do it.
In 2003 I released version 5. The netplay stuff didn't work yet, so I
disabled all traces of it with #ifdef's in the source.
I let it go for a few years until I came back with a vengenance
in 2009-2010 to solve the netplay stuff.
I made a lot of changes and improvements, but still had sync issues.
It would almost run perfectly until they slightly went out of sync.
I had made a lot of changes, but because netplay was broken I didn't want
to release without it. Eventually I gave up and let it go for many years.
I had been thinking about the various methods of syncing, but
was still convinced my method should work.
The method I use is called deterministic lockstep, and I wrote in
depth about it in netplay.txt.
The concept is that for the exact same set of inputs, the output will
be exactly the same. So if I could just sync the inputs (what controls
are pressed on what frame), the output should be identical.
I was almost going to try something like Unity that had built in
network multiplayer. I even spent a few hours bulding a test project
in Unity and seeing what it would be like to re-do the game in that.
I decided not to for a few reasons. I wanted do it my way. I wanted to
figure it out myself. I didn't want to spend a huge amount of time
figuring out a new platform and porting my game to it.
In 2017-2018 I came back again and tested a new idea I had.
Basically I removed all floats and replaced them with fixed point numbers.
Floats, while very precise, were not as perfectly deterministic across
different systems as I needed.
Fixed points, while not as accurate, gave the exact same results every time.
After a lot of rewriting, I finally was getting good sync.
I could play 3 and 4 players games with no problems.
I still had rare occasions that the sync would break. Often enough that
I couldn't call it fixed. I wrote a huge amount of logging code, trying
to get to the bottom of the problem.
Eventually I started passing some state information from server to clients
to tell when the game was going out of sync.
That grew to be more and more information until I thought, why don't I try
to send the entire state?
I never designed the game with that in mind, and the structures and arrays
holding all of that data were huge.
100 enemies, each with 16 ints and 32 fixed_point
500 items, each with 16 ints and 4 fixed_point
40 lifts structures, each with up to 40 steps
the level block array (100x100) ints
8 player data structures
All of that came in at over 100k. Way too much to sync with 1K packets.
I did some research and decided to try to use zlib to compress it.
That got my 100K down to around 6-12K.
I wrote code to split it into 1K packets and reassemble them on the
clients. It worked, but it was still too much data and was too slow.
At this point I was only using it to check and see if the game had
gone out of sync.
Then I came up with a dif method. Instead of sending the whole 100K,
I would only send what had changed.
I basically just subtracted one entire state from another, called that
my dif, and compressed that.
That gave me around 600 to 1800 bytes. I would only need 1 or 2 packets!
When I got that working, I decided instead of just checking if I am out
of sync, why don't I just use that to correct the state on the clients?
That is the way that it works now. It checks for differences, but then
just overwrites with the new state anyway. I still check for
differences because I want to know what is drifting and see if I can
find out why. Its not really necessary because getting a new state fixes
everything.
So there are two methods for the game sync:
The old original one just sync's the clients inputs. Every frame, if
the clients controls change, a packet with that control change is sent
to the server. The server then consolidates all client inputs, and
syncs that back to each client independently.
The second method periodically sends a new complete state to each
client in the form of a dif from the last acknowledged one.
Between these two methods, I can now play very long games, with up
to 8 players, across all windows and linux versions, and it works
perfectly!
Then I cleaned up a lot of things in the code that I had broken,
refactored just about every line in the game, added new features, removed
some old ones, went through all the levels, updated the help screens,
made a fancy new rotating logo with splines for the splash screen...
Finally here we are on March 11, 2018 with Version 6.
Netplayer with up to 8 players.
Works on Windows XP, Windows 7, Windows 10, Ubuntu 16.04.
This will be the final release on Allegro 4.
For the next version, I'll convert to Allegro 5.
Well here we are again on April 22, 2018 with Version 7.
Now with Allegro 5.2.4!
Just about every line (25K) of code has been re-factored.
The display routines have been completely redone.
Now with dynamic resizing while the game is playing!
The linux version now is a precompiled executable.
Numerous small bug fixes and improvements.
wanted to learn programing so i tool on project that contain most if not all the different areas of programing. Rpg Game building saw DanielH sight they got linked to allegro from there. I was intrigued by the people here and decided to study everyone so that i could understand my self more and what made me ME because i sensed similarity in this community. then i begone to transform into a god
piccolo!
Piccolo's cosmic vacation is over.
Piccolo's cosmic vacation is over.
saw DanielH sight they got linked to allegro from there
I'm glad the site did some good. I started that website with good intentions, but about the same time I got a bit overwhelmed by school, depression, life, etc. Even as little as I did on the site, I took it down to stop getting emails. I got so bad that I cancelled all my classes at Uni as well. I took a semester off just to revamp. Hurt my GPA a bit because I was in the upper level classes by then.
Started with QBasic / DOS at the age of 9 (I think), moved on to C at 11. Had an old Borland compiler copied to me from someone's father on multiple floppy disks. Wrote things like a mouse API adapter myself with calls to interrupt 33 etc.
I could only access the Internet occasionally during my mother's lunch break at work. Discovered and downloaded DJGPP / Allegro there - the fun started, finally something that could do all the cool stuff I wanted.
Copied my downloads to several floppy disks. When a disk went bad, I had to wait several days for the next opportunity. This was in the 1990s.
Edit:
North American Online Dating is kind of a joke if you're short and not super good looking
Waited for an oppurtunity to post a link to this article analyzing the "marriage market":
https://quillette.com/2021/06/28/mate-selection-for-modernity/
Discovered.. Allegro - finally something that could do all the cool stuff I wanted
That's the best description of Allegro I've heard! ❤️
Stumbled upon programming in school. A classmate introduced me to QBasic. Thanks to that I later took a C/C++ course during which I discovered someone had installed this allegro library on the school computers.
It's so long ago now the details are gone. There's so much of my early computer exploration I have no idea how I figured things out on my own. I sure couldn't google everything back then.
I started with GW-BASIC when I was a teenager. Out of frustration because no game I tried back than would run on my computer, having an uncommon videocard.
I quickly stepped over to C++ and C because of BASIC's limitations.
When I started with computer science (over here called "informatica") I had to learn Turbo Pascal, which hade some coolness over it. Evenually followed by Delphi.
C# I learned in the field out of necessity, but certainly not my favorite.
I discovered Allegro quite early when I was looking for a replacement of the pix graphics library for C++. Which worked, but was a pain in the ****.
I also used DelphiX a few times, quite nice, but the documentation was hell.
Japanese translated to english...;D
I can see all Mini-RmBeers here, all about of GW-BASIC, QBASIC, Pascal, Djgpp, C/C++, Commodore 64, etc.
Someday i will write here my sad story.
I typed in random QBasic programs from some random book I had as a kid. Around 12 or so, I wanted to learn how to program for real, and went and picked out a book on C++ randomly. Eventually I wanted to learn how to display graphics on the screen and do a bit more than just text based stuff, and found Allegro.
And here I am now, having done professional development for 13 years. Dang, I'm getting old.
Twenty four years ago from now I was coding on my casio calculator during my year 9 pupil /class, and a friend of mine was already coding using C and allegro.
He was bored to see me on my limited hardware, and was urging me to code using my computer. At that time he was doing his way in the demo scene and coding scene, and his knowledge of C, allegro, 3D, algorithms was truly impressive at his age.
I can say that my first real maths & code teacher was him, J.Georges aka Chewie/Chewbacca.
I spent most of my free time going to his home and having coding sessions.
The forums were a good ressource of answers, IRC also. I do not remember the usernames I had.
Lurked a lot before registering, lost an account.
Then here we are :-)
Start my first experience with QBasic. A free version from DOS that was accompanied by 4 or 5 demos. I found it quite intuitive. Then I've gotten to understand DEBUG.COM, C64 BASIC, and the Assembler for both architectures.
It wasn't until 2004 that I got the Djgpp with Allegro.
I learned Turbo Borland C/C++ for DOS in 2001 or thereabouts, which I haven't found any difference to QBasic.
More or less around that time was when I was able to connect to the internet using a very expensive telephone modem, I have gotten many versions of BASIC such as GW-BASIC, QBasic 7.1, and many others, also many examples and/or games of QBasic and C/C++ . As well as several manuals that make use of Allegro with Assembler for many screen and audio tricks.
I have also got from the internet a complete manual on all interrupts and I/O ports. Which played with screens and audio to learn all its effects.
With Commodore 64 I have learned a lot since about 1993 or maybe much earlier.
I started programming by learning BASIC for the ZXSpectrum 48K, in the eighties.
Bought a PC circa 1999. Got internet circa 2001. Found allegro.
Learnt some C from K&R The C Programming Language and the allegro mailing list. Eventually learnt some C++.
Given up programming and started again many times.
First, this thread gives me all the feels. 
Like many, my first intro to programming was QBasic. And it was glorious. Gosh, I remember geeking out to it. This was early high school days. I then learned about Visual Basic. I remember making a game where these hat-like cars (cus programmer graphics) that went around a path. They would change speeds randomly. It turned into a weird gambling thing where other students started betting who would finish first.
Programming was always about game development. When college time came, I wanted to go to Full Sail University in Florida. It looked like the right school for flexing game dev skills and it was an adventure from home. Parents talked me into going to the local university and getting a computer science degree because it was more practical. /shrugs
During college, I sought anything related to game development I could and my passion for programming grew. I joined the competitive programming team on the B-team and we got to compete in Hollywood. I was never good enough to make the A-team, but I did make the relationship which led to an opportunity. The coach of the competitive programming team recommended me (because of my passion) to the business college when they competed in some kind of new product pitch thing. I think it was called the governor's cup or something (it was a long time ago). Anyway, they had created a board game (that the designer was planning to sell in stores afterward) and I was tasked with digitizing it!
As college wrapped up, a game dev course was added, so I took it. That's when I discovered Allegro and fell in love. It brought me back to my QBasic days. I didn't find this community for a couple years after that.
After college, about 6 months after officially graduating, I chased a dream and joined Iron Lore Entertainment. I was a designer and scripted the cinematic sequences between missions and when finishing a race's campaign. Childhood dream, check! And it truly was everything I had hoped it would be. I fit in with the people, which felt like the first time in my life.
That feels like several lives ago. Shortly after my job with Iron Lore ended, life threw a series of punches that took years to recover from. I'm a product owner now in the Engineering and Technology building of a major trucking company. I enjoy being a decision-maker on what the product should be. Haven't programmed professionally in like 10 years, but work with devs all day every day.
I'm still making games though on the side. Hoping to throw a mobile game on the app store in the next year or two.
Ha, so funny seeing QBasic mentioned so much here. That was my first brush with programming, but I only used it to do a hello world before leaving it alone.
After that, I can't remember the exact order in which these things happened, but:
A friend of my family recommended I learn C.
I noticed alleg40.dll being included with a bunch of the games I played at the time.
After that, it was only a matter of time before I created an account here and started embarrassing myself.
Later down the line, I studied Computer Science at uni and left games alone for ages whilst discovered how utterly depraved web programming is.
I finally picked game dev back up in 2017, made a small space shooter, and then finally resolved to give it a serious go in 2020, and against all the odds (inflicted by my laziness), Feral Flowers now exists.
I started programming with "Locomotive-BASIC" on a Schneider CPC sometime in the 1980s. Then eventually switched to an Amiga 500 and Amiga-BASIC, and then soon to C (North-C compiler I believe) because it was much faster.
When I first got a PC I did use QBasic for a bit until I found a C compiler again (Turbo-C I believe), finding free stuff was much harder before the internet and involved trading/borrowing floppy disks at school. When internet finally came along I found this djgpp compiler which was much better in many ways and came with a library called Allegro 3.12 preinstalled...
I haven't been active here since the mid-00s, but when I found my way here, it was after finding Allegro (around 2004?) and using it for a few hobby games and other things, which never developed beyond something for me to play around with. And basically, I become engrossed in trying out ideas for the engine of a simple game I made and making a little scripting language for it, to the point where I stopped making something to play using it. I got the simple things I tried to do working but they were messy.
A few years earlier, I'd first experimented with programming and begun to learn it in 2001, playing around with BASIC on an old Amstrad computer that used to belong to my grandmother, getting QBASIC from a friend and using it on my PC, and also trying out some command-line C++ programming.
My interests changed and I drifted away from here after 2007, though, becoming focused on making some hobby audio effect plugins in C++ (and later mainly programming in C), while abandoning my old few ideas for games. In 2011, I began a different kind of hobby project, basically a scripting language of my own for (initially) mainly FM synthesis. I returned to that and have been working on newer versions of it since late 2017.
Once in a rare while over the past year or two (I don't remember exactly), I've had quick looks at this place, mostly out of curiosity. I've thought about adding something to say "hello", and this thread now seems the place.
Currently, I'm quite literally gearing up to make some noise, using a simple and fast way of my own to create something close to proper white noise, but with random access to positions in a noise stream without needing to stuff random values into any array. While I have audio in mind, I think maybe people who play with graphics or adding noisy variation to some types of generated structures may find it useful for that.
My programmer story is the story of my hobbies, because those are all I've done. Sometimes I wonder whether I'll find some related job eventually, but I'm also thinking of returning to and finishing my unfinished undergraduate computer science and engineering studies, which I left behind some years ago. I find some areas of math challenging to study, it's been a stumbling block for me, but I also want to learn more of it, it seems more interesting than working on problems for some company simply to help that company make more money.