Example #1
0
void LoadingScreen::fire_timer() {
    switch (_state) {
        case TYPING:
            while (_next_update < now()) {
                if (_chars_typed >= _name_text->size()) {
                    _state = LOADING;
                    if (!start_construct_level(_level, &_max)) {
                        *_cancelled = true;
                        stack()->pop(this);
                    }
                    return;
                }
                if ((_chars_typed % 3) == 0) {
                    sys.sound.teletype();
                }
                _next_update += kTypingDelay;
                ++_chars_typed;
            }
            break;

        case LOADING:
            _next_update = now() + kTypingDelay;
            while (now() < _next_update) {
                if (_current < _max) {
                    construct_level(_level, &_current);
                } else {
                    _state = DONE;
                    return;
                }
            }
            break;

        case DONE: stack()->pop(this); break;
    }
}
Example #2
0
void level_init (struct state *s) {
  int w = 20 + s->status.level * 5;
  int h = 20 + s->status.level * 5;
  
  if (w > 70) {w = 70;}
  if (h > 70) {h = 70;}

  zero_cons(&s->cons);
  construct_level (s, w, h);

  int i, j, k;
  /* Prepare Prio */
  for(i=0; i<MOB_NUM; ++i) { 
    s->prio.ap[i] = 0; s->prio.id[i] = ID_NONE; 

    s->mobs.mb[i].alive = 0;
  }
  s->prio.num = 0;
  s->mobs.total_num = 0;

  s->pl.ready = 0; /* it cannot be detected/seen */

  /* add mobs */
  int mobsnum = w*h*(3 + s->status.level) / (150);
  if (mobsnum > 400) {mobsnum = 400;}
  spawn_mobs_connected (s, mobsnum);
  
  /* Place exit */
  int exit_loc = urandom(s->cons.con_num);
  i = s->cons.conx[exit_loc];
  j = s->cons.cony[exit_loc];
  k = s->cons.conz[exit_loc];
  s->grid.loc[i][j][k].tl = tl_exit;

  /* Position the player */
  find_minmax_empty(s, 5, &i, &j, &k);

  s->pl.ready = 1;
  s->pl.coord.x = i;
  s->pl.coord.y = j;
  s->pl.coord.z = k;
  
  s->grid.loc[i][j][k].id_mob = ID_PLAYER;

  s->prio.id[s->prio.num] = ID_PLAYER;
  s->prio.ap[s->prio.num] = 0.0;
  s->prio.num++;

  /* set camera */
  s->camera.x = i;
  s->camera.y = j;
  s->camera.z = SZ-1;
  
  
  /* update vision */
  blank_vision(&s->grid, &s->vision, SX/2, SY/2, (SX+SY));
  blank_vision_seen(&s->grid, &s->vision, SX/2, SY/2, (SX+SY));

  update_vision(s);
  s->players_turn = 1;
}