diff --git a/game/enemy.c b/game/enemy.c index 5a48723..207c990 100644 --- a/game/enemy.c +++ b/game/enemy.c @@ -944,7 +944,7 @@ TENEMY_FACE get_enemy_face(TMOB *p,int dirmob,int action,int curdir) } if (pos==3) ret.mirror=pos=1; if (p->anim_counter==-1) view=pos*16; - else view=pos*16+(p->anim_counter % p->anim_counts[pos])+1; + else view=pos*16+(p->anim_counter % (MAX(p->anim_counts[pos],1)))+1; ret.face = view; ret.pos = pos; return ret; @@ -2188,7 +2188,7 @@ static void knock_mob_back(TMOB *mm,int dir) int vls[] = {VLS_UTOK_H,VLS_UTOK_L,VLS_DAMAGE}; for (size_t i = 0; i < countof(vls); ++i) { vlastnosti[vls[i]] -= it->zmeny[vls[i]]; - } + } } @@ -2308,6 +2308,16 @@ void regen_all_mobs() void load_enemy_to_map(int i, int sector, int dir, const TMOB *t) { + + char can_save = 0; + for (int x = 0; xmobs_name, mobs[x].mobs_name) == 0 && !(mobs[x].vlajky2 & MOB_F2_DONT_SAVE)) { + can_save = 1; + break; + } + } + + mobs[i]=*t; if (~mobs[i].vlajky & MOB_MOBILE) mob_map[ sector]=i+MOB_START; if (mobs[i].palette>0)mobs[i].palette=rnd(mobs[i].palette);else mobs[i].palette=abs(mobs[i].palette); @@ -2315,6 +2325,8 @@ void load_enemy_to_map(int i, int sector, int dir, const TMOB *t) { mobs[i].dir=dir; mobs[i].home_pos=sector; mobs[i].vlajky|=MOB_LIVE; + if (!can_save) mobs[i].vlajky2|=MOB_F2_DONT_SAVE; + char s[20]; diff --git a/game/gamesave.c b/game/gamesave.c index 51ffe19..a47d17d 100644 --- a/game/gamesave.c +++ b/game/gamesave.c @@ -360,7 +360,7 @@ int save_map_state() //uklada stav mapy pro savegame (neuklada aktualni pozici); } i=-1; temp_storage_write(&i,sizeof(i),fsta); - for(i=0;i=0 && i<=MAX_MOBS) + while (temp_storage_read(&i,sizeof(i),fsta) && i>=0 && i<=MAX_MOBS) { if (temp_storage_read(mobs+i,1*sizeof(TMOB),fsta)!=sizeof(TMOB)) goto err; + mobs[i].vlajky2 = 0; + } + } for(i=0;ivlajky2 = 0; } *s = count * sizeof(TMOB); return out; diff --git a/game/sndandmus.c b/game/sndandmus.c index 9019ffe..6c11d63 100644 --- a/game/sndandmus.c +++ b/game/sndandmus.c @@ -556,6 +556,7 @@ void play_sample_at_sector(int sample,int listener,int source,int track, char lo { alock(sample); s=ablock(sample); + if (!s) return; p=(struct t_wave *)s; s+=sizeof(struct t_wave); siz=*(int *)s;s+=4;