Esempio n. 1
0
static void parse_planet_header(az_load_planet_t *loader) {
  int num_zones, num_hints, num_rooms, num_paragraphs, start_room_num;
  READ("@P z%d h%d r%d t%d s%d\n",
       &num_zones, &num_hints, &num_rooms, &num_paragraphs, &start_room_num);
  if (num_zones < 1 || num_zones > AZ_MAX_NUM_ZONES ||
      num_hints < 0 || num_hints > AZ_MAX_NUM_HINTS ||
      num_rooms < 1 || num_rooms > AZ_MAX_NUM_ROOMS ||
      num_paragraphs < 0 || num_paragraphs > AZ_MAX_NUM_PARAGRAPHS ||
      start_room_num < 0 || start_room_num >= num_rooms) FAIL();
  loader->num_zones = num_zones;
  loader->num_hints = num_hints;
  loader->num_paragraphs = num_paragraphs;
  loader->planet->num_zones = 0;
  loader->planet->zones = AZ_ALLOC(num_zones, az_zone_t);
  loader->planet->num_hints = 0;
  loader->planet->hints = AZ_ALLOC(num_hints, az_hint_t);
  loader->planet->num_rooms = num_rooms;
  loader->planet->rooms = AZ_ALLOC(num_rooms, az_room_t);
  loader->planet->num_paragraphs = 0;
  loader->planet->paragraphs = AZ_ALLOC(num_paragraphs, char*);
  loader->planet->start_room = start_room_num;
  char ch = '\0';
  if (az_rscanf(loader->reader, " $s%c", &ch) < 1 || ch != ':') FAIL();
  loader->planet->on_start = az_read_script(loader->reader);
  if (loader->planet->on_start == NULL) FAIL();
  scan_to_bang(loader);
}
Esempio n. 2
0
az_music_parser_t *new_music_parser(
    az_music_t *music, FILE *file, int num_drums,
    const az_sound_data_t *drums) {
  assert(num_drums >= 0);
  assert(drums != NULL || num_drums == 0);
  az_music_parser_t *parser = AZ_ALLOC(1, az_music_parser_t);
  parser->music = music;
  parser->file = file;
  parser->line = 1;
  parser->num_drums = num_drums;
  parser->drums = drums;
  AZ_ARRAY_LOOP(part_index, parser->part_indices) *part_index = -1;
  parser->loudness_multiplier = 1.0;
  parser->seconds_per_whole_note = 2.0;
  parser->current_part = -1;
  parser->current_track = -1;
  return parser;
}