/* * Load one monsterdef (into *m) */ bool load_monsterdef(monster_t *m, FILE *f) { struct monsterdef_save_struct s; char str[10]; bool flag; fread(str, sizeof(char), 10, f); if(strncmp(str, "MONSTERDEF", 10)) { fprintf(stderr, "DEBUG: %s:%d - MONSTERDEF not where it should be?! str = %s\n", __FILE__, __LINE__, str); return false; } fread(&s, sizeof(struct monsterdef_save_struct), 1, f); m->id = s.id; strcpy(m->name, s.name); m->attr = s.attr; m->c = s.c; m->level = s.level; m->hp = s.hp; m->speed = s.speed; m->flags = s.flags; m->ai = aitable[s.aitableindex]; m->viewradius = s.viewradius; fread(&flag, sizeof(bool), 1, f); if(flag) m->inventory = load_inventory(f); // Also load inventory, since monsters (& defs) can have inventories now! //printf("loaded monsterdef %s id=%d\n", m->name, m->id); return true; }
bool load_cell(cell_t *c, level_t *l, FILE *f) { bool flag; fread(&c->type, sizeof(char), 1, f); fread(&c->flags, sizeof(int), 1, f); fread(&c->desty, sizeof(short), 1, f); fread(&c->destx, sizeof(short), 1, f); fread(&c->color, sizeof(gtcolor_t), 1, f); fread(&c->litcolor,sizeof(gtcolor_t), 1, f); fread(&c->visible, sizeof(bool), 1, f); fread(&c->height, sizeof(signed int), 1, f); /* cell has monster? */ fread(&flag, sizeof(bool), 1, f); if(flag) { c->monster = gtmalloc(sizeof(monster_t)); load_monster(c->monster, l, f); } /* cell has inventory? */ fread(&flag, sizeof(bool), 1, f); if(flag) { c->inventory = load_inventory(f); if(!c->inventory) { fprintf(stderr, "DEBUG: %s:%d - load_inventory failed!\n", __FILE__, __LINE__); return false; } } return true; }
bool load_player(actor_t *p, FILE *f) { struct player_save_struct s; int i; char str[6]; fread(str, sizeof(char), 6, f); if(strcmp(str, "PLAYER")) { fprintf(stderr, "DEBUG: %s:%d - str != PLAYER in load_player!\n", __FILE__, __LINE__); fprintf(stderr, "read %s instead of PLAYER?!\n", str); return false; } printf("loadplayerstart\n"); fread(&s, sizeof(struct player_save_struct), 1, f); p->x = s.x; p->y = s.y; p->oldx = s.oldx; p->oldy = s.oldy; p->px = s.px; p->py = s.py; p->viewradius = s.viewradius; strcpy(p->name, s.name); p->hp = s.hp; p->maxhp = s.maxhp; p->xp = s.xp; p->ac = s.ac; p->attr = s.attr; p->attrmod = s.attrmod; p->level = s.level; p->race = s.race; p->cla = s.cla; p->flags = s.flags; p->speed = s.speed; p->worldview = s.worldview; p->wvfactor = s.wvfactor; p->kills = s.kills; for(i = 0; i < MAX_SKILLS; i++) p->skill[i] = s.skill[i]; p->inventory = load_inventory(f); if(!p->inventory) { fprintf(stderr, "DEBUG: %s:%d - load_inventory for player failed!\n", __FILE__, __LINE__); return false; } if(s.weapon) { p->weapon = get_object_by_oid(p->inventory, s.weapon); if(!p->weapon) { fprintf(stderr, "DEBUG: %s:%d - get object by oid failed!\n", __FILE__, __LINE__); return false; } } else { p->weapon = NULL; } for(i = 0; i < WEAR_SLOTS; i++) { if(s.w[i]) { p->w[i] = get_object_by_oid(p->inventory, s.w[i]); if(!p->w[i]) { printf("get_object_by_oid failed!\n"); return false; } } else { p->w[i] = NULL; } } //for(i = 0; i < MAX_TEMP_EFFECTS; i++) //p->temp[i] = s.temp[i]; printf("loadplayerend\n"); return true; }
bool load_monster(monster_t *m, level_t *l, FILE *f) { char str[7]; bool flag; monster_t mdef; int oid; fread(str, sizeof(char), 7, f); if(strncmp(str, "MONSTER", 7)) { fprintf(stderr, "NO THIS IS NOT A MONSTER"); fprintf(stderr, "load_monster! STR=%s", str); return false; } if(!m) m = gtmalloc(sizeof(monster_t)); fread(&m->id, sizeof(short), 1, f); fread(&m->mid, sizeof(int), 1, f); fread(&m->y, sizeof(short), 1, f); fread(&m->x, sizeof(short), 1, f); fread(&m->hp, sizeof(int), 1, f); fread(&m->ac, sizeof(short), 1, f); fread(&m->goalx, sizeof(short), 1, f); fread(&m->goaly, sizeof(short), 1, f); fread(&m->attrmod, sizeof(sattr_t), 1, f); fread(&flag, sizeof(bool), 1, f); if(flag) m->attacker = player; else m->attacker = NULL; fread(&flag, sizeof(bool), 1, f); if(flag) m->inventory = load_inventory(f); mdef = get_monsterdef(m->id); m->oldx = mdef.oldx; m->oldy = mdef.oldy; m->viewradius = mdef.viewradius; strcpy(m->name, mdef.name); m->maxhp = mdef.maxhp; m->xp = mdef.xp; m->attr = mdef.attr; m->level = mdef.level; m->race = mdef.race; m->cla = mdef.cla; //m->w = mdef.w; // implement this when monsters can wield and wear stuff! m->flags = mdef.flags; m->c = mdef.c; m->speed = mdef.speed; m->ai = mdef.ai; l->c[m->y][m->x].monster = m; m->prev = l->monsters; m->head = l->monsters; m->next = l->monsters->next; l->monsters->next = m; if(m->next) m->next->prev = m; fread(&oid, sizeof(int), 1, f); if(oid) m->weapon = get_object_by_oid(m->inventory, oid); else m->weapon = NULL; // add loading attacker, wear_t, etc. return true; }
void setup(void) { list_init(&inv, free); load_inventory(&inv); }