Gandhi has been historically the most aggressive character in Civilization due to an original bug in the first game that caused him to go all-out once he reaches democracy. They just kept the thing going ever since.
To further explain this bug, because I was chatting with mothmonarch about Civilization and other strategy games last night and I never got around to explaining this fully, but I love this story:
Gandhi’s AI in the original game had its aggression set to the absolute minimum (0 on a scale of 0 to 10, I believe, I may have this wrong but the basic idea I’m about to explain is accurate, as far as I can tell). Adopting democracy lowers an AI civ’s aggression by 2 points, so when someone who is fully peaceful loses two points of aggression, they should still be nice and polite, right?
Except this is an old DOS game, and so computer math is in place. What actually happened was that Gandhi’s aggression level ticked backwards two steps, from 0 to 255. On a scale of 0 to 10, Gandhi is now 255 points of pure nuclear rage.
And that’s the story as I recall it, but again I may have gotten some details wrong, so feel free to correct me! After that, as the original poster said, the devs loved the bug so much that they just kept it in as a running joke!
“On a scale of 0 to 10, Gandhi is now 255 points of pure nuclear rage.”
I about pissed myself laughing at this.
this is beautiful
I love this so much, except for the fact that 0-2=254!!
I just found a shirt I bought about 2 years ago, and it doesn’t fit me anymore. I can’t lose weight right now, I’ve got so much else on my plate. But why am I gaining so much? I officially hate my life again.
I’ve spent two nights straight coding, but it doesn’t feel like I’ve done enough. I think I might be pushing myself too hard, but I might not be pushing hard enough. I just dumped my list of TODO tags into a file, and pruned the least necessary ones. But I also need to move on, to implement the combat system, somehow. I don’t even have the first clue about how to do it.
I might create a structure in the server called “CombatEntry”, which has a list of participating players, and some monster data, etc. Then the server can process these by incrementing the ATB gauge for each participant, while the client calculates it independently. Then, when the players choose an action, the message is sent off to the server, but it isn’t executed until their gauge is full.
For this I’ll need to implement collisions with the combat portals, which in turn requires collisions with the maps, which requires the mas actually having something to collide with (probably just a square of bricks or something).
Theres so much in the existing code that needs to be cleaned up, but there’s also so much more I still need to do. I want to finish this game by the end of the year, but I just feel terrible. I don’t know what to do, and I can’t think or focus right now.
I’m tired, so I’ll let this commit message speak for itself:
Fixed a horrible region coordinate bug
Coordinates are supposed to be stored by their x & y, but the sizes of the
tile sheets were getting mixed in as well. When trying to store a region
at (0, 20), it was being stored at (0, 260).
Another visual bug inside the tile sheet's rendering function masked this
issue until now.
Another thing to note is that I've removed an incredibly complex system
for updating the client's map. The new system may seem complex at first,
but it is straight forward compared to what it replaced.
I've also fixed a few logarithmic lagging points in the code.
Oh that pisses me off, it wasn’t being stored at 260, it was 640. God damn.
Anyway, you can get to the repo above, and the newly patched release is here:
I’ve just added a player counter for the server list, and the lobby rejects attempts to connect to incompatible servers. I determine if a server is incompatible via the region sizes, but I can extend this later for various mods.
I want to do an overhaul of the game’s login system. The current system is extremely… basic. In fact, the username/handle and avatar is selected via the config file, which is just friggin’ terrible.
The current system is like this:
C/S: ping/pong for finding servers (only lan, could use a catalogue at some point)
C: send the connect request
S: send the connect response (with client index)
C: send the player create command (including name, avatar, etc.)
S: send the new player’s data to everyone (not good with the paged maps)
C: send a sync request (all server data)
C: request nearby regions
S: send all server data
S: send requested regions, creating them if needed
This is extremely bad. What I’d like to do is to have the players type their character’s names when they join the server. Problem is, they also need a password. Now… I’m not experienced with security, so I’m a bit worried about this.
In addition to this, I also have a few other bits and pieces marked by TODO tags that need fixing, and I want to move onto the combat system at some point. I’m really unsure what to do…
Oh, I wanted to say as well, if a character with a certain name already exists, then the player is using their previous character. So the database is finally being used for something.
I just read the SQL startup script, which creates the database, and I’ve just realized that the item types are supposedly stored in the database, rather than being hard coded? I’m not certain if that’s the best approach there. I’m not even certain how to hook the lua scripts into them yet. Amazingly I still understand what the SQL script is doing.
After refactoring the map system, this new build uses the preprocessor macros to define the sizes of each region object. These macros, which are defined in region.hpp, were being used anyway; these modifications simply speed up the process by cutting out a lot of the fat.
You can find the merge here, and the master branch here.
There are no visible changes, but I’ve updated the build anyway in case someone finds a bug. Enjoy!!