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; } }
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; }