Annotation of src/whobj.c, revision 1.1

1.1     ! root        1: /***************************************************************************
        !             2:  *   WHOBJ.C  - object animation code for Witchaven game                   *
        !             3:  *                                                                         *
        !             4:  ***************************************************************************/
        !             5: 
        !             6: #include "icorp.h"
        !             7: #include <memcheck.h>
        !             8: 
        !             9: #pragma aux mulscale =\
        !            10:     "imul ebx",\
        !            11:     "shrd eax, edx, cl",\
        !            12:     parm [eax][ebx][ecx]\
        !            13:     modify [edx]\
        !            14: 
        !            15: extern int treasuresfound,
        !            16:      kills;
        !            17: 
        !            18: 
        !            19: int  shieldtype = 0;
        !            20: int  vampiretime = 0;
        !            21: 
        !            22: long justwarpedcnt = 0;
        !            23: extern justwarpedfx;
        !            24: 
        !            25: extern int difficulty;
        !            26: 
        !            27: extern int cartsnd;
        !            28: 
        !            29: extern int mapon;
        !            30: 
        !            31: extern int spellbooktics;
        !            32: extern int spellbook;
        !            33: extern int spellbookframe;
        !            34: extern int spellbookflip;
        !            35: 
        !            36: extern int pressedkey;
        !            37: extern long pageoffset;
        !            38: extern long selectedgun;
        !            39: extern int currentpotion;
        !            40: 
        !            41: short torchpattern[38] = {2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6, 4, 4, 6, 6, 4, 4, 6, 6, 4, 4, 6, 6, 4, 4, 6, 6, 5, 5, 4, 4, 3, 3, 3, 2, 2, 2};
        !            42: 
        !            43: char flashflag = 0x00;
        !            44: 
        !            45: char displaybuf[50];
        !            46: char scorebuf[50];
        !            47: char healthbuf[50];
        !            48: char armorbuf[50];
        !            49: char potionbuf[50];
        !            50: 
        !            51: int  displaytime;
        !            52: int  shadowtime;
        !            53: int  helmettime;
        !            54: 
        !            55: int  potiontilenum;
        !            56: int  debuginfo;
        !            57: 
        !            58: int  scoretime;
        !            59: extern int strongtime,
        !            60:      invincibletime,
        !            61:      manatime,
        !            62:      invisibletime,
        !            63:      nightglowtime;
        !            64: 
        !            65: extern
        !            66: long qsetmode;
        !            67: 
        !            68: void
        !            69: monitor(void)
        !            70: {
        !            71: 
        !            72:      int  i,
        !            73:           j;
        !            74:      int  val;
        !            75:      struct player *plr;
        !            76:      char buffer[20];
        !            77:      long dist,
        !            78:           mindist;
        !            79:      short lockx,
        !            80:           locky;
        !            81:      short scrx,
        !            82:           scry;
        !            83:      char temph[30];
        !            84: 
        !            85:      plr = &player[0];
        !            86: 
        !            87:      if (justwarpedfx > 0) {
        !            88:           justwarpedfx -= synctics;
        !            89:           justwarpedcnt += synctics << 6;
        !            90:           rotatesprite(320 << 15, 200 << 15, justwarpedcnt << 9, 0, ANNIHILATE, 0, 0, 1 + 2, windowx1, windowy1, windowx2, windowy2);
        !            91:           if (justwarpedfx <= 0)
        !            92:                justwarpedcnt = 0;
        !            93:      }
        !            94: 
        !            95:      if (poisoned == 1) {
        !            96:           if (poisontime >= 0) {
        !            97:                poisontime -= synctics;
        !            98:                healthpic(0);
        !            99:                if (poisontime < 0) {
        !           100:                     startredflash(50);
        !           101:                     healthpic(-10);
        !           102:                     poisontime = 7200;
        !           103:                }
        !           104:           }
        !           105:      }
        !           106: 
        !           107:      if (vampiretime > 0)
        !           108:           vampiretime -= synctics;
        !           109: 
        !           110:      if (shockme >= 0)
        !           111:           shockme -= synctics;
        !           112: 
        !           113:      if (helmettime > 0) {
        !           114:           helmettime -= synctics;
        !           115:           if (svga == 1)
        !           116:                rotatesprite(270L << 16, (long) (tilesizy[HELMET] >> 1) << 16, 32768L, 0, HELMET, 0, 0, 0x02, windowx1, windowy1, windowx2, windowy2);
        !           117:           else
        !           118:                rotatesprite(300L << 16, (long) (tilesizy[HELMET] >> 1) << 16, 32768L, 0, HELMET, 0, 0, 0x02, windowx1, windowy1, windowx2, windowy2);
        !           119:      }
        !           120: 
        !           121:      if (displaytime > 0) {
        !           122:           fancyfontscreen(18, 24, THEFONT, displaybuf);
        !           123:           displaytime -= ((long) synctics);
        !           124:      }
        !           125: 
        !           126:      if (shadowtime >= 0)
        !           127:           shadowtime -= synctics;
        !           128: 
        !           129:      if (nightglowtime >= 0) {
        !           130:           nightglowtime -= synctics;
        !           131:           visibility = 256;
        !           132:           if (nightglowtime < 0)
        !           133:                visibility = 1024;
        !           134:      }
        !           135: 
        !           136:      if (strongtime >= 0) {
        !           137:           strongtime -= synctics;
        !           138:           startwhiteflash(10);
        !           139:      }
        !           140: 
        !           141:      if (invisibletime >= 0) {
        !           142:           invisibletime -= synctics;
        !           143:      }
        !           144: 
        !           145:      if (manatime >= 0) {
        !           146:           manatime -= synctics;
        !           147:      }
        !           148: 
        !           149:      if (displaytime <= 0) {
        !           150:           if (manatime > 0) {
        !           151:                if (manatime < 512) {
        !           152:                     if ((manatime%64) > 32) {
        !           153:                          return;
        !           154:                     }
        !           155:                }
        !           156:                fancyfontscreen(18, 24, THEFONT, "FIRE RESISTANCE");
        !           157:           }
        !           158:           else if (poisoned == 1) {
        !           159:                fancyfontscreen(18, 24, THEFONT, "POISONED");
        !           160:           }
        !           161:           else if (plr->orbactive[5] > 0) {
        !           162:                if (plr->orbactive[5] < 512) {
        !           163:                     if ((plr->orbactive[5]%64) > 32) {
        !           164:                          return;
        !           165:                     }
        !           166:                }
        !           167:                fancyfontscreen(18, 24, THEFONT, "FLYING");
        !           168:           }
        !           169:           else if (vampiretime > 0) {
        !           170:                fancyfontscreen(18, 24, THEFONT, "ORNATE HORN");
        !           171:           }
        !           172:      }
        !           173:      return;
        !           174: }
        !           175: 
        !           176: extern
        !           177: int  droptheshield;
        !           178: 
        !           179: extern void
        !           180: fadeout(int start, int end, int red, int green, int blue, int steps); // JEFF
        !           181: 
        !           182: extern
        !           183: int  spikeme;
        !           184: 
        !           185: void
        !           186: processobjs(struct player * plr)
        !           187: {
        !           188: 
        !           189:      long dh,
        !           190:           dx,
        !           191:           dy,
        !           192:           dz,
        !           193:           nexti;
        !           194:      short i;
        !           195:      int  j;
        !           196:      spritetype *spr;
        !           197: 
        !           198:      if (plr->sector < 0 || plr->sector >= numsectors) {
        !           199:           return;
        !           200:      }
        !           201:      i = headspritesect[plr->sector];
        !           202:      while (i != -1) {
        !           203:           nexti = nextspritesect[i];
        !           204:           spr = &sprite[i];
        !           205:           dx = labs(plr->x - spr->x);   // x distance to sprite
        !           206:           dy = labs(plr->y - spr->y);   // y distance to sprite
        !           207:           dz = labs((plr->z >> 8) - (spr->z >> 8));    // z distance to sprite
        !           208:           dh = tilesizy[spr->picnum] >> 1;   // height of sprite
        !           209:           if (dx + dy < PICKDISTANCE && dz - dh <= PICKHEIGHT) {
        !           210:                switch (spr->picnum) {
        !           211:                case SILVERBAG:
        !           212:                case SILVERCOINS:
        !           213:                     strcpy(displaybuf, "Silver!");
        !           214:                     displaytime = 360;
        !           215:                     deletesprite((short) i);
        !           216:                     SND_Sound(S_POTION1);
        !           217:                     score(rand() % 100 + 10);
        !           218:                     break;
        !           219:                case GOLDBAG:
        !           220:                case GOLDBAG2:
        !           221:                case GOLDCOINS:
        !           222:                case GOLDCOINS2:
        !           223:                     strcpy(displaybuf, "Gold!");
        !           224:                     displaytime = 360;
        !           225:                     deletesprite((short) i);
        !           226:                     SND_Sound(S_POTION1);
        !           227:                     score(rand() % 100 + 10);
        !           228:                     break;
        !           229:                case HELMET:
        !           230:                     strcpy(displaybuf, "Hero Time");
        !           231:                     displaytime = 360;
        !           232:                     deletesprite((short) i);
        !           233:                     helmettime = 7200;
        !           234:                     SND_Sound(S_STING1 + rand() % 2);
        !           235:                     score(10);
        !           236:                     treasuresfound++;
        !           237:                     break;
        !           238:                case PLATEARMOR:
        !           239:                     if (plr->armor <= 149) {
        !           240:                          strcpy(displaybuf, "Plate Armor");
        !           241:                          displaytime = 360;
        !           242:                          deletesprite((short) i);
        !           243:                          plr->armortype = 3;
        !           244:                          plr->armor = 0;
        !           245:                          armorpic(150);
        !           246:                          SND_Sound(S_POTION1);
        !           247:                          score(40);
        !           248:                          treasuresfound++;
        !           249:                     }
        !           250:                     break;
        !           251:                case CHAINMAIL:
        !           252:                     if (plr->armor <= 99) {
        !           253:                          strcpy(displaybuf, "Chain Mail");
        !           254:                          displaytime = 360;
        !           255:                          deletesprite((short) i);
        !           256:                          plr->armortype = 2;
        !           257:                          plr->armor = 0;
        !           258:                          armorpic(100);
        !           259:                          SND_Sound(S_POTION1);
        !           260:                          score(20);
        !           261:                          treasuresfound++;
        !           262:                     }
        !           263:                     break;
        !           264:                case LEATHERARMOR:
        !           265:                     if (plr->armor <= 49) {
        !           266:                          strcpy(displaybuf, "Leather Armor");
        !           267:                          displaytime = 360;
        !           268:                          deletesprite((short) i);
        !           269:                          plr->armortype = 1;
        !           270:                          plr->armor = 0;
        !           271:                          armorpic(50);
        !           272:                          SND_Sound(S_POTION1);
        !           273:                          score(10);
        !           274:                          treasuresfound++;
        !           275:                     }
        !           276:                     break;
        !           277:                case GIFTBOX:
        !           278:                     treasuresfound++;
        !           279:                     playsound_loc(S_TREASURE1, spr->x, spr->y);
        !           280:                     j = rand() % 7;
        !           281:                     switch (j) {
        !           282:                     case 0:
        !           283:                          switch (rand() % 5) {
        !           284:                          case 0:
        !           285:                               if (!potionspace(0)) {
        !           286:                                    break;
        !           287:                               }
        !           288:                               strcpy(displaybuf, "Health Potion");
        !           289:                               displaytime = 360;
        !           290:                               updatepotion(HEALTHPOTION);
        !           291:                               potionpic(0);
        !           292:                               currentpotion = 0;
        !           293:                               SND_Sound(S_POTION1);
        !           294:                               score(10);
        !           295:                               break;
        !           296:                          case 1:
        !           297:                               if (!potionspace(1)) {
        !           298:                                    break;
        !           299:                               }
        !           300:                               strcpy(displaybuf, "Strength Potion");
        !           301:                               displaytime = 360;
        !           302:                               updatepotion(STRENGTHPOTION);
        !           303:                               potionpic(1);
        !           304:                               currentpotion = 1;
        !           305:                               SND_Sound(S_POTION1);
        !           306:                               score(20);
        !           307:                               break;
        !           308:                          case 2:
        !           309:                               if (!potionspace(2)) {
        !           310:                                    break;
        !           311:                               }
        !           312:                               strcpy(displaybuf, "Cure Poison Potion");
        !           313:                               displaytime = 360;
        !           314:                               updatepotion(ARMORPOTION);
        !           315:                               potionpic(2);
        !           316:                               currentpotion = 2;
        !           317:                               SND_Sound(S_POTION1);
        !           318:                               score(15);
        !           319:                               break;
        !           320:                          case 3:
        !           321:                               if (!potionspace(3)) {
        !           322:                                    break;
        !           323:                               }
        !           324:                               strcpy(displaybuf, "Resist Fire Potion");
        !           325:                               displaytime = 360;
        !           326:                               updatepotion(FIREWALKPOTION);
        !           327:                               potionpic(3);
        !           328:                               currentpotion = 3;
        !           329:                               SND_Sound(S_POTION1);
        !           330:                               score(15);
        !           331:                               break;
        !           332:                          case 4:
        !           333:                               if (!potionspace(4)) {
        !           334:                                    break;
        !           335:                               }
        !           336:                               strcpy(displaybuf, "Invisibility Potion");
        !           337:                               displaytime = 360;
        !           338:                               updatepotion(INVISIBLEPOTION);
        !           339:                               potionpic(4);
        !           340:                               currentpotion = 4;
        !           341:                               SND_Sound(S_POTION1);
        !           342:                               score(30);
        !           343:                               break;
        !           344:                          }
        !           345:                          spr->picnum = OPENCHEST;
        !           346:                          break;
        !           347:                     case 1:
        !           348:                          switch (rand() % 8) {
        !           349:                          case 0:
        !           350:                               if (plr->orbammo[0] < 10) {
        !           351:                                    plr->orb[0] = 1;
        !           352:                                    plr->orbammo[0]++;
        !           353:                                    strcpy(displaybuf, "Scare Scroll");
        !           354:                                    displaytime = 360;
        !           355:                                    SND_Sound(S_POTION1);
        !           356:                               }
        !           357:                               break;
        !           358:                          case 1:
        !           359:                               if (plr->orbammo[1] < 10) {
        !           360:                                    plr->orb[1] = 1;
        !           361:                                    plr->orbammo[1]++;
        !           362:                                    strcpy(displaybuf, "Night Vision Scroll");
        !           363:                                    displaytime = 360;
        !           364:                                    SND_Sound(S_POTION1);
        !           365:                               }
        !           366:                               break;
        !           367:                          case 2:
        !           368:                               if (plr->orbammo[2] < 10) {
        !           369:                                    plr->orb[2] = 1;
        !           370:                                    plr->orbammo[2]++;
        !           371:                                    strcpy(displaybuf, "Freeze Scroll");
        !           372:                                    displaytime = 360;
        !           373:                                    SND_Sound(S_POTION1);
        !           374:                               }
        !           375:                               break;
        !           376:                          case 3:
        !           377:                               if (plr->orbammo[3] < 10) {
        !           378:                                    plr->orb[3] = 1;
        !           379:                                    plr->orbammo[3]++;
        !           380:                                    strcpy(displaybuf, "Magic Arrow Scroll");
        !           381:                                    displaytime = 360;
        !           382:                                    SND_Sound(S_POTION1);
        !           383:                               }
        !           384:                               break;
        !           385:                          case 4:
        !           386:                               if (plr->orbammo[4] < 10) {
        !           387:                                    plr->orb[4] = 1;
        !           388:                                    plr->orbammo[4]++;
        !           389:                                    strcpy(displaybuf, "Open Door Scroll");
        !           390:                                    displaytime = 360;
        !           391:                                    SND_Sound(S_POTION1);
        !           392:                               }
        !           393:                               break;
        !           394:                          case 5:
        !           395:                               if (plr->orbammo[5] < 10) {
        !           396:                                    plr->orb[5] = 1;
        !           397:                                    plr->orbammo[5]++;
        !           398:                                    strcpy(displaybuf, "Fly Scroll");
        !           399:                                    displaytime = 360;
        !           400:                                    SND_Sound(S_POTION1);
        !           401:                               }
        !           402:                               break;
        !           403:                          case 6:
        !           404:                               if (plr->orbammo[6] < 10) {
        !           405:                                    plr->orb[6] = 1;
        !           406:                                    plr->orbammo[6]++;
        !           407:                                    strcpy(displaybuf, "Fireball Scroll");
        !           408:                                    displaytime = 360;
        !           409:                                    SND_Sound(S_POTION1);
        !           410:                               }
        !           411:                               break;
        !           412:                          case 7:
        !           413:                               if (plr->orbammo[7] < 10) {
        !           414:                                    plr->orb[7] = 1;
        !           415:                                    plr->orbammo[7]++;
        !           416:                                    strcpy(displaybuf, "Nuke Scroll");
        !           417:                                    displaytime = 360;
        !           418:                                    SND_Sound(S_POTION1);
        !           419:                               }
        !           420:                               break;
        !           421:                          }
        !           422:                          spr->picnum = OPENCHEST;
        !           423:                          break;
        !           424:                     case 2:
        !           425:                          spr->picnum = OPENCHEST;
        !           426:                          score((rand() % 400) + 100);
        !           427:                          strcpy(displaybuf, "Treasure Chest");
        !           428:                          displaytime = 360;
        !           429:                          SND_Sound(S_POTION1);
        !           430:                          break;
        !           431:                     case 3:
        !           432:                          switch ((rand() % 5) + 1) {
        !           433:                          case 1:
        !           434:                               if (plr->ammo[1] < 12) {
        !           435:                                    plr->weapon[1] = 1;
        !           436:                                    plr->ammo[1] = 40;
        !           437:                                    strcpy(displaybuf, "Dagger");
        !           438:                                    displaytime = 360;
        !           439:                                    SND_Sound(S_POTION1);
        !           440:                                    autoweaponchange(1);
        !           441:                                    score(10);
        !           442:                               }
        !           443:                               break;
        !           444:                          case 2:
        !           445:                               if (plr->ammo[3] < 12) {
        !           446:                                    plr->weapon[3] = 1;
        !           447:                                    plr->ammo[3] = 55;
        !           448:                                    strcpy(displaybuf, "Morning Star");
        !           449:                                    displaytime = 360;
        !           450:                                    SND_Sound(S_POTION1);
        !           451:                                    autoweaponchange(3);
        !           452:                                    score(20);
        !           453:                               }
        !           454:                               break;
        !           455:                          case 3:
        !           456:                               if (plr->ammo[2] < 12) {
        !           457:                                    plr->weapon[2] = 1;
        !           458:                                    plr->ammo[2] = 30;
        !           459:                                    strcpy(displaybuf, "Short Sword");
        !           460:                                    displaytime = 360;
        !           461:                                    SND_Sound(S_POTION1);
        !           462:                                    autoweaponchange(2);
        !           463:                                    score(10);
        !           464:                               }
        !           465:                               break;
        !           466:                          case 4:
        !           467:                               if (plr->ammo[5] < 12) {
        !           468:                                    plr->weapon[5] = 1;
        !           469:                                    plr->ammo[5] = 100;
        !           470:                                    strcpy(displaybuf, "Battle axe");
        !           471:                                    displaytime = 360;
        !           472:                                    SND_Sound(S_POTION1);
        !           473:                                    autoweaponchange(5);
        !           474:                                    score(30);
        !           475:                               }
        !           476:                               break;
        !           477:                          case 5:
        !           478:                               if (plr->weapon[7] == 1) {
        !           479:                                    plr->weapon[7] = 2;
        !           480:                                    plr->ammo[7] = 1;
        !           481:                                    strcpy(displaybuf, "Pike axe");
        !           482:                                    displaytime = 360;
        !           483:                                    deletesprite((short) i);
        !           484:                                    SND_Sound(S_POTION1);
        !           485:                                    score(30);
        !           486:                               }
        !           487:                               if (plr->weapon[7] == 2) {
        !           488:                                    plr->weapon[7] = 2;
        !           489:                                    plr->ammo[7]++;
        !           490:                                    strcpy(displaybuf, "Pike axe");
        !           491:                                    displaytime = 360;
        !           492:                                    deletesprite((short) i);
        !           493:                                    SND_Sound(S_POTION1);
        !           494:                                    score(30);
        !           495:                               }
        !           496:                               if (plr->weapon[7] < 1) {
        !           497:                                    if (plr->ammo[7] < 12) {
        !           498:                                         plr->weapon[7] = 1;
        !           499:                                         plr->ammo[7] = 30;
        !           500:                                         strcpy(displaybuf, "Pike axe");
        !           501:                                         displaytime = 360;
        !           502:                                         deletesprite((short) i);
        !           503:                                         SND_Sound(S_POTION1);
        !           504:                                         autoweaponchange(7);
        !           505:                                         score(30);
        !           506:                                    }
        !           507:                               }
        !           508:                               break;
        !           509:                          }
        !           510:                          spr->picnum = OPENCHEST;
        !           511:                          break;
        !           512:                     case 4:
        !           513:                          // random armor
        !           514:                          switch (krand() & 4) {
        !           515:                          case 0:
        !           516:                               strcpy(displaybuf, "Hero Time");
        !           517:                               displaytime = 360;
        !           518:                               armorpic(10);
        !           519:                               helmettime = 7200;
        !           520:                               SND_Sound(S_STING1 + rand() % 2);
        !           521:                               break;
        !           522:                          case 1:
        !           523:                               if (plr->armor <= 149) {
        !           524:                                    strcpy(displaybuf, "Plate Armor");
        !           525:                                    displaytime = 360;
        !           526:                                    plr->armortype = 3;
        !           527:                                    plr->armor = 0;
        !           528:                                    armorpic(150);
        !           529:                                    SND_Sound(S_POTION1);
        !           530:                                    score(40);
        !           531:                               }
        !           532:                               break;
        !           533:                          case 2:
        !           534:                               if (plr->armor <= 99) {
        !           535:                                    strcpy(displaybuf, "Chain Mail");
        !           536:                                    displaytime = 360;
        !           537:                                    plr->armortype = 2;
        !           538:                                    plr->armor = 0;
        !           539:                                    armorpic(100);
        !           540:                                    SND_Sound(S_POTION1);
        !           541:                                    score(20);
        !           542:                               }
        !           543:                               break;
        !           544:                          case 3:
        !           545:                               if (plr->armor <= 49) {
        !           546:                                    strcpy(displaybuf, "Leather Armor");
        !           547:                                    displaytime = 360;
        !           548:                                    plr->armortype = 1;
        !           549:                                    plr->armor = 0;
        !           550:                                    armorpic(50);
        !           551:                                    SND_Sound(S_POTION1);
        !           552:                                    score(20);
        !           553:                               }
        !           554:                               break;
        !           555:                          }
        !           556:                          spr->picnum = OPENCHEST;
        !           557:                          break;
        !           558:                     case 5:
        !           559:                          // poison chest
        !           560:                          if (krand() & 2 == 0) {
        !           561:                               poisoned = 1;
        !           562:                               poisontime = 7200;
        !           563:                               healthpic(-10);
        !           564:                               strcpy(displaybuf, "Poisoned Chest");
        !           565:                               displaytime = 360;
        !           566:                          }
        !           567:                          else {
        !           568:                               deletesprite((short) i);
        !           569:                               score((krand() & 400) + 100);
        !           570:                               strcpy(displaybuf, "Treasure Chest");
        !           571:                               displaytime = 360;
        !           572:                               SND_Sound(S_POTION1);
        !           573:                          }
        !           574:                          break;
        !           575:                     case 6:
        !           576:                          explosion(i, spr->x, spr->y, spr->z, spr->owner);
        !           577:                          playsound_loc(S_EXPLODE, spr->x, spr->y);
        !           578:                          deletesprite((short) i);
        !           579:                          break;
        !           580:                     default:
        !           581:                          spr->picnum = OPENCHEST;
        !           582:                          score((rand() % 400) + 100);
        !           583:                          strcpy(displaybuf, "Experience Gained");
        !           584:                          displaytime = 360;
        !           585:                          SND_Sound(S_POTION1);
        !           586:                          break;
        !           587:                     }
        !           588:                     break;
        !           589: 
        !           590:                case FLASKBLUE:
        !           591:                     if (!potionspace(0))
        !           592:                          break;
        !           593:                     strcpy(displaybuf, "Health Potion");
        !           594:                     displaytime = 360;
        !           595:                     updatepotion(HEALTHPOTION);
        !           596:                     potionpic(0);
        !           597:                     currentpotion = 0;
        !           598:                     deletesprite((short) i);
        !           599:                     SND_Sound(S_POTION1);
        !           600:                     score(10);
        !           601:                     treasuresfound++;
        !           602:                     break;
        !           603:                case FLASKRED:
        !           604:                     if (!potionspace(3))
        !           605:                          break;
        !           606:                     strcpy(displaybuf, "Resist Fire Potion");
        !           607:                     displaytime = 360;
        !           608:                     updatepotion(FIREWALKPOTION);
        !           609:                     potionpic(3);
        !           610:                     currentpotion = 3;
        !           611:                     deletesprite((short) i);
        !           612:                     SND_Sound(S_POTION1);
        !           613:                     score(20);
        !           614:                     treasuresfound++;
        !           615:                     break;
        !           616:                case FLASKGREEN:
        !           617:                     if (!potionspace(1))
        !           618:                          break;
        !           619:                     strcpy(displaybuf, "Strength Potion");
        !           620:                     displaytime = 360;
        !           621:                     updatepotion(STRENGTHPOTION);
        !           622:                     potionpic(1);
        !           623:                     currentpotion = 1;
        !           624:                     deletesprite((short) i);
        !           625:                     SND_Sound(S_POTION1);
        !           626:                     score(15);
        !           627:                     treasuresfound++;
        !           628:                     break;
        !           629:                case FLASKOCHRE:
        !           630:                     if (!potionspace(2))
        !           631:                          break;
        !           632:                     strcpy(displaybuf, "Cure Poison Potion");
        !           633:                     displaytime = 360;
        !           634:                     updatepotion(ARMORPOTION);
        !           635:                     potionpic(2);
        !           636:                     currentpotion = 2;
        !           637:                     deletesprite((short) i);
        !           638:                     SND_Sound(S_POTION1);
        !           639:                     score(15);
        !           640:                     treasuresfound++;
        !           641:                     break;
        !           642:                case FLASKTAN:
        !           643:                     if (!potionspace(4))
        !           644:                          break;
        !           645:                     strcpy(displaybuf, "Invisibility Potion");
        !           646:                     displaytime = 360;
        !           647:                     updatepotion(INVISIBLEPOTION);
        !           648:                     potionpic(4);
        !           649:                     currentpotion = 4;
        !           650:                     deletesprite((short) i);
        !           651:                     SND_Sound(S_POTION1);
        !           652:                     score(30);
        !           653:                     treasuresfound++;
        !           654:                     break;
        !           655:                case DIAMONDRING:
        !           656:                     plr->treasure[0] = 1;
        !           657:                     strcpy(displaybuf, "DIAMOND RING");
        !           658:                     displaytime = 360;
        !           659:                     plr->armor = 0;
        !           660:                     armorpic(200);
        !           661:                     plr->armortype = 3;
        !           662:                     deletesprite((short) i);
        !           663:                     SND_Sound(S_POTION1);
        !           664:                     score(25);
        !           665:                     treasuresfound++;
        !           666:                     break;
        !           667:                case SHADOWAMULET:
        !           668:                     plr->treasure[1] = 1;
        !           669:                     strcpy(displaybuf, "SHADOW AMULET");
        !           670:                     displaytime = 360;
        !           671:                     deletesprite((short) i);
        !           672:                     SND_Sound(S_POTION1);
        !           673:                     shadowtime = 7500;
        !           674:                     score(50);
        !           675:                     treasuresfound++;
        !           676:                     break;
        !           677:                case GLASSSKULL:
        !           678:                     plr->treasure[2] = 1;
        !           679:                     strcpy(displaybuf, "GLASS SKULL");
        !           680:                     displaytime = 360;
        !           681:                     deletesprite((short) i);
        !           682:                     SND_Sound(S_POTION1);
        !           683:                     switch (plr->lvl) {
        !           684:                     case 1:
        !           685:                          plr->score = 2300;
        !           686:                          break;
        !           687:                     case 2:
        !           688:                          plr->score = 4550;
        !           689:                          break;
        !           690:                     case 3:
        !           691:                          plr->score = 9050;
        !           692:                          break;
        !           693:                     case 4:
        !           694:                          plr->score = 18050;
        !           695:                          break;
        !           696:                     case 5:
        !           697:                          plr->score = 36050;
        !           698:                          break;
        !           699:                     case 6:
        !           700:                          plr->score = 75050;
        !           701:                          break;
        !           702:                     case 7:
        !           703:                          plr->score = 180500;
        !           704:                          break;
        !           705:                     case 8:
        !           706:                          plr->score = 280500;
        !           707:                          break;
        !           708:                     }
        !           709:                     score(10);
        !           710:                     treasuresfound++;
        !           711:                     break;
        !           712:                case AHNK:
        !           713:                     plr->treasure[3] = 1;
        !           714:                     strcpy(displaybuf, "ANKH");
        !           715:                     displaytime = 360;
        !           716:                     plr->health = 0;
        !           717:                     healthpic(250);
        !           718:                     deletesprite((short) i);
        !           719:                     SND_Sound(S_POTION1);
        !           720:                     score(100);
        !           721:                     treasuresfound++;
        !           722:                     break;
        !           723:                case BLUESCEPTER:
        !           724:                     plr->treasure[4] = 1;
        !           725:                     strcpy(displaybuf, "Water walk scepter");
        !           726:                     displaytime = 360;
        !           727:                     deletesprite((short) i);
        !           728:                     SND_Sound(S_POTION1);
        !           729:                     score(10);
        !           730:                     treasuresfound++;
        !           731:                     break;
        !           732:                case YELLOWSCEPTER:
        !           733:                     plr->treasure[5] = 1;
        !           734:                     strcpy(displaybuf, "Fire walk scepter");
        !           735:                     displaytime = 360;
        !           736:                     deletesprite((short) i);
        !           737:                     SND_Sound(S_POTION1);
        !           738:                     score(10);
        !           739:                     treasuresfound++;
        !           740:                     break;
        !           741:                case ADAMANTINERING:
        !           742:                     // ring or protection +5
        !           743:                     plr->treasure[6] = 1;
        !           744:                     strcpy(displaybuf, "ADAMANTINE RING");
        !           745:                     displaytime = 360;
        !           746:                     deletesprite((short) i);
        !           747:                     SND_Sound(S_POTION1);
        !           748:                     score(30);
        !           749:                     treasuresfound++;
        !           750:                     break;
        !           751:                case ONYXRING:
        !           752:                     // protection from missile
        !           753:                     // anit-missile for level only
        !           754:                     // dont forget to cleanup values
        !           755:                     plr->treasure[7] = 1;
        !           756:                     strcpy(displaybuf, "ONYX RING");
        !           757:                     displaytime = 360;
        !           758:                     deletesprite((short) i);
        !           759:                     SND_Sound(S_POTION1);
        !           760:                     score(35);
        !           761:                     treasuresfound++;
        !           762:                     break;
        !           763:                case PENTAGRAM:
        !           764:                     if (sector[plr->sector].lotag == 4002)
        !           765:                          break;
        !           766:                     else {
        !           767:                          plr->treasure[8] = 1;
        !           768:                          strcpy(displaybuf, "PENTAGRAM");
        !           769:                          displaytime = 360;
        !           770:                          deletesprite((short) i);
        !           771:                          SND_Sound(S_POTION1);
        !           772:                     }
        !           773:                     score(100);
        !           774:                     treasuresfound++;
        !           775:                     break;
        !           776:                case CRYSTALSTAFF:
        !           777:                     plr->treasure[9] = 1;
        !           778:                     strcpy(displaybuf, "CRYSTAL STAFF");
        !           779:                     displaytime = 360;
        !           780:                     plr->health = 0;
        !           781:                     healthpic(250);
        !           782:                     plr->armortype = 2;
        !           783:                     plr->armor = 0;
        !           784:                     armorpic(300);
        !           785:                     deletesprite((short) i);
        !           786:                     SND_Sound(S_POTION1);
        !           787:                     score(150);
        !           788:                     treasuresfound++;
        !           789:                     break;
        !           790:                case AMULETOFTHEMIST:
        !           791:                     plr->treasure[10] = 1;
        !           792:                     strcpy(displaybuf, "AMULET OF THE MIST");
        !           793:                     displaytime = 360;
        !           794:                     deletesprite((short) i);
        !           795:                     SND_Sound(S_POTION1);
        !           796:                     invisibletime = 3200;
        !           797:                     score(75);
        !           798:                     treasuresfound++;
        !           799:                     break;
        !           800:                case THEHORN:
        !           801:                     plr->treasure[12] = 1;
        !           802:                     strcpy(displaybuf, "Ornate Horn");
        !           803:                     displaytime = 360;
        !           804:                     deletesprite((short) i);
        !           805:                     SND_Sound(S_POTION1);
        !           806:                     vampiretime = 7200;
        !           807:                     // gain 5-10 hp when you kill something
        !           808:                     // for 60 seconds
        !           809:                     score(350);
        !           810:                     treasuresfound++;
        !           811:                     break;
        !           812:                case SAPHIRERING:
        !           813:                     plr->treasure[13] = 1;
        !           814:                     strcpy(displaybuf, "SAPPHIRE RING");
        !           815:                     displaytime = 360;
        !           816:                     plr->armortype = 3;
        !           817:                     deletesprite((short) i);
        !           818:                     SND_Sound(S_POTION1);
        !           819:                     score(25);
        !           820:                     treasuresfound++;
        !           821:                     break;
        !           822:                case BRASSKEY:
        !           823:                     plr->treasure[14] = 1;
        !           824:                     strcpy(displaybuf, "BRASS KEY");
        !           825:                     displaytime = 360;
        !           826:                     deletesprite((short) i);
        !           827:                     SND_Sound(S_POTION1);
        !           828:                     keyspic();
        !           829:                     score(15);
        !           830:                     treasuresfound++;
        !           831:                     break;
        !           832:                case BLACKKEY:
        !           833:                     plr->treasure[15] = 1;
        !           834:                     strcpy(displaybuf, "BLACK KEY");
        !           835:                     displaytime = 360;
        !           836:                     deletesprite((short) i);
        !           837:                     SND_Sound(S_POTION1);
        !           838:                     keyspic();
        !           839:                     score(15);
        !           840:                     treasuresfound++;
        !           841:                     break;
        !           842:                case GLASSKEY:
        !           843:                     plr->treasure[16] = 1;
        !           844:                     strcpy(displaybuf, "GLASS KEY");
        !           845:                     displaytime = 360;
        !           846:                     deletesprite((short) i);
        !           847:                     SND_Sound(S_POTION1);
        !           848:                     keyspic();
        !           849:                     score(15);
        !           850:                     treasuresfound++;
        !           851:                     break;
        !           852:                case IVORYKEY:
        !           853:                     plr->treasure[17] = 1;
        !           854:                     strcpy(displaybuf, "IVORY KEY");
        !           855:                     displaytime = 360;
        !           856:                     deletesprite((short) i);
        !           857:                     SND_Sound(S_POTION1);
        !           858:                     keyspic();
        !           859:                     score(15);
        !           860:                     treasuresfound++;
        !           861:                     break;
        !           862:                case SCROLLSCARE:
        !           863:                     if (plr->orbammo[0] < 10) {
        !           864:                          plr->orb[0] = 1;
        !           865:                          plr->orbammo[0]+=5;
        !           866:                          if (plr->orbammo[0] >= 10) {
        !           867:                               plr->orbammo[0] = 9;
        !           868:                          }
        !           869:                          strcpy(displaybuf, "Scare Scroll");
        !           870:                          displaytime = 360;
        !           871:                          deletesprite((short) i);
        !           872:                          SND_Sound(S_POTION1);
        !           873:                          treasuresfound++;
        !           874:                          keystatus[0x3B] = 1;
        !           875:                     }
        !           876:                     break;
        !           877:                case SCROLLNIGHT:
        !           878:                     if (plr->orbammo[1] < 10) {
        !           879:                          plr->orb[1] = 1;
        !           880:                          plr->orbammo[1] += 5;
        !           881:                          if (plr->orbammo[1] >= 10) {
        !           882:                               plr->orbammo[1] = 9;
        !           883:                          }
        !           884:                          strcpy(displaybuf, "Night Vision Scroll");
        !           885:                          displaytime = 360;
        !           886:                          deletesprite((short) i);
        !           887:                          SND_Sound(S_POTION1);
        !           888:                          treasuresfound++;
        !           889:                          keystatus[0x3B+1] = 1;
        !           890:                     }
        !           891:                     break;
        !           892:                case SCROLLFREEZE:
        !           893:                     if (plr->orbammo[2] < 10) {
        !           894:                          plr->orb[2] = 1;
        !           895:                          plr->orbammo[2] += 5;
        !           896:                          if (plr->orbammo[2] >= 10) {
        !           897:                               plr->orbammo[2] = 9;
        !           898:                          }
        !           899:                          strcpy(displaybuf, "Freeze Scroll");
        !           900:                          displaytime = 360;
        !           901:                          deletesprite((short) i);
        !           902:                          SND_Sound(S_POTION1);
        !           903:                          treasuresfound++;
        !           904:                          keystatus[0x3B+2] = 1;
        !           905:                     }
        !           906:                     break;
        !           907:                case SCROLLMAGIC:
        !           908:                     if (plr->orbammo[3] < 10) {
        !           909:                          plr->orb[3] = 1;
        !           910:                          plr->orbammo[3] += 5;
        !           911:                          if (plr->orbammo[3] >= 10) {
        !           912:                               plr->orbammo[3] = 9;
        !           913:                          }
        !           914:                          strcpy(displaybuf, "Magic Arrow Scroll");
        !           915:                          displaytime = 360;
        !           916:                          deletesprite((short) i);
        !           917:                          SND_Sound(S_POTION1);
        !           918:                          treasuresfound++;
        !           919:                          keystatus[0x3B+3] = 1;
        !           920:                     }
        !           921:                     break;
        !           922:                case SCROLLOPEN:
        !           923:                     if (plr->orbammo[4] < 10) {
        !           924:                          plr->orb[4] = 1;
        !           925:                          plr->orbammo[4] += 5;
        !           926:                          if (plr->orbammo[4] >= 10) {
        !           927:                               plr->orbammo[4] = 9;
        !           928:                          }
        !           929:                          strcpy(displaybuf, "Open Door Scroll");
        !           930:                          displaytime = 360;
        !           931:                          deletesprite((short) i);
        !           932:                          SND_Sound(S_POTION1);
        !           933:                          treasuresfound++;
        !           934:                          keystatus[0x3B+4] = 1;
        !           935:                     }
        !           936:                     break;
        !           937:                case SCROLLFLY:
        !           938:                     if (plr->orbammo[5] < 10) {
        !           939:                          plr->orb[5] = 1;
        !           940:                          plr->orbammo[5] += 5;
        !           941:                          if (plr->orbammo[5] >= 10) {
        !           942:                               plr->orbammo[5] = 9;
        !           943:                          }
        !           944:                          strcpy(displaybuf, "Fly Scroll");
        !           945:                          displaytime = 360;
        !           946:                          deletesprite((short) i);
        !           947:                          SND_Sound(S_POTION1);
        !           948:                          treasuresfound++;
        !           949:                          keystatus[0x3B+5] = 1;
        !           950:                     }
        !           951:                     break;
        !           952:                case SCROLLFIREBALL:
        !           953:                     if (plr->orbammo[6] < 10) {
        !           954:                          plr->orb[6] = 1;
        !           955:                          plr->orbammo[6] += 5;
        !           956:                          if (plr->orbammo[6] >= 10) {
        !           957:                               plr->orbammo[6] = 9;
        !           958:                          }
        !           959:                          strcpy(displaybuf, "Fireball Scroll");
        !           960:                          displaytime = 360;
        !           961:                          deletesprite((short) i);
        !           962:                          SND_Sound(S_POTION1);
        !           963:                          treasuresfound++;
        !           964:                          keystatus[0x3B+6] = 1;
        !           965:                     }
        !           966:                     break;
        !           967:                case SCROLLNUKE:
        !           968:                     if (plr->orbammo[7] < 10) {
        !           969:                          plr->orb[7] = 1;
        !           970:                          plr->orbammo[7] += 5;
        !           971:                          if (plr->orbammo[7] >= 10) {
        !           972:                               plr->orbammo[7] = 9;
        !           973:                          }
        !           974:                          strcpy(displaybuf, "Nuke Scroll");
        !           975:                          displaytime = 360;
        !           976:                          deletesprite((short) i);
        !           977:                          SND_Sound(S_POTION1);
        !           978:                          treasuresfound++;
        !           979:                          keystatus[0x3B+7] = 1;
        !           980:                     }
        !           981:                     break;
        !           982:                case QUIVER:
        !           983:                     if (plr->ammo[6] < 100) {
        !           984:                          plr->ammo[6] += 25;
        !           985:                          if (plr->ammo[6] > 100)
        !           986:                               plr->ammo[6] = 100;
        !           987:                          strcpy(displaybuf, "Quiver of arrows");
        !           988:                          displaytime = 360;
        !           989:                          deletesprite((short) i);
        !           990:                          SND_Sound(S_POTION1);
        !           991:                          score(10);
        !           992:                          levelpic();
        !           993:                     }
        !           994:                     break;
        !           995:                case WALLBOW:
        !           996:                case BOW:
        !           997:                     plr->weapon[6] = 1;
        !           998:                     plr->ammo[6] += 10;
        !           999:                     if (plr->ammo[6] > 100)
        !          1000:                          plr->ammo[6] = 100;
        !          1001:                     strcpy(displaybuf, "long bow");
        !          1002:                     displaytime = 360;
        !          1003:                     deletesprite((short) i);
        !          1004:                     SND_Sound(S_POTION1);
        !          1005:                     autoweaponchange(6);
        !          1006:                     score(10);
        !          1007:                     break;
        !          1008:                case WEAPON1:
        !          1009:                     if (plr->ammo[1] < 12) {
        !          1010:                          plr->weapon[1] = 1;
        !          1011:                          plr->ammo[1] = 40;
        !          1012:                          strcpy(displaybuf, "Dagger");
        !          1013:                          displaytime = 360;
        !          1014:                          deletesprite((short) i);
        !          1015:                          SND_Sound(S_POTION1);
        !          1016:                          autoweaponchange(1);
        !          1017:                          score(10);
        !          1018:                     }
        !          1019:                     break;
        !          1020:                case WEAPON1A:
        !          1021:                     if (plr->ammo[1] < 12) {
        !          1022:                          plr->weapon[1] = 3;
        !          1023:                          plr->ammo[1] = 80;
        !          1024:                          strcpy(displaybuf, "Jeweled Dagger");
        !          1025:                          displaytime = 360;
        !          1026:                          deletesprite((short) i);
        !          1027:                          SND_Sound(S_POTION1);
        !          1028:                          autoweaponchange(1);
        !          1029:                          score(30);
        !          1030:                     }
        !          1031:                     break;
        !          1032:                case GOBWEAPON:
        !          1033:                     if (plr->ammo[2] < 12) {
        !          1034:                          plr->weapon[2] = 1;
        !          1035:                          plr->ammo[2] = 20;
        !          1036:                          strcpy(displaybuf, "Short sword");
        !          1037:                          displaytime = 360;
        !          1038:                          deletesprite((short) i);
        !          1039:                          SND_Sound(S_POTION1);
        !          1040:                          autoweaponchange(2);
        !          1041:                          score(10);
        !          1042:                     }
        !          1043:                     break;
        !          1044:                case WEAPON2:
        !          1045:                     if (plr->ammo[3] < 12) {
        !          1046:                          plr->weapon[3] = 1;
        !          1047:                          plr->ammo[3] = 55;
        !          1048:                          strcpy(displaybuf, "Morning Star");
        !          1049:                          displaytime = 360;
        !          1050:                          deletesprite((short) i);
        !          1051:                          SND_Sound(S_POTION1);
        !          1052:                          autoweaponchange(3);
        !          1053:                          score(20);
        !          1054:                     }
        !          1055:                     break;
        !          1056:                case WALLSWORD:
        !          1057:                case WEAPON3A:
        !          1058:                     if (plr->ammo[4] < 12) {
        !          1059:                          plr->weapon[4] = 1;
        !          1060:                          plr->ammo[4] = 160;
        !          1061:                          strcpy(displaybuf, "Broad Sword");
        !          1062:                          displaytime = 360;
        !          1063:                          deletesprite((short) i);
        !          1064:                          SND_Sound(S_POTION1);
        !          1065:                          autoweaponchange(4);
        !          1066:                          score(60);
        !          1067:                     }
        !          1068:                case WEAPON3:
        !          1069:                     if (plr->ammo[4] < 12) {
        !          1070:                          plr->weapon[4] = 1;
        !          1071:                          plr->ammo[4] = 80;
        !          1072:                          strcpy(displaybuf, "Broad Sword");
        !          1073:                          displaytime = 360;
        !          1074:                          deletesprite((short) i);
        !          1075:                          SND_Sound(S_POTION1);
        !          1076:                          autoweaponchange(4);
        !          1077:                          score(30);
        !          1078:                     }
        !          1079:                     break;
        !          1080:                case WALLAXE:
        !          1081:                case WEAPON4:
        !          1082:                     if (plr->ammo[5] < 12) {
        !          1083:                          plr->weapon[5] = 1;
        !          1084:                          plr->ammo[5] = 100;
        !          1085:                          strcpy(displaybuf, "Battle axe");
        !          1086:                          displaytime = 360;
        !          1087:                          deletesprite((short) i);
        !          1088:                          SND_Sound(S_POTION1);
        !          1089:                          autoweaponchange(5);
        !          1090:                          score(30);
        !          1091:                     }
        !          1092:                     break;
        !          1093:                case THROWHALBERD:
        !          1094:                case WEAPON5:
        !          1095:                     if (plr->ammo[9] < 12) {
        !          1096:                          plr->weapon[9] = 1;
        !          1097:                          plr->ammo[9] = 30;
        !          1098:                          strcpy(displaybuf, "Halberd");
        !          1099:                          displaytime = 360;
        !          1100:                          deletesprite((short) i);
        !          1101:                          SND_Sound(S_POTION1);
        !          1102:                          autoweaponchange(9);
        !          1103:                          score(30);
        !          1104:                     }
        !          1105:                     break;
        !          1106:                case GONZOBSHIELD:
        !          1107:                case GONZOCSHIELD:
        !          1108:                case GONZOGSHIELD:
        !          1109:                     if (shieldpoints < 100) {
        !          1110:                          shieldtype = 2;
        !          1111:                          shieldpoints = 200;
        !          1112:                          droptheshield = 0;
        !          1113:                          deletesprite((short) i);
        !          1114:                          strcpy(displaybuf, "Magic Shield");
        !          1115:                          displaytime = 360;
        !          1116:                          SND_Sound(S_POTION1);
        !          1117:                          score(50);
        !          1118:                     }
        !          1119:                     break;
        !          1120:                case SHIELD:
        !          1121:                     if (shieldpoints < 100) {
        !          1122:                          shieldtype = 1;
        !          1123:                          shieldpoints = 100;
        !          1124:                          droptheshield = 0;
        !          1125:                          deletesprite((short) i);
        !          1126:                          strcpy(displaybuf, "Shield");
        !          1127:                          displaytime = 360;
        !          1128:                          SND_Sound(S_POTION1);
        !          1129:                          score(10);
        !          1130:                     }
        !          1131:                     break;
        !          1132:                case WEAPON5B:
        !          1133:                     if (plr->ammo[9] < 12) {
        !          1134:                          deletesprite((short) i);
        !          1135:                     }
        !          1136:                     break;
        !          1137:                case WALLPIKE:
        !          1138:                case THROWPIKE + 1:
        !          1139:                     if (plr->weapon[7] == 1) {
        !          1140:                          plr->weapon[7] = 2;
        !          1141:                          plr->ammo[7] = 2;
        !          1142:                          strcpy(displaybuf, "Pike axe");
        !          1143:                          displaytime = 360;
        !          1144:                          deletesprite((short) i);
        !          1145:                          if ((rand()%10) > 6)
        !          1146:                               SND_Sound(S_PICKUPAXE);
        !          1147:                          score(30);
        !          1148:                          levelpic();
        !          1149:                     }
        !          1150:                     if (plr->weapon[7] == 2) {
        !          1151:                          plr->weapon[7] = 2;
        !          1152:                          plr->ammo[7]++;
        !          1153:                          strcpy(displaybuf, "Pike axe");
        !          1154:                          displaytime = 360;
        !          1155:                          deletesprite((short) i);
        !          1156:                          if ((rand()%10) > 6)
        !          1157:                               SND_Sound(S_PICKUPAXE);
        !          1158:                          // score(30);
        !          1159:                          levelpic();
        !          1160:                     }
        !          1161:                     if (plr->weapon[7] < 1) {
        !          1162:                          if (plr->ammo[7] < 12) {
        !          1163:                               plr->weapon[7] = 1;
        !          1164:                               plr->ammo[7] = 30;
        !          1165:                               strcpy(displaybuf, "Pike axe");
        !          1166:                               displaytime = 360;
        !          1167:                               deletesprite((short) i);
        !          1168:                               SND_Sound(S_POTION1);
        !          1169:                               autoweaponchange(7);
        !          1170:                               score(30);
        !          1171:                          }
        !          1172:                     }
        !          1173: 
        !          1174:                     break;
        !          1175:                case WEAPON6:
        !          1176:                     if (plr->weapon[7] == 1) {
        !          1177:                          plr->weapon[7] = 2;
        !          1178:                          plr->ammo[7] = 25;
        !          1179:                          strcpy(displaybuf, "Pike axe");
        !          1180:                          displaytime = 360;
        !          1181:                          deletesprite((short) i);
        !          1182:                          SND_Sound(S_POTION1);
        !          1183:                          score(30);
        !          1184:                          levelpic();
        !          1185:                     }
        !          1186:                     if (plr->weapon[7] == 2) {
        !          1187:                          plr->weapon[7] = 2;
        !          1188:                          plr->ammo[7] += 25;
        !          1189:                          strcpy(displaybuf, "Pike axe");
        !          1190:                          displaytime = 360;
        !          1191:                          deletesprite((short) i);
        !          1192:                          SND_Sound(S_POTION1);
        !          1193:                          // score(30);
        !          1194:                          levelpic();
        !          1195:                     }
        !          1196:                     if (plr->weapon[7] < 1) {
        !          1197:                          if (plr->ammo[7] < 12) {
        !          1198:                               plr->weapon[7] = 2;
        !          1199:                               plr->ammo[7] = 25;
        !          1200:                               strcpy(displaybuf, "Pike axe");
        !          1201:                               displaytime = 360;
        !          1202:                               deletesprite((short) i);
        !          1203:                               SND_Sound(S_POTION1);
        !          1204:                               autoweaponchange(7);
        !          1205:                               score(30);
        !          1206:                          }
        !          1207:                     }
        !          1208:                     break;
        !          1209:                     // case WEAPON7:
        !          1210:                case WEAPON8:
        !          1211:                     if (plr->ammo[8] < 12) {
        !          1212:                          plr->weapon[8] = 1;
        !          1213:                          plr->ammo[8] = 250;
        !          1214:                          strcpy(displaybuf, "Two Handed Sword");
        !          1215:                          displaytime = 360;
        !          1216:                          deletesprite((short) i);
        !          1217:                          SND_Sound(S_POTION1);
        !          1218:                          autoweaponchange(8);
        !          1219:                          score(30);
        !          1220:                     }
        !          1221:                     break;
        !          1222:                case SPIKEBLADE:
        !          1223:                     if (!godmode)
        !          1224:                          if (invincibletime <= 0) {
        !          1225:                               spikeme = 1;
        !          1226:                          }
        !          1227:                     break;
        !          1228:                case SPIKE:
        !          1229:                     if (!godmode)
        !          1230:                          if (invincibletime <= 0) {
        !          1231:                               spikeme = 1;
        !          1232:                          }
        !          1233:                     break;
        !          1234:                case SPIKEPOLE:
        !          1235:                     if (!godmode)
        !          1236:                          if (invincibletime <= 0) {
        !          1237:                               spikeme = 1;
        !          1238:                          }
        !          1239:                     break;
        !          1240:                case MONSTERBALL:
        !          1241:                     if (sprite[i].owner != 4096)
        !          1242:                          if (manatime < 1)
        !          1243:                               healthpic(-1);
        !          1244:                     break;
        !          1245:                case HORNEDSKULL:
        !          1246:                     fadeout(0,255,0,0,0,64);           // JEFF
        !          1247:                     victory(0);
        !          1248:                }
        !          1249:                if (sprite[i].picnum >= EXPLOSTART
        !          1250:                    && sprite[i].picnum <= EXPLOEND
        !          1251:                    && sprite[i].owner != 4096)
        !          1252:                     if (manatime < 1)
        !          1253:                          healthpic(-1);
        !          1254: 
        !          1255:           }
        !          1256:           i = nexti;
        !          1257:      }
        !          1258: 
        !          1259: }
        !          1260: 
        !          1261: int
        !          1262: potionspace(int vial)
        !          1263: {
        !          1264: 
        !          1265:      struct player *plr;
        !          1266: 
        !          1267:      plr = &player[0];
        !          1268: 
        !          1269:      if (plr->potion[vial] > 9)
        !          1270:           return (0);
        !          1271:      else
        !          1272:           return (1);
        !          1273: }
        !          1274: 
        !          1275: void
        !          1276: updatepotion(int vial)
        !          1277: {
        !          1278: 
        !          1279:      struct player *plr;
        !          1280: 
        !          1281:      plr = &player[0];
        !          1282: 
        !          1283:      switch (vial) {
        !          1284:      case HEALTHPOTION:
        !          1285:           plr->potion[0]++;
        !          1286:           break;
        !          1287:      case STRENGTHPOTION:
        !          1288:           plr->potion[1]++;
        !          1289:           break;
        !          1290:      case ARMORPOTION:
        !          1291:           plr->potion[2]++;
        !          1292:           break;
        !          1293:      case FIREWALKPOTION:
        !          1294:           plr->potion[3]++;
        !          1295:           break;
        !          1296:      case INVISIBLEPOTION:
        !          1297:           plr->potion[4]++;
        !          1298:           break;
        !          1299:      }
        !          1300:      potionpic(currentpotion);
        !          1301: 
        !          1302: }
        !          1303: 
        !          1304: extern
        !          1305: int  debuganalyzespritesflag;
        !          1306: 
        !          1307: int  tspritelistcnt;
        !          1308: 
        !          1309: spritetype tspritelist[MAXSPRITESONSCREEN];
        !          1310: 
        !          1311: void
        !          1312: transformactors(struct player * plr)
        !          1313: {
        !          1314: 
        !          1315:      long i,
        !          1316:           j,
        !          1317:           k;
        !          1318:      point3d *ospr;
        !          1319:      spritetype *tspr;
        !          1320: 
        !          1321:      tspritelistcnt=spritesortcnt;
        !          1322:      for (i = 0, tspr = &tsprite[0]; i < spritesortcnt; i++, tspr++) {
        !          1323:           memmove(&tspritelist[i],tspr,sizeof(spritetype));
        !          1324:           switch (tspr->picnum) {
        !          1325:           case GRONHAL:
        !          1326:           case GRONSW:
        !          1327:           case GRONSWATTACK:
        !          1328:           case GRONMU:
        !          1329:           case DEVILSTAND:
        !          1330:           case DEVIL:
        !          1331:           case DEVILATTACK:
        !          1332:           case MINOTAUR:
        !          1333:           case MINOTAURATTACK:
        !          1334:                k = getangle(tspr->x - plr->x, tspr->y - plr->y);
        !          1335:                k = (((tspr->ang + 3072 + 128 - k) & 2047) >> 8) & 7;
        !          1336:                if (k <= 4) {
        !          1337:                     tspr->picnum += (k << 2);
        !          1338:                     tspr->cstat &= ~4;  // clear x-flipping bit
        !          1339:                }
        !          1340:                else {
        !          1341:                     tspr->picnum += ((8 - k) << 2);
        !          1342:                     tspr->cstat |= 4;   // set x-flipping bit
        !          1343:                }
        !          1344:                break;
        !          1345:           case SKELETON:
        !          1346:           case IMP:
        !          1347:                k = getangle(tspr->x - plr->x, tspr->y - plr->y);
        !          1348:                k = (((tspr->ang + 3072 + 128 - k) & 2047) >> 8) & 7;
        !          1349:                if (k <= 4) {
        !          1350:                     tspr->picnum += (k * 6);
        !          1351:                     tspr->cstat &= ~4;  // clear x-flipping bit
        !          1352:                }
        !          1353:                else {
        !          1354:                     tspr->picnum += ((8 - k) * 6);
        !          1355:                     tspr->cstat |= 4;   // set x-flipping bit
        !          1356:                }
        !          1357:                break;
        !          1358:           case KURTAT:
        !          1359:           case KOBOLD:
        !          1360:                k = getangle(tspr->x - plr->x, tspr->y - plr->y);
        !          1361:                k = (((tspr->ang + 3072 + 128 - k) & 2047) >> 8) & 7;
        !          1362:                if (k <= 4) {
        !          1363:                     tspr->picnum += (k * 5);
        !          1364:                     tspr->cstat &= ~4;  // clear x-flipping bit
        !          1365:                }
        !          1366:                else {
        !          1367:                     tspr->picnum += ((8 - k) * 5);
        !          1368:                     tspr->cstat |= 4;   // set x-flipping bit
        !          1369:                }
        !          1370:                break;
        !          1371:           case KATIE:
        !          1372:           case KATIEAT:
        !          1373: 
        !          1374:                k = getangle(tspr->x - plr->x, tspr->y - plr->y);
        !          1375:                k = (((tspr->ang + 3072 + 128 - k) & 2047) >> 8) & 7;
        !          1376:                if (k <= 4) {
        !          1377:                     tspr->picnum += (k * 5);
        !          1378:                     // tspr->cstat &= ~4;   //clear x-flipping bit
        !          1379:                     tspr->cstat |= 4;   // set x-flipping bit
        !          1380:                }
        !          1381:                else {
        !          1382:                     tspr->picnum += ((8 - k) * 5);
        !          1383:                     // tspr->cstat |= 4;    //set x-flipping bit
        !          1384:                     tspr->cstat &= ~4;  // clear x-flipping bit
        !          1385:                }
        !          1386:                break;
        !          1387: 
        !          1388:           case NEWGUY:
        !          1389:           case NEWGUYBOW:
        !          1390:           case NEWGUYMACE:
        !          1391: 
        !          1392:           case GONZOCSW:
        !          1393:           case GONZOCSWAT:
        !          1394:                k = getangle(tspr->x - plr->x, tspr->y - plr->y);
        !          1395:                k = (((tspr->ang + 3072 + 128 - k) & 2047) >> 8) & 7;
        !          1396:                if (k <= 4) {
        !          1397:                     tspr->picnum += (k * 6);
        !          1398:                     tspr->cstat &= ~4;  // clear x-flipping bit
        !          1399:                }
        !          1400:                else {
        !          1401:                     tspr->picnum += ((8 - k) * 6);
        !          1402:                     tspr->cstat |= 4;   // set x-flipping bit
        !          1403:                }
        !          1404:                break;
        !          1405: 
        !          1406:                break;
        !          1407:           case GONZOGSW:
        !          1408:           case GONZOGHM:
        !          1409:                k = getangle(tspr->x - plr->x, tspr->y - plr->y);
        !          1410:                k = (((tspr->ang + 3072 + 128 - k) & 2047) >> 8) & 7;
        !          1411:                if (k <= 4) {
        !          1412:                     tspr->picnum += (k * 6);
        !          1413:                     // tspr->cstat &= ~4;   //clear x-flipping bit
        !          1414:                     tspr->cstat |= 4;   // set x-flipping bit
        !          1415:                }
        !          1416:                else {
        !          1417:                     tspr->picnum += ((8 - k) * 6);
        !          1418:                     // tspr->cstat |= 4;    //set x-flipping bit
        !          1419:                     tspr->cstat &= ~4;  // clear x-flipping bit
        !          1420: 
        !          1421:                }
        !          1422:                break;
        !          1423: 
        !          1424:           case GONZOGSH:
        !          1425:                k = getangle(tspr->x - plr->x, tspr->y - plr->y);
        !          1426:                k = (((tspr->ang + 3072 + 128 - k) & 2047) >> 8) & 7;
        !          1427: 
        !          1428:                tspr->picnum += (k * 6);
        !          1429:                tspr->cstat |= 4;   // set x-flipping bit
        !          1430:                break;
        !          1431: 
        !          1432: 
        !          1433:           case GRONMUATTACK:
        !          1434:                k = getangle(tspr->x - plr->x, tspr->y - plr->y);
        !          1435:                k = (((tspr->ang + 3072 + 128 - k) & 2047) >> 8) & 7;
        !          1436:                if (k <= 4) {
        !          1437:                     tspr->picnum += (k * 6);
        !          1438:                     tspr->cstat &= ~4;  // clear x-flipping bit
        !          1439:                }
        !          1440:                else {
        !          1441:                     tspr->picnum += ((8 - k) * 6);
        !          1442:                     tspr->cstat |= 4;   // set x-flipping bit
        !          1443:                }
        !          1444:                break;
        !          1445: 
        !          1446:           case GRONHALATTACK:
        !          1447:                k = getangle(tspr->x - plr->x, tspr->y - plr->y);
        !          1448:                k = (((tspr->ang + 3072 + 128 - k) & 2047) >> 8) & 7;
        !          1449:                if (k <= 4) {
        !          1450:                     tspr->picnum += (k * 7);
        !          1451:                     tspr->cstat &= ~4;  // clear x-flipping bit
        !          1452:                }
        !          1453:                else {
        !          1454:                     tspr->picnum += ((8 - k) * 7);
        !          1455:                     tspr->cstat |= 4;   // set x-flipping bit
        !          1456:                }
        !          1457:                break;
        !          1458:           case NEWGUYCAST:
        !          1459:           case NEWGUYPUNCH:
        !          1460:           case KURTPUNCH:
        !          1461:                k = getangle(tspr->x - plr->x, tspr->y - plr->y);
        !          1462:                k = (((tspr->ang + 3072 + 128 - k) & 2047) >> 8) & 7;
        !          1463:                if (k <= 4) {
        !          1464:                     tspr->picnum += (k * 3);
        !          1465:                     tspr->cstat &= ~4;  // clear x-flipping bit
        !          1466:                }
        !          1467:                else {
        !          1468:                     tspr->picnum += ((8 - k) * 3);
        !          1469:                     tspr->cstat |= 4;   // set x-flipping bit
        !          1470:                }
        !          1471:                break;
        !          1472:           case RAT:
        !          1473:                k = getangle(tspr->x - plr->x, tspr->y - plr->y);
        !          1474:                k = (((tspr->ang + 3072 + 128 - k) & 2047) >> 8) & 7;
        !          1475:                if (k <= 4) {
        !          1476:                     tspr->picnum += (k * 2);
        !          1477:                     tspr->cstat &= ~4;  // clear x-flipping bit
        !          1478:                }
        !          1479:                else {
        !          1480:                     tspr->picnum += ((8 - k) * 2);
        !          1481:                     tspr->cstat |= 4;   // set x-flipping bit
        !          1482:                }
        !          1483:                break;
        !          1484:           case NEWGUYSTAND:
        !          1485:           case NEWGUYKNEE:
        !          1486:           case KURTSTAND:
        !          1487:           case KURTKNEE:
        !          1488:           case GUARDIAN:
        !          1489:                k = getangle(tspr->x - plr->x, tspr->y - plr->y);
        !          1490:                k = (((tspr->ang + 3072 + 128 - k) & 2047) >> 8) & 7;
        !          1491:                if (k <= 4) {
        !          1492:                     tspr->picnum += k;
        !          1493:                     tspr->cstat &= ~4;  // clear x-flipping bit
        !          1494:                }
        !          1495:                else {
        !          1496:                     tspr->picnum += (8 - k);
        !          1497:                     tspr->cstat |= 4;   // set x-flipping bit
        !          1498:                }
        !          1499:                break;
        !          1500:           }
        !          1501:           if (debuganalyzespritesflag) {
        !          1502:                sprintf(tempbuf,"%d: K=%d PIC=%04d CSTAT=%04X SHADE=%02d "
        !          1503:                               "SECT=%05d STAT=%04d",i,k,tspr->picnum,
        !          1504:                               tspr->cstat,tspr->shade,tspr->sectnum,
        !          1505:                               tspr->statnum);
        !          1506:                printext256(0L,(i*8L),31,-1,tempbuf,1);
        !          1507:           }
        !          1508:      }
        !          1509: }
        !          1510: 
        !          1511: void
        !          1512: newstatus(short sn, int seq)
        !          1513: {
        !          1514: 
        !          1515:      struct player *plr;
        !          1516:      spritetype *spr;
        !          1517:      int  j;
        !          1518:      long k;
        !          1519: 
        !          1520:      spr = &sprite[sn];
        !          1521: 
        !          1522:      switch (seq) {
        !          1523:      case CHILL:
        !          1524:           if (netgame) {
        !          1525:                break;
        !          1526:           }
        !          1527:           sprite[sn].lotag = 60;
        !          1528:           changespritestat(sn, CHILL);
        !          1529:           break;
        !          1530:      case AMBUSH:
        !          1531:           if (netgame) {
        !          1532:                break;
        !          1533:           }
        !          1534:           changespritestat(sn, AMBUSH);
        !          1535:           break;
        !          1536:      case LAND:
        !          1537:           if (netgame) {
        !          1538:                break;
        !          1539:           }
        !          1540:           changespritestat(sn, LAND);
        !          1541:           break;
        !          1542:      case EVILSPIRIT:
        !          1543:           if (netgame) {
        !          1544:                break;
        !          1545:           }
        !          1546:           changespritestat(sn, EVILSPIRIT);
        !          1547:           spr->lotag = 120 + (krand() & 64);
        !          1548:           break;
        !          1549:      case PATROL:
        !          1550:           if (netgame) {
        !          1551:                break;
        !          1552:           }
        !          1553:           changespritestat(sn, PATROL);
        !          1554:           break;
        !          1555:      case WARPFX:
        !          1556:           if (netgame) {
        !          1557:                break;
        !          1558:           }
        !          1559:           changespritestat(sn, WARPFX);
        !          1560:           spr->lotag = 12;
        !          1561:           break;
        !          1562:      case NUKED:
        !          1563:           if (netgame) {
        !          1564:                break;
        !          1565:           }
        !          1566:           changespritestat(sn, NUKED);
        !          1567:           break;
        !          1568:      case BROKENVASE:
        !          1569:           changespritestat(sn, BROKENVASE);
        !          1570:           switch (spr->picnum) {
        !          1571:           case VASEA:
        !          1572:                playsound_loc(S_GLASSBREAK1 + (rand() % 3), spr->x, spr->y);
        !          1573:                spr->picnum = SHATTERVASE;
        !          1574:                break;
        !          1575:           case VASEB:
        !          1576:                playsound_loc(S_GLASSBREAK1 + (rand() % 3), spr->x, spr->y);
        !          1577:                spr->picnum = SHATTERVASE2;
        !          1578:                break;
        !          1579:           case VASEC:
        !          1580:                playsound_loc(S_GLASSBREAK1 + (rand() % 3), spr->x, spr->y);
        !          1581:                spr->picnum = SHATTERVASE3;
        !          1582:                break;
        !          1583:           case STAINGLASS1:
        !          1584:           case STAINGLASS2:
        !          1585:           case STAINGLASS3:
        !          1586:           case STAINGLASS4:
        !          1587:           case STAINGLASS5:
        !          1588:           case STAINGLASS6:
        !          1589:           case STAINGLASS7:
        !          1590:           case STAINGLASS8:
        !          1591:           case STAINGLASS9:
        !          1592:                spr->picnum++;
        !          1593:                SND_Sound(S_BIGGLASSBREAK1 + (rand() % 3));
        !          1594:                break;
        !          1595:           case FBARRELFALL:
        !          1596:           case BARREL:
        !          1597:                playsound_loc(S_BARRELBREAK, spr->x, spr->y);
        !          1598:                spr->picnum = FSHATTERBARREL;
        !          1599:                break;
        !          1600:           }
        !          1601:           spr->lotag = 12;
        !          1602:           spr->cstat &= ~3;
        !          1603:           break;
        !          1604:      case DRAIN:
        !          1605:           if (netgame) {
        !          1606:                break;
        !          1607:           }
        !          1608:           changespritestat(sn, DRAIN);
        !          1609:           spr->lotag = 24;
        !          1610:           spr->pal = 7;
        !          1611:           break;
        !          1612:      case ANIMLEVERDN:
        !          1613:           playsound_loc(S_PULLCHAIN1, spr->x, spr->y);
        !          1614:           spr->picnum = LEVERUP;
        !          1615:           changespritestat(sn, ANIMLEVERDN);
        !          1616:           spr->lotag = 24;
        !          1617:           break;
        !          1618:      case ANIMLEVERUP:
        !          1619:           playsound_loc(S_PULLCHAIN1, spr->x, spr->y);
        !          1620:           spr->picnum = LEVERDOWN;
        !          1621:           changespritestat(sn, ANIMLEVERUP);
        !          1622:           spr->lotag = 24;
        !          1623:           break;
        !          1624:      case SKULLPULLCHAIN1:
        !          1625:      case PULLTHECHAIN:
        !          1626:           playsound_loc(S_PULLCHAIN1, spr->x, spr->y);
        !          1627:           changespritestat(sn, PULLTHECHAIN);
        !          1628:           SND_PlaySound(S_CHAIN1, 0, 0, 0, 0);
        !          1629:           spr->lotag = 24;
        !          1630:           break;
        !          1631:      case FROZEN:
        !          1632:           if (netgame) {
        !          1633:                break;
        !          1634:           }
        !          1635:           playsound_loc(S_FREEZE, spr->x, spr->y);
        !          1636:           changespritestat(sn, FROZEN);
        !          1637:           spr->lotag = 3600;
        !          1638:           break;
        !          1639:      case DEVILFIRE:
        !          1640:           if (netgame) {
        !          1641:                break;
        !          1642:           }
        !          1643:           changespritestat(sn, DEVILFIRE);
        !          1644:           spr->lotag = krand() & 120 + 360;
        !          1645:           break;
        !          1646:      case DRIP:
        !          1647:           if (netgame) {
        !          1648:                break;
        !          1649:           }
        !          1650:           changespritestat(sn, DRIP);
        !          1651:           break;
        !          1652:      case BLOOD:
        !          1653:           if (netgame) {
        !          1654:                break;
        !          1655:           }
        !          1656:           changespritestat(sn, BLOOD);
        !          1657:           break;
        !          1658:      case WAR:
        !          1659:           if (netgame) {
        !          1660:                break;
        !          1661:           }
        !          1662:           changespritestat(sn, WAR);
        !          1663:           break;
        !          1664:      case PAIN:
        !          1665:           spr->lotag = 36;
        !          1666:           switch (spr->picnum) {
        !          1667:           case SKELETON:
        !          1668:           case SKELETONATTACK:
        !          1669:                if (netgame) {
        !          1670:                     break;
        !          1671:                }
        !          1672:                spr->lotag = 24;
        !          1673:                spr->picnum = SKELETON;
        !          1674:                break;
        !          1675:           case DEMON:
        !          1676:                if (netgame) {
        !          1677:                     break;
        !          1678:                }
        !          1679:                spr->lotag = 24;
        !          1680:                playsound_loc(S_GUARDIANPAIN1 + (rand() % 2), spr->x, spr->y);
        !          1681:                spr->picnum = DEMON - 1;
        !          1682:                changespritestat(sn, PAIN);
        !          1683:                break;
        !          1684:           case GUARDIAN:
        !          1685:                if (netgame) {
        !          1686:                     break;
        !          1687:                }
        !          1688:                spr->lotag = 24;
        !          1689:                playsound_loc(S_GUARDIANPAIN1 + (rand() % 2), spr->x, spr->y);
        !          1690:                // needs pain
        !          1691:                spr->picnum = GUARDIAN;
        !          1692:                changespritestat(sn, PAIN);
        !          1693:                break;
        !          1694: 
        !          1695:           case GONZOBSHPAIN:
        !          1696:                if (netgame) {
        !          1697:                     break;
        !          1698:                }
        !          1699:                spr->lotag = 24;
        !          1700:                spr->picnum = GONZOBSHPAIN;
        !          1701:                changespritestat(sn, PAIN);
        !          1702:                playsound_loc(S_GRONPAINA+(rand()%3),spr->x,spr->y);
        !          1703:                break;
        !          1704: 
        !          1705:           case NEWGUYSTAND:
        !          1706:           case NEWGUYKNEE:
        !          1707:           case NEWGUY:
        !          1708:           case NEWGUYBOW:
        !          1709:           case NEWGUYPUNCH:
        !          1710:           case NEWGUYMACE:
        !          1711:           case NEWGUYCAST:
        !          1712:                if (netgame) {
        !          1713:                     break;
        !          1714:                }
        !          1715:                spr->lotag = 24;
        !          1716:                spr->picnum = NEWGUYPAIN;
        !          1717:                changespritestat(sn, PAIN);
        !          1718:                playsound_loc(S_AGM_PAIN1,spr->x,spr->y);
        !          1719:                break;
        !          1720: 
        !          1721:           case KURTSTAND:
        !          1722:           case KURTKNEE:
        !          1723:           case KURTAT:
        !          1724:           case KURTPUNCH:
        !          1725:           case KURTREADY:
        !          1726: 
        !          1727:           case GONZOCSW:
        !          1728:                if (netgame) {
        !          1729:                     break;
        !          1730:                }
        !          1731:                spr->lotag = 24;
        !          1732:                spr->picnum = GONZOCSWPAIN;
        !          1733:                changespritestat(sn, PAIN);
        !          1734:                playsound_loc(S_GRONPAINA+(rand()%3),spr->x,spr->y);
        !          1735:                break;
        !          1736: 
        !          1737:           case GONZOGSW:
        !          1738:                if (netgame) {
        !          1739:                     break;
        !          1740:                }
        !          1741:                spr->lotag = 24;
        !          1742:                spr->picnum = GONZOGSWPAIN;
        !          1743:                changespritestat(sn, PAIN);
        !          1744:                playsound_loc(S_GRONPAINA+(rand()%3),spr->x,spr->y);
        !          1745:                break;
        !          1746:           case GONZOGHM:
        !          1747:                if (netgame) {
        !          1748:                     break;
        !          1749:                }
        !          1750:                spr->lotag = 24;
        !          1751:                spr->picnum = GONZOGHMPAIN;
        !          1752:                changespritestat(sn, PAIN);
        !          1753:                playsound_loc(S_GRONPAINA+(rand()%3),spr->x,spr->y);
        !          1754:                break;
        !          1755:           case GONZOGSH:
        !          1756:                if (netgame) {
        !          1757:                     break;
        !          1758:                }
        !          1759:                spr->lotag = 24;
        !          1760:                spr->picnum = GONZOGSHPAIN;
        !          1761:                changespritestat(sn, PAIN);
        !          1762:                playsound_loc(S_GRONPAINA, spr->x, spr->y);
        !          1763:                break;
        !          1764: 
        !          1765:           case GRONHALPAIN:
        !          1766:           case GRONHAL:
        !          1767:           case GRONHALATTACK:
        !          1768:                spr->lotag = 24;
        !          1769:                spr->picnum = GRONHALPAIN;
        !          1770:                changespritestat(sn, PAIN);
        !          1771:                playsound_loc(S_GRONPAINA, spr->x, spr->y);
        !          1772:                break;
        !          1773:           case GRONSWPAIN:
        !          1774:           case GRONSW:
        !          1775:           case GRONSWATTACK:
        !          1776:                spr->lotag = 24;
        !          1777:                spr->picnum = GRONSWPAIN;
        !          1778:                changespritestat(sn, PAIN);
        !          1779:                playsound_loc(S_GRONPAINA+(rand()%3),spr->x,spr->y);
        !          1780:                break;
        !          1781:           case GRONMUPAIN:
        !          1782:           case GRONMU:
        !          1783:           case GRONMUATTACK:
        !          1784:                spr->lotag = 24;
        !          1785:                spr->picnum = GRONMUPAIN;
        !          1786:                changespritestat(sn, PAIN);
        !          1787:                playsound_loc(S_GRONPAINA, spr->x, spr->y);
        !          1788:                break;
        !          1789:           case KOBOLD:
        !          1790:           case KOBOLDATTACK:
        !          1791:                if (netgame) {
        !          1792:                     break;
        !          1793:                }
        !          1794:                spr->picnum = KOBOLDDIE;
        !          1795:                changespritestat(sn, PAIN);
        !          1796:                playsound_loc(S_KPAIN1 + (rand() % 2), spr->x, spr->y);
        !          1797:                break;
        !          1798:           case KATIE:
        !          1799:           case KATIEAT:
        !          1800:                if (netgame) {
        !          1801:                     break;
        !          1802:                }
        !          1803: //               playsound_loc(S_MPAIN1, spr->x, spr->y);
        !          1804:                spr->picnum = KATIEPAIN;
        !          1805:                changespritestat(sn, PAIN);
        !          1806:                break;
        !          1807:           case DEVILSTAND:
        !          1808:           case DEVIL:
        !          1809:           case DEVILATTACK:
        !          1810:                if (netgame) {
        !          1811:                     break;
        !          1812:                }
        !          1813:                playsound_loc(S_MPAIN1, spr->x, spr->y);
        !          1814:                spr->picnum = DEVILPAIN;
        !          1815:                changespritestat(sn, PAIN);
        !          1816:                break;
        !          1817:           case IMP:
        !          1818:           case IMPATTACK:
        !          1819:                if (netgame) {
        !          1820:                     break;
        !          1821:                }
        !          1822:                spr->lotag = 24;
        !          1823:                spr->picnum = IMPPAIN;
        !          1824:                changespritestat(sn, PAIN);
        !          1825: // BIKINI
        !          1826: //             playsound_loc(S_GOBPAIN1+(rand()%2),spr->x,spr->y);
        !          1827: 
        !          1828:                break;
        !          1829:           case MINOTAUR:
        !          1830:           case MINOTAURATTACK:
        !          1831:           case MINOTAURPAIN:
        !          1832:                if (netgame) {
        !          1833:                     break;
        !          1834:                }
        !          1835:                spr->picnum = MINOTAURPAIN;
        !          1836:                changespritestat(sn, PAIN);
        !          1837:                playsound_loc(S_MPAIN1, spr->x, spr->y);
        !          1838:                break;
        !          1839:           default:
        !          1840:                if (netgame) {
        !          1841:                     break;
        !          1842:                }
        !          1843:                changespritestat(sn, FLEE);
        !          1844:                break;
        !          1845:           }
        !          1846:           break;
        !          1847:      case FLOCKSPAWN:
        !          1848:           if (netgame) {
        !          1849:                break;
        !          1850:           }
        !          1851:           spr->lotag = 36;
        !          1852:           spr->extra = 10;
        !          1853:           changespritestat(sn, FLOCKSPAWN);
        !          1854:           break;
        !          1855:      case FLOCK:
        !          1856:           if (netgame) {
        !          1857:                break;
        !          1858:           }
        !          1859:           spr->lotag = 128;
        !          1860:           spr->extra = 0;
        !          1861:           spr->pal = 0;
        !          1862:           changespritestat(sn, FLOCK);
        !          1863:           break;
        !          1864:      case FINDME:
        !          1865:           if (netgame) {
        !          1866:                break;
        !          1867:           }
        !          1868:           spr->lotag = 360;
        !          1869:           if (spr->picnum == RAT) {
        !          1870:                spr->ang = ((krand() & 512 - 256) + spr->ang + 1024) & 2047;     // NEW
        !          1871:                changespritestat(sn, FLEE);
        !          1872:           }
        !          1873:           else {
        !          1874:                changespritestat(sn, FINDME);
        !          1875:           }
        !          1876:           break;
        !          1877:      case SKIRMISH:
        !          1878:           if (netgame) {
        !          1879:                break;
        !          1880:           }
        !          1881:           spr->lotag = 60;
        !          1882:           if (spr->picnum == RAT) {
        !          1883:                spr->ang = ((krand() & 512 - 256) + spr->ang + 1024) & 2047;     // NEW
        !          1884:                changespritestat(sn, FLEE);
        !          1885:           }
        !          1886:           else {
        !          1887:                changespritestat(sn, SKIRMISH);
        !          1888:           }
        !          1889:           break;
        !          1890:      case WITCHSIT:
        !          1891:           if (netgame) {
        !          1892:                break;
        !          1893:           }
        !          1894:           spr->lotag = 12;
        !          1895:           changespritestat(sn, WITCHSIT);
        !          1896:           break;
        !          1897:      case FLEE:
        !          1898:           if (netgame) {
        !          1899:                break;
        !          1900:           }
        !          1901:           switch (spr->picnum) {
        !          1902:           case NEWGUYSTAND:
        !          1903:           case NEWGUYKNEE:
        !          1904:                spr->picnum = NEWGUY;
        !          1905:                break;
        !          1906:           case KURTSTAND:
        !          1907:           case KURTKNEE:
        !          1908:                spr->picnum = GONZOCSW;
        !          1909:                break;
        !          1910:           }
        !          1911:           changespritestat(sn, FLEE);
        !          1912:           spr->lotag = 60;
        !          1913:           break;
        !          1914:      case BOB:
        !          1915:           changespritestat(sn, BOB);
        !          1916:           break;
        !          1917:      case LIFTUP:
        !          1918: //JSA_DEMO3
        !          1919:           if (cartsnd == -1) {
        !          1920:                playsound_loc(S_CLUNK, spr->x, spr->y);
        !          1921:                cartsnd = SND_PlaySound(S_CHAIN1, spr->x, spr->y, 0, 5);
        !          1922:           }
        !          1923: 
        !          1924:           changespritestat(sn, LIFTUP);
        !          1925:           break;
        !          1926:      case LIFTDN:
        !          1927: //JSA_DEMO3
        !          1928:           if (cartsnd == -1) {
        !          1929:                playsound_loc(S_CLUNK, spr->x, spr->y);
        !          1930:                cartsnd = SND_PlaySound(S_CHAIN1, spr->x, spr->y, 0, 5);
        !          1931:           }
        !          1932: 
        !          1933:           changespritestat(sn, LIFTDN);
        !          1934:           break;
        !          1935:      case SHOVE:
        !          1936:           spr->lotag = 128;
        !          1937:           changespritestat(sn, SHOVE);
        !          1938:           break;
        !          1939:      case SHATTER:
        !          1940:           changespritestat(sn, SHATTER);
        !          1941:           switch (spr->picnum) {
        !          1942:           case FBARRELFALL:
        !          1943:                spr->picnum = FSHATTERBARREL;
        !          1944:                break;
        !          1945:           }
        !          1946:           break;
        !          1947:      case YELL:
        !          1948:           if (netgame) {
        !          1949:                break;
        !          1950:           }
        !          1951:           changespritestat(sn, YELL);
        !          1952:           spr->lotag = 12;
        !          1953:           break;
        !          1954:      case ATTACK:
        !          1955:           if (netgame) {
        !          1956:                break;
        !          1957:           }
        !          1958:           spr->lotag = 64;
        !          1959:           changespritestat(sn, ATTACK);
        !          1960:           switch (spr->picnum) {
        !          1961:           case NEWGUY:
        !          1962:                if (spr->extra > 20) {
        !          1963:                     spr->picnum = NEWGUYCAST;
        !          1964:                     spr->lotag = 24;
        !          1965:                }
        !          1966:                else if (spr->extra > 10)
        !          1967:                     spr->picnum = NEWGUYBOW;
        !          1968:                else if (spr->extra > 0)
        !          1969:                     spr->picnum = NEWGUYMACE;
        !          1970:                else
        !          1971:                     spr->picnum = NEWGUYPUNCH;
        !          1972:                break;
        !          1973:           case GONZOCSW:
        !          1974:                if (spr->extra > 10)
        !          1975:                     spr->picnum = GONZOCSWAT;
        !          1976:                else if (spr->extra > 0) {
        !          1977:                     spr->picnum = KURTREADY;
        !          1978:                     spr->lotag = 12;
        !          1979:                }
        !          1980:                else
        !          1981:                     spr->picnum = KURTPUNCH;
        !          1982:                break;
        !          1983:           case GONZOGSW:
        !          1984:                spr->picnum = GONZOGSWAT;
        !          1985:                break;
        !          1986:           case GONZOGHM:
        !          1987:                spr->picnum = GONZOGHMAT;
        !          1988:                break;
        !          1989:           case GONZOGSH:
        !          1990:                spr->picnum = GONZOGSHAT;
        !          1991:                break;
        !          1992: 
        !          1993:           case GRONHAL:
        !          1994:                spr->picnum = GRONHALATTACK;
        !          1995:                break;
        !          1996:           case GRONMU:
        !          1997:                spr->picnum = GRONMUATTACK;
        !          1998:                break;
        !          1999:           case GRONSW:
        !          2000:                spr->picnum = GRONSWATTACK;
        !          2001:                break;
        !          2002:           case KOBOLD:
        !          2003:                spr->picnum = KOBOLDATTACK;
        !          2004:                if (rand() % 10 > 4)
        !          2005:                     playsound_loc(S_KSNARL1 + (rand() % 4), spr->x, spr->y);
        !          2006:                break;
        !          2007:           case KATIE:
        !          2008:                if ((rand() % 10) > 4) {
        !          2009:                     playsound_loc(S_JUDY1, spr->x, spr->y);
        !          2010:                }
        !          2011:                spr->picnum = KATIEAT;
        !          2012:                break;
        !          2013:           case DEVILSTAND:
        !          2014:           case DEVIL:
        !          2015:                if ((rand() % 10) > 4) {
        !          2016:                     playsound_loc(S_DEMON1 + (rand() % 5), spr->x, spr->y);
        !          2017:                }
        !          2018:                spr->picnum = DEVILATTACK;
        !          2019:                break;
        !          2020:           case SKELETON:
        !          2021:                spr->picnum = SKELETONATTACK;
        !          2022:                break;
        !          2023:           case IMP:
        !          2024:                if ((rand() % 10) > 5)
        !          2025:                     playsound_loc(S_IMPGROWL1+(rand()%3),spr->x,spr->y);
        !          2026:                spr->picnum = IMPATTACK;
        !          2027:                break;
        !          2028:           case MINOTAUR:
        !          2029:                if ((rand() % 10) > 4)
        !          2030:                     playsound_loc(S_MSNARL1 + (rand() % 3), spr->x, spr->y);
        !          2031:                spr->picnum = MINOTAURATTACK;
        !          2032:                break;
        !          2033:           case WILLOW:
        !          2034:                playsound_loc(S_WISP + (rand() % 2), spr->x, spr->y);
        !          2035:                spr->pal = 7;
        !          2036:                break;
        !          2037:           case DEMON:
        !          2038:                playsound_loc(S_GUARDIAN1 + (rand() % 2), spr->x, spr->y);
        !          2039:                spr->picnum = DEMON;
        !          2040:                break;
        !          2041: 
        !          2042:           case GUARDIAN:
        !          2043:                playsound_loc(S_GUARDIAN1 + (rand() % 2), spr->x, spr->y);
        !          2044:                spr->picnum = GUARDIANATTACK;
        !          2045:                break;
        !          2046:           }
        !          2047:           break;
        !          2048:      case FACE:
        !          2049:           if (netgame) {
        !          2050:                break;
        !          2051:           }
        !          2052:           changespritestat(sn, FACE);
        !          2053:           break;
        !          2054:      case STAND:
        !          2055:           if (netgame) {
        !          2056:                break;
        !          2057:           }
        !          2058:           // changespritestat(sn,STAND);
        !          2059:           changespritestat(sn, FACE);
        !          2060:           spr->lotag = 0;
        !          2061:           break;
        !          2062:      case CHASE:
        !          2063:           if (netgame) {
        !          2064:                break;
        !          2065:           }
        !          2066:           if (spr->picnum == RAT)
        !          2067:                changespritestat(sn, FLEE);
        !          2068:           else
        !          2069:                changespritestat(sn, CHASE);
        !          2070:           spr->lotag = 256;
        !          2071:           switch (spr->picnum) {
        !          2072: 
        !          2073:           case NEWGUY:
        !          2074:           case NEWGUYSTAND:
        !          2075:           case NEWGUYKNEE:
        !          2076:           case NEWGUYBOW:
        !          2077:           case NEWGUYMACE:
        !          2078:           case NEWGUYPUNCH:
        !          2079:           case NEWGUYCAST:
        !          2080:                spr->picnum = NEWGUY;
        !          2081:                break;
        !          2082: 
        !          2083:           case KURTSTAND:
        !          2084:           case KURTKNEE:
        !          2085:           case KURTAT:
        !          2086:           case KURTPUNCH:
        !          2087:           case GONZOCSWAT:
        !          2088:                spr->picnum = GONZOCSW;
        !          2089:                break;
        !          2090:           case GONZOGSWAT:
        !          2091:                spr->picnum = GONZOGSW;
        !          2092:                break;
        !          2093:           case GONZOGHMAT:
        !          2094:                spr->picnum = GONZOGHM;
        !          2095:                break;
        !          2096:           case GONZOGSHAT:
        !          2097:                spr->picnum = GONZOGSH;
        !          2098:                break;
        !          2099: 
        !          2100: 
        !          2101: 
        !          2102:           case GRONHALATTACK:
        !          2103:                if (spr->extra > 2)
        !          2104:                     spr->picnum = GRONHAL;
        !          2105:                else
        !          2106:                     spr->picnum = GRONMU;
        !          2107:                break;
        !          2108:           case GRONSWATTACK:
        !          2109:                spr->picnum = GRONSW;
        !          2110:                break;
        !          2111:           case GRONMUATTACK:
        !          2112:                if (spr->extra > 0)
        !          2113:                     spr->picnum = GRONMU;
        !          2114:                else
        !          2115:                     spr->picnum = GRONSW;
        !          2116:                break;
        !          2117:           case KOBOLDATTACK:
        !          2118:                spr->picnum = KOBOLD;
        !          2119:                break;
        !          2120:           case KATIEAT:
        !          2121:                spr->picnum = KATIE;
        !          2122:                break;
        !          2123:           case DEVILATTACK:
        !          2124:                spr->picnum = DEVIL;
        !          2125:                break;
        !          2126:           case SKELETONATTACK:
        !          2127:                spr->picnum = SKELETON;
        !          2128:                break;
        !          2129:           case IMPATTACK:
        !          2130:                if (rand() % 10 > 2)
        !          2131: // BIKINI
        !          2132: //                        playsound_loc(S_GOBLIN1+(krand()%3),spr->x,spr->y);
        !          2133:                     spr->picnum = IMP;
        !          2134:                break;
        !          2135:           case MINOTAURATTACK:
        !          2136: //JSA_DEMO3
        !          2137:                playsound_loc(S_MSNARL1 + (rand() % 4), spr->x, spr->y);
        !          2138:                spr->picnum = MINOTAUR;
        !          2139:                break;
        !          2140:           case DEMON:
        !          2141:                spr->picnum = DEMON;
        !          2142:                break;
        !          2143:           case GUARDIANATTACK:
        !          2144:                spr->picnum = GUARDIAN;
        !          2145:                break;
        !          2146:           case WILLOW:
        !          2147:                spr->pal = 6;
        !          2148:                break;
        !          2149:           }
        !          2150:           break;
        !          2151:      case MISSILE:
        !          2152:           changespritestat(sn, MISSILE);
        !          2153:           break;
        !          2154:      case CAST:
        !          2155:           changespritestat(sn, CAST);
        !          2156:           spr->lotag = 12;
        !          2157:           switch (spr->picnum) {
        !          2158:           case GRONHALATTACK:
        !          2159:                spr->lotag = 24;
        !          2160:                break;
        !          2161:           case GRONMUATTACK:
        !          2162:                spr->lotag = 36;
        !          2163:                break;
        !          2164:           case GONZOCSWAT:
        !          2165:                spr->lotag = 24;
        !          2166:                break;
        !          2167:           case NEWGUY:
        !          2168:                spr->lotag = 24;
        !          2169:                break;
        !          2170:           }
        !          2171:           break;
        !          2172:      case FX:
        !          2173:           changespritestat(sn, FX);
        !          2174:           break;
        !          2175:      case DIE:
        !          2176:           spr->cstat &= ~3;
        !          2177:           switch (spr->picnum) {
        !          2178: 
        !          2179:           case GONZOBSHPAIN:
        !          2180:                if (netgame) {
        !          2181:                     break;
        !          2182:                }
        !          2183:                spr->lotag = 20;
        !          2184:                spr->picnum = GONZOBSHPAIN;
        !          2185:                playsound_loc(S_GRONDEATHA + rand() % 3, spr->x, spr->y);
        !          2186:                if (spr->shade > 30) {
        !          2187:                     trailingsmoke(sn, 2);
        !          2188:                     deletesprite((short) sn);
        !          2189:                     goto outathere;
        !          2190:                }
        !          2191:                kills++;
        !          2192:                break;
        !          2193:           case NEWGUY:
        !          2194:           case NEWGUYSTAND:
        !          2195:           case NEWGUYKNEE:
        !          2196:           case NEWGUYCAST:
        !          2197:           case NEWGUYBOW:
        !          2198:           case NEWGUYMACE:
        !          2199:           case NEWGUYPUNCH:
        !          2200:                if (netgame) {
        !          2201:                     break;
        !          2202:                }
        !          2203:                spr->lotag = 20;
        !          2204:                spr->picnum = NEWGUYDIE;
        !          2205:                playsound_loc(S_AGM_DIE1+(rand()%3),spr->x,spr->y);
        !          2206:                kills++;
        !          2207:                break;
        !          2208:           case KURTSTAND:
        !          2209:           case KURTKNEE:
        !          2210:           case KURTAT:
        !          2211:           case KURTPUNCH:
        !          2212:           case KURTREADY:
        !          2213:           case GONZOCSW:
        !          2214:           case GONZOCSWAT:
        !          2215:           case GONZOCSWPAIN:
        !          2216:                if (netgame) {
        !          2217:                     break;
        !          2218:                }
        !          2219:                spr->lotag = 20;
        !          2220:                spr->picnum = GONZOCSWPAIN;
        !          2221:                playsound_loc(S_GRONDEATHA + rand() % 3, spr->x, spr->y);
        !          2222:                kills++;
        !          2223:                break;
        !          2224:           case GONZOGSW:
        !          2225:           case GONZOGSWAT:
        !          2226:           case GONZOGSWPAIN:
        !          2227:                if (netgame) {
        !          2228:                     break;
        !          2229:                }
        !          2230:                spr->lotag = 20;
        !          2231:                spr->picnum = GONZOGSWPAIN;
        !          2232:                playsound_loc(S_GRONDEATHA + rand() % 3, spr->x, spr->y);
        !          2233:                kills++;
        !          2234:                break;
        !          2235:           case GONZOGHM:
        !          2236:           case GONZOGHMAT:
        !          2237:           case GONZOGHMPAIN:
        !          2238:                if (netgame) {
        !          2239:                     break;
        !          2240:                }
        !          2241:                spr->lotag = 20;
        !          2242:                spr->picnum = GONZOGHMPAIN;
        !          2243:                playsound_loc(S_GRONDEATHA + rand() % 3, spr->x, spr->y);
        !          2244:                kills++;
        !          2245:                break;
        !          2246:           case GONZOGSH:
        !          2247:           case GONZOGSHAT:
        !          2248:           case GONZOGSHPAIN:
        !          2249:                if (netgame) {
        !          2250:                     break;
        !          2251:                }
        !          2252:                spr->lotag = 20;
        !          2253:                spr->picnum = GONZOGSHPAIN;
        !          2254:                playsound_loc(S_GRONDEATHA + rand() % 3, spr->x, spr->y);
        !          2255:                kills++;
        !          2256:                break;
        !          2257: 
        !          2258:           case GRONHALPAIN:
        !          2259:           case GRONHAL:
        !          2260:           case GRONHALATTACK:
        !          2261:                spr->lotag = 20;
        !          2262:                spr->picnum = GRONHALDIE;
        !          2263:                playsound_loc(S_GRONDEATHA + rand() % 3, spr->x, spr->y);
        !          2264:                kills++;
        !          2265:                break;
        !          2266:           case GRONSWPAIN:
        !          2267:           case GRONSW:
        !          2268:           case GRONSWATTACK:
        !          2269:                spr->lotag = 20;
        !          2270:                spr->picnum = GRONSWDIE;
        !          2271:                playsound_loc(S_GRONDEATHA + rand() % 3, spr->x, spr->y);
        !          2272:                kills++;
        !          2273:                break;
        !          2274:           case GRONMUPAIN:
        !          2275:           case GRONMU:
        !          2276:           case GRONMUATTACK:
        !          2277:                spr->lotag = 20;
        !          2278:                spr->picnum = GRONMUDIE;
        !          2279:                playsound_loc(S_GRONDEATHA + rand() % 3, spr->x, spr->y);
        !          2280:                kills++;
        !          2281:                break;
        !          2282:           case FISH:
        !          2283:           case RAT:
        !          2284:                if (netgame) {
        !          2285:                     break;
        !          2286:                }
        !          2287:                spr->lotag = 20;
        !          2288:                break;
        !          2289:           case KOBOLD:
        !          2290:           case KOBOLDATTACK:
        !          2291:                if (netgame) {
        !          2292:                     break;
        !          2293:                }
        !          2294:                playsound_loc(S_KDIE1 + (rand() % 2), spr->x, spr->y);
        !          2295:                spr->lotag = 20;
        !          2296:                spr->picnum = KOBOLDDIE;
        !          2297:                kills++;
        !          2298:                break;
        !          2299:           case KATIE:
        !          2300:           case KATIEAT:
        !          2301:                if (netgame) {
        !          2302:                     break;
        !          2303:                }
        !          2304:                playsound_loc(S_JUDYDIE,spr->x,spr->y);
        !          2305:                spr->lotag = 20;
        !          2306:                spr->picnum = KATIEPAIN;
        !          2307:                spawnhornskull(sn);
        !          2308:                kills++;
        !          2309:                break;
        !          2310:           case DEVILSTAND:
        !          2311:           case DEVIL:
        !          2312:           case DEVILATTACK:
        !          2313:                if (netgame) {
        !          2314:                     break;
        !          2315:                }
        !          2316:                playsound_loc(S_DEMONDIE1 + (rand() % 2), spr->x, spr->y);
        !          2317:                spr->lotag = 20;
        !          2318:                spr->picnum = DEVILDIE;
        !          2319:                kills++;
        !          2320:                break;
        !          2321:           case SKELETON:
        !          2322:           case SKELETONATTACK:
        !          2323:                if (netgame) {
        !          2324:                     break;
        !          2325:                }
        !          2326:                playsound_loc(S_SKELETONDIE, spr->x, spr->y);
        !          2327:                spr->lotag = 20;
        !          2328:                spr->picnum = SKELETONDIE;
        !          2329:                kills++;
        !          2330:                break;
        !          2331:           case IMP:
        !          2332:           case IMPATTACK:
        !          2333:           case IMPDIE:
        !          2334:                if (netgame) {
        !          2335:                     break;
        !          2336:                }
        !          2337:                playsound_loc(S_IMPDIE1+(rand()%2),spr->x,spr->y);
        !          2338:                spr->lotag = 20;
        !          2339:                spr->picnum = IMPDIE;
        !          2340:                kills++;
        !          2341:                break;
        !          2342:           case MINOTAUR:
        !          2343:           case MINOTAURATTACK:
        !          2344:                if (netgame) {
        !          2345:                     break;
        !          2346:                }
        !          2347:                playsound_loc(S_MDEATH1, spr->x, spr->y);
        !          2348:                spr->lotag = 10;
        !          2349:                spr->picnum = MINOTAURDIE;
        !          2350:                kills++;
        !          2351:                break;
        !          2352:           case DEMON:
        !          2353:                if (netgame) {
        !          2354:                     break;
        !          2355:                }
        !          2356:                playsound_loc(S_GUARDIANDIE, spr->x, spr->y);
        !          2357:                kills++;
        !          2358:                explosion(sn, spr->x, spr->y, spr->z, spr->owner);
        !          2359:                deletesprite((short) sn);
        !          2360:                score(1500);
        !          2361:                goto outathere;
        !          2362:                break;
        !          2363:           case GUARDIAN:
        !          2364:           case GUARDIANATTACK:
        !          2365:                if (netgame) {
        !          2366:                     break;
        !          2367:                }
        !          2368:                playsound_loc(S_GUARDIANDIE, spr->x, spr->y);
        !          2369:                explosion(sn, spr->x, spr->y, spr->z, spr->owner);
        !          2370:                deletesprite((short) sn);
        !          2371:                score(1500);
        !          2372:                kills++;
        !          2373:                goto outathere;
        !          2374:                break;
        !          2375:           case WILLOW:
        !          2376:                if (netgame) {
        !          2377:                     break;
        !          2378:                }
        !          2379:                playsound_loc(S_WILLOWDIE, spr->x, spr->y);
        !          2380:                spr->pal = 0;
        !          2381:                spr->lotag = 20;
        !          2382:                spr->picnum = WILLOWEXPLO;
        !          2383:                kills++;
        !          2384:                break;
        !          2385:           }
        !          2386:           changespritestat(sn, DIE);
        !          2387: outathere:
        !          2388:           break;
        !          2389: 
        !          2390:      case RESURECT:
        !          2391:           if (netgame) {
        !          2392:                break;
        !          2393:           }
        !          2394:           spr->lotag = 7200;
        !          2395:           switch (spr->picnum) {
        !          2396: 
        !          2397:           case GONZOBSHDEAD:
        !          2398:                spr->cstat &= ~3;
        !          2399:                changespritestat(sn, RESURECT);
        !          2400:                score(85);
        !          2401:                break;
        !          2402:           case NEWGUYDEAD:
        !          2403:                spr->cstat &= ~3;
        !          2404:                changespritestat(sn, RESURECT);
        !          2405:                score(55);
        !          2406:                break;
        !          2407:           case GONZOCSWDEAD:
        !          2408:                spr->cstat &= ~3;
        !          2409:                changespritestat(sn, RESURECT);
        !          2410:                score(55);
        !          2411:                break;
        !          2412:           case GONZOGSWDEAD:
        !          2413:                spr->cstat &= ~3;
        !          2414:                changespritestat(sn, RESURECT);
        !          2415:                score(105);
        !          2416:                break;
        !          2417:           case GONZOGHMDEAD:
        !          2418:                spr->cstat &= ~3;
        !          2419:                changespritestat(sn, RESURECT);
        !          2420:                score(100);
        !          2421:                break;
        !          2422:           case GONZOGSHDEAD:
        !          2423:                spr->cstat &= ~3;
        !          2424:                changespritestat(sn, RESURECT);
        !          2425:                score(110);
        !          2426:                break;
        !          2427: 
        !          2428:           case GRONDEAD:
        !          2429:                spr->picnum = GRONDEAD;
        !          2430:                spr->cstat &= ~3;
        !          2431:                spr->extra = 3;
        !          2432:                changespritestat(sn, RESURECT);
        !          2433:                switch (sprite[sn].pal) {
        !          2434:                case 0:
        !          2435:                     score(125);
        !          2436:                     break;
        !          2437:                case 10:
        !          2438:                     score(90);
        !          2439:                     break;
        !          2440:                case 11:
        !          2441:                     score(115);
        !          2442:                     break;
        !          2443:                case 12:
        !          2444:                     score(65);
        !          2445:                     break;
        !          2446:                }
        !          2447:                break;
        !          2448:           case FISH:
        !          2449:           case RAT:
        !          2450:                spr->picnum = RAT;
        !          2451:                spr->cstat &= ~3;
        !          2452:                changespritestat(sn, RESURECT);
        !          2453:                score(5);
        !          2454:                break;
        !          2455:           case KOBOLDDEAD:
        !          2456:                spr->picnum = KOBOLDDEAD;
        !          2457:                spr->cstat &= ~3;
        !          2458:                changespritestat(sn, RESURECT);
        !          2459:                switch (sprite[sn].pal) {
        !          2460:                case 0:
        !          2461:                     score(25);
        !          2462:                     break;
        !          2463:                case 7:
        !          2464:                     score(40);
        !          2465:                     break;
        !          2466:                }
        !          2467:                score(10);
        !          2468:                break;
        !          2469:           case KATIEDEAD:
        !          2470:                trailingsmoke(sn, 1);
        !          2471:                spr->picnum = KATIEDEAD;
        !          2472:                spr->cstat &= ~3;
        !          2473:                changespritestat(sn, RESURECT);
        !          2474:                spawnhornskull(sn);
        !          2475:                score(5000);
        !          2476:                break;
        !          2477:           case DEVILDEAD:
        !          2478:                trailingsmoke(sn, 1);
        !          2479:                spr->picnum = DEVILDEAD;
        !          2480:                spr->cstat &= ~3;
        !          2481:                changespritestat(sn, RESURECT);
        !          2482:                score(70);
        !          2483:                break;
        !          2484:           case SKELETONDEAD:
        !          2485:                spr->picnum = SKELETONDEAD;
        !          2486:                spr->cstat &= ~3;
        !          2487:                changespritestat(sn, RESURECT);
        !          2488:                score(20);
        !          2489:                break;
        !          2490:           case IMPDEAD:
        !          2491:                spr->picnum = IMPDEAD;
        !          2492:                spr->cstat &= ~3;
        !          2493:                changespritestat(sn, RESURECT);
        !          2494:                score(115);
        !          2495:                break;
        !          2496:           case MINOTAURDEAD:
        !          2497:                spr->picnum = MINOTAURDEAD;
        !          2498:                spr->cstat &= ~3;
        !          2499:                changespritestat(sn, RESURECT);
        !          2500:                score(95);
        !          2501:                break;
        !          2502:           case DEMON:
        !          2503:           case GUARDIAN:
        !          2504:           case GUARDIANATTACK:
        !          2505:                changespritestat(sn, 0);
        !          2506:                deletesprite((short) sn);
        !          2507:                score(120);
        !          2508:                break;
        !          2509:           case WILLOW:
        !          2510:                changespritestat(sn, 0);
        !          2511:                deletesprite((short) sn);
        !          2512:                score(15);
        !          2513:                break;
        !          2514:           }
        !          2515:           break;
        !          2516:      case DEAD:
        !          2517:           switch (spr->picnum) {
        !          2518:           case FISH:
        !          2519:           case RAT:
        !          2520:                if (netgame) {
        !          2521:                     break;
        !          2522:                }
        !          2523:                spr->cstat &= ~3;
        !          2524:                changespritestat(sn, DEAD);
        !          2525:                score(5);
        !          2526:                break;
        !          2527: 
        !          2528:           case GONZOBSHDEAD:
        !          2529:                if (netgame) {
        !          2530:                     break;
        !          2531:                }
        !          2532:                spr->picnum = GONZOBSHDEAD;
        !          2533:                spr->cstat &= ~3;
        !          2534:                changespritestat(sn, DEAD);
        !          2535:                if (spr->pal == 4) {
        !          2536:                     changespritestat(sn, SHADE);
        !          2537:                     deaddude(sn);
        !          2538:                }
        !          2539:                else {
        !          2540:                     changespritestat(sn, DEAD);
        !          2541:                     if (spr->shade < 25)
        !          2542:                          monsterweapon(sn);
        !          2543:                }
        !          2544:                score(85);
        !          2545:                break;
        !          2546:           case GONZOCSWDEAD:
        !          2547:                if (netgame) {
        !          2548:                     break;
        !          2549:                }
        !          2550:                spr->picnum = GONZOCSWDEAD;
        !          2551:                spr->cstat &= ~3;
        !          2552:                if (spr->pal == 4) {
        !          2553:                     changespritestat(sn, SHADE);
        !          2554:                     deaddude(sn);
        !          2555:                }
        !          2556:                else {
        !          2557:                     changespritestat(sn, DEAD);
        !          2558:                     monsterweapon(sn);
        !          2559:                }
        !          2560:                score(55);
        !          2561:                break;
        !          2562:           case GONZOGSWDEAD:
        !          2563:                if (netgame) {
        !          2564:                     break;
        !          2565:                }
        !          2566:                spr->picnum = GONZOGSWDEAD;
        !          2567:                spr->cstat &= ~3;
        !          2568:                if (spr->pal == 4) {
        !          2569:                     changespritestat(sn, SHADE);
        !          2570:                     deaddude(sn);
        !          2571:                }
        !          2572:                else {
        !          2573:                     changespritestat(sn, DEAD);
        !          2574:                     monsterweapon(sn);
        !          2575:                }
        !          2576:                score(105);
        !          2577:                break;
        !          2578:           case GONZOGHMDEAD:
        !          2579:                if (netgame) {
        !          2580:                     break;
        !          2581:                }
        !          2582:                spr->picnum = GONZOGHMDEAD;
        !          2583:                spr->cstat &= ~3;
        !          2584:                if (spr->pal == 4) {
        !          2585:                     changespritestat(sn, SHADE);
        !          2586:                     deaddude(sn);
        !          2587:                }
        !          2588:                else {
        !          2589:                     changespritestat(sn, DEAD);
        !          2590:                     monsterweapon(sn);
        !          2591:                }
        !          2592:                score(100);
        !          2593:                break;
        !          2594:           case NEWGUYDEAD:
        !          2595:                if (netgame) {
        !          2596:                     break;
        !          2597:                }
        !          2598:                spr->picnum = NEWGUYDEAD;
        !          2599:                spr->cstat &= ~3;
        !          2600:                changespritestat(sn, DEAD);
        !          2601:                monsterweapon(sn);
        !          2602:                score(50);
        !          2603:                break;
        !          2604:           case GONZOGSHDEAD:
        !          2605:                if (netgame) {
        !          2606:                     break;
        !          2607:                }
        !          2608:                spr->picnum = GONZOGSHDEAD;
        !          2609:                spr->cstat &= ~3;
        !          2610:                if (spr->pal == 4) {
        !          2611:                     changespritestat(sn, SHADE);
        !          2612:                     deaddude(sn);
        !          2613:                }
        !          2614:                else {
        !          2615:                     changespritestat(sn, DEAD);
        !          2616:                     monsterweapon(sn);
        !          2617:                }
        !          2618:                score(110);
        !          2619:                break;
        !          2620:           case GRONDEAD:
        !          2621:                spr->picnum = GRONDEAD;
        !          2622:                spr->cstat &= ~3;
        !          2623:                changespritestat(sn, DEAD);
        !          2624:                switch (sprite[sn].pal) {
        !          2625:                case 0:
        !          2626:                     score(125);
        !          2627:                     break;
        !          2628:                case 10:
        !          2629:                     score(90);
        !          2630:                     break;
        !          2631:                case 11:
        !          2632:                     score(115);
        !          2633:                     break;
        !          2634:                case 12:
        !          2635:                     score(65);
        !          2636:                     break;
        !          2637:                }
        !          2638:                monsterweapon(sn);
        !          2639:                break;
        !          2640:           case KOBOLDDEAD:
        !          2641:                if (netgame) {
        !          2642:                     break;
        !          2643:                }
        !          2644:                spr->picnum = KOBOLDDEAD;
        !          2645:                spr->cstat &= ~3;
        !          2646:                changespritestat(sn, DEAD);
        !          2647:                switch (sprite[sn].pal) {
        !          2648:                case 0:
        !          2649:                     score(25);
        !          2650:                     break;
        !          2651:                case 7:
        !          2652:                     score(40);
        !          2653:                     break;
        !          2654:                }
        !          2655:                monsterweapon(sn);
        !          2656:                break;
        !          2657:           case KATIEDEAD:
        !          2658:                if (netgame) {
        !          2659:                     break;
        !          2660:                }
        !          2661:                trailingsmoke(sn, 1);
        !          2662:                spr->picnum = DEVILDEAD;
        !          2663:                spr->cstat &= ~3;
        !          2664:                changespritestat(sn, DEAD);
        !          2665:                spawnhornskull(sn);
        !          2666:                score(500);
        !          2667:                break;
        !          2668:           case DEVILDEAD:
        !          2669:                if (netgame) {
        !          2670:                     break;
        !          2671:                }
        !          2672:                trailingsmoke(sn, 1);
        !          2673:                spr->picnum = DEVILDEAD;
        !          2674:                spr->cstat &= ~3;
        !          2675:                changespritestat(sn, DEAD);
        !          2676:                score(70);
        !          2677:                monsterweapon(sn);
        !          2678:                break;
        !          2679:           case SKELETONDEAD:
        !          2680:                if (netgame) {
        !          2681:                     break;
        !          2682:                }
        !          2683:                spr->picnum = SKELETONDEAD;
        !          2684:                spr->cstat &= ~3;
        !          2685:                changespritestat(sn, DEAD);
        !          2686:                score(20);
        !          2687:                monsterweapon(sn);
        !          2688:                break;
        !          2689:           case IMPDEAD:
        !          2690:                if (netgame) {
        !          2691:                     break;
        !          2692:                }
        !          2693:                spr->picnum = IMPDEAD;
        !          2694:                spr->cstat &= ~3;
        !          2695:                changespritestat(sn, DEAD);
        !          2696:                score(115);
        !          2697:                monsterweapon(sn);
        !          2698:                break;
        !          2699:           case MINOTAURDEAD:
        !          2700:                if (netgame) {
        !          2701:                     break;
        !          2702:                }
        !          2703:                spr->picnum = MINOTAURDEAD;
        !          2704:                spr->cstat &= ~3;
        !          2705:                changespritestat(sn, DEAD);
        !          2706:                score(95);
        !          2707:                if (rand() % 100 > 60)
        !          2708:                     monsterweapon(sn);
        !          2709:                break;
        !          2710:           case WILLOWEXPLO + 2:
        !          2711:                if (netgame) {
        !          2712:                     break;
        !          2713:                }
        !          2714:                spr->pal = 0;
        !          2715:                spr->cstat &= ~3;
        !          2716:                changespritestat(sn, 0);
        !          2717:                deletesprite((short) sn);
        !          2718:                score(15);
        !          2719:                break;
        !          2720:           }
        !          2721:           if (sector[spr->sectnum].floorpicnum == WATER
        !          2722:               || sector[spr->sectnum].floorpicnum == SLIME) {
        !          2723:                if (spr->picnum == MINOTAURDEAD) {
        !          2724:                     spr->z += (8 << 8);
        !          2725:                     setsprite((short) sn, spr->x, spr->y, spr->z);
        !          2726:                }
        !          2727:           }
        !          2728:           if (sector[spr->sectnum].floorpicnum == LAVA
        !          2729:               || sector[spr->sectnum].floorpicnum == LAVA1
        !          2730:               || sector[spr->sectnum].floorpicnum == LAVA2) {
        !          2731:                trailingsmoke(sn, 1);
        !          2732:                deletesprite((short) sn);
        !          2733:           }
        !          2734:           break;
        !          2735: 
        !          2736:      }
        !          2737:      //
        !          2738:      // the control variable for monster release
        !          2739:      //
        !          2740: 
        !          2741: }
        !          2742: 
        !          2743: 
        !          2744: 
        !          2745: 
        !          2746: 
        !          2747: 
        !          2748: 
        !          2749: // FIRE BREATH
        !          2750: 
        !          2751: void
        !          2752: firebreath(short i, int a, int b, int c)
        !          2753: {
        !          2754: 
        !          2755:      long j;
        !          2756:      int  k;
        !          2757:      long discrim;
        !          2758:      long discrim2;
        !          2759: 
        !          2760:      struct player *plr;
        !          2761:      spritetype *spr;
        !          2762:      spritetype *tspr;
        !          2763: 
        !          2764:      plr = &player[pyrn];
        !          2765:      spr = &sprite[i];
        !          2766: 
        !          2767:      for (k = 0; k <= a; k++) {
        !          2768: 
        !          2769:           j = insertsprite(spr->sectnum, MISSILE);
        !          2770:           tspr = &sprite[j];
        !          2771: 
        !          2772:           tspr->x = spr->x;
        !          2773:           tspr->y = spr->y;
        !          2774:           if (c == LOW)
        !          2775:                tspr->z = sector[spr->sectnum].floorz - (32 << 8);
        !          2776:           else
        !          2777:                tspr->z = sector[spr->sectnum].floorz - (tilesizy[spr->picnum] << 7);
        !          2778:           tspr->cstat = 0;
        !          2779:           tspr->picnum = MONSTERBALL;
        !          2780:           tspr->shade = -15;
        !          2781:           tspr->xrepeat = 128;
        !          2782:           tspr->yrepeat = 128;
        !          2783:           tspr->ang = ((((getangle(plr->x - tspr->x, plr->y - tspr->y) + (krand() & 15) - 8) + 2048) + ((b * 22) + (k * 10))) & 2047);
        !          2784:           tspr->xvel = (sintable[(tspr->ang + 2560) & 2047] >> 6);
        !          2785:           tspr->yvel = (sintable[(tspr->ang + 2048) & 2047] >> 6);
        !          2786:           discrim = ksqrt((plr->x - tspr->x) * (plr->x - tspr->x)
        !          2787:                           + (plr->y - tspr->y) * (plr->y - tspr->y));
        !          2788:           if (discrim == 0)
        !          2789:                discrim = 1;
        !          2790:           if (c == HIGH)
        !          2791:                tspr->zvel = ((plr->z + (32 << 8) - tspr->z) << 7) / discrim;
        !          2792:           else
        !          2793:                tspr->zvel = (((plr->z + (8 << 8)) - tspr->z) << 7) / discrim;   // NEW
        !          2794: 
        !          2795:           tspr->owner = i;
        !          2796:           tspr->clipdist = 16;
        !          2797:           tspr->lotag = 512;
        !          2798:           tspr->hitag = 0;
        !          2799:      }
        !          2800: 
        !          2801: 
        !          2802: 
        !          2803: }
        !          2804: 
        !          2805: //cast
        !          2806: 
        !          2807: void
        !          2808: castspell(short i)
        !          2809: {
        !          2810: 
        !          2811:      short j;
        !          2812:      long discrim;
        !          2813:      long discrim2;
        !          2814: 
        !          2815:      struct player *plr;
        !          2816:      spritetype *spr;
        !          2817:      spritetype *tspr;
        !          2818: 
        !          2819:      plr = &player[pyrn];
        !          2820:      spr = &sprite[i];
        !          2821: 
        !          2822:      j = insertsprite(spr->sectnum, MISSILE);
        !          2823:      tspr = &sprite[j];
        !          2824: 
        !          2825:      tspr->x = spr->x;
        !          2826:      tspr->y = spr->y;
        !          2827:      if (spr->picnum == SPAWNFIREBALL) {
        !          2828:           tspr->z = spr->z - ((tilesizy[spr->picnum] >> 1) << 8);
        !          2829:      }
        !          2830:      else {
        !          2831:           tspr->z = spr->z - ((tilesizy[spr->picnum] >> 1) << 8);
        !          2832:      }
        !          2833:      tspr->cstat = 0;
        !          2834:      tspr->picnum = MONSTERBALL;
        !          2835:      tspr->shade = -15;
        !          2836:      tspr->xrepeat = 64;
        !          2837:      tspr->yrepeat = 64;
        !          2838:      if (sprite[i].picnum == SPAWNFIREBALL) {
        !          2839:           tspr->ang = ((getangle(plr->x - tspr->x, plr->y - tspr->y) + 2048) & 2047);
        !          2840:      }
        !          2841:      else {
        !          2842:           tspr->ang = (((getangle(plr->x - tspr->x, plr->y - tspr->y) + (krand() & 15) - 8) + 2048) & 2047);
        !          2843:      }
        !          2844:      tspr->xvel = (sintable[(tspr->ang + 2560) & 2047] >> 6);
        !          2845:      tspr->yvel = (sintable[(tspr->ang + 2048) & 2047] >> 6);
        !          2846: 
        !          2847:      // discrim=ksqrt((plr->x-tspr->x)*(plr->x-tspr->x)+(plr->y-tspr->y)*(plr->y
        !          2848:      // -tspr->y));
        !          2849:      // if(discrim == 0) {
        !          2850:      // discrim=1;
        !          2851:      // }
        !          2852: 
        !          2853:      tspr->zvel = ((plr->z + (8 << 8) - tspr->z) << 8) /
        !          2854:           ksqrt((plr->x - tspr->x) *
        !          2855:                 (plr->x - tspr->x) +
        !          2856:                 (plr->y - tspr->y) *
        !          2857:                 (plr->y - tspr->y));
        !          2858: 
        !          2859:      tspr->owner = i;
        !          2860:      tspr->clipdist = 16;
        !          2861:      tspr->lotag = 512;
        !          2862:      tspr->hitag = 0;
        !          2863: 
        !          2864: }
        !          2865: 
        !          2866: void
        !          2867: skullycastspell(short i)
        !          2868: {
        !          2869: 
        !          2870:      short j;
        !          2871:      long discrim;
        !          2872:      long discrim2;
        !          2873: 
        !          2874:      struct player *plr;
        !          2875:      spritetype *spr;
        !          2876:      spritetype *tspr;
        !          2877: 
        !          2878:      plr = &player[pyrn];
        !          2879:      spr = &sprite[i];
        !          2880: 
        !          2881:      j = insertsprite(spr->sectnum, MISSILE);
        !          2882:      tspr = &sprite[j];
        !          2883: 
        !          2884:      tspr->x = spr->x;
        !          2885:      tspr->y = spr->y;
        !          2886:      if (spr->picnum == SPAWNFIREBALL) {
        !          2887:           tspr->z = spr->z - ((tilesizy[spr->picnum] >> 1) << 8);
        !          2888:      }
        !          2889:      else {
        !          2890:           tspr->z = spr->z - ((tilesizy[spr->picnum] >> 1) << 8);
        !          2891:      }
        !          2892:      tspr->cstat = 0;
        !          2893:      tspr->picnum = PLASMA;
        !          2894:      tspr->shade = -15;
        !          2895:      tspr->xrepeat = 64;
        !          2896:      tspr->yrepeat = 64;
        !          2897:      if (spr->picnum == SPAWNFIREBALL) {
        !          2898:           tspr->ang = ((getangle(plr->x - tspr->x, plr->y - tspr->y) + 2048) & 2047);
        !          2899:      }
        !          2900:      else {
        !          2901:           tspr->ang = (((getangle(plr->x - tspr->x, plr->y - tspr->y) + (krand() & 15) - 8) + 2048) & 2047);
        !          2902:      }
        !          2903:      tspr->xvel = (sintable[(tspr->ang + 2560) & 2047] >> 6);
        !          2904:      tspr->yvel = (sintable[(tspr->ang + 2048) & 2047] >> 6);
        !          2905: 
        !          2906:      discrim = ksqrt((plr->x - tspr->x) * (plr->x - tspr->x) + (plr->y - tspr->y) * (plr->y - tspr->y));
        !          2907:      if (discrim == 0) {
        !          2908:           discrim = 1;
        !          2909:      }
        !          2910:      tspr->zvel = ((plr->z + (48 << 8) - tspr->z) << 7) / discrim;
        !          2911:      tspr->owner = i;
        !          2912:      tspr->clipdist = 16;
        !          2913:      tspr->lotag = 512;
        !          2914:      tspr->hitag = 0;
        !          2915:      tspr->pal = 7;
        !          2916: 
        !          2917: }
        !          2918: 
        !          2919: 
        !          2920: 
        !          2921: int
        !          2922: checkheat(short i)
        !          2923: {
        !          2924: 
        !          2925:      short hitsect,
        !          2926:           hitwall,
        !          2927:           hitsprite,
        !          2928:           daang2,
        !          2929:           daang,
        !          2930:           dahoriz;
        !          2931:      long daz2,
        !          2932:           hitx,
        !          2933:           hity,
        !          2934:           hitz;
        !          2935:      long x,
        !          2936:           y,
        !          2937:           z,
        !          2938:           dasectnum;
        !          2939:      struct player *plr;
        !          2940:      int  trys;
        !          2941: 
        !          2942:      plr = &player[pyrn];
        !          2943:      hitsprite = 0;
        !          2944: 
        !          2945:      daang = sprite[i].ang;
        !          2946:      dahoriz = plr->horiz;
        !          2947: 
        !          2948:      x = sprite[i].x;
        !          2949:      y = sprite[i].y;
        !          2950:      z = sprite[i].z;
        !          2951: 
        !          2952:      dasectnum = sprite[i].sectnum;
        !          2953: 
        !          2954:      daang2 = ((daang + 2048 + (krand() & 31) - 16) & 2047);
        !          2955:      daz2 = ((100 - dahoriz) * 2000) + ((krand() - 32768) >> 1);
        !          2956: 
        !          2957:      hitscan(x, y, z, dasectnum,   // Start position
        !          2958:              sintable[(daang2 + 2560) & 2047],    // X vector of 3D ang
        !          2959:              sintable[(daang2 + 2048) & 2047],    // Y vector of 3D ang
        !          2960:              daz2,                 // Z vector of 3D ang
        !          2961:              &hitsect, &hitwall, &hitsprite, &hitx, &hity, &hitz);
        !          2962: 
        !          2963:      if (hitsprite > 0 && hitsprite != plr->spritenum) {
        !          2964:           sprite[i].ang = (getangle(sprite[hitsprite].x - sprite[i].x, sprite[hitsprite].y - sprite[i].y) & 2047);
        !          2965:           return (1);
        !          2966:      }
        !          2967:      else {
        !          2968:           sprite[i].ang = plr->ang;
        !          2969:           if (plr->horiz > 100) {
        !          2970:                sprite[i].z -= plr->horiz;
        !          2971:           }
        !          2972:      }
        !          2973:      return (0);
        !          2974: }
        !          2975: 
        !          2976: int
        !          2977: checkfacing(short i, long x, long y)
        !          2978: {
        !          2979: 
        !          2980: 
        !          2981:      if (sintable[(sprite[i].ang + 2560) & 2047] * (x - sprite[i].x)
        !          2982:          + sintable[(sprite[i].ang + 2048) & 2047] * (y - sprite[i].y) >= 0)
        !          2983:           return (1);
        !          2984:      else
        !          2985:           return (0);
        !          2986: 
        !          2987: }
        !          2988: 
        !          2989: int
        !          2990: checkmedusadist(short i, long x, long y, long z, int lvl)
        !          2991: {
        !          2992: 
        !          2993:      long attackdist;
        !          2994: 
        !          2995:      attackdist = 8192 + (lvl << 9);
        !          2996: 
        !          2997:      if ((labs(x - sprite[i].x) + labs(y - sprite[i].y) < attackdist)
        !          2998:          && (labs((z >> 8) - ((sprite[i].z >> 8)
        !          2999:          - (tilesizy[sprite[i].picnum] >> 1))) <= 120))
        !          3000:           return (1);
        !          3001:      else
        !          3002:           return (0);
        !          3003: 
        !          3004: }
        !          3005: 
        !          3006: 
        !          3007: int
        !          3008: checkdist(short i, long x, long y, long z)
        !          3009: {
        !          3010: 
        !          3011:      long attackdist;
        !          3012:      struct player *plr;
        !          3013: 
        !          3014:      plr = &player[0];
        !          3015: 
        !          3016:      switch (sprite[i].picnum) {
        !          3017:      case KURTAT:
        !          3018: 
        !          3019:      case NEWGUY:
        !          3020:      case NEWGUYMACE:
        !          3021:      case NEWGUYCAST:
        !          3022:      case NEWGUYBOW:
        !          3023:           if (sprite[i].extra > 10) {
        !          3024:                attackdist = 2048 << 1;
        !          3025:           }
        !          3026:           else {
        !          3027:                attackdist = 1024 + 256;
        !          3028:           }
        !          3029:           break;
        !          3030: 
        !          3031:      case KURTPUNCH:
        !          3032:      case NEWGUYPUNCH:
        !          3033: 
        !          3034:      case GONZOGSW:
        !          3035:      case GONZOGHM:
        !          3036:      case GONZOGSH:
        !          3037: 
        !          3038: 
        !          3039:      case GONZOGSWAT:
        !          3040:      case GONZOGHMAT:
        !          3041:      case GONZOGSHAT:
        !          3042:           attackdist = 1024 + 256;
        !          3043:           break;
        !          3044: 
        !          3045:      case GONZOCSW:
        !          3046:      case GONZOCSWAT:
        !          3047:           if (sprite[i].extra > 10)
        !          3048:                attackdist = 2048 << 1;
        !          3049:           else
        !          3050:                attackdist = 1024 + 256;
        !          3051:           break;
        !          3052: 
        !          3053:      case GRONHALATTACK:
        !          3054:      case GRONHAL:
        !          3055:           attackdist = 1024 + 512;
        !          3056:           break;
        !          3057:      case GRONMU:
        !          3058:      case GRONMUATTACK:
        !          3059:           attackdist = 2048;
        !          3060:           break;
        !          3061:      case GRONSW:
        !          3062:      case GRONSWATTACK:
        !          3063:           attackdist = 1024 + 256;
        !          3064:           break;
        !          3065:      case MINOTAUR:
        !          3066:      case MINOTAURATTACK:
        !          3067:           attackdist = 1024 + 512;
        !          3068:           break;
        !          3069:      case SKELETONATTACK:
        !          3070:      case IMP:
        !          3071:      case IMPATTACK:
        !          3072:      case KOBOLD:
        !          3073:      case KOBOLDATTACK:
        !          3074:           attackdist = 1024;
        !          3075:           break;
        !          3076:      case DEMON:
        !          3077:           attackdist = 4096 + 2048;
        !          3078:           break;
        !          3079:      case GUARDIAN:
        !          3080:      case GUARDIANATTACK:
        !          3081:           attackdist = 4096;
        !          3082:           break;
        !          3083:      case KATIE:
        !          3084:      case KATIEAT:
        !          3085:      case DEVIL:
        !          3086:      case DEVILATTACK:
        !          3087:           attackdist = 2048;
        !          3088:           break;
        !          3089:      case FISH:
        !          3090:      case RAT:
        !          3091:      case WILLOW:
        !          3092:           attackdist = 512;
        !          3093:           break;
        !          3094:      default:
        !          3095:           attackdist = 512;
        !          3096:      }
        !          3097: 
        !          3098:      if ((labs(x - sprite[i].x) + labs(y - sprite[i].y) < attackdist)
        !          3099:          && (labs((z >> 8) - ((sprite[i].z >> 8) - (tilesizy[sprite[i].picnum] >> 1))) <= 120))
        !          3100:           return (1);
        !          3101:      else
        !          3102:           return (0);
        !          3103: 
        !          3104: }
        !          3105: 
        !          3106: int
        !          3107: checksight(short i, short *daang)
        !          3108: {
        !          3109: 
        !          3110:      struct player *plr;
        !          3111:      plr = &player[pyrn];
        !          3112:      if (invisibletime > 0) {
        !          3113:           *daang = ((krand() & 512) - 256) & 2047;
        !          3114:           return (0);
        !          3115:      }
        !          3116:      if (cansee(plr->x, plr->y, plr->z, plr->sector,
        !          3117:                 sprite[i].x, sprite[i].y, sprite[i].z - (tilesizy[sprite[i].picnum] << 7), sprite[i].sectnum) == 1
        !          3118:          && invisibletime < 0) {
        !          3119: 
        !          3120:           *daang = (getangle(plr->x - sprite[i].x, plr->y - sprite[i].y) & 2047);
        !          3121: 
        !          3122:           if (((sprite[i].ang + 2048 - *daang) & 2047) < 1024)
        !          3123:                sprite[i].ang = ((sprite[i].ang + 2048 - (synctics << 1)) & 2047);
        !          3124:           else
        !          3125:                sprite[i].ang = ((sprite[i].ang + (synctics << 1)) & 2047);
        !          3126: 
        !          3127:           return (1);
        !          3128:      }
        !          3129:      else {
        !          3130:           daang = 0;
        !          3131:      }
        !          3132: 
        !          3133:      return (0);
        !          3134: }
        !          3135: 
        !          3136: void
        !          3137: checkmove(short i, short *movestat)
        !          3138: {
        !          3139: 
        !          3140:      struct player *plr;
        !          3141:      spritetype *spr;
        !          3142: 
        !          3143:      plr = &player[pyrn];
        !          3144:      spr = &sprite[i];
        !          3145: 
        !          3146:      //*movestat=actormovesprite((short)i);
        !          3147: 
        !          3148:      *movestat = movesprite((short) i,
        !          3149:                  (((long) sintable[(spr->ang + 512) & 2047]) * synctics) << 3,
        !          3150:                             (((long) sintable[spr->ang]) * synctics) << 3,
        !          3151:                             0L,
        !          3152:                             4L << 8,
        !          3153:                             4L << 8,
        !          3154:                             2);
        !          3155: 
        !          3156: 
        !          3157: 
        !          3158:      if (*movestat != 0) {
        !          3159:           if (krand() & 1 == 0) {
        !          3160:                spr->ang = (getangle(plr->x - spr->x, plr->y - spr->y) & 2047);
        !          3161:           }
        !          3162:           else
        !          3163:                spr->ang = ((spr->ang + (synctics)) & 2047);
        !          3164:      }
        !          3165: 
        !          3166: 
        !          3167: }
        !          3168: 
        !          3169: extern
        !          3170: int  droptheshield;
        !          3171: 
        !          3172: void
        !          3173: shieldhit(int hp)
        !          3174: {
        !          3175:      shieldpoints -= hp;
        !          3176:      if (shieldpoints <= 0) {
        !          3177:           strcpy(displaybuf, "Shield useless");
        !          3178:           displaytime = 360;
        !          3179:      }
        !          3180: }
        !          3181: 
        !          3182: void
        !          3183: attack(short i)
        !          3184: {
        !          3185: 
        !          3186:      struct player *plr;
        !          3187:      int  a=0,k,s=0;
        !          3188: 
        !          3189: 
        !          3190:      plr = &player[pyrn];
        !          3191: 
        !          3192:      if (invincibletime > 0)
        !          3193:           return;
        !          3194: 
        !          3195:      if (plr->treasure[6] == 1 && krand() & 32 > 16)
        !          3196:           return;
        !          3197: 
        !          3198:      if (krand() & 15 < plr->armortype + 10)
        !          3199:           return;
        !          3200: 
        !          3201:      if (droptheshield == 0 && shieldpoints > 0 && selectedgun < 5) {
        !          3202:           a = getangle(sprite[i].x - plr->x, sprite[i].y - plr->y);
        !          3203:           if ((a < plr->ang && plr->ang - a < 128) ||
        !          3204:               (a > plr->ang && ((plr->ang + a) & 2047) < 128)) {
        !          3205:                if (krand() % 100 > 80) {
        !          3206:                     playsound_loc(S_SWORD1 + rand() % 3, plr->x, plr->y);
        !          3207:                     return;
        !          3208:                }
        !          3209:                else {
        !          3210:                     s = krand() % 50;
        !          3211:                     shieldhit(-s);
        !          3212:                     if (krand() % 100 > 50) {
        !          3213:                          playsound_loc(S_SWORD1 + rand() % 3, plr->x, plr->y);
        !          3214:                          return;
        !          3215:                     }
        !          3216:                }
        !          3217:           }
        !          3218:      }
        !          3219: 
        !          3220: #if 0
        !          3221:      k = krand() % 100;
        !          3222:      if (k > (plr->armortype << 3))
        !          3223:           k = 15;
        !          3224:      else
        !          3225:           k = 5;
        !          3226: #endif
        !          3227:      switch (sprite[i].picnum) {
        !          3228:      case FISH:
        !          3229:      case RAT:
        !          3230:           break;
        !          3231:      case SKELETONATTACK:          // damage 5 - 10
        !          3232:           playsound_loc(S_RIP1 + (rand() % 3), sprite[i].x, sprite[i].y);
        !          3233:           if (rand() % 2) {
        !          3234:                playsound_loc(S_GORE1 + (rand() % 4), sprite[i].x, sprite[i].y);
        !          3235:           }
        !          3236:           if (rand() % 2) {
        !          3237:                playsound_loc(S_BREATH1 + (rand() % 6), sprite[i].x, sprite[i].y);
        !          3238:           }
        !          3239:           k = (krand() % 5) + 5;
        !          3240:           break;
        !          3241:      case KATIE:                   // damage 5 - 50
        !          3242:      case KATIEAT:
        !          3243:           playsound_loc(S_DEMONTHROW, sprite[i].x, sprite[i].y);
        !          3244:           k = (krand() % 45) + 5;
        !          3245:           break;
        !          3246:      case DEVIL:                   // damage fireball 5 - 25
        !          3247:      case DEVILATTACK:
        !          3248:           playsound_loc(S_DEMONTHROW, sprite[i].x, sprite[i].y);
        !          3249:           break;
        !          3250:      case KOBOLDATTACK:            // damage 5 - 10
        !          3251:           playsound_loc(S_GENSWING, sprite[i].x, sprite[i].y);
        !          3252:           if (rand() % 10 > 4) {
        !          3253:                playsound_loc(S_KOBOLDHIT, plr->x, plr->y);
        !          3254:                playsound_loc(S_BREATH1 + (rand() % 6), plr->x, plr->y);
        !          3255:           }
        !          3256:           k = (krand() % 5) + 5;
        !          3257:           break;
        !          3258:      case IMPATTACK:               // damage 5 - 10
        !          3259:           playsound_loc(S_RIP1 + (rand() % 3), sprite[i].x, sprite[i].y);
        !          3260:           if (rand() % 2) {
        !          3261:                playsound_loc(S_GORE1 + (rand() % 4), sprite[i].x, sprite[i].y);
        !          3262:           }
        !          3263:           if (rand() % 2) {
        !          3264:                playsound_loc(S_BREATH1 + (rand() % 6), sprite[i].x, sprite[i].y);
        !          3265:           }
        !          3266: 
        !          3267:           k = (krand() % 5) + 5;
        !          3268:           if (k > 8) {
        !          3269:                poisoned = 1;
        !          3270:           }
        !          3271:           break;
        !          3272: 
        !          3273:      case NEWGUYMACE:              // damage 5 - 20
        !          3274:           playsound_loc(S_PLRWEAPON2,sprite[i].x,sprite[i].y);
        !          3275:           if (rand()%10 > 4) {
        !          3276:                playsound_loc(S_KOBOLDHIT,plr->x,plr->y);
        !          3277:                playsound_loc(S_BREATH1+(rand()%6),plr->x,plr->y);
        !          3278:           }
        !          3279:           k = (krand() % 15) + 5;
        !          3280:           break;
        !          3281:      case NEWGUYPUNCH:             // damage 1 - 5
        !          3282:      case KURTPUNCH:
        !          3283:           playsound_loc(S_GENSWING,sprite[i].x,sprite[i].y);
        !          3284:           if (rand()%10 > 4) {
        !          3285:                playsound_loc(S_SOCK1+(rand()%4),plr->x,plr->y);
        !          3286:                playsound_loc(S_BREATH1+(rand()%6),plr->x,plr->y);
        !          3287:           }
        !          3288:           k = (krand() % 4) + 1;
        !          3289:           break;
        !          3290:      case KURTAT:                  // damage 5 - 15
        !          3291:           playsound_loc(S_GENSWING, sprite[i].x, sprite[i].y);
        !          3292:           if (rand() % 10 > 3) {
        !          3293:                playsound_loc(S_SWORD1 + (rand() % 6), sprite[i].x, sprite[i].y);
        !          3294:           }
        !          3295:           k = (krand() % 10) + 5;
        !          3296:           break;
        !          3297:      case GONZOCSWAT:              // damage 5- 20
        !          3298:      case GONZOGSWAT:
        !          3299:           playsound_loc(S_GENSWING, sprite[i].x, sprite[i].y);
        !          3300:           if (rand() % 10 > 6) {
        !          3301:                playsound_loc(S_SWORD1 + (rand() % 6), sprite[i].x, sprite[i].y);
        !          3302:           }
        !          3303:           k = (krand() % 15) + 5;
        !          3304:           break;
        !          3305: 
        !          3306:      case GONZOGHMAT:              // damage 5- 15
        !          3307:           playsound_loc(S_GENSWING, sprite[i].x, sprite[i].y);
        !          3308:           if (rand() % 10 > 6) {
        !          3309:                playsound_loc(S_SWORD1 + (rand() % 6), sprite[i].x, sprite[i].y);
        !          3310:           }
        !          3311:           k = (krand() % 10) + 5;
        !          3312:           break;
        !          3313: 
        !          3314:      case GONZOGSHAT:              // damage 5 - 20
        !          3315:           playsound_loc(S_GENSWING, sprite[i].x, sprite[i].y);
        !          3316:           if (rand() % 10 > 3) {
        !          3317:                playsound_loc(S_SWORD1 + (rand() % 6), sprite[i].x, sprite[i].y);
        !          3318:           }
        !          3319:           k = (krand() % 15) + 5;
        !          3320:           break;
        !          3321: 
        !          3322:      case GRONSWATTACK:            // damage 5 - 25
        !          3323:           k = (krand() % 20) + 5;
        !          3324:           if (sprite[i].shade > 30) {
        !          3325:                k += krand() % 10;
        !          3326:           }
        !          3327:           playsound_loc(S_GENSWING, sprite[i].x, sprite[i].y);
        !          3328:           if (rand() % 10 > 3) {
        !          3329:                playsound_loc(S_SWORD1 + (rand() % 6), sprite[i].x, sprite[i].y);
        !          3330:           }
        !          3331:           break;
        !          3332: 
        !          3333:      case MINOTAURATTACK:          // damage 5 - 30
        !          3334:           playsound_loc(S_GENSWING, sprite[i].x, sprite[i].y);
        !          3335:           if (rand() % 10 > 4) {
        !          3336:                playsound_loc(S_SWORD1 + (rand() % 6), sprite[i].x, sprite[i].y);
        !          3337:           }
        !          3338:           k = (krand() % 25) + 5;
        !          3339:           break;
        !          3340:      }
        !          3341: 
        !          3342:      if (shieldpoints > 0) {
        !          3343:           if (s > k) {
        !          3344:                k = 0;
        !          3345:           }
        !          3346:           else {
        !          3347:                k -= s;
        !          3348:           }
        !          3349:      }
        !          3350: 
        !          3351:      switch (plr->armortype) {
        !          3352:      case 0:                       // none
        !          3353:           healthpic(-k);
        !          3354:           break;
        !          3355:      case 1:                       // leather
        !          3356:           a = krand() % 5;
        !          3357:           if (a > k) {
        !          3358:                k = 0;
        !          3359:           }
        !          3360:           else {
        !          3361:                k -= a;
        !          3362:           }
        !          3363:           armorpic(-a);
        !          3364:           healthpic(-k);
        !          3365:           break;
        !          3366:      case 2:                       // chain
        !          3367:           a = krand() % 10;
        !          3368:           if (a > k) {
        !          3369:                k = 0;
        !          3370:           }
        !          3371:           else {
        !          3372:                k -= a;
        !          3373:           }
        !          3374:           armorpic(-a);
        !          3375:           healthpic(-k);
        !          3376:           break;
        !          3377:      case 3:                       // plate
        !          3378:           a = krand() % 20;
        !          3379:           if (a > k) {
        !          3380:                k = 0;
        !          3381:           }
        !          3382:           else {
        !          3383:                k -= a;
        !          3384:           }
        !          3385:           armorpic(-a);
        !          3386:           healthpic(-k);
        !          3387:           break;
        !          3388:      }
        !          3389: 
        !          3390:      startredflash(k);
        !          3391: 
        !          3392: #if 0
        !          3393:      if (rand() % 100 > 50) {
        !          3394:           svel += (rand() % k) << 3;
        !          3395:           angvel += (rand() % k) << 3;
        !          3396:      }
        !          3397:      else {
        !          3398:           svel -= (rand() % k) << 3;
        !          3399:           angvel += (rand() % k) << 3;
        !          3400:      }
        !          3401: #endif
        !          3402: 
        !          3403:      if (k == 0)
        !          3404:           k = 1;
        !          3405: 
        !          3406:      k = rand() % k;
        !          3407:      angvel += k << 3;
        !          3408:      svel += k << 3;
        !          3409:      vel -= k << 3;
        !          3410:      plr->hvel += k << 2;
        !          3411: 
        !          3412: #if 0
        !          3413:      if (plr->health < 21) {
        !          3414:           strcpy(displaybuf, "health critical");
        !          3415:           displaytime = 30;
        !          3416:      }
        !          3417: #endif
        !          3418: 
        !          3419: }
        !          3420: 
        !          3421: 
        !          3422: 
        !          3423: 
        !          3424: void
        !          3425: fireballblast(short i)
        !          3426: {
        !          3427: 
        !          3428:      long j;
        !          3429:      int  k;
        !          3430:      spritetype *spr;
        !          3431:      spritetype *tspr;
        !          3432: 
        !          3433:      spr = &sprite[i];
        !          3434: 
        !          3435:      for (k = 0; k < 8; k++) {
        !          3436: 
        !          3437:           j = insertsprite(spr->sectnum, FX);
        !          3438:           tspr = &sprite[j];
        !          3439: 
        !          3440:           tspr->x = spr->x;
        !          3441:           tspr->y = spr->y;
        !          3442:           tspr->z = spr->z;
        !          3443: 
        !          3444:           tspr->cstat = 2;
        !          3445:           // tspr->picnum=FIREBALL;
        !          3446:           tspr->picnum = FATSPANK;
        !          3447:           tspr->shade = 0;
        !          3448: 
        !          3449:           tspr->xrepeat = 8;
        !          3450:           tspr->yrepeat = 8;
        !          3451:           tspr->ang = k << 8;
        !          3452:           tspr->xvel = ((krand() & 511) - 256) << 3;
        !          3453:           tspr->yvel = ((krand() & 511) - 256) << 3;
        !          3454:           tspr->zvel = ((krand() & 511) - 256) << 3;
        !          3455: 
        !          3456:           tspr->owner = spr->owner;
        !          3457:           tspr->lotag = 196;
        !          3458:           tspr->hitag = 0;
        !          3459: 
        !          3460:      }
        !          3461: 
        !          3462: }
        !          3463: 
        !          3464: void
        !          3465: makeafire(short i, int firetype)
        !          3466: {
        !          3467:      long j;
        !          3468:      spritetype *spr,
        !          3469:          *tspr;
        !          3470: 
        !          3471:      spr = &sprite[i];
        !          3472: 
        !          3473:      j = insertsprite(spr->sectnum, FIRE);
        !          3474:      tspr = &sprite[j];
        !          3475: 
        !          3476:      tspr->x = spr->x + (rand() & 1024) - 512;
        !          3477:      tspr->y = spr->y + (rand() & 1024) - 512;
        !          3478:      tspr->z = spr->z;
        !          3479:      tspr->cstat = 0;
        !          3480:      tspr->xrepeat = 64;
        !          3481:      tspr->yrepeat = 64;
        !          3482:      tspr->shade = 0;
        !          3483:      tspr->clipdist = 64;
        !          3484:      tspr->owner = spr->owner;
        !          3485:      tspr->lotag = 2047;
        !          3486:      tspr->hitag = 0;
        !          3487: 
        !          3488:      changespritestat(j, FIRE);
        !          3489: 
        !          3490: }
        !          3491: 
        !          3492: void
        !          3493: explosion(short i, long x, long y, long z, short owner)
        !          3494: {
        !          3495:      long j;
        !          3496:      spritetype *spr,
        !          3497:          *tspr;
        !          3498: 
        !          3499:      spr = &sprite[i];
        !          3500:      j = insertsprite(spr->sectnum, EXPLO);
        !          3501:      tspr = &sprite[j];
        !          3502: 
        !          3503:      tspr->x = x;
        !          3504:      tspr->y = y;
        !          3505:      tspr->z = z + (16 << 8);
        !          3506:      tspr->cstat = 0;
        !          3507:      tspr->cstat &= ~3;
        !          3508:      tspr->picnum = EXPLOSTART;
        !          3509:      tspr->shade = -15;
        !          3510:      tspr->xrepeat = 64;
        !          3511:      tspr->yrepeat = 64;
        !          3512:      tspr->ang = krand() & 2047;
        !          3513:      tspr->xvel = ((krand() & 511) - 256);
        !          3514:      tspr->yvel = ((krand() & 511) - 256);
        !          3515:      tspr->zvel = ((krand() & 511) - 256);
        !          3516:      tspr->owner = owner;
        !          3517:      tspr->lotag = 12;
        !          3518:      tspr->hitag = 0;
        !          3519:      tspr->pal = 0;
        !          3520: 
        !          3521: }
        !          3522: 
        !          3523: void
        !          3524: explosion2(short i, long x, long y, long z, short owner)
        !          3525: {
        !          3526:      long j;
        !          3527:      spritetype *spr,
        !          3528:          *tspr;
        !          3529: 
        !          3530:      spr = &sprite[i];
        !          3531: 
        !          3532:      j = insertsprite(spr->sectnum, EXPLO);
        !          3533:      tspr = &sprite[j];
        !          3534: 
        !          3535:      tspr->x = x;
        !          3536:      tspr->y = y;
        !          3537:      tspr->z = z + (16 << 8);
        !          3538:      tspr->cstat = 0;
        !          3539:      tspr->cstat &= ~3;
        !          3540:      tspr->picnum = EXPLOSTART;
        !          3541:      tspr->shade = -25;
        !          3542:      tspr->xrepeat = 64;
        !          3543:      tspr->yrepeat = 64;
        !          3544:      tspr->ang = krand() & 2047;
        !          3545:      tspr->xvel = ((krand() & 256) - 128);
        !          3546:      tspr->yvel = ((krand() & 256) - 128);
        !          3547:      tspr->zvel = ((krand() & 256) - 128);
        !          3548:      tspr->owner = spr->owner;
        !          3549:      tspr->lotag = 12;
        !          3550:      tspr->hitag = 0;
        !          3551:      tspr->pal = 0;
        !          3552: 
        !          3553: }
        !          3554: 
        !          3555: 
        !          3556: void
        !          3557: trailingsmoke(short i, short ball)
        !          3558: {
        !          3559:      long j;
        !          3560:      spritetype *spr,
        !          3561:          *tspr;
        !          3562: 
        !          3563:      spr = &sprite[i];
        !          3564: 
        !          3565:      j = insertsprite(spr->sectnum, SMOKE);
        !          3566:      tspr = &sprite[j];
        !          3567: 
        !          3568:      tspr->x = spr->x;
        !          3569:      tspr->y = spr->y;
        !          3570:      tspr->z = spr->z;
        !          3571:      tspr->cstat = 0x03;
        !          3572:      tspr->cstat &= ~3;
        !          3573:      tspr->picnum = SMOKEFX;
        !          3574:      tspr->shade = 0;
        !          3575:      if (ball == 1) {
        !          3576:           tspr->xrepeat = 128;
        !          3577:           tspr->yrepeat = 128;
        !          3578:      }
        !          3579:      else {
        !          3580:           tspr->xrepeat = 32;
        !          3581:           tspr->yrepeat = 32;
        !          3582:      }
        !          3583:      tspr->pal = 0;
        !          3584: 
        !          3585:      tspr->owner = spr->owner;
        !          3586:      tspr->lotag = 256;
        !          3587:      tspr->hitag = 0;
        !          3588: 
        !          3589: }
        !          3590: 
        !          3591: void
        !          3592: icecubes(short i, long x, long y, long z, short owner)
        !          3593: {
        !          3594:      long j;
        !          3595:      spritetype *spr,
        !          3596:          *tspr;
        !          3597: 
        !          3598:      spr = &sprite[i];
        !          3599: 
        !          3600:      j = insertsprite(spr->sectnum, FX);
        !          3601:      tspr = &sprite[j];
        !          3602: 
        !          3603:      tspr->x = x;
        !          3604:      tspr->y = y;
        !          3605:      tspr->z = sector[spr->sectnum].floorz - (PLAYERHEIGHT << 8) + (rand() & 4096);
        !          3606:      tspr->cstat = 0;
        !          3607:      tspr->picnum = ICECUBE;
        !          3608:      tspr->shade = -16;
        !          3609:      tspr->xrepeat = 16;
        !          3610:      tspr->yrepeat = 16;
        !          3611:      tspr->ang = ((rand() & 1023) - 1024) & 2047;
        !          3612:      tspr->xvel = ((rand() & 1023) - 512);
        !          3613:      tspr->yvel = ((rand() & 1023) - 512);
        !          3614:      tspr->zvel = ((rand() & 1023) - 512);
        !          3615:      tspr->pal = 6;
        !          3616:      tspr->owner = spr->owner;
        !          3617:      tspr->lotag = 2048;
        !          3618:      tspr->hitag = 0;
        !          3619: 
        !          3620: }
        !          3621: 
        !          3622: 
        !          3623: int
        !          3624: damageactor(short hitobject, short i)
        !          3625: {
        !          3626:      short osectnum,
        !          3627:           hitdamage,
        !          3628:           j,
        !          3629:           k;
        !          3630:      long nexti,
        !          3631:           dax,
        !          3632:           day,
        !          3633:           daz;
        !          3634:      short daang,
        !          3635:           movestat;
        !          3636:      struct player *plr;
        !          3637:      int  incr;
        !          3638:      spritetype *spr,
        !          3639:          *tspr;
        !          3640: 
        !          3641:      plr = &player[pyrn];
        !          3642:      spr = &sprite[i];
        !          3643: 
        !          3644:      j = (hitobject & 4095);
        !          3645:      tspr = &sprite[j];
        !          3646: 
        !          3647:      // if (tspr->owner == 4096) {
        !          3648:      // return(0);
        !          3649:      // }
        !          3650: 
        !          3651:      if (j == plr->spritenum && spr->owner == 4096) {
        !          3652:           return (0);
        !          3653:      }
        !          3654: 
        !          3655: //    if (j == plr->spritenum && spr->owner != 4096) {
        !          3656:      if (spr->owner != 4096) {
        !          3657:           if (invincibletime <= 0 || manatime <= 0) {
        !          3658:                if ((krand() & 9) == 0) {
        !          3659:                     playsound_loc(S_PLRPAIN1 + (rand() % 2), sprite[i].x, sprite[i].y);
        !          3660:                }
        !          3661:                if (manatime > 0 && spr->picnum != FATSPANK && spr->picnum != PLASMA) {
        !          3662:                     deletesprite((short) i);
        !          3663:                }
        !          3664:                else {
        !          3665:                     if (spr->picnum == DART) {
        !          3666:                          poisoned = 1;
        !          3667:                          poisontime = 7200;
        !          3668:                          strcpy(displaybuf, "Poisoned");
        !          3669:                          displaytime = 360;
        !          3670:                     }
        !          3671:                     if (netgame) {
        !          3672:                          netdamageactor(j, i);
        !          3673:                     }
        !          3674:                     else {
        !          3675:                          if (spr->picnum == PLASMA) {
        !          3676:                               healthpic(-((krand() & 15) + 15));
        !          3677:                               vel -= (rand() % 20);
        !          3678:                          }
        !          3679:                          else if (spr->picnum == FATSPANK) {
        !          3680:                               playsound_loc(S_GORE1A + (rand() % 3), plr->x, plr->y);
        !          3681:                               healthpic(-((krand() & 10) + 10));
        !          3682:                               if (rand() % 100 > 90) {
        !          3683:                                    poisoned = 1;
        !          3684:                                    poisontime = 7200;
        !          3685:                                    strcpy(displaybuf, "Poisoned");
        !          3686:                                    displaytime = 360;
        !          3687:                               }
        !          3688:                          }
        !          3689:                          else if (spr->picnum == THROWPIKE) {
        !          3690:                               healthpic(-((krand() % 10) + 5));
        !          3691:                          }
        !          3692:                          else {
        !          3693:                               healthpic(-((krand() % 20) + 5));
        !          3694:                          }
        !          3695:                     }
        !          3696:                     startredflash(10);
        !          3697:                }
        !          3698:           }
        !          3699:      }
        !          3700:      if (j != plr->spritenum && netgame == 0) {   // Les 08/11/95
        !          3701:           if (spr->owner != j) {
        !          3702:                switch (tspr->picnum) {
        !          3703:                case BARREL:
        !          3704:                case VASEA:
        !          3705:                case VASEB:
        !          3706:                case VASEC:
        !          3707:                case STAINGLASS1:
        !          3708:                case STAINGLASS2:
        !          3709:                case STAINGLASS3:
        !          3710:                case STAINGLASS4:
        !          3711:                case STAINGLASS5:
        !          3712:                case STAINGLASS6:
        !          3713:                case STAINGLASS7:
        !          3714:                case STAINGLASS8:
        !          3715:                case STAINGLASS9:
        !          3716:                     if (tspr->hitag == 0) {
        !          3717:                          tspr->hitag = 0;
        !          3718:                          tspr->lotag = 0;
        !          3719:                          newstatus(j, BROKENVASE);
        !          3720:                     }
        !          3721:                     break;
        !          3722: 
        !          3723: 
        !          3724:                case NEWGUY:
        !          3725:                case NEWGUYSTAND:
        !          3726:                case NEWGUYKNEE:
        !          3727:                case NEWGUYMACE:
        !          3728:                case NEWGUYCAST:
        !          3729:                case NEWGUYPUNCH:
        !          3730:                case NEWGUYBOW:
        !          3731: 
        !          3732:                case KURTSTAND:
        !          3733:                case KURTKNEE:
        !          3734:                case KURTAT:
        !          3735:                case KURTPUNCH:
        !          3736:                case KURTREADY:
        !          3737:                case GONZOCSW:
        !          3738:                case GONZOCSWAT:
        !          3739: 
        !          3740:                case GONZOGSW:
        !          3741:                case GONZOGSWAT:
        !          3742:                case GONZOGHM:
        !          3743:                case GONZOGHMAT:
        !          3744:                case GONZOGSH:
        !          3745:                case GONZOGSHAT:
        !          3746: 
        !          3747:                case GRONHAL:
        !          3748:                case GRONHALATTACK:
        !          3749:                case GRONMU:
        !          3750:                case GRONMUATTACK:
        !          3751:                case GRONSW:
        !          3752:                case GRONSWATTACK:
        !          3753:                case KOBOLD:
        !          3754:                case KOBOLDATTACK:
        !          3755:                case KATIE:
        !          3756:                case KATIEAT:
        !          3757:                case DEVIL:
        !          3758:                case DEVILATTACK:
        !          3759:                case IMP:
        !          3760:                case IMPATTACK:
        !          3761:                case MINOTAUR:
        !          3762:                case MINOTAURATTACK:
        !          3763:                case SKELETON:
        !          3764:                case SKELETONATTACK:
        !          3765:                     switch (spr->picnum) {
        !          3766:                     case PLASMA:
        !          3767:                          tspr->hitag -= 40;
        !          3768:                          break;
        !          3769:                     case FATSPANK:
        !          3770:                          tspr->hitag -= 10;
        !          3771:                          break;
        !          3772:                     case MONSTERBALL:
        !          3773:                          tspr->hitag -= 40;
        !          3774:                          break;
        !          3775:                          // case FIREBALL:
        !          3776:                          // tspr->hitag-=3;
        !          3777:                          // break;
        !          3778:                     case BULLET:
        !          3779:                          tspr->hitag -= 10;
        !          3780:                          break;
        !          3781:                     case DISTORTIONBLAST:
        !          3782:                          tspr->hitag = 10;
        !          3783:                          break;
        !          3784:                     case DART:
        !          3785:                     case WALLARROW:
        !          3786:                     case HORIZSPIKEBLADE:
        !          3787:                     case THROWHALBERD:
        !          3788:                          tspr->hitag -= 30;
        !          3789:                          break;
        !          3790:                     case THROWPIKE:
        !          3791:                          if (rand() % 2) {
        !          3792:                               playsound_loc(S_GORE1A + rand() % 2, sprite[i].x, sprite[i].y);
        !          3793:                          }
        !          3794:                          tspr->hitag -= 30;
        !          3795:                          break;
        !          3796:                     case BARREL:
        !          3797:                          tspr->hitag -= 100;
        !          3798:                          break;
        !          3799:                     }
        !          3800:                     if (tspr->hitag <= 0) {
        !          3801:                          newstatus(j, DIE);
        !          3802:                          deletesprite((short) i);
        !          3803:                          return (1);
        !          3804:                     }
        !          3805:                     else {
        !          3806:                          newstatus(j, PAIN);
        !          3807:                          return (1);
        !          3808:                     }
        !          3809:                     break;
        !          3810: 
        !          3811:                case GONZOBSHPAIN:
        !          3812:                case GONZOCSWPAIN:
        !          3813:                case GONZOGSWPAIN:
        !          3814:                case GONZOGHMPAIN:
        !          3815:                case GONZOGSHPAIN:
        !          3816:                case NEWGUYPAIN:
        !          3817:                case GRONHALPAIN:
        !          3818:                case GRONMUPAIN:
        !          3819:                case GRONSWPAIN:
        !          3820:                case KOBOLDDIE:
        !          3821:                case KATIEPAIN:
        !          3822:                case DEVILDIE:
        !          3823:                case IMPDIE:
        !          3824:                case MINOTAURDIE:
        !          3825:                case SKELETONDIE:
        !          3826: //JSA_NEW //why is this here it's in whplr
        !          3827: //raf because monsters could shatter a guy thats been frozen
        !          3828:                     if (tspr->pal == 6) {
        !          3829:                          for (k = 0; k < 32; k++) {
        !          3830:                               icecubes(j, tspr->x, tspr->y, tspr->z, j);
        !          3831:                          }
        !          3832:                          deletesprite((short) j);
        !          3833:                          return (1);
        !          3834:                     }
        !          3835:                default:
        !          3836:                     deletesprite((short) i);
        !          3837:                     return (1);
        !          3838:                }
        !          3839:           }
        !          3840:      }
        !          3841:      return (0);
        !          3842: }
        !          3843: 
        !          3844: void
        !          3845: nukespell(short j)
        !          3846: {
        !          3847: 
        !          3848:      long k;
        !          3849:      struct player *plr;
        !          3850: 
        !          3851:      plr = &player[pyrn];
        !          3852: 
        !          3853:      // dont nuke a shade
        !          3854:      if (sprite[j].shade > 30)
        !          3855:           return;
        !          3856: 
        !          3857:      newstatus(j, NUKED);
        !          3858:      sprite[j].pal = 0;
        !          3859:      sprite[j].cstat |= 1;
        !          3860:      sprite[j].cstat &= ~3;
        !          3861:      sprite[j].shade = 6;
        !          3862:      sprite[j].lotag = 360;
        !          3863:      sprite[j].ang = plr->ang;
        !          3864:      score(150);
        !          3865: 
        !          3866:      k = insertsprite(sprite[j].sectnum, NUKED);
        !          3867:      sprite[k].lotag = 360;
        !          3868:      sprite[k].xrepeat = 30;
        !          3869:      sprite[k].yrepeat = 12;
        !          3870:      sprite[k].picnum = ZFIRE;
        !          3871:      sprite[k].pal = 0;
        !          3872:      sprite[k].ang = sprite[j].ang;
        !          3873:      sprite[k].x = sprite[j].x;
        !          3874:      sprite[k].y = sprite[j].y;
        !          3875:      sprite[k].z = sprite[j].z;
        !          3876:      sprite[k].cstat = sprite[j].cstat;
        !          3877: 
        !          3878: }
        !          3879: 
        !          3880: void
        !          3881: medusa(short j)
        !          3882: {
        !          3883: 
        !          3884:      newstatus(j, FROZEN);
        !          3885:      switch (sprite[j].picnum) {
        !          3886: 
        !          3887:      case NEWGUY:
        !          3888:      case NEWGUYSTAND:
        !          3889:      case NEWGUYKNEE:
        !          3890:      case NEWGUYCAST:
        !          3891:      case NEWGUYBOW:
        !          3892:      case NEWGUYMACE:
        !          3893:      case NEWGUYPUNCH:
        !          3894:           sprite[j].picnum = NEWGUYPAIN;
        !          3895:           break;
        !          3896: 
        !          3897:      case KURTSTAND:
        !          3898:      case KURTKNEE:
        !          3899:      case KURTAT:
        !          3900:      case KURTPUNCH:
        !          3901:      case KURTREADY:
        !          3902: 
        !          3903:      case GONZOCSW:
        !          3904:      case GONZOCSWAT:
        !          3905:           sprite[j].picnum = GONZOCSWPAIN;
        !          3906:           break;
        !          3907: 
        !          3908:      case GONZOGSW:
        !          3909:      case GONZOGSWAT:
        !          3910:           sprite[j].picnum = GONZOGSWPAIN;
        !          3911:           break;
        !          3912: 
        !          3913:      case GONZOGHM:
        !          3914:      case GONZOGHMAT:
        !          3915:           sprite[j].picnum = GONZOGHMPAIN;
        !          3916:           break;
        !          3917: 
        !          3918:      case GONZOGSH:
        !          3919:      case GONZOGSHAT:
        !          3920:           sprite[j].picnum = GONZOGHMPAIN;
        !          3921:           break;
        !          3922: 
        !          3923:      case KOBOLD:
        !          3924:      case KOBOLDATTACK:
        !          3925:           sprite[j].picnum = KOBOLDDIE;
        !          3926:           break;
        !          3927:      case KATIE:
        !          3928:      case KATIEAT:
        !          3929:           sprite[j].picnum = KATIEPAIN;
        !          3930:           break;
        !          3931:      case DEVIL:
        !          3932:      case DEVILATTACK:
        !          3933:           sprite[j].picnum = DEVILDIE;
        !          3934:           break;
        !          3935:      case IMP:
        !          3936:      case IMPATTACK:
        !          3937:           sprite[j].picnum = IMPDIE;
        !          3938:           break;
        !          3939:      case MINOTAUR:
        !          3940:      case MINOTAURATTACK:
        !          3941:           sprite[j].picnum = MINOTAURDIE;
        !          3942:           break;
        !          3943:      case SKELETON:
        !          3944:           sprite[j].picnum = SKELETONDIE;
        !          3945:           break;
        !          3946:      case GRONHAL:
        !          3947:      case GRONHALATTACK:
        !          3948:           sprite[j].picnum = GRONHALDIE;
        !          3949:           break;
        !          3950:      case GRONMU:
        !          3951:      case GRONMUATTACK:
        !          3952:           sprite[j].picnum = GRONMUDIE;
        !          3953:           break;
        !          3954:      case GRONSW:
        !          3955:      case GRONSWATTACK:
        !          3956:           sprite[j].picnum = GRONSWDIE;
        !          3957:           break;
        !          3958:      }
        !          3959:      sprite[j].pal = 6;
        !          3960:      sprite[j].cstat |= 1;
        !          3961:      score(100);
        !          3962: 
        !          3963: }
        !          3964: 
        !          3965: 
        !          3966:  // New movesprite using getzrange.  Note that I made the getzrange
        !          3967:  // parameters global (&globhiz,&globhihit,&globloz,&globlohit) so they
        !          3968:  // don't need to be passed everywhere.  Also this should make this
        !          3969:  // movesprite function compatible with the older movesprite functions.
        !          3970: int
        !          3971: movesprite(short spritenum, long dx, long dy, long dz, long ceildist, long flordist, char cliptype)
        !          3972: {
        !          3973:      long daz,
        !          3974:           zoffs,
        !          3975:           templong;
        !          3976:      short retval,
        !          3977:           dasectnum,
        !          3978:           tempshort;
        !          3979:      spritetype *spr;
        !          3980: 
        !          3981:      spr = &sprite[spritenum];
        !          3982: 
        !          3983:      flordist = 32L;
        !          3984: 
        !          3985:      if ((spr->cstat & 128) == 0)
        !          3986:           zoffs = -((tilesizy[spr->picnum] * spr->yrepeat) << 1);
        !          3987:      else
        !          3988:           zoffs = 0;
        !          3989: 
        !          3990:      dasectnum = spr->sectnum;     // Can't modify sprite sectors directly
        !          3991:                                    // becuase of linked lists
        !          3992:      daz = spr->z + zoffs;         // Must do this if not using the new
        !          3993:                                    // centered centering (of course)
        !          3994:      retval = clipmove(&spr->x, &spr->y, &daz, &dasectnum, dx, dy,
        !          3995:                    ((long) spr->clipdist) << 2, ceildist, flordist, cliptype);
        !          3996: 
        !          3997:      if ((dasectnum != spr->sectnum) && (dasectnum >= 0))
        !          3998:           changespritesect(spritenum, dasectnum);
        !          3999: 
        !          4000:      // Set the blocking bit to 0 temporarly so getzrange doesn't pick up
        !          4001:      // its own sprite
        !          4002:      tempshort = spr->cstat;
        !          4003:      spr->cstat &= ~1;
        !          4004:      getzrange(spr->x, spr->y, spr->z - 1, spr->sectnum,
        !          4005:                &globhiz, &globhihit, &globloz, &globlohit,
        !          4006:                ((long) spr->clipdist) << 2, cliptype);
        !          4007:      spr->cstat = tempshort;
        !          4008: 
        !          4009:      daz = spr->z + zoffs + dz;
        !          4010:      if ((daz <= globhiz) || (daz > globloz)) {
        !          4011:           if (retval != 0)
        !          4012:                return (retval);
        !          4013:           return (16384 + dasectnum);
        !          4014:      }
        !          4015:      spr->z = daz - zoffs;
        !          4016:      return (retval);
        !          4017: }
        !          4018: 
        !          4019: #if 0
        !          4020:  // New movesprite using getzrange.  Note that I made the getzrange
        !          4021:  // parameters global (&globhiz,&globhihit,&globloz,&globlohit) so they
        !          4022:  // don't need to be passed everywhere.  Also this should make this
        !          4023:  // movesprite function compatible with the older movesprite functions.
        !          4024: int 
        !          4025: movesprite(short spritenum, long dx, long dy, long dz, long ceildist, long flordist, char cliptype)
        !          4026: {
        !          4027:      long daz,
        !          4028:           zoffs,
        !          4029:           templong;
        !          4030:      short retval,
        !          4031:           dasectnum,
        !          4032:           tempshort;
        !          4033:      spritetype *spr;
        !          4034: 
        !          4035:      spr = &sprite[spritenum];
        !          4036: 
        !          4037:      if ((spr->cstat & 128) == 0) {
        !          4038:           zoffs = -((tilesizy[spr->picnum] * spr->yrepeat) << 1);
        !          4039:      }
        !          4040:      else {
        !          4041:           zoffs = 0;
        !          4042:      }
        !          4043: 
        !          4044:      dasectnum = spr->sectnum;     // Can't modify sprite sectors directly
        !          4045:                                    // becuase of linked lists
        !          4046:      daz = spr->z + zoffs;         // Must do this if not using the new
        !          4047:                                    // centered centering (of course)
        !          4048:      retval = clipmove(&spr->x, &spr->y, &daz, &dasectnum, dx, dy,
        !          4049:                    ((long) spr->clipdist) << 2, ceildist, flordist, cliptype);
        !          4050: 
        !          4051:      if ((dasectnum != spr->sectnum) && (dasectnum >= 0)) {
        !          4052:           changespritesect(spritenum, dasectnum);
        !          4053:      }
        !          4054: 
        !          4055:      // Set the blocking bit to 0 temporarly so getzrange doesn't pick up
        !          4056:      // its own sprite
        !          4057:      tempshort = spr->cstat;
        !          4058:      spr->cstat &= ~1;
        !          4059:      getzrange(spr->x, spr->y, spr->z - 1, spr->sectnum,
        !          4060:                &globhiz, &globhihit, &globloz, &globlohit,
        !          4061:                ((long) spr->clipdist) << 2, cliptype);
        !          4062:      spr->cstat = tempshort;
        !          4063:      daz = spr->z + zoffs + dz;
        !          4064:      if ((daz <= globhiz) || (daz > globloz)) {
        !          4065:           if (retval != 0) {
        !          4066:                return (retval);
        !          4067:           }
        !          4068:           return (16384 + dasectnum);
        !          4069:      }
        !          4070:      spr->z = daz - zoffs;
        !          4071:      return (retval);
        !          4072: }
        !          4073: #endif
        !          4074: int
        !          4075: actormovesprite(short spritenum)
        !          4076: {
        !          4077:      long daz,
        !          4078:           zoffs,
        !          4079:           templong;
        !          4080:      short retval,
        !          4081:           dasectnum,
        !          4082:           tempshort;
        !          4083:      spritetype *spr;
        !          4084:      long dx,
        !          4085:           dy,
        !          4086:           dz;
        !          4087: 
        !          4088:      spr = &sprite[spritenum];
        !          4089: 
        !          4090:      dx = (((long) sintable[(spr->ang + 512) & 2047]) * synctics) << 3,
        !          4091:           dy = (((long) sintable[spr->ang]) * synctics) << 3,
        !          4092:           dz = 0L;
        !          4093: 
        !          4094:      if ((spr->cstat & 128) == 0) {
        !          4095:           zoffs = -((tilesizy[spr->picnum] * spr->yrepeat) << 1);
        !          4096:      }
        !          4097:      else {
        !          4098:           zoffs = 0;
        !          4099:      }
        !          4100: 
        !          4101:      dasectnum = spr->sectnum;
        !          4102:      daz = spr->z + zoffs;
        !          4103:      retval = clipmove(&spr->x, &spr->y, &daz, &dasectnum, dx, dy,
        !          4104:                        ((long) spr->clipdist) << 2, 1024L, 1024L, 2);
        !          4105: 
        !          4106:      if ((dasectnum != spr->sectnum) && (dasectnum >= 0)) {
        !          4107:           changespritesect(spritenum, dasectnum);
        !          4108:      }
        !          4109:      tempshort = spr->cstat;
        !          4110:      spr->cstat &= ~1;
        !          4111:      getzrange(spr->x, spr->y, spr->z - 1, spr->sectnum,
        !          4112:                &globhiz, &globhihit, &globloz, &globlohit,
        !          4113:                ((long) spr->clipdist) << 2, 2);
        !          4114:      spr->cstat = tempshort;
        !          4115:      daz = spr->z + zoffs;
        !          4116:      if ((daz <= globhiz) || (daz > globloz)) {
        !          4117:           if (retval != 0) {
        !          4118:                return (retval);
        !          4119:           }
        !          4120:           return (16384 + dasectnum);
        !          4121:      }
        !          4122:      spr->z = daz - zoffs;
        !          4123:      return (retval);
        !          4124: }
        !          4125: 
        !          4126: void 
        !          4127: guardianfire(short i, int k, struct player * plr)
        !          4128: {
        !          4129: 
        !          4130:      short daang,
        !          4131:           j;
        !          4132:      int  discrim;
        !          4133: 
        !          4134:      daang = (daang + (k << 2)) & 2047;
        !          4135:      j = insertsprite(sprite[i].sectnum, MISSILE);
        !          4136:      sprite[j].x = sprite[i].x;
        !          4137:      sprite[j].y = sprite[i].y;
        !          4138:      sprite[j].z = sprite[i].z + (8 << 8) + ((krand() & 10) << 8);
        !          4139:      sprite[j].cstat = 0;
        !          4140:      sprite[j].picnum = PLASMA;
        !          4141:      sprite[j].shade = -32;
        !          4142:      sprite[j].pal = 0;
        !          4143:      sprite[j].xrepeat = 16;
        !          4144:      sprite[j].yrepeat = 16;
        !          4145:      sprite[j].ang = daang;
        !          4146:      sprite[j].xvel = (sintable[(daang + 2560) & 2047] >> 5);
        !          4147:      sprite[j].yvel = (sintable[(daang + 2048) & 2047] >> 5);
        !          4148:      // sprite[j].zvel=((100-plr->horiz)<<4);
        !          4149:      discrim = ksqrt((plr->x - sprite[j].x) * (plr->x - sprite[j].x) + (plr->y - sprite[j].y) * (plr->y - sprite[j].y));
        !          4150:      if (discrim == 0)
        !          4151:           discrim = 1;
        !          4152:      sprite[j].zvel = ((plr->z + (48 << 8) - sprite[j].z) << 7) / discrim;
        !          4153: 
        !          4154:      sprite[j].owner = 4096;
        !          4155:      sprite[j].lotag = 256;
        !          4156:      sprite[j].hitag = 0;
        !          4157:      sprite[j].clipdist = 48;
        !          4158: 
        !          4159: }
        !          4160: 
        !          4161: 
        !          4162: void
        !          4163: gonzopike(short s)
        !          4164: {
        !          4165:      long j,
        !          4166:           daz;
        !          4167:      struct player *plr;
        !          4168: 
        !          4169:      plr = &player[0];
        !          4170: 
        !          4171:      j = insertsprite(sprite[s].sectnum, JAVLIN);
        !          4172: 
        !          4173:      sprite[j].x = sprite[s].x;
        !          4174:      sprite[j].y = sprite[s].y;
        !          4175:      sprite[j].z = sprite[s].z - (40<<8);
        !          4176: 
        !          4177:      sprite[j].cstat = 21;
        !          4178: 
        !          4179:      sprite[j].picnum = THROWPIKE;
        !          4180:      sprite[j].ang = ((sprite[s].ang + 2048 + 96) - 512) & 2047;
        !          4181:      sprite[j].xrepeat = 24;
        !          4182:      sprite[j].yrepeat = 24;
        !          4183:      sprite[j].clipdist = 32;
        !          4184: 
        !          4185:      sprite[j].extra = sprite[s].ang;
        !          4186:      sprite[j].shade = -15;
        !          4187:      sprite[j].xvel = ((krand() & 256) - 128);
        !          4188:      sprite[j].yvel = ((krand() & 256) - 128);
        !          4189:      // sprite[j].zvel=((krand()&256)-128);
        !          4190:      // sprite[j].zvel=((100-plr->horiz)<<4);
        !          4191: 
        !          4192:      sprite[j].zvel = ((plr->z + (8 << 8) - sprite[s].z) << 7) /
        !          4193:           ksqrt((plr->x - sprite[s].x) *
        !          4194:                 (plr->x - sprite[s].x) +
        !          4195:                 (plr->y - sprite[s].y) *
        !          4196:                 (plr->y - sprite[s].y));
        !          4197: 
        !          4198:      sprite[j].zvel += ((rand() % 256) - 128);
        !          4199: 
        !          4200:      sprite[j].owner = s;
        !          4201:      sprite[j].lotag = 1024;
        !          4202:      sprite[j].hitag = 0;
        !          4203:      sprite[j].pal = 0;
        !          4204: 
        !          4205: 
        !          4206: }
        !          4207: 
        !          4208: void
        !          4209: newguyarrow(short s)
        !          4210: {
        !          4211:      long j,
        !          4212:           daz;
        !          4213:      struct player *plr;
        !          4214: 
        !          4215:      plr = &player[0];
        !          4216: 
        !          4217:      j = insertsprite(sprite[s].sectnum, JAVLIN);
        !          4218: 
        !          4219:      sprite[j].x = sprite[s].x;
        !          4220:      sprite[j].y = sprite[s].y;
        !          4221:      sprite[j].z = sprite[s].z - (40<<8);
        !          4222: 
        !          4223:      sprite[j].cstat = 21;
        !          4224: 
        !          4225:      sprite[j].picnum = WALLARROW;
        !          4226:      sprite[j].ang = ((sprite[s].ang + 2048 + 96) - 512) & 2047;
        !          4227:      sprite[j].xrepeat = 24;
        !          4228:      sprite[j].yrepeat = 24;
        !          4229:      sprite[j].clipdist = 32;
        !          4230: 
        !          4231:      sprite[j].extra = sprite[s].ang;
        !          4232:      sprite[j].shade = -15;
        !          4233:      sprite[j].xvel = ((krand() & 256) - 128);
        !          4234:      sprite[j].yvel = ((krand() & 256) - 128);
        !          4235: 
        !          4236:      sprite[j].zvel = ((plr->z + (8 << 8) - sprite[s].z) << 7) /
        !          4237:           ksqrt((plr->x - sprite[s].x) *
        !          4238:                 (plr->x - sprite[s].x) +
        !          4239:                 (plr->y - sprite[s].y) *
        !          4240:                 (plr->y - sprite[s].y));
        !          4241: 
        !          4242:      sprite[j].zvel += ((rand() % 256) - 128);
        !          4243: 
        !          4244:      sprite[j].owner = s;
        !          4245:      sprite[j].lotag = 1024;
        !          4246:      sprite[j].hitag = 0;
        !          4247:      sprite[j].pal = 0;
        !          4248: 
        !          4249: 
        !          4250: }
        !          4251: 
        !          4252: void
        !          4253: trowajavlin(int s)
        !          4254: {
        !          4255: 
        !          4256:      long j;
        !          4257: 
        !          4258:      j = insertsprite(sprite[s].sectnum, JAVLIN);
        !          4259: 
        !          4260:      sprite[j].x = sprite[s].x;
        !          4261:      sprite[j].y = sprite[s].y;
        !          4262:      sprite[j].z = sprite[s].z - (40<<8);
        !          4263: 
        !          4264:      sprite[j].cstat = 21;
        !          4265: 
        !          4266:      switch (sprite[s].lotag) {
        !          4267:      case 91:
        !          4268:           sprite[j].picnum = WALLARROW;
        !          4269:           sprite[j].ang = ((sprite[s].ang + 2048) - 512) & 2047;
        !          4270:           sprite[j].xrepeat = 16;
        !          4271:           sprite[j].yrepeat = 48;
        !          4272:           sprite[j].clipdist = 24;
        !          4273:           sprite[j].owner = s;
        !          4274: 
        !          4275:           break;
        !          4276:      case 92:
        !          4277:           sprite[j].picnum = DART;
        !          4278:           sprite[j].ang = ((sprite[s].ang + 2048) - 512) & 2047;
        !          4279:           sprite[j].xrepeat = 64;
        !          4280:           sprite[j].yrepeat = 64;
        !          4281:           sprite[j].clipdist = 16;
        !          4282:           sprite[j].owner = s;
        !          4283:           break;
        !          4284:      case 93:
        !          4285:           sprite[j].picnum = HORIZSPIKEBLADE;
        !          4286:           sprite[j].ang = ((sprite[s].ang + 2048) - 512) & 2047;
        !          4287:           sprite[j].xrepeat = 16;
        !          4288:           sprite[j].yrepeat = 48;
        !          4289:           sprite[j].clipdist = 32;
        !          4290:           sprite[j].owner = s;
        !          4291: 
        !          4292:           break;
        !          4293:      case 94:
        !          4294:           sprite[j].picnum = THROWPIKE;
        !          4295:           sprite[j].ang = ((sprite[s].ang + 2048) - 512) & 2047;
        !          4296:           sprite[j].xrepeat = 24;
        !          4297:           sprite[j].yrepeat = 24;
        !          4298:           sprite[j].clipdist = 32;
        !          4299:           sprite[j].owner = s;
        !          4300: 
        !          4301:           break;
        !          4302:      }
        !          4303: 
        !          4304:      sprite[j].extra = sprite[s].ang;
        !          4305:      sprite[j].shade = -15;
        !          4306:      sprite[j].xvel = ((krand() & 256) - 128);
        !          4307:      sprite[j].yvel = ((krand() & 256) - 128);
        !          4308:      sprite[j].zvel = ((krand() & 256) - 128);
        !          4309:      // sprite[j].owner=sprite[s].owner;
        !          4310:      sprite[j].owner = 0;
        !          4311:      sprite[j].lotag = 0;
        !          4312:      sprite[j].hitag = 0;
        !          4313:      sprite[j].pal = 0;
        !          4314: 
        !          4315: }
        !          4316: 
        !          4317: void 
        !          4318: throwhalberd(int s)
        !          4319: {
        !          4320: 
        !          4321:      long j,
        !          4322:           daz;
        !          4323: 
        !          4324:      j = insertsprite(sprite[s].sectnum, JAVLIN);
        !          4325: 
        !          4326:      sprite[j].x = sprite[s].x;
        !          4327:      sprite[j].y = sprite[s].y;
        !          4328:      sprite[j].z = sprite[s].z - (40 << 8);
        !          4329: 
        !          4330:      sprite[j].cstat = 17;
        !          4331: 
        !          4332:      sprite[j].picnum = THROWHALBERD;
        !          4333:      sprite[j].ang = ((sprite[s].ang + 2048) - 512) & 2047;
        !          4334:      sprite[j].xrepeat = 8;
        !          4335:      sprite[j].yrepeat = 16;
        !          4336:      sprite[j].clipdist = 32;
        !          4337: 
        !          4338:      sprite[j].extra = sprite[s].ang;
        !          4339:      sprite[j].shade = -15;
        !          4340:      sprite[j].xvel = ((krand() & 256) - 128);
        !          4341:      sprite[j].yvel = ((krand() & 256) - 128);
        !          4342:      sprite[j].zvel = ((krand() & 256) - 128);
        !          4343:      sprite[j].owner = s;
        !          4344:      sprite[j].lotag = 0;
        !          4345:      sprite[j].hitag = 0;
        !          4346:      sprite[j].pal = 0;
        !          4347: 
        !          4348:      sprite[j].cstat = 0;
        !          4349:      daz = ((((long) sprite[j].zvel) * synctics) >> 3);
        !          4350:      movesprite((short) j,
        !          4351:           (((long) sintable[(sprite[j].extra + 512) & 2047]) * synctics) << 7,
        !          4352:                 (((long) sintable[sprite[j].extra]) * synctics) << 7,
        !          4353:                 daz, 4L << 8, 4L << 8, 1);
        !          4354:      sprite[j].cstat = 21;
        !          4355: 
        !          4356: 
        !          4357: }
        !          4358: 
        !          4359: void
        !          4360: spawnhornskull(short i)
        !          4361: {
        !          4362:      short j;
        !          4363: 
        !          4364:      j = insertsprite(sprite[i].sectnum, 0);
        !          4365:      sprite[j].x = sprite[i].x;
        !          4366:      sprite[j].y = sprite[i].y;
        !          4367:      sprite[j].z = sprite[i].z - (24 << 8);
        !          4368:      sprite[j].shade = -15;
        !          4369:      sprite[j].cstat = 0;
        !          4370:      sprite[j].cstat &= ~3;
        !          4371:      sprite[j].pal = 0;
        !          4372:      sprite[j].picnum = HORNEDSKULL;
        !          4373:      sprite[j].xrepeat = 64;
        !          4374:      sprite[j].yrepeat = 64;
        !          4375: }
        !          4376: 
        !          4377: extern
        !          4378: int  treasurescnt;
        !          4379: 
        !          4380: void
        !          4381: monsterweapon(short i)
        !          4382: {
        !          4383: 
        !          4384:      short j;
        !          4385:      int  k;
        !          4386: 
        !          4387:      if (sprite[i].shade > 20)
        !          4388:           return;
        !          4389: 
        !          4390:      switch (sprite[i].picnum) {
        !          4391:      case SKELETONDEAD:
        !          4392:      case KOBOLDDEAD:
        !          4393:           return;
        !          4394:      }
        !          4395:      if ((rand() % 100) < 75) {
        !          4396:           return;
        !          4397:      }
        !          4398:      
        !          4399:      j = insertsprite(sprite[i].sectnum, 0);
        !          4400: 
        !          4401:      sprite[j].x = sprite[i].x;
        !          4402:      sprite[j].y = sprite[i].y;
        !          4403:      sprite[j].z = sprite[i].z - (24 << 8);
        !          4404:      sprite[j].shade = -15;
        !          4405:      sprite[j].cstat = 0;
        !          4406:      sprite[j].cstat &= ~3;
        !          4407:      sprite[j].pal = 0;
        !          4408:      sprite[j].picnum = FLASKBLUE + (krand() % 4);
        !          4409: 
        !          4410:      switch (sprite[i].picnum) {
        !          4411:      case NEWGUYDEAD:
        !          4412:           sprite[j].xrepeat = 25;
        !          4413:           sprite[j].yrepeat = 20;
        !          4414:           if (sprite[j].extra < 20)
        !          4415:                sprite[j].picnum = WEAPON2;
        !          4416:           else
        !          4417:                sprite[j].picnum = QUIVER;
        !          4418: 
        !          4419:           sprite[j].pal = 0;
        !          4420:           break;
        !          4421: 
        !          4422:      case MINOTAURDEAD:
        !          4423:           sprite[j].xrepeat = 25;
        !          4424:           sprite[j].yrepeat = 20;
        !          4425:           sprite[j].picnum = WEAPON4;
        !          4426:           sprite[j].pal = 0;
        !          4427:           break;
        !          4428: 
        !          4429:      case GONZOBSHDEAD:
        !          4430:           sprite[j].picnum = GONZOBSHIELD;
        !          4431:           sprite[j].xrepeat = 12;
        !          4432:           sprite[j].yrepeat = 12;
        !          4433:           break;
        !          4434: 
        !          4435:      case GONZOCSWDEAD:
        !          4436:           if (sprite[j].extra > 10) {
        !          4437:                sprite[j].picnum = WEAPON6;
        !          4438:                sprite[j].xrepeat = 25;
        !          4439:                sprite[j].yrepeat = 20;
        !          4440:           }
        !          4441:           else if (sprite[j].extra > 0) {
        !          4442:                sprite[j].picnum = GOBWEAPON;
        !          4443:                sprite[j].xrepeat = 25;
        !          4444:                sprite[j].yrepeat = 20;
        !          4445:           }
        !          4446:           else {
        !          4447:                sprite[j].picnum = WEAPON1;
        !          4448:                sprite[j].xrepeat = 25;
        !          4449:                sprite[j].yrepeat = 20;
        !          4450:           }
        !          4451:           break;
        !          4452:      case GONZOCSHDEAD:
        !          4453:           sprite[j].picnum = GONZOCSHIELD;
        !          4454:           sprite[j].xrepeat = 12;
        !          4455:           sprite[j].yrepeat = 12;
        !          4456:           break;
        !          4457: 
        !          4458:      case GONZOGSWDEAD:
        !          4459:           sprite[j].picnum = WEAPON8;
        !          4460:           sprite[j].xrepeat = 25;
        !          4461:           sprite[j].yrepeat = 20;
        !          4462:           break;
        !          4463:      case GONZOGHMDEAD:
        !          4464:           sprite[j].picnum = PLATEARMOR;
        !          4465:           sprite[j].xrepeat = 26;
        !          4466:           sprite[j].yrepeat = 26;
        !          4467:           break;
        !          4468:      case GONZOGSHDEAD:
        !          4469:           sprite[j].picnum = GONZOGSHIELD;
        !          4470:           sprite[j].xrepeat = 12;
        !          4471:           sprite[j].yrepeat = 12;
        !          4472:           break;
        !          4473: 
        !          4474:      case GRONDEAD:
        !          4475:           if (netgame) {
        !          4476:                sprite[j].x = sprite[i].x;
        !          4477:                sprite[j].y = sprite[i].y;
        !          4478:                sprite[j].z = sprite[i].z - (24 << 8);
        !          4479:                sprite[j].shade = -15;
        !          4480:                sprite[j].cstat = 0;
        !          4481:                sprite[j].cstat &= ~3;
        !          4482:                sprite[j].xrepeat = 25;
        !          4483:                sprite[j].yrepeat = 20;
        !          4484:                k = krand() % 4;
        !          4485:                switch (k) {
        !          4486:                case 0:
        !          4487:                     sprite[j].picnum = WEAPON3;
        !          4488:                     sprite[j].xrepeat = 25;
        !          4489:                     sprite[j].yrepeat = 20;
        !          4490:                     break;
        !          4491:                case 1:
        !          4492:                     sprite[j].picnum = WEAPON5;
        !          4493:                     sprite[j].xrepeat = 25;
        !          4494:                     sprite[j].yrepeat = 20;
        !          4495:                     break;
        !          4496:                case 2:
        !          4497:                     sprite[j].picnum = WEAPON6;
        !          4498:                     sprite[j].xrepeat = 20;
        !          4499:                     sprite[j].yrepeat = 15;
        !          4500:                     break;
        !          4501:                case 3:
        !          4502:                     sprite[j].picnum = SHIELD;
        !          4503:                     sprite[j].xrepeat = 32;
        !          4504:                     sprite[j].yrepeat = 32;
        !          4505:                     break;
        !          4506:                }
        !          4507:           }
        !          4508:           else {
        !          4509:                switch (sprite[j].pal) {
        !          4510:                case 0:
        !          4511:                     sprite[j].picnum = WEAPON3;
        !          4512:                     sprite[j].xrepeat = 25;
        !          4513:                     sprite[j].yrepeat = 20;
        !          4514:                     break;
        !          4515:                case 10:
        !          4516:                     sprite[j].picnum = WEAPON5;
        !          4517:                     sprite[j].xrepeat = 25;
        !          4518:                     sprite[j].yrepeat = 20;
        !          4519:                     break;
        !          4520:                case 11:
        !          4521:                     sprite[j].picnum = WEAPON6;
        !          4522:                     sprite[j].xrepeat = 20;
        !          4523:                     sprite[j].yrepeat = 15;
        !          4524:                     break;
        !          4525:                case 12:
        !          4526:                     sprite[j].picnum = SHIELD;
        !          4527:                     sprite[j].xrepeat = 32;
        !          4528:                     sprite[j].yrepeat = 32;
        !          4529:                     break;
        !          4530:                }
        !          4531:           }
        !          4532:           sprite[j].pal = 0;
        !          4533:           break;
        !          4534:      default:
        !          4535:           treasurescnt++;
        !          4536:           break;
        !          4537:      }
        !          4538: 
        !          4539: }
        !          4540: 
        !          4541: // VAL 1-3
        !          4542: void
        !          4543: madenoise(int val, long x, long y, long z)
        !          4544: {
        !          4545: 
        !          4546:      long i,
        !          4547:           nexti;
        !          4548: 
        !          4549:      if (netgame) {
        !          4550:           return;
        !          4551:      }
        !          4552:      i = headspritestat[FACE];
        !          4553:      while (i >= 0) {
        !          4554:           nexti = nextspritestat[i];
        !          4555:           if ((labs(x - sprite[i].x) + labs(y - sprite[i].y) < (val * 4096)))
        !          4556:                newstatus(i, FINDME);
        !          4557:           i = nexti;
        !          4558:      }
        !          4559: 
        !          4560: }
        !          4561: 
        !          4562: void
        !          4563: monsternoise(short i)
        !          4564: {
        !          4565:      return;
        !          4566: 
        !          4567:      switch (sprite[i].picnum) {
        !          4568:      case KOBOLD:
        !          4569:           if (rand() % 100 > 98)
        !          4570:                playsound_loc(S_KSNARL1 + (rand() % 4), sprite[i].x, sprite[i].y);
        !          4571:           break;
        !          4572:      case IMP:
        !          4573:      case MINOTAUR:
        !          4574:      case SKELETON:
        !          4575:           break;
        !          4576:      }
        !          4577: 
        !          4578: }
        !          4579: 
        !          4580: void
        !          4581: randompotion(short i)
        !          4582: {
        !          4583: 
        !          4584:      short j;
        !          4585: 
        !          4586:      if (rand() % 100 > 20)
        !          4587:           return;
        !          4588: 
        !          4589:      j = insertsprite(sprite[i].sectnum, 0);
        !          4590: 
        !          4591:      sprite[j].x = sprite[i].x;
        !          4592:      sprite[j].y = sprite[i].y;
        !          4593:      sprite[j].z = sprite[i].z - (12 << 8);
        !          4594:      sprite[j].shade = -12;
        !          4595:      sprite[j].pal = 0;
        !          4596:      sprite[j].cstat = 0;
        !          4597:      sprite[j].cstat &= ~3;
        !          4598:      sprite[j].xrepeat = 64;
        !          4599:      sprite[j].yrepeat = 64;
        !          4600:      sprite[j].picnum = FLASKBLUE + krand() % 4;
        !          4601: 
        !          4602: }
        !          4603: 
        !          4604: 
        !          4605: void
        !          4606: spawnabaddy(short i, short monster)
        !          4607: {
        !          4608: 
        !          4609:      short j;
        !          4610: 
        !          4611:      j = insertsprite(sprite[i].sectnum, FACE);
        !          4612: 
        !          4613:      sprite[j].x = sprite[i].x + (krand() & 2048) - 1024;
        !          4614:      sprite[j].y = sprite[i].y + (krand() & 2048) - 1024;
        !          4615:      sprite[j].z = sprite[i].z;
        !          4616: 
        !          4617: 
        !          4618:      switch (monster) {
        !          4619:      case GRONSW:
        !          4620:           sprite[j].xrepeat = GRONSWXR;
        !          4621:           sprite[j].yrepeat = GRONSWYR;
        !          4622:           sprite[j].clipdist = 64;
        !          4623:           sprite[j].hitag = adjusthp(300);
        !          4624:           sprite[j].lotag = 100;
        !          4625:           sprite[j].cstat = 0;
        !          4626:           sprite[j].cstat |= 0x101;
        !          4627:           sprite[j].extra = 0;
        !          4628:           sprite[j].pal = 0;
        !          4629:           sprite[j].shade = 0;
        !          4630:           sprite[j].picnum = GRONSW;
        !          4631:           break;
        !          4632:      }
        !          4633:      setsprite((short) j, sprite[j].x, sprite[j].y, sprite[j].z);
        !          4634: 
        !          4635: }
        !          4636: 
        !          4637: 
        !          4638: 
        !          4639: void
        !          4640: spawnapentagram(short sn)
        !          4641: {
        !          4642: 
        !          4643:      short j;
        !          4644: 
        !          4645:      j = insertsprite(sprite[sn].sectnum, 0);
        !          4646: 
        !          4647:      sprite[j].x = sprite[sn].x;
        !          4648:      sprite[j].y = sprite[sn].y;
        !          4649:      sprite[j].z = sprite[sn].z - (8 << 8);
        !          4650:      sprite[j].xrepeat = sprite[j].yrepeat = 64;
        !          4651:      sprite[j].pal = 0;
        !          4652:      sprite[j].shade = -15;
        !          4653:      sprite[j].cstat = 0;
        !          4654:      sprite[j].clipdist = 64;
        !          4655:      sprite[j].lotag = 0;
        !          4656:      sprite[j].hitag = 0;
        !          4657:      sprite[j].extra = 0;
        !          4658:      sprite[j].picnum = PENTAGRAM;
        !          4659: 
        !          4660:      setsprite((short) j, sprite[j].x, sprite[j].y, sprite[j].z);
        !          4661: 
        !          4662: }
        !          4663: 
        !          4664: 
        !          4665: int
        !          4666: isvalidactor(short i)
        !          4667: {
        !          4668: 
        !          4669:      int  valid;
        !          4670: 
        !          4671:      switch (sprite[i].picnum) {
        !          4672:      case SKELETON:
        !          4673:      case KOBOLD:
        !          4674:      case IMP:
        !          4675:      case GRONHAL:
        !          4676:      case GRONMU:
        !          4677:      case GRONSW:
        !          4678:           valid = 1;
        !          4679:           break;
        !          4680:      default:
        !          4681:           valid = 0;
        !          4682:           break;
        !          4683:      }
        !          4684: 
        !          4685:      return (valid);
        !          4686: 
        !          4687: }
        !          4688: 
        !          4689: int
        !          4690: actoruse(short i)
        !          4691: {
        !          4692: 
        !          4693:      spritetype *spr;
        !          4694: 
        !          4695:      spr = &sprite[i];
        !          4696: 
        !          4697:      neartag(spr->x,
        !          4698:              spr->y,
        !          4699:              spr->z,
        !          4700:              spr->sectnum,
        !          4701:              spr->ang,
        !          4702:              &neartagsector,
        !          4703:              &neartagwall,
        !          4704:              &neartagsprite,
        !          4705:              &neartaghitdist,
        !          4706:              1024,
        !          4707:              3);
        !          4708: 
        !          4709:      if (neartagsector >= 0) {
        !          4710:           if (sector[neartagsector].hitag == 0) {
        !          4711:                if (sector[neartagsector].floorz != sector[neartagsector].ceilingz) {
        !          4712:                     operatesector(neartagsector);
        !          4713:                     return (1);
        !          4714:                }
        !          4715:           }
        !          4716:      }
        !          4717: 
        !          4718:      return (0);
        !          4719: 
        !          4720: }
        !          4721: 
        !          4722: 
        !          4723: 
        !          4724: 
        !          4725: void
        !          4726: deaddude(short sn)
        !          4727: {
        !          4728: 
        !          4729:      long j;
        !          4730: 
        !          4731:      j = insertsprite(sprite[sn].sectnum, DEAD);
        !          4732:      sprite[j].x = sprite[sn].x;
        !          4733:      sprite[j].y = sprite[sn].y;
        !          4734:      sprite[j].z = sprite[sn].z;
        !          4735:      sprite[j].cstat &= ~3;
        !          4736:      sprite[j].picnum = GONZOBSHDEAD;
        !          4737:      sprite[j].shade = 0;
        !          4738:      sprite[j].pal = 0;
        !          4739:      sprite[j].xrepeat = sprite[sn].xrepeat;
        !          4740:      sprite[j].yrepeat = sprite[sn].yrepeat;
        !          4741:      sprite[j].owner = 0;
        !          4742:      sprite[j].lotag = 0;
        !          4743:      sprite[j].hitag = 0;
        !          4744: 
        !          4745: }
        !          4746: 
        !          4747: int
        !          4748: isActor(int spritenum)
        !          4749: {
        !          4750:      switch (sprite[spritenum].picnum) {
        !          4751:      case KOBOLD:
        !          4752:      case KOBOLDATTACK:
        !          4753:      case DEVIL:
        !          4754:      case DEVILATTACK:
        !          4755:      case IMP:
        !          4756:      case IMPATTACK:
        !          4757:      case MINOTAUR:
        !          4758:      case MINOTAURATTACK:
        !          4759:      case SKELETON:
        !          4760:      case SKELETONATTACK:
        !          4761:      case GRONHAL:
        !          4762:      case GRONHALATTACK:
        !          4763:      case GRONMU:
        !          4764:      case GRONMUATTACK:
        !          4765:      case GRONSW:
        !          4766:      case GRONSWATTACK:
        !          4767:      case DEMON:
        !          4768:      case GUARDIAN:
        !          4769:      case GUARDIANATTACK:
        !          4770:      case WILLOW:
        !          4771:      case NEWGUYSTAND:
        !          4772:      case NEWGUYKNEE:
        !          4773:      case NEWGUY:
        !          4774:      case NEWGUYCAST:
        !          4775:      case NEWGUYBOW:
        !          4776:      case NEWGUYMACE:
        !          4777:      case NEWGUYPUNCH:
        !          4778:      case KURTSTAND:
        !          4779:      case KURTKNEE:
        !          4780:      case KURTAT:
        !          4781:      case KURTPUNCH:
        !          4782:      case KURTREADY:
        !          4783:      case GONZOCSW:
        !          4784:      case GONZOCSWAT:
        !          4785:      case GONZOCHMAT:
        !          4786:      case GONZOGSW:
        !          4787:      case GONZOGSWAT:
        !          4788:      case GONZOGHM:
        !          4789:      case GONZOGHMAT:
        !          4790:      case GONZOGSH:
        !          4791:      case GONZOGSHAT:
        !          4792:      case KATIE:
        !          4793:      case KATIEAT:
        !          4794:           return(1);
        !          4795:      }
        !          4796:      return(0);
        !          4797: }
        !          4798: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.