bool city_layout_check(Layout* layout) { /* Reseteamos los nodos */ for(int i = 0; i < layout -> core_count; i++) { for(int j = 0; j < layout -> cores[i] -> building_count; j++) { layout -> cores[i] -> buildings[j] -> cored = false; } } for(int i = 0; i < layout -> zone_count; i++) { for(int j = 0; j < layout -> zones[i] -> building_count; j++) { layout -> zones[i] -> buildings[j] -> cored = false; } } for(int i = 0; i < layout -> core_count; i++) { client_encore(layout -> cores[i] -> buildings[0]); if(!zone_check(layout -> cores[i])) return false; } for(int i = 0; i < layout -> zone_count; i++) { if(!zone_check(layout -> zones[i])) return false; } return true; }
/*! \brief Actions for one entity * \date 20040310 PH added TARGET movemode, broke out chase into separate function * * Process an individual active entity. If the entity in question * is #0 (main character) and the party is not automated, then allow * for player input. * * \param target_entity Index of entity * \date 20040310 PH added TARGET movemode, broke out chase into separate function */ static void process_entity(t_entity target_entity) { s_entity *ent = &g_ent[target_entity]; s_player *player = 0; ent->scount = 0; if (!ent->active) { return; } if (!ent->moving) { if (target_entity == 0 && !autoparty) { player_move(); if (ent->moving && display_desc == 1) { display_desc = 0; } return; } switch (ent->movemode) { case MM_STAND: return; case MM_WANDER: wander(target_entity); break; case MM_SCRIPT: entscript(target_entity); break; case MM_CHASE: chase(target_entity); break; case MM_TARGET: target(target_entity); break; } } else /* if (.moving==0) */ { if (ent->tilex * TILE_W > ent->x) { ++ent->x; } if (ent->tilex * TILE_W < ent->x) { --ent->x; } if (ent->tiley * TILE_H > ent->y) { ++ent->y; } if (ent->tiley * TILE_H < ent->y) { --ent->y; } ent->movcnt--; if (ent->framectr < 20) { ent->framectr++; } else { ent->framectr = 0; } if (ent->movcnt == 0) { ent->moving = 0; if (target_entity < PSIZE) { player = &party[pidx[target_entity]]; if (steps < STEPS_NEEDED) { steps++; } if (player->sts[S_POISON] > 0) { if (player->hp > 1) { player->hp--; } play_effect(21, 128); } if (player->eqp[EQP_SPECIAL] == I_REGENERATOR) { if (player->hp < player->mhp) { player->hp++; } } } if (target_entity == 0) { zone_check(); } } if (target_entity == 0 && vfollow == 1) { calc_viewport(0); } } }