예제 #1
0
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;
}
예제 #2
0
파일: entity.c 프로젝트: beoran/kq-fork
/*! \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);
        }
    }
}