http://gmc.yoyogames...p...t&p=2630210
As far as I can tell, no one has taken me up on the idea, and I've been thinking about it lately so I'm going to take a crack at it. The game as I envision it would eventually have a single-player campaign, sort of like the old Origin Systems Inc. game OMEGA where you start out with some basic chassis, shielding, armor, and weapons options (balanced by weight restrictions and cost), and then develop a simple AI for your units depending on the role you want them to play and their loadout, and then face-off in a 5 v 5 battle vs "computer" opponents on a very basic playfield sparsely populated with obstacles (see image below).
The heart of the game, however, would be a simulation mode (maybe you have to unlock this by winning the single-player game?) where cost is no object, and you can build whatever unit you want with whatever components you want, subject to weight restrictions, and develop and plug in your AI code. Then you can import/export teams of 5 units (identified by their total cost so you can either put restrictions on cost for tournaments, or so you at least know the guy's team you're downloading doesn't have 5x better stuff than yours does, although I would imagine everyone would try to max their units out with the best equipment). Then you battle the other person's team in the simulation to see how your units fare against his/hers.
I would develop the simulation mode first, since the battle simulation is the main part of the game, and would allow me to test different AI code in different units, plus would provide the greatest community response here I believe. The AI code language would be similar in vein to Carnage Heart in terms on command structures, but instead of using icon based commands with a flow diagram, I was planning to allow the user to program in a linear fashion, with line numbers for labelling code, and allowing the user to branch to another line (like a GOTO statement) or even return from a subroutine call to give it a little more complexity. Each command has a "cycle count" (i.e. repairing an ally takes longer to process than moving one space), and an energy draw (comparisons don't require any energy, but moving does).
Here are the list of commands/comparisons I think would be useful... I was wondering if anyone had any more ideas:
MOVEMENT:
MOVE(DIR) - moves one space forward, backward, left, or right (strafing)
TURN(DIR) - turns left or right 90 degrees
JUMP(DIR) - jumps two spaces forward, backward, left, or right (if jumping into an obstacle or boundary, receives damage)
DEFENSE:
FIRE(MAIN|AUX, WIDTH) - fires main or auxiliary weapon forward at a random angle within WIDTH (usually you want this to be 0)
MELEE - performs a melee attack forward, damaging any adjacent unit
SHIELD(DIR|DOWN) - raises/changes shielding to FRONT, BACK, LEFT, RIGHT, or lowers the shield
IF_DETECT? (E/A/P/M/O/N/B, RANGE, DIR, WIDTH) - Scan for Enemy/Friendly/Projectile/Missile/Obstacle/Mine/Boundary in specified direction, range, width of scan (0-180)
COMMUNICATION:
TRANSMIT(CHANNEL, NUMBER) - Broadcasts NUMBER on specified CHANNEL to adjacent friendly units
IF_RECEIVE?(CHANNEL, NUMBER, DIR) - Check if received NUMBER on specified CHANNEL from specified direction (AHEAD, BEHIND, LEFT, RIGHT)
ABILITIES:
JAM(DIR) - attempts to jam a missile in the direction specified (the closer the missile, the greater chance of success, but the direction change may not be enough)
REPAIR(DIR) - repairs a certain % of armor on adjacent unit if a repair module is in the equipment loadout
TRANSFER(DIR) - transfers a certain % of energy to adjacent unit if an energy transfer unit is in the equipment loadout
DESTRUCT - self-destructs the unit and creates substantial splash damage
BATTERY - recharges the main battery with energy if a batter is in the equipment loadout
RELOAD(MAIN|AUX) - reloads the main or aux projectile weapon if a ammo pack is in the equipment loadout
MISCELLANEOUS:
NOOP - doesn't do anything for 1 cycle
GOTO(LINE) - branches to the specified line number
RETURN - returns to the line following the last branch operation (either from a comparison or a BRANCHTO)
REMARK(TEXT) - allows user to type in a remark, does not take any cycle count (interpreter will process the next instruction as well, unless its another REMARK/TAUNT)
TAUNT(TEXT) - unit displays a user-defined taunt on the screen in a chat bubble, can also be used for error trapping, does not take any cycle count (interpreter will process the next instruction as well unless its another REMARK/TAUNT)
CT(A|B|C|D|E, OPERATION, NUMBER) - performs the specified OPERATION with NUMBER to value stored in register A, B, C, D, E
IF_CT?(A|B|C|D|E, COMPARISON, NUMBER) - performs the specified COMPARISON (<, =, >, <=, >=) against the value in the register and NUMBER
IF_ALLYS?(COMPARISON, NUMBER) - performs the specified COMPARISON (<, =, >, <=, >=) against the number of friendly units remaining and NUMBER
IF_ENEMIES?(COMPARISON, NUMBER) - performs the specified COMPARISON (<, =, >, <=, >=) against the number of enemy units remaining and NUMBER
IF_TIME?(COMPARISON, NUMBER) - performs the specified COMPARISON (<, =, >, <=, >=) against the time elapsed in the skirmish and NUMBER
IF_RANDOM?(NUMBER1, NUMBER2) - checks if NUMBER1 is equal to or less than RANDOM(NUMBER2)
IF_AMMO?(MAIN|AUX, COMPARISON, PERCENT) - performs the specified COMPARISON (<, =, >, <=, >=) against the % of ammo remaining in the MAIN or AUX weapon and PERCENT
IF_ENERGY?(COMPARISON, PERCENT) - performs the specified COMPARISON (<, =, >, <=, >=) against the % of energy remaining and PERCENT
IF_ARMOR?(COMPARISON, PERCENT) - performs the specified COMPARISON (<, =, >, <=, >=) against the % of armor remaining and PERCENT
The language allows for considerable flexibility without being too complex, with some basic comparisons and variable setting options. Plus, with various equipment loadouts, it lends itself nicely to developing AI for certain roles for your units... for example, you could load up on Explosive Charges (which increase the yield of detonation and splash damage when the unit is destroyed) and pair it up with an AI that starts out the match by jumping forward a bunch of times if there are no obstacles in front of it until it finds the first enemy and then self-destructs, hoping to take out a few more units with it:
001 REMARK // See if there is an obstacle within 2 spaces directly forward of the unit, if so, branch 002 IF_DETECT? (OBSTACLE, 2, 0, 0) GOTO(009) 003 REMARK // Otherwise, look for an adjacent enemy 004 IF_DETECT? (ENEMY, 1, 0, 360) GOTO(015) 005 REMARK // No enemy, and no obstacle, so jump forward 006 JUMP(FORWARD) 007 GOTO(002) 008 REMARK // Obstacle avoidance 009 IF_RANDOM(1,2) = 1 GOTO(012) 010 MOVE(LEFT) 011 GOTO(013) 012 MOVE(RIGHT) 013 GOTO(002) 014 REMARK // Enemy is adjacent, self-destruct 015 DESTRUCT
(The code assumes the unit will detect an enemy before it reaches the far boundary, and so it doesn't have any code related to handling that, but you get the idea...)
I'm looking for other instructions/comparisons I could add to the language without making it too complex. Keep in mind during the game, I have to parse through one instruction at a time for up to 10 objects. Or if you can think of other abilities that would be useful, that would help too. Credits given.
Here's a mockup of the playfield
Here's the title screen



Find content
Male
