Ejemplo n.º 1
0
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();
}
Ejemplo n.º 2
0
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;
	}
}