void create_arena(void) { int x; arena_id = hashstring("arena"); arena = getplanebyid(arena_id); if (arena != NULL) return; score(); /* ist wichtig, damit alle Parteien einen score haben, wenn sie durchs Tor wollen. */ guardian_faction(arena, 999); if (arena) arena_center = findregion(plane_center_x(arena), plane_center_y(arena)); if (!arena_center) { newarena = 1; arena = create_new_plane(arena_id, "Arena", -10000, -10000, 0, BLOCKSIZE - 1, PFL_LOWSTEALING | PFL_NORECRUITS | PFL_NOALLIANCES); block_create(arena->minx, arena->miny, T_OCEAN); arena_center = findregion(plane_center_x(arena), plane_center_y(arena)); for (x = 0; x != BLOCKSIZE; ++x) { int y; for (y = 0; y != BLOCKSIZE; ++y) { region *r = findregion(arena->minx + x, arena->miny + y); freset(r, RF_ENCOUNTER); r->planep = arena; switch (distance(r, arena_center)) { case 4: terraform(r, T_FIREWALL); break; case 0: terraform(r, T_GLACIER); break; case 1: terraform(r, T_SWAMP); break; case 2: terraform(r, T_MOUNTAIN); break; } } } } make_temple(arena_center); #ifdef CENTRAL_VOLCANO init_volcano(); #else if (arena_center->terrain != T_DESERT) terraform(arena_center, T_DESERT); #endif rsetmoney(arena_center, 0); rsetpeasants(arena_center, 0); tower_init(); }
void level_update(int dt, state_t *state) { int next = state->until_next; wave_t *wave = state->wave; level_t *level = state->level; next = next > dt ? next - dt : 0; /* do not advance wave until we are done spawning noobs */ if(next == 0 && level != NULL && state->level_noobs >= wave->noobs) { if(wave->next != NULL) { state->wave = wave = wave->next; next = WAVE_DELAY * 1000; state->level_noobs = 0; } /* only advance level if we have killed/leaked all noobs */ else if(state->kills + state->leaks >= state->total_noobs) { state->level = level->next; if(state->level != NULL) { state->wave = wave = state->level->waves; tower_init(); grid_init(); state->towers = 0; state->power_used = 0; path_load(state, &level->next->map); } next = WAVE_DELAY * 1000; state->level_noobs = 0; } } state->until_next = next; until_spawn = until_spawn > dt ? until_spawn - dt : 0; if(state->level_noobs == wave->noobs) return; if(until_spawn == 0) { noob_spawn(wave->speed, wave->hp, wave->shield, wave->armor_type, state); if(level != NULL) state->level_noobs++; until_spawn += wave->delay; } }