IRCiv is a little game (and game engine of sorts) for building stuff like in "Civilization"-branded games.
It is run as a script by the exec bot, which usually lurks in the #civ channel on irc.sylnt.us IRC server. Anyone welcome to come check out progress or have a tinker. Must be registered and identified with NickServ to be an IRCiv player.
IRCiv commands must start with the exec alias "civ" unless an alias lock is set (which is the case by default).
Quick start guide
help or ?
Outputs a status message to either PM (default) or the game channel if "public_status" flag is set.
during testing exec auto sets the public_status flag for every player, but players can unflag it if they want
syntax: [civ] flag name
outputs player active unit status to game channel instead of private message
paints gridlines on map images
syntax: [civ] unflag name
syntax: [civ] set key=value
syntax: [civ] unset key
Active unit movement
up or u down or d left or l right or r
after movement command, status is automatically shown
if unit successfully moves, the active unit will be cycled to the next available unit
units can't move off map or off landmasses
if "public_status" flag isn't set (which is the case by default), it's probably easier to enter movement commands in the exec PM window, though they will still be recognised in the game channel; you will just have to change to PM window to see status
Building a city
build or b
only settlers can build cities
A simple website @ http://irciv.port119.net/ has been set up to access map images output by the IRC script.
A demo can be accessed here: http://irciv.port119.net/?pid=1
Development journal entries
If a unit owned by another player enters a coord that isn't covered by fog, show it on the player's map with a colored shield similar to civ2. Update all affected player maps.
Paint all units with colored shields. Have a "set color = R,G,B" setting, and publicly announce if a player changes color. Make color unique.
PRIVMSG if another player's unit has been sighted @ coord.
Flag a layer that paints coord captions on map. Flag a layer that paints city name captions on map.
Paint health bars above unit shields like civ2.
Create attack_strength and defense_strength unit properties (for air,sea and land).
If a unit moves into same coord as foreign unit and attack_strength > 0, initiate attack.
Alliance settings? (use account name instead of nick)
Don't allow player to move any unit with attack_strength of zero onto same coord as foreign unit/city.
Attacking: for both units, health (0-100) = health - rand(attack/2,attack) + rand(defense/2,defense) The defense rand must be no greater than the attack rand. Modify attack/defense with terrain bonuses (as applicable).
Map image filenames to be stored in bucket for each game/player (separate from player data bucket as doesn't need to be loaded each execute). Bucket index: "irciv_webmaps_%%game_id%%_%%player_id%%"
Improve map output - include flags for various features: units, cities, fog, etc
Goto command, using migrated delphi pathfinding algorithm.
Territory: fixed radius around cities and coords occupied for certain time.
More units/city improvements
Limit map file uploads to IP address (security by obscurity).
Floating absolute positioned box in top left corner with mouse click data (scrollable?). Highlighted map tile selection image (floating, absolute). Use js (refer to old civ code) to show coordinates on mousemove, and tile info on mouseclick. Put logo in floating div in top left corner (above data div). No margins/padding around map image.
Delphi IRCiv client
Develop a client using Delphi that downloads map, communicates with exec using GUI controls and allows player to chat with other players (include IRC client features). Make a web server query (to be polled by delphi client) that returns the name of the latest map file, which contains a timestamp so that the client can determine if a new map needs to be downloaded. This is to account for actions by other players. When the local player takes an action, download a new map.
Conf file for each script (optional) contains key=value for lib.php function that sets constants for scripts.
Add bucket index list command.
Add a socket interface for buckets.
Here's a snippet of terminal output from a single IRCiv command. It's not very pretty and should really be tidied up. Some of the output appears red in the terminal. There's also a bit of junk that happens here because of another script set to execute on every line. Output from multiple scripts is intermingled because they run concurrently (should probably put a pid prefix or something).
:email@example.com PRIVMSG #civ :r php scripts/irciv.php 'crutchy' 'r' '#civ' '1400751332.253' BUCKET_GET [IRCiv_#civ_players]: SUCCESS (34kb) :crutchy NOTICE #civ :~AUJ73HF839CHH2933HRJPA8N2H r php scripts/irciv.php 'crutchy' '~AUJ73HF839CHH2933HRJPA8N2H r' '#civ' '1400751332.253' BUCKET_GET [IRCiv_#civ_map_coords]: SUCCESS (8kb) BUCKET_GET [IRCiv_#civ_map_data]: SUCCESS (0kb) BUCKET_GET [IRCiv_#civ_players]: SUCCESS (34kb) BUCKET_GET [IRCiv_#civ_map_coords]: SUCCESS (8kb) BUCKET_GET [IRCiv_#civ_map_data]: SUCCESS (0kb) BUCKET_SET [IRCiv_#civ_players]: SUCCESS process terminated normally IRCiv: #civ/crutchy => successfully moved warrior right from (85,26) to (86,26) IRC_MSG IRCiv: #civ/crutchy => successfully moved warrior right from (85,26) to (86,26) IRCiv: #civ/crutchy => http://irciv.port119.net/?pid=1 IRC_MSG IRCiv: #civ/crutchy => http://irciv.port119.net/?pid=1 IRCiv: #civ/crutchy => 0/2, settler, +100, (88,26) IRC_MSG IRCiv: #civ/crutchy => 0/2, settler, +100, (88,26) BUCKET_SET [IRCiv_#civ_players]: SUCCESS process terminated normally