Example #1
0
/*
 * 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;
}
Example #2
0
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;
}
Example #3
0
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;
}
Example #4
0
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;
}
Example #5
0
void setup(void) {
	list_init(&inv, free);

	load_inventory(&inv);
}