function fast_resolve($planet_id) { $CI =& get_instance(); // Load resources and fetch data $CI->load->model('planetmodel'); $CI->load->model('factionmodel'); $CI->load->model('commandmodel'); $CI->load->model('formationmodel'); $CI->load->model('combatunitmodel'); $planet = $CI->planetmodel->get_by_id($planet_id); $factions = $CI->factionmodel->get_by_game($planet->game_id); if (count($factions) != 2) { log_message('error', 'fast_resolve failed due to invalid numebr of factions on ' . $planet->name); return; } $commands = $CI->commandmodel->get_by_planet_for_combat($planet_id); $formations = $CI->formationmodel->get_by_planet_for_combat($planet_id); $combatunits = $CI->combatunitmodel->get_by_planet_for_combat($planet_id); // Determine LR rating of each faction $lrTable['Green'] = 1; $lrTable['Regular'] = 2; $lrTable['Veteran'] = 4; $lrTable['Elite'] = 6; $factionArray; foreach ($factions as $f) { $factionArray[$f->faction_id] = $f; $factionArray[$f->faction_id]->lr = 0; $factionArray[$f->faction_id]->num_recon = 0; $factionArray[$f->faction_id]->initBonus = 0; $factionArray[$f->faction_id]->damageBonus = 0; } foreach ($commands as $c) { $f_id = $c->f_id; if ($factionArray[$f_id]->lr < $lrTable[$c->faction_id]) { $factionArray[$f_id]->lr = $lrTable[$c->faction_id]; } } // Initiative $fs = (array) $factions; $rollA = roll_dice(2, 6) + $factionArray[$fs[0]->faction_id]->lr; $rollB = roll_dice(2, 6) + $factionArray[$fs[1]->faction_id]->lr; if ($rollA > $rollB) { $factionArray[$fs[0]->faction_id]->initBonus = 1; } else { $factionArray[$fs[1]->faction_id]->initBonus = 1; } // Recon foreach ($formations as $f) { if ($f->role == 'Recon') { $factionArray[$f->faction_id]->num_recon++; } } $rollA = roll_dice(2, 6) + $factionArray[$fs[0]->faction_id]->num_recon * 2 + $factionArray[$fs[0]->faction_id]->initBonus; $rollB = roll_dice(2, 6) + $factionArray[$fs[1]->faction_id]->num_recon * 2 + $factionArray[$fs[1]->faction_id]->initBonus; if ($rollA > $rollB) { $factionArray[$fs[0]->faction_id]->damageBonus = 0.1; } else { $factionArray[$fs[1]->faction_id]->damageBonus = 0.1; } // Engagement, roll and store engagement roll // Affected by LR, Loyalty, recon, skill, morale, fatigue, supply $engageExp['Green'] = 1; $engageExp['Regular'] = 0; $engageExp['Veteran'] = -1; $engageExp['Elite'] = -2; $engageLoyalty['Questionable'] = 1; $engageLoyalty['Reliable'] = 0; $engageLoyalty['Fanatical'] = -1; $engageMorale['Normal'] = 0; $engageMorale['Shaken'] = 1; $engageMorale['Unsteady'] = 2; $engageMorale['Broken'] = 3; foreach ($formations as $f) { $target = $f->tactics; $target += $engageExp[$f->experience]; if ($f->role == 'Recon') { $target += 2; } $target -= $factionArray[$f->faction_id]->lr; $target += $engageLoyalty[$f->loyalty]; $target += !$f->supply * 3; $target += $engageMorale[$f->morale]; } // Combat foreach ($combatunits as $c) { } // Damage resolution $combatunitarray = (array) $combatunits; foreach ($combatunits as $c) { } }
/** * Damage this formation * Damage is applied randomly among available combat units */ function damage($token_id = 0) { $page = $this->page; $damage = $this->input->post('damage'); $this->load->model('tokenmodel'); $this->load->model('formationmodel'); $this->load->model('combatunitmodel'); $token = $this->tokenmodel->get_by_id($token_id); $formation = $this->formationmodel->get_by_id($token->formation_id); $combatunits = $this->combatunitmodel->get_by_formation($formation->formation_id); $numUnits = count($combatunits); $roll = roll_dice(1, $numUnits); $combatunits[$roll]->damage += $damage; $this->combatunitmodel->update($combatunits[$roll]->combatunit_id, $combatunits[$roll]); $this->view($token_id); }
function generate_combatteam($combatteam_id = 0) { $CI =& get_instance(); $CI->load->model('formationmodel'); $CI->load->model('combatunitmodel'); $CI->load->model('combatteammodel'); $CI->load->model('lancemodel'); $CI->load->model('unitmodel'); $CI->load->model('ratmodel'); $CI->load->model('ratdatamodel'); $CI->load->model('commandmodel'); $CI->load->model('elementmodel'); $CI->load->model('unitmodel'); $CI->load->model('factionmodel'); // Gather up basic data from the command heirarchy $combatteam = $CI->combatteammodel->get_by_id($combatteam_id); $combatunit = $CI->combatunitmodel->get_by_id($combatteam->combatunit_id); $formation = $CI->formationmodel->get_by_id($combatunit->formation_id); $command = $CI->commandmodel->get_by_id($formation->command_id); $faction = $CI->factionmodel->get_by_id($command->faction_id); // Make RAT table lookup corrections if ($formation->type == 'Aero' || $formation->type == 'Vehicle') { $command->tech = 'B'; } if ($formation->type == 'Infantry') { $command->tech = 'B'; $faction->name = 'General'; } // Skill lookup table $skillTable['Green'] = 5; $skillTable['Regular'] = 4; $skillTable['Veteran'] = 3; $skillTable['Elite'] = 2; $skill = $skillTable[$command->experience]; // Size lookup table $sizeTable['Light'] = 1; $sizeTable['Medium'] = 2; $sizeTable['Heavy'] = 3; $sizeTable['Assault'] = 4; $altSizeTable[1] = 'Light'; $altSizeTable[2] = 'Medium'; $altSizeTable[3] = 'Heavy'; $altSizeTable[4] = 'Assault'; // Determine Company composition $roll = roll_dice(1, 6) - 1; $lanceWeights = array(array('Light', 'Medium', 'Medium'), array('Light', 'Medium', 'Heavy'), array('Medium', 'Medium', 'Heavy'), array('Light', 'Heavy', 'Heavy'), array('Heavy', 'Heavy', 'Heavy'), array('Heavy', 'Heavy', 'Assault')); $lanceWeights = $lanceWeights[$roll]; // Generate lances for ($l = 0; $l < 3; $l++) { $lance = new stdClass(); $lance->combatteam_id = $combatteam_id; $lance->type = $formation->type; $lance->weight = $lanceWeights[$l]; $CI->lancemodel->create($lance); } $lances = $CI->lancemodel->get_by_combatteam($combatteam_id); // Determine Lance composition $elementWeights['Light'] = array(array('Light', 'Light', 'Light', 'Light'), array('Light', 'Light', 'Light', 'Medium'), array('Light', 'Light', 'Light', 'Medium'), array('Light', 'Light', 'Medium', 'Medium'), array('Light', 'Light', 'Medium', 'Medium'), array('Light', 'Light', 'Medium', 'Heavy')); $elementWeights['Medium'] = array(array('Light', 'Medium', 'Medium', 'Heavy'), array('Medium', 'Medium', 'Medium', 'Medium'), array('Medium', 'Medium', 'Medium', 'Medium'), array('Medium', 'Medium', 'Medium', 'Heavy'), array('Medium', 'Medium', 'Medium', 'Heavy'), array('Medium', 'Medium', 'Heavy', 'Heavy')); $elementWeights['Heavy'] = array(array('Medium', 'Heavy', 'Heavy', 'Heavy'), array('Heavy', 'Heavy', 'Heavy', 'Heavy'), array('Heavy', 'Heavy', 'Heavy', 'Heavy'), array('Medium', 'Heavy', 'Heavy', 'Assault'), array('Medium', 'Heavy', 'Heavy', 'Assault'), array('Heavy', 'Heavy', 'Heavy', 'Assault')); $elementWeights['Assault'] = array(array('Medium', 'Heavy', 'Assault', 'Assault'), array('Heavy', 'Heavy', 'Assault', 'Assault'), array('Heavy', 'Heavy', 'Assault', 'Assault'), array('Heavy', 'Assault', 'Assault', 'Assault'), array('Heavy', 'Assault', 'Assault', 'Assault'), array('Assault', 'Assault', 'Assault', 'Assault')); // Target movement modifier lookup table $tmm = array(-4, 0, 0, 1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5); // Generate four elements per lance foreach ($lances as $l) { $lanceweight = 0; $roll = roll_dice(1, 6) - 1; $weightTable = $elementWeights[$l->weight][$roll]; $numElements = 4; // Aero wings only have 2 elements if ($l->type == 'Aero') { $numElements = 2; } for ($e = 0; $e < $numElements; $e++) { $unit = new stdClass(); $unit->lance_id = $l->lance_id; $unit->type = $l->type; $unit->weight = $weightTable[$e]; // Aerospace can't have Assault elements if ($unit->type == 'Aero' && ($unit->weight = 'Assault')) { $unit->weight = 'Heavy'; } // Infantry is always light if ($unit->type == 'Infantry') { $unit->weight = 'Light'; } $CI->elementmodel->create($unit); } // Roll against the RAT table to populate each element $elements = $CI->elementmodel->get_by_lance($l->lance_id); foreach ($elements as $e) { $roll = roll_dice(2, 6); if ($faction->name == 'Ronin') { $faction->name = 'Kurita'; } // HACK... $ratresult = $CI->ratmodel->get_by_roll($faction->name, $command->tech, $e->type, $e->weight, $roll); $e->name = $ratresult->name; $e->move = $ratresult->move; $l->move += $e->move; $e->jump = $ratresult->jump; $l->jump += $e->jump; $e->overheat = $ratresult->overheat; $e->short_dmg = $ratresult->short_dmg; $l->short_dmg += $e->short_dmg + $e->overheat / 2; $e->med_dmg = $ratresult->med_dmg; $l->med_dmg += $e->med_dmg + $e->overheat / 2; $e->long_dmg = $ratresult->long_dmg; $l->long_dmg += $e->long_dmg + $e->overheat / 2; $e->armor = $ratresult->armor; $l->armor += $e->armor; $e->structure = $ratresult->structure; $l->armor += $e->structure; $e->special = $ratresult->special; $CI->elementmodel->update($e->element_id, $e); // Special cases if ($e->structure > 3 || strpos($e->special, 'CASE') !== FALSE || strpos($e->special, 'AMS') !== FALSE) { $l->armor += 0.5; } if (strpos($e->special, 'ENE') !== FALSE) { $l->armor += 1; } } // Aggregate lance data $l->move = round($l->move / count($elements)); $l->tmm = $tmm[$l->move]; $l->jump = round($l->jump / count($elements) / 2); $l->armor = round($l->armor / 3); $l->short_dmg = round($l->short_dmg / 3); $l->med_dmg = round($l->med_dmg / 3); $l->long_dmg = round($l->long_dmg / 3); $CI->lancemodel->update($l->lance_id, $l); } // end foreach lance // Refetch modified lance data $lances = $CI->lancemodel->get_by_combatteam($combatteam_id); $jump = 0; $size = 0; foreach ($lances as $l) { $combatteam->move += $l->move; $jump += $l->jump; $combatteam->tmm += $l->tmm; $combatteam->armor += $l->armor; $combatteam->short_dmg += $l->short_dmg; $combatteam->med_dmg += $l->med_dmg; $combatteam->long_dmg += $l->long_dmg; $size += $sizeTable[$l->weight]; } $size = round($size / count($lances)); $combatteam->size = $altSizeTable[$size]; $combatteam->move = round($combatteam->move / count($lances)); $jump = round($jump / 3); $combatteam->tmm = round($combatteam->tmm / count($lances)) + $jump; $combatteam->armor = round($combatteam->armor / 3); $combatteam->short_dmg = round($combatteam->short_dmg / 3); $combatteam->med_dmg = round($combatteam->med_dmg / 3); $combatteam->long_dmg = round($combatteam->long_dmg / 3); $CI->combatteammodel->update($combatteam_id, $combatteam); }
function toggle_turn($roomid) { global $db, $ir; $ui = $db->fetch_row($db->query("SELECT p1,p2,turn FROM bg_room WHERE id = {$roomid}")); if ($ui['turn'] == $ui['p1']) { $db->query("UPDATE bg_room SET notifyturn=0,play_time=unix_timestamp(),turn={$ui['p2']} WHERE id={$roomid}"); } else { $db->query("UPDATE bg_room SET notifyturn=0,play_time=unix_timestamp(),turn={$ui['p1']} WHERE id={$roomid}"); } roll_dice($roomid); }