|
|
1.1 ! root 1: /*************************************************************************** ! 2: * WHPLR.C - code for player character * ! 3: * * ! 4: ***************************************************************************/ ! 5: ! 6: #include "icorp.h" ! 7: #include <memcheck.h> ! 8: ! 9: int dropshieldcnt = 0; ! 10: int droptheshield = 0; ! 11: ! 12: int enchantedsoundhandle=-1; ! 13: ! 14: extern int shieldtype; ! 15: extern short gametype; ! 16: extern int godmode; ! 17: ! 18: #define EMPTY 0 ! 19: ! 20: int spelltime; ! 21: ! 22: extern short torchpattern[]; ! 23: extern int vampiretime; ! 24: ! 25: extern int loadedgame; ! 26: extern int goreon; ! 27: extern int helmettime; ! 28: extern int scoretime; ! 29: extern int difficulty; ! 30: int lives; ! 31: int madeahit = 0; ! 32: extern int lavasnd; ! 33: extern int expgained; ! 34: ! 35: int pyrn; ! 36: int dahand = 0; ! 37: int mapon = 1; ! 38: ! 39: long neartagdist, ! 40: neartaghitdist; ! 41: ! 42: short neartagsector, ! 43: neartagsprite, ! 44: neartagwall; ! 45: ! 46: struct player player[MAXPLAYERS]; ! 47: ! 48: extern int justteleported; ! 49: extern int gameactivated; ! 50: extern long selectedgun; ! 51: extern short oldmousestatus; ! 52: extern long oldhoriz; ! 53: ! 54: extern int displaytime; ! 55: ! 56: extern int weapontimex; ! 57: extern int weapontimey; ! 58: extern int weapontilenum; ! 59: ! 60: extern int potiontilenum; ! 61: extern int shadowtime; ! 62: ! 63: extern int playerdie; ! 64: extern int frames; ! 65: extern long vel; ! 66: ! 67: int hasshot; ! 68: int orbshot; ! 69: ! 70: int weapondrop; ! 71: int weapondropgoal; ! 72: int weaponraise; ! 73: ! 74: int currweapon; ! 75: int currweapontics; ! 76: int currweaponanim; ! 77: short currweaponframe; ! 78: int currweaponfired; ! 79: int currweaponattackstyle; ! 80: int currweaponflip; ! 81: ! 82: int spellbooktics; ! 83: int spellbook; ! 84: int spellbookframe; ! 85: int spellbookflip; ! 86: ! 87: int spiketics; ! 88: int spikeframe; ! 89: int currspikeframe; ! 90: int spiked; ! 91: ! 92: ! 93: int strongtime, ! 94: invincibletime, ! 95: manatime, ! 96: invisibletime = -1, ! 97: nightglowtime; ! 98: ! 99: int arrowcnt; ! 100: ! 101: short arrowsprite[ARROWCOUNTLIMIT]; ! 102: ! 103: #define THROWPIKELIMIT 100 ! 104: ! 105: int throwpikecnt; ! 106: ! 107: short throwpikesprite[THROWPIKELIMIT]; ! 108: ! 109: #define MAXFRAMES 12 ! 110: ! 111: struct daweapons { ! 112: int daweapontics; ! 113: short daweaponframe; ! 114: long currx; ! 115: long curry; ! 116: }; ! 117: ! 118: struct daweapons spikeanimtics[5] = ! 119: {{10, DIESPIKE, 136, 145}, ! 120: {10, DIESPIKE + 1, 136, 124}, ! 121: {10, DIESPIKE + 2, 136, 100}, ! 122: {10, DIESPIKE + 3, 136, 70}, ! 123: {10, DIESPIKE + 4, 136, 50}}; ! 124: ! 125: // ! 126: struct daweapons spellbookanim[MAXNUMORBS][9] = ! 127: { ! 128: // SCARE ! 129: {{8, SPELLBOOK8, 121, 161}, {8, SPELLBOOK8 + 1, 121, 161}, ! 130: {8, SPELLBOOK8 + 2, 121, 156}, {8, SPELLBOOK8 + 3, 121, 158}, ! 131: {8, SPELLBOOK8 + 4, 121, 159}, {8, SPELLBOOK8 + 5, 121, 161}, ! 132: {8, SPELLBOOK8 + 6, 121, 160}, {8, SPELLBOOK8 + 7, 121, 161}, ! 133: {8, SPELLBOOK8 + 7, 121, 161} ! 134: }, ! 135: // NIGHT VISION ! 136: {{8, SPELLBOOK6, 121, 161}, {8, SPELLBOOK6 + 1, 121, 161}, ! 137: {8, SPELLBOOK6 + 2, 121, 156}, {8, SPELLBOOK6 + 3, 121, 158}, ! 138: {8, SPELLBOOK6 + 4, 121, 159}, {8, SPELLBOOK6 + 5, 121, 161}, ! 139: {8, SPELLBOOK6 + 6, 121, 160}, {8, SPELLBOOK6 + 7, 121, 161}, ! 140: {8, SPELLBOOK6 + 7, 121, 161} ! 141: }, ! 142: // FREEZE ! 143: {{8, SPELLBOOK3, 121, 161}, {8, SPELLBOOK3 + 1, 121, 161}, ! 144: {8, SPELLBOOK3 + 2, 121, 156}, {8, SPELLBOOK3 + 3, 121, 158}, ! 145: {8, SPELLBOOK3 + 4, 121, 159}, {8, SPELLBOOK3 + 5, 120, 161}, ! 146: {8, SPELLBOOK3 + 6, 120, 160}, {8, SPELLBOOK3 + 7, 120, 161}, ! 147: {8, SPELLBOOK3 + 7, 121, 161} ! 148: }, ! 149: // MAGIC ARROW ! 150: {{8, SPELLBOOKBLANK, 121, 161}, {8, SPELLBOOKBLANK + 1, 121, 161}, ! 151: {8, SPELLBOOKBLANK + 2, 121, 156}, {8, SPELLBOOKBLANK + 3, 121, 158}, ! 152: {8, SPELLBOOKBLANK + 4, 121, 159}, {8, SPELLBOOKBLANK + 5, 121, 161}, ! 153: {8, SPELLBOOKBLANK + 6, 120, 160}, {8, SPELLBOOKBLANK + 7, 121, 161}, ! 154: {8, SPELLBOOKBLANK + 7, 122, 161} ! 155: }, ! 156: // OPEN DOORS ! 157: {{8, SPELLBOOK7, 121, 161}, {8, SPELLBOOK7 + 1, 121, 161}, ! 158: {8, SPELLBOOK7 + 2, 121, 156}, {8, SPELLBOOK7 + 3, 121, 158}, ! 159: {8, SPELLBOOK7 + 4, 121, 159}, {8, SPELLBOOK7 + 5, 121, 161}, ! 160: {8, SPELLBOOK7 + 6, 121, 160}, {8, SPELLBOOK7 + 7, 121, 161}, ! 161: {8, SPELLBOOK7 + 7, 121, 161} ! 162: }, ! 163: // FLY ! 164: {{8, SPELLBOOK2, 121, 161}, {8, SPELLBOOK2 + 1, 121, 161}, ! 165: {8, SPELLBOOK2 + 2, 121, 156}, {8, SPELLBOOK2 + 3, 121, 158}, ! 166: {8, SPELLBOOK2 + 4, 121, 159}, {8, SPELLBOOK2 + 5, 121, 161}, ! 167: {8, SPELLBOOK2 + 6, 121, 160}, {8, SPELLBOOK2 + 7, 121, 161}, ! 168: {8, SPELLBOOK2 + 7, 121, 161} ! 169: }, ! 170: // FIRE BALL ! 171: {{8, SPELLBOOK4, 121, 161}, {8, SPELLBOOK4 + 1, 121, 161}, ! 172: {8, SPELLBOOK4 + 2, 121, 156}, {8, SPELLBOOK4 + 3, 121, 158}, ! 173: {8, SPELLBOOK4 + 4, 121, 159}, {8, SPELLBOOK4 + 5, 121, 161}, ! 174: {8, SPELLBOOK4 + 6, 121, 160}, {8, SPELLBOOK4 + 7, 121, 161}, ! 175: {8, SPELLBOOK4 + 7, 121, 161} ! 176: }, ! 177: // NUKE! ! 178: {{8, SPELLBOOK5, 121, 161}, {8, SPELLBOOK5 + 1, 121, 161}, ! 179: {8, SPELLBOOK5 + 2, 121, 156}, {8, SPELLBOOK5 + 3, 121, 158}, ! 180: {8, SPELLBOOK5 + 4, 121, 159}, {8, SPELLBOOK5 + 5, 121, 161}, ! 181: {8, SPELLBOOK5 + 6, 121, 160}, {8, SPELLBOOK5 + 7, 121, 161}, ! 182: {8, SPELLBOOK5 + 7, 121, 161} ! 183: } ! 184: ! 185: }; ! 186: ! 187: struct daweapons sspellbookanim[MAXNUMORBS][9] = ! 188: { ! 189: // SCARE ! 190: {{8, SSPELLBOOK8, 121, 389}, {8, SSPELLBOOK8 + 1, 121, 377}, ! 191: {8, SSPELLBOOK8 + 2, 121, 383}, {8, SSPELLBOOK8 + 3, 121, 385}, ! 192: {8, SSPELLBOOK8 + 4, 121, 389}, {8, SSPELLBOOK8 + 5, 121, 387}, ! 193: {8, SSPELLBOOK8 + 6, 121, 389}, {8, SSPELLBOOK8 + 7, 121, 389}, ! 194: {8, SSPELLBOOK8 + 7, 121, 389} ! 195: }, ! 196: // NIGHT VISION ! 197: {{8, SSPELLBOOK6, 121, 389}, {8, SSPELLBOOK6 + 1, 121, 377}, ! 198: {8, SSPELLBOOK6 + 2, 121, 383}, {8, SSPELLBOOK6 + 3, 121, 385}, ! 199: {8, SSPELLBOOK6 + 4, 121, 389}, {8, SSPELLBOOK6 + 5, 121, 387}, ! 200: {8, SSPELLBOOK6 + 6, 121, 389}, {8, SSPELLBOOK6 + 7, 121, 389}, ! 201: {8, SSPELLBOOK6 + 7, 121, 389} ! 202: }, ! 203: // FREEZE ! 204: {{8, SSPELLBOOK3, 121, 389}, {8, SSPELLBOOK3 + 1, 121, 377}, ! 205: {8, SSPELLBOOK3 + 2, 121, 383}, {8, SSPELLBOOK3 + 3, 121, 385}, ! 206: {8, SSPELLBOOK3 + 4, 121, 389}, {8, SSPELLBOOK3 + 5, 120, 387}, ! 207: {8, SSPELLBOOK3 + 6, 120, 389}, {8, SSPELLBOOK3 + 7, 120, 389}, ! 208: {8, SSPELLBOOK3 + 7, 121, 389} ! 209: }, ! 210: // MAGIC ARROW ! 211: {{8, SSPELLBOOKBLANK, 121, 389}, {8, SSPELLBOOKBLANK + 1, 121, 377}, ! 212: {8, SSPELLBOOKBLANK + 2, 121, 383}, {8, SSPELLBOOKBLANK + 3, 121, 385}, ! 213: {8, SSPELLBOOKBLANK + 4, 121, 389}, {8, SSPELLBOOKBLANK + 5, 121, 387}, ! 214: {8, SSPELLBOOKBLANK + 6, 120, 389}, {8, SSPELLBOOKBLANK + 7, 121, 389}, ! 215: {8, SSPELLBOOKBLANK + 7, 122, 389} ! 216: }, ! 217: // OPEN DOORS ! 218: {{8, SSPELLBOOK7, 121, 389}, {8, SSPELLBOOK7 + 1, 121, 377}, ! 219: {8, SSPELLBOOK7 + 2, 121, 383}, {8, SSPELLBOOK7 + 3, 121, 385}, ! 220: {8, SSPELLBOOK7 + 4, 121, 389}, {8, SSPELLBOOK7 + 5, 121, 387}, ! 221: {8, SSPELLBOOK7 + 6, 121, 389}, {8, SSPELLBOOK7 + 7, 121, 389}, ! 222: {8, SSPELLBOOK7 + 7, 121, 389} ! 223: }, ! 224: // FLY ! 225: {{8, SSPELLBOOK2, 121, 389}, {8, SSPELLBOOK2 + 1, 121, 377}, ! 226: {8, SSPELLBOOK2 + 2, 121, 383}, {8, SSPELLBOOK2 + 3, 121, 385}, ! 227: {8, SSPELLBOOK2 + 4, 121, 389}, {8, SSPELLBOOK2 + 5, 121, 387}, ! 228: {8, SSPELLBOOK2 + 6, 121, 389}, {8, SSPELLBOOK2 + 7, 121, 389}, ! 229: {8, SSPELLBOOK2 + 7, 121, 389} ! 230: }, ! 231: // FIRE BALL ! 232: {{8, SSPELLBOOK4, 121, 389}, {8, SSPELLBOOK4 + 1, 121, 377}, ! 233: {8, SSPELLBOOK4 + 2, 121, 383}, {8, SSPELLBOOK4 + 3, 121, 385}, ! 234: {8, SSPELLBOOK4 + 4, 121, 389}, {8, SSPELLBOOK4 + 5, 121, 387}, ! 235: {8, SSPELLBOOK4 + 6, 121, 389}, {8, SSPELLBOOK4 + 6, 121, 389}, ! 236: {8, SSPELLBOOK4 + 6, 121, 389} ! 237: }, ! 238: // NUKE! ! 239: {{8, SSPELLBOOK5, 121, 389}, {8, SSPELLBOOK5 + 1, 121, 377}, ! 240: {8, SSPELLBOOK5 + 2, 121, 383}, {8, SSPELLBOOK5 + 3, 121, 385}, ! 241: {8, SSPELLBOOK5 + 4, 121, 389}, {8, SSPELLBOOK5 + 5, 121, 387}, ! 242: {8, SSPELLBOOK5 + 6, 121, 389}, {8, SSPELLBOOK5 + 6, 121, 389}, ! 243: {8, SSPELLBOOK5 + 6, 121, 389} ! 244: } ! 245: ! 246: }; ! 247: ! 248: ! 249: struct daweapons throwanimtics[MAXNUMORBS][MAXFRAMES + 1] = ! 250: { ! 251: #if 0 ! 252: // MUTWOHANDS - scare spell ! 253: {{10, MUTWOHANDS, 19, 155}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93}, ! 254: {10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83}, ! 255: {10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113}, ! 256: {10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117}, ! 257: {1, EMPTY, 127, 170} ! 258: }, ! 259: #endif ! 260: // MUTWOHANDS - scare spell ! 261: {{1, EMPTY, 127, 170}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93}, ! 262: {10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83}, ! 263: {10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113}, ! 264: {10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117}, ! 265: {1, EMPTY, 127, 170} ! 266: }, ! 267: #if 0 ! 268: // MUMEDUSA - night vision ! 269: {{10, ZLIGHT, 0, 177}, {10, ZLIGHT + 1, 0, 137}, {10, ZLIGHT + 2, 48, 82}, ! 270: {10, ZLIGHT + 3, 127, 41}, {10, ZLIGHT + 4, 210, 9}, {10, ZLIGHT + 5, 284, 26}, ! 271: {10, ZLIGHT + 6, 213, 63}, {10, ZLIGHT + 7, 147, 99}, {10, ZLIGHT + 8, 91, 136}, ! 272: {10, ZLIGHT + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170}, ! 273: {1, EMPTY, 127, 170} ! 274: }, ! 275: #endif ! 276: // MUTWOHANDS - night vision ! 277: {{10, ZFIREBALL, 0, 177}, {10, ZFIREBALL + 1, 0, 137}, {10, ZFIREBALL + 2, 48, 82}, ! 278: {10, ZFIREBALL + 3, 127, 41}, {10, ZFIREBALL + 4, 210, 9}, {10, ZFIREBALL + 5, 284, 26}, ! 279: {10, ZFIREBALL + 6, 213, 63}, {10, ZFIREBALL + 7, 147, 99}, {10, ZFIREBALL + 8, 91, 136}, ! 280: {10, ZFIREBALL + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170}, ! 281: {1, EMPTY, 127, 170} ! 282: }, ! 283: #if 0 ! 284: // MUTWOHANDS - freeze ! 285: {{10, ZFREEZE, 0, 101}, {10, ZFREEZE + 1, 0, 51}, {10, ZFREEZE + 2, 0, 71}, ! 286: {10, ZFREEZE + 3, 4, 85}, {10, ZFREEZE + 4, 32, 78}, {10, ZFREEZE + 5, 51, 80}, ! 287: {10, ZFREEZE + 6, 50, 80}, {10, ZFREEZE + 7, 49, 89}, {10, ZFREEZE + 8, 49, 89}, ! 288: {10, ZFREEZE + 9, 49, 98}, {10, ZFREEZE + 10, 47, 105}, {10, ZFREEZE + 11, 48, 121}, ! 289: {1, EMPTY, 127, 170} ! 290: }, ! 291: #endif ! 292: // MUTWOHANDS - freeze ! 293: {{1, EMPTY, 127, 170}, {10, ZFREEZE + 1, 0, 51}, {10, ZFREEZE + 2, 0, 71}, ! 294: {10, ZFREEZE + 3, 4, 85}, {10, ZFREEZE + 4, 32, 78}, {10, ZFREEZE + 5, 51, 80}, ! 295: {10, ZFREEZE + 6, 50, 80}, {10, ZFREEZE + 7, 49, 89}, {10, ZFREEZE + 8, 49, 89}, ! 296: {10, ZFREEZE + 9, 49, 98}, {10, ZFREEZE + 10, 47, 105}, {10, ZFREEZE + 11, 48, 121}, ! 297: {1, EMPTY, 127, 170} ! 298: }, ! 299: #if 0 ! 300: // MUTWOHANDS - magic arrow ! 301: {{10, MUTWOHANDS, 19, 155}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93}, ! 302: {10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83}, ! 303: {10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113}, ! 304: {10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117}, ! 305: {1, EMPTY, 127, 170} ! 306: }, ! 307: #endif ! 308: // MUTWOHANDS - magic arrow ! 309: {{1, EMPTY, 127, 170}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93}, ! 310: {10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83}, ! 311: {10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113}, ! 312: {10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117}, ! 313: {1, EMPTY, 127, 170} ! 314: }, ! 315: // MUTWOHANDS - open door ! 316: {{15, MUTWOHANDS, 19, 155}, {15, MUTWOHANDS + 1, 0, 128}, {15, MUTWOHANDS + 2, 0, 93}, ! 317: {15, MUTWOHANDS + 3, 0, 83}, {15, MUTWOHANDS + 4, 0, 72}, {15, MUTWOHANDS + 5, 0, 83}, ! 318: {15, MUTWOHANDS + 6, 10, 96}, {15, MUTWOHANDS + 7, 43, 109}, {15, MUTWOHANDS + 8, 69, 113}, ! 319: {15, MUTWOHANDS + 9, 65, 115}, {15, MUTWOHANDS + 10, 64, 117}, {15, MUTWOHANDS + 11, 63, 117}, ! 320: {1, EMPTY, 127, 170} ! 321: }, ! 322: #if 0 ! 323: // MUMEDUSA - fly ! 324: {{10, MUMEDUSA, 0, 177}, {10, MUMEDUSA + 1, 0, 137}, {10, MUMEDUSA + 2, 48, 82}, ! 325: {10, MUMEDUSA + 3, 127, 41}, {10, MUMEDUSA + 4, 210, 9}, {10, MUMEDUSA + 5, 284, 26}, ! 326: {10, MUMEDUSA + 6, 213, 63}, {10, MUMEDUSA + 7, 147, 99}, {10, MUMEDUSA + 8, 91, 136}, ! 327: {10, MUMEDUSA + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170}, ! 328: {1, EMPTY, 127, 170} ! 329: }, ! 330: #endif ! 331: // MUMEDUSA - fly ! 332: {{10, ZLIGHT, 0, 177}, {10, ZLIGHT + 1, 0, 137}, {10, ZLIGHT + 2, 48, 82}, ! 333: {10, ZLIGHT + 3, 127, 41}, {10, ZLIGHT + 4, 210, 9}, {10, ZLIGHT + 5, 284, 26}, ! 334: {10, ZLIGHT + 6, 213, 63}, {10, ZLIGHT + 7, 147, 99}, {10, ZLIGHT + 8, 91, 136}, ! 335: {10, ZLIGHT + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170}, ! 336: {1, EMPTY, 127, 170} ! 337: }, ! 338: #if 0 ! 339: // MUTWOHANDS - fireball ! 340: {{10, ZFIREBALL, 0, 177}, {10, ZFIREBALL + 1, 0, 137}, {10, ZFIREBALL + 2, 48, 82}, ! 341: {10, ZFIREBALL + 3, 127, 41}, {10, ZFIREBALL + 4, 210, 9}, {10, ZFIREBALL + 5, 284, 26}, ! 342: {10, ZFIREBALL + 6, 213, 63}, {10, ZFIREBALL + 7, 147, 99}, {10, ZFIREBALL + 8, 91, 136}, ! 343: {10, ZFIREBALL + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170}, ! 344: {1, EMPTY, 127, 170} ! 345: }, ! 346: #endif ! 347: // MUTWOHANDS - fireball ! 348: {{1, EMPTY, 127, 170}, {10, ZFIREBALL + 1, 0, 137}, {10, ZFIREBALL + 2, 48, 82}, ! 349: {10, ZFIREBALL + 3, 127, 41}, {10, ZFIREBALL + 4, 210, 9}, {10, ZFIREBALL + 5, 284, 26}, ! 350: {10, ZFIREBALL + 6, 213, 63}, {10, ZFIREBALL + 7, 147, 99}, {10, ZFIREBALL + 8, 91, 136}, ! 351: {10, ZFIREBALL + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170}, ! 352: {1, EMPTY, 127, 170} ! 353: }, ! 354: #if 0 ! 355: // MUTWOHANDS - nuke ! 356: {{10, MUTWOHANDS, 19, 155}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93}, ! 357: {10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83}, ! 358: {10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113}, ! 359: {10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117}, ! 360: {1, EMPTY, 127, 170} ! 361: } ! 362: #endif ! 363: // MUTWOHANDS - nuke ! 364: {{1, EMPTY, 127, 170}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93}, ! 365: {10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83}, ! 366: {10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113}, ! 367: {10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117}, ! 368: {1, EMPTY, 127, 170} ! 369: } ! 370: }; ! 371: ! 372: struct daweapons lefthandanimtics[5][MAXFRAMES] = ! 373: { ! 374: {{10, RFIST, 15, 121}, {10, RFIST + 1, 17, 114}, {10, RFIST + 2, 54, 131}, ! 375: {10, RFIST + 3, 76, 152}, {10, RFIST + 4, 31, 126}, {10, RFIST + 5, 26, 135}, ! 376: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}, ! 377: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76} ! 378: }, ! 379: // KNIFE ! 380: {{8, KNIFEATTACK2, 0, 113}, {8, KNIFEATTACK2 + 1, 44, 111}, {8, KNIFEATTACK2 + 2, 119, 137}, ! 381: {8, KNIFEATTACK2 + 3, 187, 159}, {16, EMPTY, 136, 100}, {8, KNIFEATTACK2 + 3, 187, 159}, ! 382: {8, KNIFEATTACK2 + 2, 119, 137}, {8, KNIFEATTACK2 + 1, 44, 111}, {8, KNIFEATTACK2, 0, 113}, ! 383: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76} ! 384: }, ! 385: // GOBLINATTACK ! 386: {{10, GOBSWORDATTACK, 243, 92}, {10, GOBSWORDATTACK + 1, 255, 68}, {10, GOBSWORDATTACK + 2, 279, 65}, ! 387: {10, GOBSWORDATTACK + 3, 238, 55}, {10, GOBSWORDATTACK + 4, 153, 52}, {10, GOBSWORDATTACK + 5, 129, 152}, ! 388: {10, GOBSWORDATTACK + 6, 90, 184}, {1, EMPTY, 297, 169}, {1, EMPTY, 275, 24}, ! 389: {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24} ! 390: }, ! 391: // MORNINGATTACK2 ! 392: ! 393: {{12, MORNINGATTACK2, 38, 141}, {12, MORNINGATTACK2 + 1, 0, 111}, {12, MORNINGATTACK2 + 2, 0, 91}, ! 394: {12, MORNINGATTACK2 + 3, 0, 47}, {12, MORNINGATTACK2 + 4, 0, 24}, {1, EMPTY, 0, 24}, ! 395: {1, EMPTY, 0, 24}, {1, EMPTY, 0, 24}, {1, EMPTY, 0, 24}, ! 396: {1, EMPTY, 0, 24}, {1, EMPTY, 0, 24}, {1, EMPTY, 0, 24} ! 397: ! 398: }, ! 399: ! 400: // GOBLINATTACK2 ! 401: {{10, GOBSWORDATTACK2, 236, 99}, {10, GOBSWORDATTACK2 + 1, 202, 24}, {10, GOBSWORDATTACK2 + 2, 181, 0}, ! 402: {10, GOBSWORDATTACK2 + 3, 52, 12}, {10, GOBSWORDATTACK2 + 4, 72, 72}, {10, GOBSWORDATTACK2 + 5, 134, 139}, ! 403: {10, GOBSWORDATTACK2 + 6, 297, 169}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, ! 404: {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24} ! 405: } ! 406: ! 407: }; ! 408: ! 409: ! 410: #define LFIST EMPTY ! 411: ! 412: struct daweapons cockanimtics[MAXFRAMES + 1] = ! 413: { ! 414: {24, EMPTY, 10, 10}, ! 415: {12, BOWREADYEND + 1, 101, 115}, {12, BOWREADYEND + 2, 112, 0}, ! 416: {12, BOWREADYEND + 3, 115, 0}, {12, BOWREADYEND + 4, 75, 13} ! 417: }; ! 418: ! 419: struct daweapons readyanimtics[MAXWEAPONS][MAXFRAMES + 1] = ! 420: { ! 421: // FIST ! 422: {{10, RFIST, 216, 180}, {10, RFIST, 216, 170}, {10, RFIST, 216, 160}, ! 423: {10, RFIST, 216, 150}, {10, RFIST, 216, 140}, {10, RFIST, 216, 130}, ! 424: {10, RFIST, 216, 124}, {1, RFIST, 216, 124}, {1, RFIST, 216, 124}, ! 425: {1, RFIST, 216, 122}, {1, RFIST, 216, 122}, {1, RFIST, 216, 122}, ! 426: {1, EMPTY, 147, 76} ! 427: }, ! 428: // KNIFE ! 429: {{10, KNIFEREADY, 69, 171}, {10, KNIFEREADY + 1, 11, 146}, {10, KNIFEREADY + 2, 25, 146}, ! 430: {10, KNIFEREADY + 3, 35, 158}, {10, KNIFEREADY + 4, 38, 158}, {10, KNIFEREADY + 5, 16, 157}, ! 431: {10, KNIFEREADY + 6, 37, 102}, {10, KNIFEREADY + 7, 239, 63}, {10, KNIFEREADY + 8, 214, 85}, ! 432: {10, KNIFEREADY + 9, 206, 110}, {10, KNIFEREADY + 10, 217, 108}, {10, KNIFEREADY + 11, 204, 95}, ! 433: {1, EMPTY, 147, 76} ! 434: }, ! 435: // GOBSWORD ! 436: {{12, GOBSWORDPULL, 79, 169}, {12, GOBSWORDPULL + 1, 95, 115}, {12, GOBSWORDPULL + 2, 94, 93}, ! 437: {12, GOBSWORDPULL + 3, 156, 77}, {12, GOBSWORDPULL + 4, 218, 64}, {12, GOBSWORDPULL + 5, 224, 57}, ! 438: {8, GOBSWORDPULL + 6, 251, 54}, {1, GOBSWORDPULL + 7, 243, 92}, {1, GOBSWORDPULL + 7, 243, 92}, ! 439: {1, GOBSWORDPULL + 7, 243, 92}, {1, GOBSWORDPULL + 7, 243, 92}, {1, GOBSWORDPULL + 7, 243, 92}, ! 440: {1, EMPTY, 147, 76} ! 441: }, ! 442: // MORNINGSTAR ! 443: {{6, MORNINGSTAR, 193, 190}, {6, MORNINGSTAR, 193, 180}, {6, MORNINGSTAR, 193, 170}, ! 444: {6, MORNINGSTAR, 193, 160}, {6, MORNINGSTAR, 193, 150}, {6, MORNINGSTAR, 193, 140}, ! 445: {6, MORNINGSTAR, 193, 130}, {6, MORNINGSTAR, 193, 120}, {6, MORNINGSTAR, 193, 110}, ! 446: {6, MORNINGSTAR, 193, 100}, {6, MORNINGSTAR, 193, 90}, {1, MORNINGSTAR, 193, 90}, ! 447: {1, EMPTY, 147, 76} ! 448: }, ! 449: // SWORD ! 450: {{10, SWORDPULL, 58, 160}, {10, SWORDPULL + 1, 81, 111}, {10, SWORDPULL + 2, 19, 88}, ! 451: {10, SWORDPULL + 3, 0, 93}, {10, SWORDPULL + 4, 104, 0}, {10, SWORDPULL + 5, 169, 0}, ! 452: {10, SWORDPULL + 6, 244, 38}, {6, SWORDPULL + 7, 225, 121}, {1, SWORDPULL + 7, 225, 121}, ! 453: {1, SWORDPULL + 7, 225, 121}, {1, SWORDPULL + 7, 225, 121}, {1, SWORDPULL + 7, 225, 121}, ! 454: {1, EMPTY, 147, 76} ! 455: }, ! 456: {{12, BIGAXEDRAW, 71, 108}, {12, BIGAXEDRAW + 1, 17, 58}, {12, BIGAXEDRAW + 2, 0, 56}, ! 457: {12, BIGAXEDRAW + 3, 0, 71}, {12, BIGAXEDRAW + 4, 0, 102}, {12, BIGAXEDRAW + 5, 0, 11}, ! 458: {12, BIGAXEDRAW + 6, 33, 0}, {12, BIGAXEDRAW + 7, 69, 0}, {12, BIGAXEDRAW + 8, 75, 20}, ! 459: {12, BIGAXEDRAW9, 150, 92}, {12, BIGAXEDRAW10, 182, 116}, {1, EMPTY, 200, 122}, ! 460: {1, EMPTY, 147, 76} ! 461: }, ! 462: // BOW ! 463: {{12, BOWREADY, 0, 0}, {12, BOWREADY + 1, 0, 20}, {12, BOWREADY + 2, 0, 46}, ! 464: {12, BOWREADY + 3, 0, 26}, {12, BOWREADY + 4, 0, 0}, {12, BOWREADY + 5, 71, 0}, ! 465: {8, BOWREADYEND, 77, 23}, {1, BOWREADYEND, 77, 23}, {1, BOWREADYEND, 77, 23}, ! 466: {1, BOWREADYEND, 77, 23}, {1, BOWREADYEND, 77, 23}, {1, BOWREADYEND, 77, 23}, ! 467: {1, EMPTY, 147, 76} ! 468: }, ! 469: {{8, PIKEDRAW, 0, 156}, {8, PIKEDRAW + 1, 15, 98}, {8, PIKEDRAW + 2, 83, 49}, ! 470: {8, PIKEDRAW + 3, 144, 66}, {8, PIKEDRAW + 4, 197, 99}, {8, PIKEDRAW + 5, 216, 131}, ! 471: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}, ! 472: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}, ! 473: {1, EMPTY, 147, 76} ! 474: }, ! 475: {{12, EXCALDRAW, 167, 130}, {12, EXCALDRAW + 1, 70, 117}, {12, EXCALDRAW + 2, 0, 128}, ! 476: {12, EXCALDRAW + 3, 0, 150}, {12, EXCALDRAW + 4, 4, 72}, {12, EXCALDRAW + 5, 38, 81}, ! 477: {12, EXCALDRAW + 6, 0, 44}, {12, EXCALDRAW + 7, 112, 0}, {12, EXCALDRAW + 8, 224, 0}, ! 478: {12, EXCALDRAW + 9, 198, 84}, {12, EXCALDRAW + 10, 186, 120}, {12, EXCALDRAW + 11, 188, 123}, ! 479: {1, EMPTY, 147, 76} ! 480: }, ! 481: {{12, HALBERDDRAW, 183, 62}, {12, HALBERDDRAW + 1, 166, 10}, {12, HALBERDDRAW + 2, 173, 29}, ! 482: {12, HALBERDDRAW + 3, 114, 35}, {1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22}, ! 483: {1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22}, ! 484: {1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22}, ! 485: {1, EMPTY, 147, 76} ! 486: } ! 487: ! 488: }; ! 489: ! 490: ! 491: ! 492: struct daweapons weaponanimtics[MAXWEAPONS][MAXFRAMES] = ! 493: { ! 494: // FIST ! 495: {{10, RFIST, 216, 120}, {10, RFIST + 1, 166, 113}, {10, RFIST + 2, 156, 129}, ! 496: {10, RFIST + 3, 169, 151}, {10, RFIST + 4, 153, 124}, {10, RFIST + 5, 224, 133}, ! 497: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}, ! 498: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76} ! 499: }, ! 500: // KNIFE ! 501: {{8, KNIFEATTACK, 189, 52}, {8, KNIFEATTACK + 1, 254, 68}, {8, EMPTY, 147, 76}, ! 502: {8, EMPTY, 80, 41}, {8, KNIFEATTACK + 2, 254, 69}, {8, KNIFEATTACK + 3, 218, 80}, ! 503: {8, KNIFEATTACK + 4, 137, 83}, {8, KNIFEATTACK + 5, 136, 100}, {8, KNIFEATTACK + 6, 126, 140}, ! 504: {8, KNIFEATTACK + 5, 136, 100}, {8, KNIFEATTACK + 4, 137, 83}, {8, KNIFEATTACK, 189, 52} ! 505: }, ! 506: // GOBLINATTACK ! 507: {{10, GOBSWORDATTACK, 243, 92}, {10, GOBSWORDATTACK + 1, 255, 68}, {10, GOBSWORDATTACK + 2, 279, 65}, ! 508: {10, GOBSWORDATTACK + 3, 238, 55}, {10, GOBSWORDATTACK + 4, 153, 52}, {10, GOBSWORDATTACK + 5, 129, 152}, ! 509: {10, GOBSWORDATTACK + 6, 90, 184}, {1, EMPTY, 297, 169}, {1, EMPTY, 275, 24}, ! 510: {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24} ! 511: }, ! 512: // MORNINGSTAR ! 513: {{12, MORNINGSTAR, 193, 90}, {12, MORNINGSTAR + 1, 102, 133}, {12, MORNINGSTAR + 2, 77, 164}, ! 514: {12, MORNINGSTAR + 3, 239, 86}, {12, EMPTY, 299, 86}, {12, EMPTY, 107, 52}, ! 515: {12, MORNINGSTAR + 4, 197, 24}, {12, MORNINGSTAR + 5, 125, 124}, {12, MORNINGSTAR + 6, 109, 191}, ! 516: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76} ! 517: }, ! 518: // SWORD ! 519: {{8, SWORDATTACK, 229, 123}, {8, SWORDATTACK + 1, 221, 87}, {8, SWORDATTACK + 2, 193, 21}, ! 520: {8, SWORDATTACK + 3, 173, 0}, {8, SWORDATTACK + 4, 61, 0}, {8, SWORDATTACK + 5, 33, 48}, ! 521: {8, SWORDATTACK + 6, 126, 131}, {8, SWORDATTACK + 7, 297, 164}, {3, EMPTY, 147, 76}, ! 522: {3, EMPTY, 80, 41}, {3, EMPTY, 107, 52}, {3, EMPTY, 147, 76} ! 523: }, ! 524: {{12, BIGAXEATTACK, 184, 123}, {12, BIGAXEATTACK + 1, 223, 112}, {12, BIGAXEATTACK + 2, 63, 151}, ! 525: {12, BIGAXEATTACK + 3, 91, 133}, {12, BIGAXEATTACK + 4, 127, 138}, {12, BIGAXEATTACK + 5, 106, 128}, ! 526: {12, BIGAXEATTACK + 6, 117, 49}, {12, BIGAXEATTACK + 7, 140, 0}, {12, BIGAXEATTACK + 8, 152, 47}, ! 527: {12, BIGAXEATTACK + 9, 166, 143}, {12, EMPTY, 107, 52}, {1, EMPTY, 147, 76} ! 528: }, ! 529: // BOW ! 530: {{8, BOWWALK, 75, 13}, {8, BOWWALK + 1, 90, 0}, {8, BOWWALK + 2, 70, 0}, ! 531: {8, BOWWALK + 3, 70, 0}, {6, BOWWALK + 4, 70, 0}, {4, BOWWALK + 5, 70, 0}, ! 532: {1, EMPTY, 126, 131}, {1, EMPTY, 297, 164}, {1, EMPTY, 147, 76}, ! 533: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76} ! 534: }, ! 535: {{10, PIKEDRAW + 5, 216, 131}, {10, EMPTY, 80, 41}, {10, EMPTY, 107, 52}, {10, EMPTY, 147, 76}, ! 536: {10, PIKEATTACK1, 0, 47}, {10, PIKEATTACK1 + 1, 0, 0}, {10, PIKEATTACK1 + 2, 0, 0}, ! 537: {10, PIKEATTACK1 + 3, 73, 0}, {10, PIKEATTACK1 + 4, 130, 27}, {10, PIKEATTACK1 + 5, 138, 125}, ! 538: {12, EMPTY, 80, 41}, {1, EMPTY, 107, 52} ! 539: }, ! 540: {{8, EXCALATTACK1, 98, 133}, {8, EXCALATTACK1 + 1, 123, 130}, {8, EXCALATTACK1 + 2, 125, 128}, ! 541: {8, EXCALATTACK1 + 3, 115, 82}, {8, EXCALATTACK1 + 4, 115, 6}, {8, EXCALATTACK1 + 5, 178, 0}, ! 542: {8, EXCALATTACK1 + 6, 155, 0}, {8, EXCALATTACK1 + 7, 143, 0}, {8, EXCALATTACK1 + 8, 90, 91}, ! 543: {8, EXCALATTACK1 + 9, 30, 159}, {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52} ! 544: }, ! 545: {{12, HALBERDATTACK1, 245, 22}, {12, EMPTY, 107, 52}, {12, EMPTY, 147, 76}, ! 546: {12, HALBERDATTACK1 + 1, 249, 45}, {12, HALBERDATTACK1 + 2, 161, 60}, {12, HALBERDATTACK1 + 3, 45, 88}, ! 547: {12, EMPTY, 80, 41}, {12, HALBERDATTACK1 + 3, 45, 88}, {12, HALBERDATTACK1 + 2, 161, 60}, ! 548: {12, HALBERDATTACK1 + 1, 249, 45}, {12, EMPTY, 107, 52}, {1, EMPTY, 147, 76} ! 549: } ! 550: }; ! 551: ! 552: ! 553: struct daweapons weaponanimtics2[MAXWEAPONS][MAXFRAMES] = ! 554: { ! 555: // FIST ! 556: {{10, RFIST, 216, 120}, {10, RFIST + 1, 166, 113}, {10, RFIST + 2, 156, 129}, ! 557: {10, RFIST + 3, 169, 151}, {10, RFIST + 4, 153, 124}, {10, RFIST + 5, 224, 133}, ! 558: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}, ! 559: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76} ! 560: }, ! 561: // KNIFE ! 562: {{8, KNIFEATTACK, 189, 52}, {8, KNIFEATTACK + 1, 254, 68}, {16, EMPTY, 147, 76}, ! 563: {8, KNIFEATTACK2, 206, 114}, {8, KNIFEATTACK2 + 1, 107, 112}, {8, KNIFEATTACK2 + 2, 22, 138}, ! 564: {8, KNIFEATTACK2 + 3, 0, 161}, {16, EMPTY, 136, 100}, {8, KNIFEATTACK2 + 3, 0, 161}, ! 565: {8, KNIFEATTACK2 + 2, 22, 138}, {8, KNIFEATTACK2 + 1, 107, 112}, {8, KNIFEATTACK2, 206, 114} ! 566: }, ! 567: // GOBLINATTACK ! 568: {{10, GOBSWORDATTACK2, 236, 99}, {10, GOBSWORDATTACK2 + 1, 202, 24}, {10, GOBSWORDATTACK2 + 2, 181, 0}, ! 569: {10, GOBSWORDATTACK2 + 3, 52, 12}, {10, GOBSWORDATTACK2 + 4, 72, 72}, {10, GOBSWORDATTACK2 + 5, 134, 139}, ! 570: {10, GOBSWORDATTACK2 + 6, 297, 169}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, ! 571: {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24} ! 572: }, ! 573: // MORNINGATTACK2 ! 574: {{12, MORNINGATTACK2, 85, 136}, {12, MORNINGATTACK2 + 1, 34, 110}, {12, MORNINGATTACK2 + 2, 32, 91}, ! 575: {12, MORNINGATTACK2 + 3, 186, 47}, {12, MORNINGATTACK2 + 4, 275, 24}, {1, EMPTY, 275, 24}, ! 576: {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, ! 577: {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24} ! 578: }, ! 579: // SWORD ! 580: {{8, SWORDATTACK2 + 1, 195, 63}, {8, SWORDATTACK2 + 2, 250, 54}, {8, SWORDATTACK2 + 3, 275, 37}, ! 581: {16, EMPTY, 61, 0}, {8, SWORDATTACK2 + 4, 229, 66}, {8, SWORDATTACK2 + 5, 185, 0}, ! 582: {8, SWORDATTACK2 + 6, 158, 115}, {8, SWORDATTACK2 + 7, 57, 163}, {1, EMPTY, 57, 163}, ! 583: {1, EMPTY, 57, 163}, {1, EMPTY, 57, 163}, {1, EMPTY, 57, 163} ! 584: }, ! 585: {{12, BIGAXEATTACK2, 200, 111}, {12, BIGAXEATTACK2 + 1, 5, 136}, {12, BIGAXEATTACK2 + 2, 69, 162}, ! 586: {12, BIGAXEATTACK2 + 3, 147, 164}, {12, BIGAXEATTACK2 + 4, 76, 152}, {12, BIGAXEATTACK2 + 5, 33, 95}, ! 587: {12, BIGAXEATTACK2 + 6, 0, 91}, {12, BIGAXEATTACK2 + 7, 0, 98}, {12, EMPTY, 147, 76}, ! 588: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76} ! 589: }, ! 590: // BOW ! 591: {{8, BOWWALK, 75, 13}, {8, BOWWALK + 1, 90, 0}, {8, BOWWALK + 2, 70, 0}, ! 592: {8, BOWWALK + 3, 70, 0}, {6, BOWWALK + 4, 70, 0}, {4, BOWWALK + 5, 70, 0}, ! 593: {1, EMPTY, 126, 131}, {1, EMPTY, 297, 164}, {1, EMPTY, 147, 76}, ! 594: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76} ! 595: }, ! 596: {{10, PIKEATTACK2, 266, 147}, {10, PIKEATTACK2 + 1, 182, 117}, {10, PIKEATTACK2 + 2, 123, 84}, ! 597: {10, PIKEATTACK2 + 3, 7, 48}, {10, PIKEATTACK2 + 4, 0, 83}, {10, PIKEATTACK2 + 5, 0, 158}, ! 598: {10, PIKEATTACK2 + 6, 25, 117}, {10, PIKEATTACK2 + 7, 139, 93}, {10, PIKEATTACK2 + 8, 234, 75}, ! 599: {8, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76} ! 600: }, ! 601: {{8, EXCALATTACK2, 0, 143}, {8, EXCALATTACK2 + 1, 0, 103}, {8, EXCALATTACK2 + 2, 0, 70}, ! 602: {8, EXCALATTACK2 + 3, 48, 0}, {8, EXCALATTACK2 + 4, 67, 0}, {8, EXCALATTACK2 + 5, 78, 21}, ! 603: {8, EXCALATTACK2 + 6, 165, 107}, {8, EXCALATTACK2 + 7, 260, 168}, {1, EMPTY, 130, 27}, ! 604: {1, EMPTY, 138, 125}, {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52} ! 605: }, ! 606: {{12, HALBERDATTACK1, 245, 22}, {12, HALBERDATTACK2, 114, 35}, {12, HALBERDATTACK2 + 1, 105, 87}, ! 607: {12, HALBERDATTACK2 + 2, 54, 107}, {12, HALBERDATTACK2 + 3, 48, 102}, {1, HALBERDATTACK2 + 3, 48, 102}, ! 608: {1, HALBERDATTACK2 + 3, 48, 102}, {12, HALBERDATTACK2 + 2, 54, 107}, {12, HALBERDATTACK2 + 1, 105, 87}, ! 609: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76} ! 610: } ! 611: }; ! 612: ! 613: // THE NEW WEAPONS ! 614: ! 615: // SCOTT ! 616: struct daweapons zlefthandanimtics[5][MAXFRAMES] = ! 617: { ! 618: {{10, RFIST, 15, 121}, {10, RFIST + 1, 17, 114}, {10, RFIST + 2, 54, 131}, ! 619: {10, RFIST + 3, 76, 152}, {10, RFIST + 4, 31, 126}, {10, RFIST + 5, 26, 135}, ! 620: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}, ! 621: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76} ! 622: }, ! 623: // KNIFE ! 624: {{8, KNIFEATTACK2, 0, 113}, {8, KNIFEATTACK2 + 1, 44, 111}, {8, KNIFEATTACK2 + 2, 119, 137}, ! 625: {8, KNIFEATTACK2 + 3, 187, 159}, {16, EMPTY, 136, 100}, {8, KNIFEATTACK2 + 3, 187, 159}, ! 626: {8, KNIFEATTACK2 + 2, 119, 137}, {8, KNIFEATTACK2 + 1, 44, 111}, {8, KNIFEATTACK2, 0, 113}, ! 627: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76} ! 628: }, ! 629: // ZSHORTATTACK ! 630: {{10, ZSHORTATTACK, 255, 50}, {10, ZSHORTATTACK + 1, 279, 66}, {10, ZSHORTATTACK + 2, 238, 52}, ! 631: {10, ZSHORTATTACK + 3, 181, 49}, {10, ZSHORTATTACK + 4, 129, 141}, {10, ZSHORTATTACK + 5, 70, 93}, ! 632: {10, EMPTY, 90, 184}, {1, EMPTY, 297, 169}, {1, EMPTY, 275, 24}, ! 633: {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24} ! 634: }, ! 635: // ZSTARATTACK2 ! 636: {{12, ZSTARATTACK2, 38, 141}, {12, ZSTARATTACK2 + 1, 0, 111}, {12, ZSTARATTACK2 + 2, 0, 91}, ! 637: {12, ZSTARATTACK2 + 3, 0, 47}, {12, EMPTY, 0, 24}, {1, EMPTY, 0, 24}, ! 638: {1, EMPTY, 0, 24}, {1, EMPTY, 0, 24}, {1, EMPTY, 0, 24}, ! 639: {1, EMPTY, 0, 24}, {1, EMPTY, 0, 24}, {1, EMPTY, 0, 24} ! 640: }, ! 641: // ZSHORTATTACK2 ! 642: {{10, ZSHORTATTACK2, 238, 99}, {10, ZSHORTATTACK2 + 1, 202, 11}, {10, ZSHORTATTACK2 + 2, 182, 0}, ! 643: {10, ZSHORTATTACK2 + 3, 79, 13}, {10, ZSHORTATTACK2 + 4, 79, 13}, {10, ZSHORTATTACK2 + 5, 119, 123}, ! 644: {10, ZSHORTATTACK2 + 6, 295, 179}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, ! 645: {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24} ! 646: } ! 647: ! 648: }; ! 649: ! 650: //SCOTT ! 651: struct daweapons zcockanimtics[MAXFRAMES + 1] = ! 652: { ! 653: {24, EMPTY, 10, 10}, ! 654: {12, BOWREADYEND + 1, 101, 115}, {12, BOWREADYEND + 2, 112, 0}, ! 655: {12, BOWREADYEND + 3, 115, 0}, {12, ZBOWWALK, 75, 13} ! 656: ! 657: // {24,EMPTY,10,10}, ! 658: // {12,BOWREADYEND+1,101,115},{12,BOWREADYEND+2,112,0}, ! 659: // {12,BOWREADYEND+3,115,0},{12,BOWREADYEND+4,75,13} ! 660: ! 661: }; ! 662: ! 663: //SCOTT ! 664: struct daweapons zreadyanimtics[MAXWEAPONS][MAXFRAMES + 1] = ! 665: { ! 666: // FIST ! 667: {{10, RFIST, 216, 180}, {10, RFIST, 216, 170}, {10, RFIST, 216, 160}, ! 668: {10, RFIST, 216, 150}, {10, RFIST, 216, 140}, {10, RFIST, 216, 130}, ! 669: {10, RFIST, 216, 124}, {1, RFIST, 216, 124}, {1, RFIST, 216, 124}, ! 670: {1, RFIST, 216, 122}, {1, RFIST, 216, 122}, {1, RFIST, 216, 122}, ! 671: {1, EMPTY, 147, 76} ! 672: }, ! 673: // ZKNIFE ! 674: {{10, ZKNIFEREADY, 69, 171}, {10, ZKNIFEREADY + 1, 11, 146}, {10, ZKNIFEREADY + 2, 25, 146}, ! 675: {10, ZKNIFEREADY + 3, 35, 158}, {10, ZKNIFEREADY + 4, 38, 158}, {10, ZKNIFEREADY + 5, 16, 157}, ! 676: {10, ZKNIFEREADY + 6, 37, 102}, {10, ZKNIFEREADY + 7, 239, 63}, {10, ZKNIFEREADY + 8, 214, 85}, ! 677: {10, ZKNIFEREADY + 9, 206, 110}, {10, ZKNIFEREADY + 10, 217, 108}, {10, ZKNIFEREADY + 11, 204, 95}, ! 678: {1, EMPTY, 147, 76} ! 679: }, ! 680: // ZSHORTREADY ! 681: {{12, ZSHORTREADY, 79, 169}, {12, ZSHORTREADY + 1, 95, 115}, {12, ZSHORTREADY + 2, 94, 93}, ! 682: {12, ZSHORTREADY + 3, 156, 77}, {12, ZSHORTREADY + 4, 218, 64}, {12, ZSHORTREADY + 5, 224, 57}, ! 683: {8, ZSHORTREADY + 6, 251, 54}, {1, ZSHORTREADY + 7, 243, 92}, {1, ZSHORTREADY + 7, 243, 92}, ! 684: {1, ZSHORTREADY + 7, 243, 92}, {1, ZSHORTREADY + 7, 243, 92}, {1, ZSHORTREADY + 7, 243, 92}, ! 685: {1, EMPTY, 147, 76} ! 686: }, ! 687: // ZSTARATTACK ! 688: {{6, ZSTARATTACK, 194, 195}, {6, ZSTARATTACK, 194, 185}, {6, ZSTARATTACK, 194, 175}, ! 689: {6, ZSTARATTACK, 194, 165}, {6, ZSTARATTACK, 194, 155}, {6, ZSTARATTACK, 194, 145}, ! 690: {6, ZSTARATTACK, 194, 135}, {6, ZSTARATTACK, 194, 125}, {6, ZSTARATTACK, 194, 115}, ! 691: {6, ZSTARATTACK, 194, 105}, {6, ZSTARATTACK, 194, 95}, {1, ZSTARATTACK, 194, 85}, ! 692: {1, EMPTY, 147, 76} ! 693: }, ! 694: // SWORD ! 695: {{10, SWORDPULL, 58, 160}, {10, SWORDPULL + 1, 81, 111}, {10, SWORDPULL + 2, 19, 88}, ! 696: {10, SWORDPULL + 3, 0, 93}, {10, SWORDPULL + 4, 104, 0}, {10, SWORDPULL + 5, 169, 0}, ! 697: {10, SWORDPULL + 6, 244, 38}, {6, SWORDPULL + 7, 225, 121}, {1, SWORDPULL + 7, 225, 121}, ! 698: {1, SWORDPULL + 7, 225, 121}, {1, SWORDPULL + 7, 225, 121}, {1, SWORDPULL + 7, 225, 121}, ! 699: {1, EMPTY, 147, 76} ! 700: }, ! 701: // ZAXE ! 702: {{8, ZAXEREADY, 0, 108}, {8, ZAXEREADY + 1, 0, 58}, {8, ZAXEREADY + 2, 0, 57}, ! 703: {8, ZAXEREADY + 3, 0, 69}, {8, ZAXEREADY + 4, 0, 100}, {8, ZAXEREADY + 5, 0, 9}, ! 704: {8, ZAXEREADY + 6, 33, 0}, {8, ZAXEREADY + 7, 61, 0}, {8, ZAXEREADY + 8, 73, 20}, ! 705: {8, ZAXEREADY + 9, 179, 117}, {8, EMPTY, 182, 116}, {1, EMPTY, 200, 122}, ! 706: {1, EMPTY, 147, 76} ! 707: }, ! 708: // ZBOW ! 709: {{12, ZBOWREADY, 0, 0}, {12, ZBOWREADY + 1, 0, 20}, {12, ZBOWREADY + 2, 0, 46}, ! 710: {12, ZBOWREADY + 3, 0, 26}, {12, ZBOWREADY + 4, 0, 0}, {12, ZBOWREADY + 5, 71, 0}, ! 711: {1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13}, ! 712: {1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13}, ! 713: {1, EMPTY, 147, 76} ! 714: }, ! 715: // ZPIKE ! 716: {{8, ZPIKEREADY, 0, 150}, {8, ZPIKEREADY + 1, 0, 94}, {8, ZPIKEREADY + 2, 47, 45}, ! 717: {8, ZPIKEREADY + 3, 138, 62}, {8, ZPIKEREADY + 4, 194, 95}, {8, ZPIKEREADY + 5, 59, 121}, ! 718: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}, ! 719: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}, ! 720: {1, EMPTY, 147, 76} ! 721: }, ! 722: {{12, ZTWOHANDREADY, 167, 131}, {12, ZTWOHANDREADY + 1, 71, 117}, {12, ZTWOHANDREADY, 0, 128}, ! 723: {12, ZTWOHANDREADY + 3, 0, 150}, {12, ZTWOHANDREADY + 4, 10, 74}, {12, ZTWOHANDREADY + 5, 44, 81}, ! 724: {12, ZTWOHANDREADY + 6, 0, 53}, {12, ZTWOHANDREADY + 7, 112, 0}, {12, ZTWOHANDREADY + 8, 220, 0}, ! 725: {12, ZTWOHANDREADY + 9, 198, 84}, {12, ZTWOHANDREADY + 10, 186, 120}, {12, ZTWOHANDREADY + 11, 188, 124}, ! 726: {1, EMPTY, 147, 76} ! 727: }, ! 728: // ZHALBERD ! 729: // { { 12,ZHALBERDREADY,183,62 ! 730: // },{12,ZHALBERDREADY+1,166,10},{12,ZHALBERDREADY+2,173,29}, ! 731: // { 12,ZHALBERDATTACK,173,29 ! 732: // },{1,ZHALBERDATTACK,245,22},{1,ZHALBERDATTACK,245,22}, ! 733: // { 1,ZHALBERDATTACK,245,22 ! 734: // },{1,ZHALBERDATTACK,245,22},{1,ZHALBERDATTACK,245,22}, ! 735: // { 1,ZHALBERDATTACK,245,22 ! 736: // },{1,ZHALBERDATTACK,245,22},{1,ZHALBERDATTACK,245,22}, ! 737: // { 1,EMPTY,147,76} ! 738: // } ! 739: {{12, HALBERDDRAW, 183, 62}, {12, HALBERDDRAW + 1, 166, 10}, {12, HALBERDDRAW + 2, 173, 29}, ! 740: {12, HALBERDDRAW + 3, 114, 35}, {1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22}, ! 741: {1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22}, ! 742: {1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22}, {1, ZHALBERDATTACK, 245, 30}, ! 743: {1, EMPTY, 147, 76} ! 744: } ! 745: ! 746: }; ! 747: ! 748: ! 749: //SCOTT ! 750: struct daweapons zweaponanimtics[MAXWEAPONS][MAXFRAMES] = ! 751: { ! 752: // FIST ! 753: {{10, RFIST, 216, 120}, {10, RFIST + 1, 166, 113}, {10, RFIST + 2, 156, 129}, ! 754: {10, RFIST + 3, 169, 151}, {10, RFIST + 4, 153, 124}, {10, RFIST + 5, 224, 133}, ! 755: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}, ! 756: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76} ! 757: }, ! 758: // ZKNIFE ! 759: {{8, ZKNIFEATTACK, 189, 52}, {8, ZKNIFEATTACK + 1, 254, 68}, ! 760: {16, EMPTY, 147, 76}, {8, ZKNIFEATTACK + 1, 254, 68}, ! 761: {8, ZKNIFEATTACK + 2, 218, 80}, {8, ZKNIFEATTACK + 3, 137, 83}, ! 762: {8, ZKNIFEATTACK + 4, 136, 100}, {8, ZKNIFEATTACK + 5, 126, 140}, ! 763: {8, ZKNIFEATTACK + 4, 136, 100}, {8, ZKNIFEATTACK + 3, 137, 83}, ! 764: {8, ZKNIFEATTACK + 2, 218, 80}, {1, ZKNIFEATTACK, 189, 52} ! 765: }, ! 766: // ZSHORTATTACK ! 767: {{10, ZSHORTATTACK, 243, 68}, {10, ZSHORTATTACK + 4, 255, 50}, ! 768: {10, ZSHORTATTACK + 5, 279, 66}, {10, ZSHORTATTACK + 6, 238, 52}, ! 769: {10, ZSHORTATTACK + 7, 181, 49}, {10, ZSHORTATTACK + 8, 129, 141}, ! 770: {1, EMPTY, 90, 184}, {1, EMPTY, 297, 169}, {1, EMPTY, 275, 24}, ! 771: {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24} ! 772: }, ! 773: // ZSTARATTACK ! 774: {{12, ZSTARATTACK, 193, 90}, {12, ZSTARATTACK + 3, 102, 128}, ! 775: {12, ZSTARATTACK + 4, 77, 159}, {12, ZSTARATTACK + 5, 239, 79}, ! 776: {12, EMPTY, 299, 86}, {12, EMPTY, 107, 52}, ! 777: {12, ZSTARATTACK + 6, 175, 19}, {12, ZSTARATTACK + 7, 125, 124}, ! 778: {12, ZSTARATTACK + 8, 109, 187}, ! 779: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76} ! 780: }, ! 781: // SWORD ! 782: {{8, SWORDATTACK, 229, 123}, {8, SWORDATTACK + 1, 221, 87}, {8, SWORDATTACK + 2, 193, 21}, ! 783: {8, SWORDATTACK + 3, 173, 0}, {8, SWORDATTACK + 4, 61, 0}, {8, SWORDATTACK + 5, 33, 48}, ! 784: {8, SWORDATTACK + 6, 126, 131}, {8, SWORDATTACK + 7, 297, 164}, {3, EMPTY, 147, 76}, ! 785: {3, EMPTY, 80, 41}, {3, EMPTY, 107, 52}, {3, EMPTY, 147, 76} ! 786: }, ! 787: // ZAXEATTACK ! 788: {{6, ZAXEATTACK, 179, 117}, {6, ZAXEATTACK + 6, 217, 107}, ! 789: {6, ZAXEATTACK + 7, 106, 146}, {6, ZAXEATTACK + 8, 94, 128}, ! 790: {6, ZAXEATTACK + 9, 123, 132}, {6, ZAXEATTACK + 10, 102, 134}, ! 791: {6, ZAXEATTACK + 11, 112, 45}, {6, ZAXEATTACK + 12, 102, 0}, ! 792: {6, ZAXEATTACK + 13, 68, 42}, {6, ZAXEATTACK + 14, 42, 138}, ! 793: {6, EMPTY, 107, 52}, {1, EMPTY, 147, 76} ! 794: }, ! 795: // ZBOW ! 796: {{8, ZBOWWALK, 75, 13}, {8, ZBOWATTACK, 90, 0}, {8, ZBOWATTACK + 1, 70, 0}, ! 797: {8, ZBOWATTACK + 2, 70, 0}, {6, ZBOWATTACK + 3, 70, 0}, {4, ZBOWATTACK + 4, 70, 0}, ! 798: {1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13}, ! 799: {1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13}, {1, EMPTY, 147, 76} ! 800: }, ! 801: // ZPIKE ! 802: {{10, ZPIKEREADY + 5, 210, 127}, {10, EMPTY, 80, 41}, {10, EMPTY, 107, 52}, {10, EMPTY, 147, 76}, ! 803: {10, ZPIKEATTACK, 0, 43}, {10, ZPIKEATTACK + 1, 0, 0}, {10, ZPIKEATTACK + 2, 0, 0}, ! 804: {10, ZPIKEATTACK + 3, 45, 0}, {10, ZPIKEATTACK + 4, 51, 23}, {10, ZPIKEATTACK + 5, 59, 121}, ! 805: {12, EMPTY, 80, 41}, {1, EMPTY, 107, 52} ! 806: }, ! 807: {{8, ZTWOHANDATTACK, 98, 133}, {8, ZTWOHANDATTACK + 6, 115, 130}, ! 808: {8, ZTWOHANDATTACK + 7, 125, 128}, {8, ZTWOHANDATTACK + 8, 116, 82}, ! 809: {8, ZTWOHANDATTACK + 9, 117, 9}, {8, ZTWOHANDATTACK + 10, 180, 0}, ! 810: {8, ZTWOHANDATTACK + 11, 174, 0}, {8, ZTWOHANDATTACK + 12, 166, 0}, ! 811: {8, ZTWOHANDATTACK + 13, 125, 90}, {8, ZTWOHANDATTACK + 14, 83, 166}, ! 812: {1, EMPTY, 30, 159}, {1, EMPTY, 80, 41} ! 813: }, ! 814: // { { 12,ZHALBERDATTACK,173,29 },{6,EMPTY,107,52}, ! 815: // { 6,EMPTY,147,76},{ 12,ZHALBERDATTACK+3,117,0 }, ! 816: // { 12,ZHALBERDATTACK+4,245,0},{12,ZHALBERDATTACK+5,237,0}, ! 817: // { 6,EMPTY,80,41 },{12,ZHALBERDATTACK+6,115,0}, ! 818: // { 12,ZHALBERDATTACK+7,9,0 },{ 12,ZHALBERDATTACK+8,0,42 }, ! 819: // { 1,ZHALBERDATTACK,173,29 },{ 1,EMPTY,147,76 } ! 820: // } ! 821: {{12, ZHALBERDATTACK, 245, 30}, {12, EMPTY, 107, 52}, {12, EMPTY, 147, 76}, ! 822: {12, HALBERDATTACK1 + 1, 249, 45}, {12, HALBERDATTACK1 + 2, 161, 60}, {12, HALBERDATTACK1 + 3, 45, 88}, ! 823: {12, EMPTY, 80, 41}, {12, HALBERDATTACK1 + 3, 45, 88}, {12, HALBERDATTACK1 + 2, 161, 60}, ! 824: {12, HALBERDATTACK1 + 1, 249, 45}, {12, EMPTY, 107, 52}, {1, EMPTY, 147, 76} ! 825: } ! 826: ! 827: ! 828: }; ! 829: ! 830: ! 831: //SCOTT ! 832: struct daweapons zweaponanimtics2[MAXWEAPONS][MAXFRAMES] = ! 833: { ! 834: // FIST ! 835: {{10, RFIST, 216, 120}, {10, RFIST + 1, 166, 113}, {10, RFIST + 2, 156, 129}, ! 836: {10, RFIST + 3, 169, 151}, {10, RFIST + 4, 153, 124}, {10, RFIST + 5, 224, 133}, ! 837: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}, ! 838: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76} ! 839: }, ! 840: // ZKNIFE ! 841: {{8, ZKNIFEATTACK, 189, 52}, {8, ZKNIFEATTACK + 1, 254, 68}, {16, EMPTY, 147, 76}, ! 842: {8, ZKNIFEATTACK2, 206, 114}, {8, ZKNIFEATTACK2 + 1, 107, 112}, {8, ZKNIFEATTACK2 + 2, 22, 138}, ! 843: {8, ZKNIFEATTACK2 + 3, 0, 161}, {16, EMPTY, 136, 100}, {8, KNIFEATTACK2 + 3, 0, 161}, ! 844: {8, ZKNIFEATTACK2 + 2, 22, 138}, {8, ZKNIFEATTACK2 + 1, 107, 112}, {8, KNIFEATTACK2, 206, 114} ! 845: }, ! 846: // ZSHORTATTACK2 ! 847: {{10, ZSHORTATTACK2, 238, 99}, {10, ZSHORTATTACK2 + 1, 202, 11}, ! 848: {10, ZSHORTATTACK2 + 2, 182, 0}, {10, ZSHORTATTACK2 + 3, 79, 13}, ! 849: {10, ZSHORTATTACK2 + 4, 40, 45}, {10, ZSHORTATTACK2 + 5, 119, 123}, ! 850: {10, ZSHORTATTACK2 + 6, 295, 179}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, ! 851: {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24} ! 852: }, ! 853: // ZSTARATTACK2 ! 854: {{12, ZSTARATTACK2, 44, 110}, {12, ZSTARATTACK2 + 1, 26, 91}, {12, ZSTARATTACK2 + 2, 177, 38}, ! 855: {12, ZSTARATTACK2 + 3, 262, 11}, {12, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, ! 856: {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, ! 857: {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24} ! 858: }, ! 859: // SWORD ! 860: {{8, SWORDATTACK2 + 1, 195, 63}, {8, SWORDATTACK2 + 2, 250, 54}, {8, SWORDATTACK2 + 3, 275, 37}, ! 861: {16, EMPTY, 61, 0}, {8, SWORDATTACK2 + 4, 229, 66}, {8, SWORDATTACK2 + 5, 185, 0}, ! 862: {8, SWORDATTACK2 + 6, 158, 115}, {8, SWORDATTACK2 + 7, 57, 163}, {1, EMPTY, 57, 163}, ! 863: {1, EMPTY, 57, 163}, {1, EMPTY, 57, 163}, {1, EMPTY, 57, 163} ! 864: }, ! 865: // ZAXEATTACK2 ! 866: {{6, ZAXEATTACK2, 200, 111}, {6, ZAXEATTACK2 + 1, 5, 136}, {6, ZAXEATTACK2 + 2, 69, 162}, ! 867: {6, ZAXEATTACK2 + 3, 147, 164}, {6, ZAXEATTACK2 + 4, 76, 152}, {6, ZAXEATTACK2 + 5, 33, 95}, ! 868: {6, ZAXEATTACK2 + 6, 0, 91}, {6, ZAXEATTACK2 + 7, 0, 98}, {6, EMPTY, 147, 76}, ! 869: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76} ! 870: }, ! 871: // ZBOW ! 872: // { { 8,ZBOWWALK,75,13},{8,ZBOWWALK+1,90,0},{8,ZBOWWALK+2,70,0}, ! 873: // { 8,ZBOWWALK+3,70,0},{6,ZBOWWALK+4,70,0},{4,ZBOWWALK+5,70,0}, ! 874: // { 1,EMPTY,126,131},{1,EMPTY,297,164},{1,EMPTY,147,76}, ! 875: // { 1,EMPTY,80,41 },{1,EMPTY,107,52},{1,EMPTY,147,76} ! 876: // }, ! 877: {{8, ZBOWWALK, 75, 13}, {8, ZBOWATTACK, 90, 0}, {8, ZBOWATTACK + 1, 70, 0}, ! 878: {8, ZBOWATTACK + 2, 70, 0}, {6, ZBOWATTACK + 3, 70, 0}, {4, ZBOWATTACK + 4, 70, 0}, ! 879: {1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13}, ! 880: {1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13}, {1, EMPTY, 147, 76} ! 881: }, ! 882: ! 883: // ZPIKEATTACK2 ! 884: {{10, ZPIKEATTACK2, 266, 147}, {10, ZPIKEATTACK2 + 1, 182, 117}, {10, ZPIKEATTACK2 + 2, 123, 84}, ! 885: {10, ZPIKEATTACK2 + 3, 7, 48}, {10, ZPIKEATTACK2 + 4, 0, 83}, {10, ZPIKEATTACK2 + 5, 0, 158}, ! 886: {10, ZPIKEATTACK2 + 6, 25, 117}, {10, ZPIKEATTACK2 + 7, 139, 93}, {10, ZPIKEATTACK2 + 8, 234, 75}, ! 887: {8, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76} ! 888: }, ! 889: // ZTWOHANDATTACK2 ! 890: {{8, ZTWOHANDATTACK2, 0, 143}, {8, ZTWOHANDATTACK2 + 1, 0, 103}, {8, ZTWOHANDATTACK2 + 2, 0, 70}, ! 891: {8, ZTWOHANDATTACK2 + 3, 41, 0}, {8, ZTWOHANDATTACK2 + 4, 54, 0}, {8, ZTWOHANDATTACK2 + 5, 166, 21}, ! 892: {8, ZTWOHANDATTACK2 + 6, 242, 108}, {8, EMPTY, 260, 168}, {1, EMPTY, 130, 27}, ! 893: {1, EMPTY, 138, 125}, {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52} ! 894: }, ! 895: // ZHALBERDATTACK2 ! 896: // { { 12,ZHALBERDATTACK2,118,0 },{ 12,ZHALBERDATTACK2+1,80,0}, ! 897: // { 12,ZHALBERDATTACK2+2,29,0},{ 12,ZHALBERDATTACK2+3,42,1}, ! 898: // { 12,ZHALBERDATTACK2+1,80,0},{1,ZHALBERDATTACK2,118,0}, ! 899: // { 1,EMPTY,173,29},{1,EMPTY,173,29}, ! 900: // { 1,EMPTY,166,10},{1,EMPTY,80,41 }, ! 901: // { 1,EMPTY,107,52},{1,EMPTY,147,76} ! 902: // } ! 903: {{12, HALBERDATTACK1, 245, 22}, {12, HALBERDATTACK2, 114, 35}, {12, HALBERDATTACK2 + 1, 105, 87}, ! 904: {12, HALBERDATTACK2 + 2, 54, 107}, {12, HALBERDATTACK2 + 3, 48, 102}, {1, HALBERDATTACK2 + 3, 48, 102}, ! 905: {1, HALBERDATTACK2 + 3, 48, 102}, {12, HALBERDATTACK2 + 2, 54, 107}, {12, HALBERDATTACK2 + 1, 105, 87}, ! 906: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76} ! 907: } ! 908: ! 909: }; ! 910: ! 911: struct daweapons zthrowanimtics[MAXNUMORBS][MAXFRAMES + 1] = ! 912: { ! 913: #if 0 ! 914: // MUTWOHANDS - scare ! 915: {{10, MUTWOHANDS, 19, 155}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93}, ! 916: {10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83}, ! 917: {10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113}, ! 918: {10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117}, ! 919: {1, EMPTY, 127, 170} ! 920: }, ! 921: #endif ! 922: // MUTWOHANDS - scare ! 923: {{1, EMPTY, 127, 170}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93}, ! 924: {10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83}, ! 925: {10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113}, ! 926: {10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117}, ! 927: {1, EMPTY, 127, 170} ! 928: }, ! 929: #if 0 ! 930: // MUMEDUSA - night vis ! 931: {{10, ZLIGHT, 0, 177}, {10, ZLIGHT + 1, 0, 137}, {10, ZLIGHT + 2, 48, 82}, ! 932: {10, ZLIGHT + 3, 127, 41}, {10, ZLIGHT + 4, 210, 9}, {10, ZLIGHT + 5, 284, 26}, ! 933: {10, ZLIGHT + 6, 213, 63}, {10, ZLIGHT + 7, 147, 99}, {10, ZLIGHT + 8, 91, 136}, ! 934: {10, ZLIGHT + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170}, ! 935: {1, EMPTY, 127, 170} ! 936: }, ! 937: #endif ! 938: // MUTWOHANDS - night vis ! 939: {{10, ZFIREBALL, 0, 177}, {10, ZFIREBALL + 1, 0, 137}, {10, ZFIREBALL + 2, 48, 82}, ! 940: {10, ZFIREBALL + 3, 127, 41}, {10, ZFIREBALL + 4, 210, 9}, {10, ZFIREBALL + 5, 284, 26}, ! 941: {10, ZFIREBALL + 6, 213, 63}, {10, ZFIREBALL + 7, 147, 99}, {10, ZFIREBALL + 8, 91, 136}, ! 942: {10, ZFIREBALL + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170}, ! 943: {1, EMPTY, 127, 170} ! 944: }, ! 945: #if 0 ! 946: // BMUTWOHANDS - freeze ! 947: {{10, ZFREEZE, 0, 101}, {10, ZFREEZE + 1, 0, 51}, {10, ZFREEZE + 2, 0, 71}, ! 948: {10, ZFREEZE + 3, 4, 85}, {10, ZFREEZE + 4, 32, 78}, {10, ZFREEZE + 5, 51, 80}, ! 949: {10, ZFREEZE + 6, 50, 80}, {10, ZFREEZE + 7, 49, 89}, {10, ZFREEZE + 8, 49, 89}, ! 950: {10, ZFREEZE + 9, 49, 98}, {10, ZFREEZE + 10, 47, 105}, {10, ZFREEZE + 11, 48, 121}, ! 951: {1, EMPTY, 127, 170} ! 952: }, ! 953: #endif ! 954: // BMUTWOHANDS - freeze ! 955: {{1, EMPTY, 127, 170}, {10, ZFREEZE + 1, 0, 51}, {10, ZFREEZE + 2, 0, 71}, ! 956: {10, ZFREEZE + 3, 4, 85}, {10, ZFREEZE + 4, 32, 78}, {10, ZFREEZE + 5, 51, 80}, ! 957: {10, ZFREEZE + 6, 50, 80}, {10, ZFREEZE + 7, 49, 89}, {10, ZFREEZE + 8, 49, 89}, ! 958: {10, ZFREEZE + 9, 49, 98}, {10, ZFREEZE + 10, 47, 105}, {10, ZFREEZE + 11, 48, 121}, ! 959: {1, EMPTY, 127, 170} ! 960: }, ! 961: #if 0 ! 962: // MUTWOHANDS - magic arrow ! 963: {{10, MUTWOHANDS, 19, 155}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93}, ! 964: {10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83}, ! 965: {10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113}, ! 966: {10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117}, ! 967: {1, EMPTY, 127, 170} ! 968: }, ! 969: #endif ! 970: // MUTWOHANDS - magic arrow ! 971: {{1, EMPTY, 127, 170}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93}, ! 972: {10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83}, ! 973: {10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113}, ! 974: {10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117}, ! 975: {1, EMPTY, 127, 170} ! 976: }, ! 977: // MUTWOHANDS - open door ! 978: {{15, MUTWOHANDS, 19, 155}, {15, MUTWOHANDS + 1, 0, 128}, {15, MUTWOHANDS + 2, 0, 93}, ! 979: {15, MUTWOHANDS + 3, 0, 83}, {15, MUTWOHANDS + 4, 0, 72}, {15, MUTWOHANDS + 5, 0, 83}, ! 980: {15, MUTWOHANDS + 6, 10, 96}, {15, MUTWOHANDS + 7, 43, 109}, {15, MUTWOHANDS + 8, 69, 113}, ! 981: {15, MUTWOHANDS + 9, 65, 115}, {15, MUTWOHANDS + 10, 64, 117}, {15, MUTWOHANDS + 11, 63, 117}, ! 982: {1, EMPTY, 127, 170} ! 983: }, ! 984: #if 0 ! 985: // MUMEDUSA - fly ! 986: {{10, MUMEDUSA, 0, 177}, {10, MUMEDUSA + 1, 0, 137}, {10, MUMEDUSA + 2, 48, 82}, ! 987: {10, MUMEDUSA + 3, 127, 41}, {10, MUMEDUSA + 4, 210, 9}, {10, MUMEDUSA + 5, 284, 26}, ! 988: {10, MUMEDUSA + 6, 213, 63}, {10, MUMEDUSA + 7, 147, 99}, {10, MUMEDUSA + 8, 91, 136}, ! 989: {10, MUMEDUSA + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170}, ! 990: {1, EMPTY, 127, 170} ! 991: }, ! 992: #endif ! 993: // MUMEDUSA - fly ! 994: {{10, ZLIGHT, 0, 177}, {10, ZLIGHT + 1, 0, 137}, {10, ZLIGHT + 2, 48, 82}, ! 995: {10, ZLIGHT + 3, 127, 41}, {10, ZLIGHT + 4, 210, 9}, {10, ZLIGHT + 5, 284, 26}, ! 996: {10, ZLIGHT + 6, 213, 63}, {10, ZLIGHT + 7, 147, 99}, {10, ZLIGHT + 8, 91, 136}, ! 997: {10, ZLIGHT + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170}, ! 998: {1, EMPTY, 127, 170} ! 999: }, ! 1000: #if 0 ! 1001: // MUTWOHANDS - fireball ! 1002: {{10, ZFIREBALL, 0, 177}, {10, ZFIREBALL + 1, 0, 137}, {10, ZFIREBALL + 2, 48, 82}, ! 1003: {10, ZFIREBALL + 3, 127, 41}, {10, ZFIREBALL + 4, 210, 9}, {10, ZFIREBALL + 5, 284, 26}, ! 1004: {10, ZFIREBALL + 6, 213, 63}, {10, ZFIREBALL + 7, 147, 99}, {10, ZFIREBALL + 8, 91, 136}, ! 1005: {10, ZFIREBALL + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170}, ! 1006: {1, EMPTY, 127, 170} ! 1007: }, ! 1008: #endif ! 1009: // MUTWOHANDS - fireball ! 1010: {{1, EMPTY, 127, 170}, {10, ZFIREBALL + 1, 0, 137}, {10, ZFIREBALL + 2, 48, 82}, ! 1011: {10, ZFIREBALL + 3, 127, 41}, {10, ZFIREBALL + 4, 210, 9}, {10, ZFIREBALL + 5, 284, 26}, ! 1012: {10, ZFIREBALL + 6, 213, 63}, {10, ZFIREBALL + 7, 147, 99}, {10, ZFIREBALL + 8, 91, 136}, ! 1013: {10, ZFIREBALL + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170}, ! 1014: {1, EMPTY, 127, 170} ! 1015: }, ! 1016: #if 0 ! 1017: // MUTWOHANDS - nuke ! 1018: {{10, MUTWOHANDS, 19, 155}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93}, ! 1019: {10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83}, ! 1020: {10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113}, ! 1021: {10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117}, ! 1022: {1, EMPTY, 127, 170} ! 1023: } ! 1024: #endif ! 1025: // MUTWOHANDS - nuke ! 1026: {{1, EMPTY, 127, 170}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93}, ! 1027: {10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83}, ! 1028: {10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113}, ! 1029: {10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117}, ! 1030: {1, EMPTY, 127, 170} ! 1031: } ! 1032: }; ! 1033: ! 1034: ! 1035: // END OF THE NEW WEAPONS ! 1036: ! 1037: #define MAXSTATUSBAR 3 ! 1038: ! 1039: int heartics = 0; ! 1040: int heartincr = 0; ! 1041: int showstatusbar = 0; ! 1042: int showheart = 0; ! 1043: ! 1044: int showmana = 0; ! 1045: ! 1046: int showbook = 0; ! 1047: int showbooktype = 0; ! 1048: int showbookflip; ! 1049: int showbookanim; ! 1050: int currentorb; ! 1051: int currentpotion; ! 1052: ! 1053: void ! 1054: loadinglevelmsg(void) ! 1055: { ! 1056: #if 0 ! 1057: int i,j; ! 1058: ! 1059: if (svga) { ! 1060: rotatesprite(0L << 16, 0L << 16, 65536L, 0, VMAIN, 0, ! 1061: 0, 8 + 16, 0L, 0L, xdim - 1L, ydim - 1L); ! 1062: } ! 1063: else { ! 1064: rotatesprite(0L << 16, 0L << 16, 65536L, 0, VMAINBLANK, 0, ! 1065: 0, 8 + 16, 0L, 0L, xdim - 1L, ydim - 1L); ! 1066: } ! 1067: strcpy(tempbuf,"LOADING LEVEL"); ! 1068: for (i=0,j=0 ; i < strlen(tempbuf) ; i++) { ! 1069: j += tilesizx[DAFONT]; ! 1070: } ! 1071: fancyfont((xdim>>1)-(j>>1), (ydim>>1), DAFONT, tempbuf, 1); ! 1072: nextpage(); ! 1073: #endif ! 1074: } ! 1075: ! 1076: extern ! 1077: int quicksaveflag; ! 1078: ! 1079: void ! 1080: playerdead(struct player * plr) ! 1081: { ! 1082: ! 1083: int i,j,loadlast=0; ! 1084: int spellbookpage; ! 1085: long clockgoal, ! 1086: hiz,hihit,loz,lohit, ! 1087: goalz; ! 1088: long goaltime; ! 1089: int exit = 0; ! 1090: ! 1091: if (playerdie == 1) { ! 1092: return; ! 1093: } ! 1094: if (plr->potion[0] > 0 && !spiked) { ! 1095: i=currentpotion; ! 1096: currentpotion=0; ! 1097: usapotion(plr); ! 1098: currentpotion=i; ! 1099: updatepics(); ! 1100: return; ! 1101: } ! 1102: clockgoal = totalclock + 240; ! 1103: ! 1104: playerdie = 1; ! 1105: currspikeframe = 0; ! 1106: ! 1107: if (spiked == 1) { ! 1108: spiketics = spikeanimtics[0].daweapontics; ! 1109: playsound_loc(S_GORE1, plr->x, plr->y); ! 1110: SND_Sound(S_HEARTBEAT); ! 1111: } ! 1112: ! 1113: SND_PlaySound(S_PLRDIE1, 0, 0, 0, 0); ! 1114: ! 1115: netsendmove(); ! 1116: ! 1117: // while (totalclock < clockgoal) { ! 1118: keystatus[keys[KEYFIRE]] = 0; ! 1119: keystatus[keys[KEYUSE]] = 0; ! 1120: keystatus[1] = 0; ! 1121: startredflash(60); ! 1122: while (keystatus[keys[KEYFIRE]] == 0 && keystatus[keys[KEYUSE]] == 0 ! 1123: && keystatus[1] == 0 && keystatus[0x43] == 0) { ! 1124: getzrange(plr->x, plr->y, plr->z, plr->sector, ! 1125: &hiz, &hihit, &loz, &lohit, 128L, 0); ! 1126: if (plr->horiz < 100 + (YDIM >> 1)) { ! 1127: plr->horiz += (synctics << 1); ! 1128: } ! 1129: if (plr->z < loz-(4<<8)) { ! 1130: plr->z += (synctics<<8); ! 1131: } ! 1132: if (goreon && ((rand()%10) > 8)) { ! 1133: startredflash(10); ! 1134: chunksofmeat(plr,plr->spritenum,plr->x,plr->y,plr->z, ! 1135: plr->sector,(short)plr->ang); ! 1136: } ! 1137: drawscreen(plr); ! 1138: animateobjs(plr); ! 1139: animatetags(plr); ! 1140: doanimations((long) synctics); ! 1141: dodelayitems((long) synctics); ! 1142: nextpage(); ! 1143: } ! 1144: if (keystatus[0x43]) { ! 1145: loadlast=1; ! 1146: keystatus[0x43]=0; ! 1147: } ! 1148: loadinglevelmsg(); ! 1149: ! 1150: goaltime = totalclock + 240; ! 1151: ! 1152: while (!exit) { ! 1153: if (totalclock > goaltime) ! 1154: exit = 1; ! 1155: if (keystatus[0x39] > 0) ! 1156: exit = 1; ! 1157: } ! 1158: ! 1159: // check loops wando ! 1160: SND_CheckLoops(); ! 1161: ! 1162: keystatus[0x39] = 0; ! 1163: ! 1164: attacktheme = 0; ! 1165: vampiretime = 0; ! 1166: playertorch = 0; ! 1167: shieldtype = 0; ! 1168: shieldpoints = 0; ! 1169: playerdie = 0; ! 1170: spiked = 0; ! 1171: shockme = -1; ! 1172: poisoned = 0; ! 1173: poisontime = 0; ! 1174: currspikeframe = 0; ! 1175: spellbookflip = 0; ! 1176: displaytime = 0; ! 1177: ! 1178: plr->oldsector = plr->sector; ! 1179: plr->horiz = 100; ! 1180: plr->zoom = 256; ! 1181: plr->dimension = 3; ! 1182: plr->height = PLAYERHEIGHT; ! 1183: ! 1184: /* ! 1185: for(i=0;i<=9;i++) { ! 1186: plr->ammo[i]=0; ! 1187: plr->weapon[i]=0; ! 1188: if( i < 9 ) { ! 1189: plr->orb[i]=0; ! 1190: plr->orbammo[i]=0; ! 1191: } ! 1192: } ! 1193: ! 1194: plr->weapon[2]=1; ! 1195: plr->ammo[2]=50; ! 1196: ! 1197: ! 1198: plr->weapon[0]=plr->weapon[1]=1; ! 1199: plr->ammo[0]=32000; ! 1200: ! 1201: for(i=0;i<MAXPOTIONS;i++) ! 1202: plr->potion[i]=0; ! 1203: ! 1204: for(i=0;i<MAXTREASURES;i++) ! 1205: plr->treasure[i]=0; ! 1206: */ ! 1207: ! 1208: selectedgun = 4; ! 1209: ! 1210: for (i = 0; i <= 9; i++) { ! 1211: if (i < 5) { ! 1212: plr->ammo[i] = 40; ! 1213: plr->weapon[i] = 1; ! 1214: } ! 1215: else { ! 1216: plr->ammo[i] = 0; ! 1217: plr->weapon[i] = 0; ! 1218: } ! 1219: if (i < 9) { ! 1220: plr->orb[i] = 0; ! 1221: plr->orbammo[i] = 0; ! 1222: } ! 1223: } ! 1224: ! 1225: if (difficulty > 1) { ! 1226: plr->weapon[0] = plr->weapon[1] = 1; ! 1227: plr->ammo[0] = 32000; ! 1228: plr->ammo[1] = 45; ! 1229: } ! 1230: ! 1231: for (i = 0; i < MAXPOTIONS; i++) ! 1232: plr->potion[i] = 0; ! 1233: ! 1234: for (i = 0; i < MAXTREASURES; i++) ! 1235: plr->treasure[i] = 0; ! 1236: ! 1237: plr->potion[0] = 3; ! 1238: plr->potion[3] = 1; ! 1239: ! 1240: hasshot = 0; ! 1241: orbshot = 0; ! 1242: oldmousestatus = 0; ! 1243: ! 1244: plr->lvl = 1; ! 1245: plr->score = 0; ! 1246: plr->health = 100; ! 1247: plr->maxhealth = 100; ! 1248: plr->armor = 0; ! 1249: plr->armortype = 0; ! 1250: currentorb = 0; ! 1251: currentpotion = 0; ! 1252: ! 1253: for (i = 0; i < MAXNUMORBS; i++) ! 1254: plr->orbactive[i] = -1; ! 1255: ! 1256: lockclock = totalclock; ! 1257: ! 1258: currweapon = selectedgun = 4; ! 1259: ! 1260: currweaponfired = 3; ! 1261: currweaponflip = 0; ! 1262: currweaponanim = 0; ! 1263: ! 1264: helmettime = -1; ! 1265: ! 1266: if (svga == 0) { ! 1267: if (plr->screensize <= 320) { ! 1268: spellbookpage = spellbookanim[currentorb][8].daweaponframe; ! 1269: itemtoscreen(121L, 161L, spellbookpage, 0, 0); ! 1270: ! 1271: } ! 1272: } ! 1273: if (svga == 1) { ! 1274: if (plr->screensize == 320) { ! 1275: spellbookpage = sspellbookanim[currentorb][8].daweaponframe; ! 1276: rotatesprite((121L << 1) << 16, ! 1277: 389L, ! 1278: 65536L, ! 1279: 0, ! 1280: spellbookpage, ! 1281: 0, ! 1282: 0, ! 1283: 8 + 16, ! 1284: 0L, ! 1285: 0L, ! 1286: xdim - 1L, ! 1287: ydim - 1L); ! 1288: ! 1289: } ! 1290: } ! 1291: ! 1292: ! 1293: justteleported = 1; ! 1294: ! 1295: if (netgame == 0) { ! 1296: startsong(rand() % 2); ! 1297: if (loadlast) { ! 1298: quicksaveflag=1; ! 1299: loadgame(plr); ! 1300: quicksaveflag=0; ! 1301: updatestatusbar(); ! 1302: strcpy(displaybuf,"quick save loaded"); ! 1303: displaytime = 360; ! 1304: } ! 1305: else { ! 1306: loadnewlevel(mapon); ! 1307: } ! 1308: } ! 1309: else { ! 1310: startsong(rand() % 2); ! 1311: netrestartplayer(plr); ! 1312: } ! 1313: ! 1314: displaytime = -1; ! 1315: shadowtime = -1; ! 1316: helmettime = -1; ! 1317: nightglowtime = -1; ! 1318: strongtime = -1; ! 1319: invisibletime = -1; ! 1320: svgahealth = -1; ! 1321: ! 1322: // updatepics(); ! 1323: ! 1324: } ! 1325: ! 1326: ! 1327: void ! 1328: spikeheart(struct player * plr) ! 1329: { ! 1330: char dabits = 0x02; ! 1331: char dashade = sector[plr->sector].ceilingshade; ! 1332: long dax, ! 1333: day; ! 1334: static long spikeclock; ! 1335: ! 1336: plr = &player[pyrn]; ! 1337: spiketics -= (totalclock-spikeclock); ! 1338: if (spiketics < 0) { ! 1339: spikeclock=totalclock; ! 1340: currspikeframe++; ! 1341: if (currspikeframe > 4) ! 1342: currspikeframe = 4; ! 1343: spiketics = spikeanimtics[currspikeframe].daweapontics; ! 1344: } ! 1345: else ! 1346: currweaponframe = spikeanimtics[currspikeframe].daweaponframe; ! 1347: ! 1348: spikeframe = spikeanimtics[currspikeframe].daweaponframe; ! 1349: dax = spikeanimtics[currspikeframe].currx; ! 1350: day = spikeanimtics[currspikeframe].curry; ! 1351: overwritesprite(dax, day, spikeframe, dashade, dabits, 0); ! 1352: startredflash(10); ! 1353: } ! 1354: ! 1355: void ! 1356: updateloadedplayer(int i) ! 1357: { ! 1358: ! 1359: struct player *plr; ! 1360: plr = &player[pyrn]; ! 1361: ! 1362: playerdie = 0; ! 1363: spiked = 0; ! 1364: lives = 0; ! 1365: ! 1366: plr->oldsector = plr->sector; ! 1367: plr->horiz = 100; ! 1368: plr->zoom = 256; ! 1369: plr->dimension = 3; ! 1370: plr->height = PLAYERHEIGHT; ! 1371: plr->spritenum = i; ! 1372: ! 1373: sprite[plr->spritenum].x = plr->x; ! 1374: sprite[plr->spritenum].y = plr->y; ! 1375: sprite[plr->spritenum].z = plr->z + (plr->height << 8); ! 1376: sprite[plr->spritenum].cstat = 1 + 256; ! 1377: sprite[plr->spritenum].picnum = GRONSW; ! 1378: sprite[plr->spritenum].shade = 0; ! 1379: sprite[plr->spritenum].xrepeat = 36; ! 1380: sprite[plr->spritenum].yrepeat = 36; ! 1381: sprite[plr->spritenum].ang = plr->ang; ! 1382: sprite[plr->spritenum].xvel = 0; ! 1383: sprite[plr->spritenum].yvel = 0; ! 1384: sprite[plr->spritenum].zvel = 0; ! 1385: sprite[plr->spritenum].owner = 4096; ! 1386: sprite[plr->spritenum].lotag = 0; ! 1387: sprite[plr->spritenum].hitag = 0; ! 1388: // sprite[plr->spritenum].pal=1; ! 1389: sprite[plr->spritenum].pal = 10; ! 1390: sprite[plr->spritenum].sectnum = plr->sector; ! 1391: ! 1392: setsprite((short) i, sprite[i].x, sprite[i].y, sprite[i].z); ! 1393: ! 1394: } ! 1395: ! 1396: void ! 1397: initplayersprite(void) ! 1398: { ! 1399: ! 1400: struct player *plr; ! 1401: int i; ! 1402: int spellbookpage; ! 1403: ! 1404: plr = &player[pyrn]; ! 1405: ! 1406: attacktheme = 0; ! 1407: spiked = 0; ! 1408: shockme = -1; ! 1409: lives = 0; ! 1410: ! 1411: plr->oldsector = plr->sector; ! 1412: plr->horiz = 100; ! 1413: plr->zoom = 256; ! 1414: plr->dimension = 3; ! 1415: plr->height = PLAYERHEIGHT; ! 1416: plr->z = sector[plr->sector].floorz - (plr->height << 8); ! 1417: ! 1418: plr->spritenum = insertsprite(plr->sector, 0); ! 1419: ! 1420: plr->onsomething = 1; ! 1421: ! 1422: sprite[plr->spritenum].x = plr->x; ! 1423: sprite[plr->spritenum].y = plr->y; ! 1424: sprite[plr->spritenum].z = plr->z + (plr->height << 8); ! 1425: sprite[plr->spritenum].cstat = 1 + 256 + 32768; ! 1426: sprite[plr->spritenum].picnum = GRONSW; ! 1427: sprite[plr->spritenum].shade = 0; ! 1428: sprite[plr->spritenum].xrepeat = 36; ! 1429: sprite[plr->spritenum].yrepeat = 36; ! 1430: sprite[plr->spritenum].ang = plr->ang; ! 1431: sprite[plr->spritenum].xvel = 0; ! 1432: sprite[plr->spritenum].yvel = 0; ! 1433: sprite[plr->spritenum].zvel = 0; ! 1434: sprite[plr->spritenum].owner = 4096; ! 1435: sprite[plr->spritenum].lotag = 0; ! 1436: sprite[plr->spritenum].hitag = 0; ! 1437: sprite[plr->spritenum].pal = 10; ! 1438: sprite[plr->spritenum].clipdist = 48; ! 1439: ! 1440: if (loadedgame == 0 && justteleported == 0) { ! 1441: vampiretime = 0; ! 1442: playertorch = 0; ! 1443: shieldtype = 0; ! 1444: shieldpoints = 0; ! 1445: playerdie = 0; ! 1446: poisoned = 0; ! 1447: poisontime = -1; ! 1448: ! 1449: selectedgun = 4; ! 1450: ! 1451: for (i = 0; i <= 9; i++) { ! 1452: if (i < 5) { ! 1453: plr->ammo[i] = 40; ! 1454: plr->weapon[i] = 1; ! 1455: } ! 1456: else { ! 1457: plr->ammo[i] = 0; ! 1458: plr->weapon[i] = 0; ! 1459: } ! 1460: if (i < 9) { ! 1461: plr->orb[i] = 0; ! 1462: plr->orbammo[i] = 0; ! 1463: } ! 1464: } ! 1465: ! 1466: if (difficulty > 1) { ! 1467: plr->weapon[0] = plr->weapon[1] = 1; ! 1468: plr->ammo[0] = 32000; ! 1469: plr->ammo[1] = 45; ! 1470: } ! 1471: ! 1472: for (i = 0; i < MAXPOTIONS; i++) ! 1473: plr->potion[i] = 0; ! 1474: ! 1475: for (i = 0; i < MAXTREASURES; i++) ! 1476: plr->treasure[i] = 0; ! 1477: ! 1478: plr->potion[0] = 3; ! 1479: plr->potion[3] = 1; ! 1480: ! 1481: plr->lvl = 1; ! 1482: plr->score = 0; ! 1483: plr->health = 100; ! 1484: plr->maxhealth = 100; ! 1485: plr->armor = 0; ! 1486: plr->armortype = 0; ! 1487: currentorb = 0; ! 1488: currentpotion = 0; ! 1489: ! 1490: currweapon = selectedgun = 4; ! 1491: ! 1492: currweaponfired = 3; ! 1493: currweaponflip = 0; ! 1494: ! 1495: ! 1496: for (i = 0; i < MAXNUMORBS; i++) ! 1497: plr->orbactive[i] = -1; ! 1498: ! 1499: lockclock = totalclock; ! 1500: ! 1501: spellbookflip = 0; ! 1502: ! 1503: if (svga == 0) { ! 1504: if (plr->screensize <= 320) { ! 1505: spellbookpage = spellbookanim[currentorb][8].daweaponframe; ! 1506: itemtoscreen(121L, 161L, spellbookpage, 0, 0); ! 1507: } ! 1508: } ! 1509: if (svga == 1) { ! 1510: if (plr->screensize == 320) { ! 1511: // spellbookpage=sspellbookanim[currentorb][8].daweaponframe ! 1512: // ; ! 1513: // itemtoscreen(121L<<1,389L,spellbookpage,0,0); ! 1514: spellbookpage = sspellbookanim[currentorb][8].daweaponframe; ! 1515: rotatesprite((121L << 1) << 16, ! 1516: 389L << 16, ! 1517: 65536L, ! 1518: 0, ! 1519: spellbookpage, ! 1520: 0, ! 1521: 0, ! 1522: 8 + 16, ! 1523: 0L, ! 1524: 0L, ! 1525: xdim - 1L, ! 1526: ydim - 1L); ! 1527: ! 1528: ! 1529: } ! 1530: } ! 1531: ! 1532: invincibletime = manatime = -1; ! 1533: hasshot = 0; ! 1534: orbshot = 0; ! 1535: oldmousestatus = 0; ! 1536: ! 1537: displaytime = -1; ! 1538: shadowtime = -1; ! 1539: helmettime = -1; ! 1540: nightglowtime = -1; ! 1541: strongtime = -1; ! 1542: invisibletime = -1; ! 1543: svgahealth = -1; ! 1544: } ! 1545: ! 1546: updatepics(); ! 1547: ! 1548: } ! 1549: ! 1550: // JOE - NOTE ! 1551: // weapon[1] = dagger ! 1552: // weapon[2] = short sword ! 1553: // weapon[3] = morning star ! 1554: // weapon[4] = long sword / broad sword ! 1555: // weapon[5] = battle axe ! 1556: // weapon[6] = pike axe ! 1557: // weapon[7] = pike axe (throwpike) ! 1558: // weapon[8] = magic sword ! 1559: // weapon[9] = halberd ! 1560: ! 1561: void ! 1562: autoweaponchange(int dagun) ! 1563: { ! 1564: struct player *plr; ! 1565: ! 1566: if (currweaponanim > 0) ! 1567: return; ! 1568: ! 1569: plr=&player[pyrn]; ! 1570: ! 1571: if (dagun > selectedgun) { ! 1572: selectedgun = dagun; ! 1573: hasshot = 0; ! 1574: currweaponfired = 2; // drop weapon ! 1575: if (enchantedsoundhandle != -1) { ! 1576: SND_StopLoop(enchantedsoundhandle); ! 1577: enchantedsoundhandle=-1; ! 1578: } ! 1579: switch (selectedgun) { ! 1580: case 1: ! 1581: weapondropgoal = 100; ! 1582: weapondrop = 0; ! 1583: break; ! 1584: case 2: ! 1585: if (enchantedsoundhandle == -1 && plr->weapon[selectedgun] == 3) { ! 1586: enchantedsoundhandle=SND_PlaySound(S_FIREWEAPONLOOP,0,0,0,-1); ! 1587: } ! 1588: weapondropgoal = 40; ! 1589: weapondrop = 0; ! 1590: levelpic(); ! 1591: break; ! 1592: case 3: ! 1593: if (enchantedsoundhandle == -1 && plr->weapon[selectedgun] == 3) { ! 1594: enchantedsoundhandle=SND_PlaySound(S_ENERGYWEAPONLOOP,0,0,0,-1); ! 1595: } ! 1596: weapondropgoal = 100; ! 1597: weapondrop = 0; ! 1598: levelpic(); ! 1599: break; ! 1600: case 4: ! 1601: weapondropgoal = 40; ! 1602: weapondrop = 0; ! 1603: levelpic(); ! 1604: break; ! 1605: case 5: ! 1606: if (enchantedsoundhandle == -1 && plr->weapon[selectedgun] == 3) { ! 1607: enchantedsoundhandle=SND_PlaySound(S_ENERGYWEAPONLOOP,0,0,0,-1); ! 1608: } ! 1609: weapondropgoal = 40; ! 1610: weapondrop = 0; ! 1611: levelpic(); ! 1612: break; ! 1613: case 6: ! 1614: if (enchantedsoundhandle == -1 && plr->weapon[selectedgun] == 3) { ! 1615: enchantedsoundhandle=SND_PlaySound(S_FIREWEAPONLOOP,0,0,0,-1); ! 1616: } ! 1617: weapondropgoal = 40; ! 1618: weapondrop = 0; ! 1619: levelpic(); ! 1620: break; ! 1621: case 7: ! 1622: if (enchantedsoundhandle == -1 && plr->weapon[selectedgun] == 3) { ! 1623: enchantedsoundhandle=SND_PlaySound(S_ENERGYWEAPONLOOP,0,0,0,-1); ! 1624: } ! 1625: weapondropgoal = 40; ! 1626: weapondrop = 0; ! 1627: levelpic(); ! 1628: break; ! 1629: case 8: ! 1630: if (enchantedsoundhandle == -1 && plr->weapon[selectedgun] == 3) { ! 1631: enchantedsoundhandle=SND_PlaySound(S_FIREWEAPONLOOP,0,0,0,-1); ! 1632: } ! 1633: weapondropgoal = 40; ! 1634: weapondrop = 0; ! 1635: levelpic(); ! 1636: break; ! 1637: case 9: ! 1638: weapondropgoal = 40; ! 1639: weapondrop = 0; ! 1640: levelpic(); ! 1641: break; ! 1642: } ! 1643: } ! 1644: ! 1645: } ! 1646: ! 1647: void ! 1648: weaponchange(void) ! 1649: { ! 1650: ! 1651: long i; ! 1652: int j; ! 1653: struct player *plr; ! 1654: char temp[50]; ! 1655: ! 1656: plr = &player[pyrn]; ! 1657: ! 1658: if (currweaponanim == 0 && currweaponflip == 0) ! 1659: for (i = 0x2; i <= 0xb; i++) { ! 1660: if (keystatus[i] > 0 && plr->weapon[i - 0x2] > 0) { ! 1661: selectedgun = i - 0x2; ! 1662: keystatus[i] = 0; ! 1663: hasshot = 0; ! 1664: currweaponfired = 2; // drop weapon ! 1665: levelpic(); ! 1666: if (enchantedsoundhandle != -1) { ! 1667: SND_StopLoop(enchantedsoundhandle); ! 1668: enchantedsoundhandle=-1; ! 1669: } ! 1670: switch (selectedgun) { ! 1671: case 0: ! 1672: weapondropgoal = 40; ! 1673: weapondrop = 0; ! 1674: break; ! 1675: case 1: ! 1676: weapondropgoal = 100; ! 1677: weapondrop = 0; ! 1678: break; ! 1679: case 2: ! 1680: if (enchantedsoundhandle == -1 && plr->weapon[selectedgun] == 3) { ! 1681: enchantedsoundhandle=SND_PlaySound(S_FIREWEAPONLOOP,0,0,0,-1); ! 1682: } ! 1683: weapondropgoal = 100; ! 1684: weapondrop = 0; ! 1685: break; ! 1686: case 3: ! 1687: if (enchantedsoundhandle == -1 && plr->weapon[selectedgun] == 3) { ! 1688: enchantedsoundhandle=SND_PlaySound(S_ENERGYWEAPONLOOP,0,0,0,-1); ! 1689: } ! 1690: weapondropgoal = 100; ! 1691: weapondrop = 0; ! 1692: break; ! 1693: case 4: ! 1694: weapondropgoal = 40; ! 1695: weapondrop = 0; ! 1696: break; ! 1697: case 5: ! 1698: if (enchantedsoundhandle == -1 && plr->weapon[selectedgun] == 3) { ! 1699: enchantedsoundhandle=SND_PlaySound(S_ENERGYWEAPONLOOP,0,0,0,-1); ! 1700: } ! 1701: weapondropgoal = 40; ! 1702: weapondrop = 0; ! 1703: break; ! 1704: case 6: ! 1705: if (enchantedsoundhandle == -1 && plr->weapon[selectedgun] == 3) { ! 1706: enchantedsoundhandle=SND_PlaySound(S_FIREWEAPONLOOP,0,0,0,-1); ! 1707: } ! 1708: weapondropgoal = 40; ! 1709: weapondrop = 0; ! 1710: break; ! 1711: case 7: ! 1712: if (enchantedsoundhandle == -1 && plr->weapon[selectedgun] == 3) { ! 1713: enchantedsoundhandle=SND_PlaySound(S_ENERGYWEAPONLOOP,0,0,0,-1); ! 1714: } ! 1715: weapondropgoal = 40; ! 1716: weapondrop = 0; ! 1717: break; ! 1718: case 8: ! 1719: if (enchantedsoundhandle == -1 && plr->weapon[selectedgun] == 3) { ! 1720: enchantedsoundhandle=SND_PlaySound(S_ENERGYWEAPONLOOP,0,0,0,-1); ! 1721: } ! 1722: weapondropgoal = 40; ! 1723: weapondrop = 0; ! 1724: break; ! 1725: case 9: ! 1726: weapondropgoal = 40; ! 1727: weapondrop = 0; ! 1728: break; ! 1729: } ! 1730: } ! 1731: } ! 1732: ! 1733: if (currweaponflip == 0) { ! 1734: for (i = 0x3b; i <= 0x42; i++) { ! 1735: if (keystatus[i] > 0) { ! 1736: #if 0 ! 1737: if (selectedgun > 0) { ! 1738: if (i != 0x3B+2 && i != 0x3B+3 && i != 0x3B+7) { ! 1739: hasshot = 0; ! 1740: currweaponfired = 2; // drop weapon ! 1741: weapondropgoal = 100; ! 1742: weapondrop = 0; ! 1743: selectedgun = 0; ! 1744: } ! 1745: // selectedgun=spellcasthands ! 1746: levelpic(); ! 1747: } ! 1748: #endif ! 1749: currentorb = i - 0x3b; ! 1750: if (spellbookflip == 0) { ! 1751: spellbook = 0; ! 1752: spellbooktics = 10; ! 1753: spellbookflip = 1; ! 1754: // JSA_NEW ! 1755: SND_PlaySound(S_PAGE, 0, 0, 0, 0); ! 1756: displayspelltext(); ! 1757: spelltime = 360; ! 1758: } ! 1759: orbshot = 0; ! 1760: } ! 1761: keystatus[i] = 0; ! 1762: } ! 1763: orbpic(currentorb); ! 1764: } ! 1765: ! 1766: ! 1767: for (j = 0; j < MAXNUMORBS; j++) { ! 1768: if (plr->orbactive[j] > -1) { ! 1769: plr->orbactive[j] -= synctics; ! 1770: } ! 1771: } ! 1772: ! 1773: if (keystatus[0x1a] > 0) { ! 1774: currentpotion--; ! 1775: if (currentpotion < 0) ! 1776: currentpotion = 4; ! 1777: keystatus[0x1a] = 0; ! 1778: // JSA_NEW ! 1779: SND_PlaySound(S_BOTTLES, 0, 0, 0, 0); ! 1780: potionpic(currentpotion); ! 1781: potiontext(); ! 1782: } ! 1783: if (keystatus[0x1b] > 0) { ! 1784: currentpotion++; ! 1785: if (currentpotion > 4) // MAXPOTIONS ! 1786: currentpotion = 0; ! 1787: keystatus[0x1B] = 0; ! 1788: // JSA_NEW ! 1789: SND_PlaySound(S_BOTTLES, 0, 0, 0, 0); ! 1790: potionpic(currentpotion); ! 1791: potiontext(); ! 1792: } ! 1793: ! 1794: ! 1795: } ! 1796: ! 1797: ! 1798: void ! 1799: potiontext(void) ! 1800: { ! 1801: ! 1802: struct player *plr; ! 1803: ! 1804: plr = &player[pyrn]; ! 1805: ! 1806: if (plr->potion[currentpotion] > 0) ! 1807: switch (currentpotion) { ! 1808: case 0: ! 1809: strcpy(displaybuf, "Health Potion"); ! 1810: displaytime = 240; ! 1811: break; ! 1812: case 1: ! 1813: strcpy(displaybuf, "Strength Potion"); ! 1814: displaytime = 240; ! 1815: break; ! 1816: case 2: ! 1817: strcpy(displaybuf, "Cure Poison Potion"); ! 1818: displaytime = 240; ! 1819: break; ! 1820: case 3: ! 1821: strcpy(displaybuf, "Resist Fire Potion"); ! 1822: displaytime = 240; ! 1823: break; ! 1824: case 4: ! 1825: strcpy(displaybuf, "Invisiblity Potion"); ! 1826: displaytime = 240; ! 1827: break; ! 1828: } ! 1829: } ! 1830: ! 1831: void ! 1832: swingdacrunch(int daweapon) ! 1833: { ! 1834: ! 1835: ! 1836: struct player *plr; ! 1837: ! 1838: plr = &player[pyrn]; ! 1839: ! 1840: switch (daweapon) { ! 1841: case 0: // fist ! 1842: playsound_loc(S_SOCK1 + (rand() % 4), plr->x, plr->y); ! 1843: break; ! 1844: case 1: // dagger ! 1845: if (rand() % 2) ! 1846: playsound_loc(S_GORE1 + (rand() % 4), plr->x, plr->y); ! 1847: break; ! 1848: case 2: // short sword ! 1849: playsound_loc(S_SWORD2 + (rand() % 3), plr->x, plr->y); ! 1850: break; ! 1851: case 3: // morningstar ! 1852: playsound_loc(S_SOCK1 + (rand() % 4), plr->x, plr->y); ! 1853: break; ! 1854: case 4: // broad sword ! 1855: playsound_loc(S_SWORD1 + (rand() % 3), plr->x, plr->y); ! 1856: break; ! 1857: case 5: // battle axe ! 1858: if (rand() % 2) ! 1859: playsound_loc(S_SOCK1 + (rand() % 4), plr->x, plr->y); ! 1860: else ! 1861: playsound_loc(S_SWORD1 + (rand() % 3), plr->x, plr->y); ! 1862: break; ! 1863: case 6: // bow ! 1864: ! 1865: break; ! 1866: case 7: // pike ! 1867: if (rand() % 2) ! 1868: playsound_loc(S_SOCK1 + (rand() % 4), plr->x, plr->y); ! 1869: else ! 1870: playsound_loc(S_SWORD1 + (rand() % 3), plr->x, plr->y); ! 1871: break; ! 1872: case 8: // two handed sword ! 1873: playsound_loc(S_SWORD1 + (rand() % 2), plr->x, plr->y); ! 1874: break; ! 1875: case 9: // halberd ! 1876: if (rand() % 2) ! 1877: playsound_loc(S_SOCK1 + (rand() % 4), plr->x, plr->y); ! 1878: else ! 1879: playsound_loc(S_SWORD1 + (rand() % 3), plr->x, plr->y); ! 1880: break; ! 1881: } ! 1882: ! 1883: } ! 1884: ! 1885: void ! 1886: swingdasound(int daweapon) ! 1887: { ! 1888: ! 1889: switch (daweapon) { ! 1890: case 0: // fist ! 1891: SND_PlaySound(S_PLRWEAPON0, 0, 0, 0, 0); ! 1892: break; ! 1893: case 1: // knife ! 1894: SND_PlaySound(S_PLRWEAPON1, 0, 0, 0, 0); ! 1895: break; ! 1896: case 2: // short sword ! 1897: if(enchantedsoundhandle!=-1) ! 1898: SND_PlaySound(S_FIRESWING, 0, 0, 0, 0); ! 1899: else ! 1900: SND_PlaySound(S_PLRWEAPON4, 0, 0, 0, 0); ! 1901: break; ! 1902: case 3: // mace ! 1903: if(enchantedsoundhandle!=-1) { ! 1904: SND_PlaySound(S_FIRESWING, 0, 0, 0, 0); ! 1905: SND_PlaySound(S_FIREBALL, 0, 0, 0, 0); ! 1906: } ! 1907: else ! 1908: SND_PlaySound(S_PLRWEAPON2, 0, 0, 0, 0); ! 1909: break; ! 1910: case 4: // ! 1911: SND_PlaySound(S_PLRWEAPON4, 0, 0, 0, 0); ! 1912: break; ! 1913: case 5: // sword ! 1914: SND_PlaySound(S_PLRWEAPON4, 0, 0, 0, 0); ! 1915: break; ! 1916: case 6: // bow ! 1917: SND_PlaySound(S_PLRWEAPON3, 0, 0, 0, 0); ! 1918: break; ! 1919: case 7: // ! 1920: if(enchantedsoundhandle!=-1) ! 1921: SND_PlaySound(S_ENERGYSWING, 0, 0, 0, 0); ! 1922: else ! 1923: SND_PlaySound(S_PLRWEAPON4, 0, 0, 0, 0); ! 1924: break; ! 1925: case 8: // ! 1926: if(enchantedsoundhandle!=-1) ! 1927: SND_PlaySound(S_ENERGYSWING, 0, 0, 0, 0); ! 1928: else ! 1929: SND_PlaySound(S_PLRWEAPON4, 0, 0, 0, 0); ! 1930: break; ! 1931: case 9: // ! 1932: SND_PlaySound(S_PLRWEAPON4, 0, 0, 0, 0); ! 1933: break; ! 1934: } ! 1935: ! 1936: ! 1937: } ! 1938: ! 1939: short monsterangle[MAXSPRITESONSCREEN], ! 1940: monsterlist[MAXSPRITESONSCREEN]; ! 1941: ! 1942: long shootgunzvel; ! 1943: ! 1944: extern ! 1945: spritetype tspritelist[]; ! 1946: ! 1947: extern ! 1948: int tspritelistcnt; ! 1949: ! 1950: void ! 1951: lockon(struct player *plr,short numshots,short shootguntype) ! 1952: { ! 1953: short daang,i,k,n,s; ! 1954: spritetype *spr; ! 1955: ! 1956: spr=&tspritelist[0]; ! 1957: for (i=0,n=0 ; i < tspritelistcnt && n < numshots ; i++,spr++) { ! 1958: if (cansee(plr->x, plr->y, plr->z, plr->sector, ! 1959: spr->x, spr->y, spr->z - (tilesizy[spr->picnum] << 7), ! 1960: spr->sectnum) == 1) { ! 1961: switch (spr->picnum) { ! 1962: case KOBOLD: ! 1963: case KOBOLDATTACK: ! 1964: case DEVIL: ! 1965: case DEVILATTACK: ! 1966: case IMP: ! 1967: case IMPATTACK: ! 1968: case MINOTAUR: ! 1969: case MINOTAURATTACK: ! 1970: case SKELETON: ! 1971: case SKELETONATTACK: ! 1972: case GRONHAL: ! 1973: case GRONHALATTACK: ! 1974: case GRONMU: ! 1975: case GRONMUATTACK: ! 1976: case GRONSW: ! 1977: case GRONSWATTACK: ! 1978: case DEMON: ! 1979: case GUARDIAN: ! 1980: case GUARDIANATTACK: ! 1981: case WILLOW: ! 1982: case NEWGUYSTAND: ! 1983: case NEWGUYKNEE: ! 1984: case NEWGUY: ! 1985: case NEWGUYCAST: ! 1986: case NEWGUYBOW: ! 1987: case NEWGUYMACE: ! 1988: case NEWGUYPUNCH: ! 1989: case KURTSTAND: ! 1990: case KURTKNEE: ! 1991: case KURTAT: ! 1992: case KURTPUNCH: ! 1993: case KURTREADY: ! 1994: case GONZOCSW: ! 1995: case GONZOCSWAT: ! 1996: case GONZOCHMAT: ! 1997: case GONZOGSW: ! 1998: case GONZOGSWAT: ! 1999: case GONZOGHM: ! 2000: case GONZOGHMAT: ! 2001: case GONZOGSH: ! 2002: case GONZOGSHAT: ! 2003: case KATIE: ! 2004: case KATIEAT: ! 2005: monsterangle[n]=getangle(tspritelist[i].x-plr->x, ! 2006: tspritelist[i].y-plr->y); ! 2007: monsterlist[n]=i; ! 2008: n++; ! 2009: break; ! 2010: } ! 2011: } ! 2012: } ! 2013: daang=plr->ang-((numshots*(128/numshots))>>1); ! 2014: for (k=0,s=0 ; k < numshots ; k++) { ! 2015: if (n > 0) { ! 2016: spr=&tspritelist[monsterlist[s]]; ! 2017: daang=monsterangle[s]; ! 2018: shootgunzvel=((spr->z-(32<<8)-plr->z)<<8)/ ! 2019: ksqrt((spr->x-plr->x)*(spr->x-plr->x)+ ! 2020: (spr->y-plr->y)*(spr->y-plr->y)); ! 2021: s=(s+1)%n; ! 2022: } ! 2023: else { ! 2024: daang+=(128/numshots); ! 2025: } ! 2026: shootgun(plr, daang, shootguntype); ! 2027: } ! 2028: } ! 2029: ! 2030: void ! 2031: swingdaweapon(struct player * plr) ! 2032: { ! 2033: short daang,k,n,s; ! 2034: ! 2035: daang = plr->ang; ! 2036: ! 2037: if (currweaponframe == BOWWALK + 5 && plr->ammo[6] > 0) { ! 2038: currweaponfired = 5; ! 2039: oldmousestatus = 0; // NEW ! 2040: currweaponanim = 0; ! 2041: } ! 2042: else if (currweaponframe == ZBOWATTACK + 4 && plr->ammo[6] > 0) { ! 2043: currweaponfired = 5; ! 2044: oldmousestatus = 0; // NEW ! 2045: currweaponanim = 0; ! 2046: } ! 2047: ! 2048: if (currweaponframe == BOWWALK + 5 && plr->ammo[6] <= 0) { ! 2049: currweaponfired = 0; ! 2050: oldmousestatus = 0; ! 2051: currweaponanim = 0; ! 2052: return; ! 2053: } ! 2054: else if (currweaponframe == ZBOWATTACK + 4 && plr->ammo[6] <= 0) { ! 2055: currweaponfired = 0; ! 2056: oldmousestatus = 0; ! 2057: currweaponanim = 0; ! 2058: return; ! 2059: } ! 2060: ! 2061: if (currweaponframe == PIKEATTACK1 + 4 ! 2062: && plr->weapon[7] == 2 ! 2063: && plr->ammo[7] > 0) { ! 2064: shootgun(plr, daang, 10); ! 2065: playsound_loc(S_GENTHROW, plr->x, plr->y); ! 2066: hasshot = 1; ! 2067: return; ! 2068: } ! 2069: else if (currweaponframe == ZPIKEATTACK + 4 ! 2070: && plr->weapon[7] == 3 ! 2071: && plr->ammo[7] > 0) { ! 2072: lockon(plr,3,10); ! 2073: playsound_loc(S_GENTHROW, plr->x, plr->y); ! 2074: hasshot = 1; ! 2075: return; ! 2076: } ! 2077: ! 2078: ! 2079: switch (selectedgun) { ! 2080: case 0: // fist & close combat weapons ! 2081: shootgun(plr, daang, 0); ! 2082: hasshot = 1; ! 2083: break; ! 2084: case 1: // knife ! 2085: shootgun(plr, daang, 0); ! 2086: hasshot = 1; ! 2087: break; ! 2088: case 2: // shortsword ! 2089: shootgun(plr, daang, 0); ! 2090: hasshot = 1; ! 2091: break; ! 2092: case 3: // morningstar ! 2093: shootgun(plr, daang, 0); ! 2094: if (plr->weapon[selectedgun] == 3) { ! 2095: lockon(plr,1,3); ! 2096: } ! 2097: hasshot = 1; ! 2098: break; ! 2099: case 4: // sword ! 2100: shootgun(plr, daang, 0); ! 2101: hasshot = 1; ! 2102: break; ! 2103: case 5: // battleaxe ! 2104: if (enchantedsoundhandle != -1) { ! 2105: SND_PlaySound(S_ENERGYSWING, 0, 0, 0, 0); ! 2106: } ! 2107: shootgun(plr, daang, 0); ! 2108: hasshot = 1; ! 2109: break; ! 2110: case 6: // bow ! 2111: if(enchantedsoundhandle!=-1) { ! 2112: SND_PlaySound(S_FIREBALL, 0, 0, 0, 0); ! 2113: SND_PlaySound(S_PLRWEAPON3, 0, 0, 0, 0); ! 2114: } ! 2115: shootgun(plr, daang, 1); ! 2116: hasshot = 1; ! 2117: break; ! 2118: case 7: // pike ! 2119: shootgun(plr, daang, 0); ! 2120: hasshot = 1; ! 2121: break; ! 2122: case 8: // two handed ! 2123: shootgun(plr, daang, 0); ! 2124: hasshot = 1; ! 2125: break; ! 2126: case 9: // halberd ! 2127: shootgun(plr, daang, 0); ! 2128: hasshot = 1; ! 2129: break; ! 2130: ! 2131: } ! 2132: ! 2133: } ! 2134: ! 2135: extern ! 2136: int nobreakflag; ! 2137: ! 2138: int weaponuseless = 0; ! 2139: ! 2140: void ! 2141: plrfireweapon(struct player * plr) ! 2142: { ! 2143: ! 2144: char guntype; ! 2145: long x, ! 2146: y, ! 2147: z; ! 2148: long dasectnum, ! 2149: daz; ! 2150: short daang, ! 2151: dahoriz; ! 2152: short k; ! 2153: int i; ! 2154: int bestweapon; ! 2155: ! 2156: ! 2157: if (currweaponfired == 4) { ! 2158: #if 0 ! 2159: if (currentorb == 0 || currentorb == 2 || currentorb == 3 ! 2160: || currentorb == 6 || currentorb == 7) { ! 2161: return; // don't do hands ! 2162: } ! 2163: #endif ! 2164: if (plr->weapon[currweapon] == 1) { ! 2165: currweapontics = throwanimtics[currentorb][0].daweapontics; ! 2166: } ! 2167: else { ! 2168: currweapontics = zthrowanimtics[currentorb][0].daweapontics; ! 2169: } ! 2170: return; ! 2171: } ! 2172: ! 2173: if (plr->ammo[selectedgun] <= 0) { ! 2174: if (currweapon == 6) { ! 2175: for (i = 0; i < MAXWEAPONS; i++) { ! 2176: if (plr->ammo[i] > 0 && plr->weapon[i] == 1) { ! 2177: selectedgun = i; ! 2178: hasshot = 0; ! 2179: currweaponfired = 2; // drop weapon ! 2180: weapondropgoal = 100; ! 2181: weapondrop = 0; ! 2182: levelpic(); ! 2183: } ! 2184: } ! 2185: } ! 2186: return; ! 2187: } ! 2188: else { ! 2189: madeahit = 0; ! 2190: if (nobreakflag == 0) { ! 2191: plr->ammo[selectedgun]--; ! 2192: } ! 2193: if (plr->weapon[selectedgun] == 3) { ! 2194: if (plr->ammo[selectedgun] == 0) { ! 2195: plr->weapon[selectedgun] = plr->preenchantedweapon[selectedgun]; ! 2196: plr->ammo[selectedgun] = plr->preenchantedammo[selectedgun]; ! 2197: if (enchantedsoundhandle != -1) { ! 2198: SND_StopLoop(enchantedsoundhandle); ! 2199: enchantedsoundhandle=-1; ! 2200: } ! 2201: } ! 2202: } ! 2203: if (plr->ammo[selectedgun] <= 0 || plr->ammo[selectedgun] == 10) { ! 2204: switch (selectedgun) { ! 2205: case 0: // fist ! 2206: plr->ammo[0] = 9999; ! 2207: break; ! 2208: case 1: // knife ! 2209: if (plr->ammo[selectedgun] == 10) { ! 2210: strcpy(displaybuf, "Dagger is damaged"); ! 2211: displaytime = 360; ! 2212: } ! 2213: if (plr->ammo[selectedgun] <= 0) { ! 2214: plr->ammo[1] = 0; ! 2215: plr->weapon[1] = 0; ! 2216: strcpy(displaybuf, "Dagger is Useless"); ! 2217: displaytime = 360; ! 2218: weaponuseless = 1; ! 2219: } ! 2220: break; ! 2221: case 2: // short sword ! 2222: if (plr->ammo[selectedgun] == 10) { ! 2223: strcpy(displaybuf, "Short Sword is damaged"); ! 2224: displaytime = 360; ! 2225: } ! 2226: if (plr->ammo[selectedgun] <= 0) { ! 2227: plr->ammo[2] = 0; ! 2228: plr->weapon[2] = 0; ! 2229: strcpy(displaybuf, "Short Sword is Useless"); ! 2230: displaytime = 360; ! 2231: weaponuseless = 1; ! 2232: } ! 2233: break; ! 2234: case 3: // mace ! 2235: if (plr->ammo[selectedgun] == 10) { ! 2236: strcpy(displaybuf, "Morning Star is damaged"); ! 2237: displaytime = 360; ! 2238: } ! 2239: if (plr->ammo[selectedgun] <= 0) { ! 2240: plr->ammo[3] = 0; ! 2241: plr->weapon[3] = 0; ! 2242: strcpy(displaybuf, "Morning Star is Useless"); ! 2243: displaytime = 360; ! 2244: weaponuseless = 1; ! 2245: } ! 2246: break; ! 2247: ! 2248: case 4: // sword ! 2249: if (plr->ammo[selectedgun] == 10) { ! 2250: strcpy(displaybuf, "Sword is damaged"); ! 2251: displaytime = 360; ! 2252: } ! 2253: if (plr->ammo[selectedgun] <= 0) { ! 2254: plr->ammo[4] = 0; ! 2255: plr->weapon[4] = 0; ! 2256: strcpy(displaybuf, "Sword is Useless"); ! 2257: displaytime = 360; ! 2258: weaponuseless = 1; ! 2259: } ! 2260: break; ! 2261: case 5: // battle axe ! 2262: if (plr->ammo[selectedgun] == 10) { ! 2263: strcpy(displaybuf, "Battle axe is damaged"); ! 2264: displaytime = 360; ! 2265: } ! 2266: if (plr->ammo[selectedgun] <= 0) { ! 2267: plr->ammo[5] = 0; ! 2268: plr->weapon[5] = 0; ! 2269: strcpy(displaybuf, "Battle axe is Useless"); ! 2270: displaytime = 360; ! 2271: weaponuseless = 1; ! 2272: } ! 2273: break; ! 2274: case 6: // bow ! 2275: break; ! 2276: case 7: // pike ! 2277: if (plr->weapon[7] == 1) { ! 2278: if (plr->ammo[selectedgun] == 10) { ! 2279: strcpy(displaybuf, "Pike is damaged"); ! 2280: displaytime = 360; ! 2281: } ! 2282: if (plr->ammo[selectedgun] <= 0) { ! 2283: plr->ammo[7] = 0; ! 2284: plr->weapon[7] = 0; ! 2285: strcpy(displaybuf, "Pike is Useless"); ! 2286: displaytime = 360; ! 2287: weaponuseless = 1; ! 2288: } ! 2289: } ! 2290: if (plr->weapon[7] == 2 && plr->ammo[7] <= 0) { ! 2291: plr->weapon[7] = 1; ! 2292: plr->ammo[7] = 30; ! 2293: } ! 2294: break; ! 2295: case 8: // two handed sword ! 2296: if (plr->ammo[selectedgun] == 10) { ! 2297: strcpy(displaybuf, "Magic Sword is damaged"); ! 2298: displaytime = 360; ! 2299: } ! 2300: if (plr->ammo[selectedgun] <= 0) { ! 2301: plr->ammo[8] = 0; ! 2302: plr->weapon[8] = 0; ! 2303: strcpy(displaybuf, "Magic Sword is Useless"); ! 2304: displaytime = 360; ! 2305: weaponuseless = 1; ! 2306: } ! 2307: break; ! 2308: case 9: // halberd ! 2309: if (plr->ammo[selectedgun] == 10) { ! 2310: strcpy(displaybuf, "Halberd is damaged"); ! 2311: displaytime = 360; ! 2312: } ! 2313: if (plr->ammo[selectedgun] <= 0) { ! 2314: plr->ammo[9] = 0; ! 2315: plr->weapon[9] = 0; ! 2316: strcpy(displaybuf, "Halberd is Useless"); ! 2317: displaytime = 360; ! 2318: weaponuseless = 1; ! 2319: } ! 2320: break; ! 2321: } ! 2322: } ! 2323: } ! 2324: ! 2325: if (weaponuseless == 1) ! 2326: for (i = 0; i < MAXWEAPONS; i++) { ! 2327: if (plr->weapon[i] > 0 && plr->ammo[i] > 0) { ! 2328: currweapon = selectedgun = i; ! 2329: // hasshot=0; ! 2330: // currweaponfired=2; // drop weapon ! 2331: currweaponfired = 3; // ready weapon ! 2332: // weapondropgoal=100; ! 2333: // weapondrop=0; ! 2334: currweaponflip = 0; ! 2335: weaponuseless = 0; ! 2336: // autoweaponchange(i); ! 2337: levelpic(); ! 2338: } ! 2339: } ! 2340: else ! 2341: currweaponfired = 1; ! 2342: ! 2343: ! 2344: if (currweapon == 6 || selectedgun == 6) ! 2345: levelpic(); ! 2346: ! 2347: if (currweapon == 7 || selectedgun == 7) ! 2348: levelpic(); ! 2349: ! 2350: currweapon = selectedgun; ! 2351: ! 2352: // start from the beginning to cycle ! 2353: // currweaponfired=1; ! 2354: ! 2355: currweaponattackstyle = krand() % 2; ! 2356: ! 2357: if (plr->weapon[7] == 2 && currweapon == 7) { ! 2358: currweaponattackstyle = 0; ! 2359: } ! 2360: else if (plr->weapon[7] == 3 && currweapon == 7) { ! 2361: currweaponattackstyle = 0; ! 2362: } ! 2363: ! 2364: if (currweapon == 9) { ! 2365: if (krand() % 100 > 80) ! 2366: currweaponattackstyle = 0; ! 2367: else ! 2368: currweaponattackstyle = 1; ! 2369: } ! 2370: ! 2371: if (currweaponanim > 11) { ! 2372: if (plr->weapon[currweapon] == 1) ! 2373: currweapontics = weaponanimtics[currweapon][0].daweapontics; ! 2374: else ! 2375: currweapontics = zweaponanimtics[currweapon][0].daweapontics; ! 2376: } ! 2377: ! 2378: ! 2379: } ! 2380: ! 2381: void ! 2382: activatedaorb(struct player * plr) ! 2383: { ! 2384: ! 2385: ! 2386: if (plr->orbammo[currentorb] <= 0) ! 2387: return; ! 2388: ! 2389: switch (currentorb) { ! 2390: case 0: // SCARE ! 2391: // shadowtime=1200+(plr->lvl*120); ! 2392: break; ! 2393: case 1: // NIGHT VISION ! 2394: // nightglowtime=2400+(plr->lvl*600); ! 2395: break; ! 2396: case 2: // FREEZE ! 2397: plr->orbactive[currentorb] = -1; ! 2398: break; ! 2399: case 3: // MAGIC ARROW ! 2400: plr->orbactive[currentorb] = -1; ! 2401: break; ! 2402: case 4: // OPEN DOORS ! 2403: plr->orbactive[currentorb] = -1; ! 2404: break; ! 2405: case 5: // FLY ! 2406: // plr->orbactive[currentorb]=3600+(plr->lvl*600); ! 2407: break; ! 2408: case 6: // FIREBALL ! 2409: plr->orbactive[currentorb] = -1; ! 2410: break; ! 2411: case 7: // NUKE ! 2412: plr->orbactive[currentorb] = -1; ! 2413: break; ! 2414: } ! 2415: ! 2416: if (plr->orbammo[currentorb] <= 0) { ! 2417: plr->orb[currentorb] = 0; ! 2418: return; ! 2419: } ! 2420: else ! 2421: plr->orbammo[currentorb]--; ! 2422: ! 2423: currweaponfired = 4; ! 2424: #if 0 ! 2425: if (currentorb == 0 || currentorb == 2 || currentorb == 3 ! 2426: || currentorb == 6 || currentorb == 7) { ! 2427: return; // no hand animations ! 2428: } ! 2429: #endif ! 2430: if (plr->weapon[currweapon] == 1) ! 2431: currweapontics = throwanimtics[currentorb][0].daweapontics; ! 2432: else ! 2433: currweapontics = zthrowanimtics[currentorb][0].daweapontics; ! 2434: ! 2435: } ! 2436: ! 2437: void ! 2438: plruse(struct player * plr) ! 2439: { ! 2440: ! 2441: short hitsect, ! 2442: hitwall, ! 2443: hitsprite, ! 2444: daang2, ! 2445: daang; ! 2446: long i, ! 2447: daz2, ! 2448: hitx, ! 2449: hity, ! 2450: hitz; ! 2451: long hit, ! 2452: dax, ! 2453: day; ! 2454: ! 2455: neartag(plr->x, plr->y, plr->z, plr->sector, plr->ang, ! 2456: &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1024, 3); ! 2457: if (neartagsector >= 0) { ! 2458: if (sector[neartagsector].hitag == 0) { ! 2459: operatesector(neartagsector); ! 2460: } ! 2461: else { ! 2462: daang = plr->ang; ! 2463: daang2 = daang + 2048; ! 2464: daz2 = (100 - plr->horiz) * 2000; ! 2465: hitscan(plr->x, plr->y, plr->z, plr->sector, // Start position ! 2466: sintable[(daang2 + 2560) & 2047], // X vector of 3D ang ! 2467: sintable[(daang2 + 2048) & 2047], // Y vector of 3D ang ! 2468: daz2, // Z vector of 3D ang ! 2469: &hitsect, &hitwall, &hitsprite, &hitx, &hity, &hitz); ! 2470: if (hitwall >= 0) { ! 2471: if ((labs(plr->x - hitx) + labs(plr->y - hity) < 512) && (labs((plr->z >> 8) - ((hitz >> 8) - (64))) <= (512 >> 3))) { ! 2472: switch (wall[hitwall].picnum) { ! 2473: case PENTADOOR1: ! 2474: case PENTADOOR2: ! 2475: case PENTADOOR3: ! 2476: case PENTADOOR4: ! 2477: case PENTADOOR5: ! 2478: case PENTADOOR6: ! 2479: case PENTADOOR7: ! 2480: strcpy(displaybuf, "find door trigger"); ! 2481: displaytime = 360; ! 2482: break; ! 2483: } ! 2484: } ! 2485: } ! 2486: playsound_loc(S_PUSH1 + (rand() % 2), plr->x, plr->y); ! 2487: } ! 2488: ! 2489: } ! 2490: if (neartagsprite >= 0) { ! 2491: if (sprite[neartagsprite].lotag == 1) { ! 2492: switch (sprite[neartagsprite].picnum) { ! 2493: case SKULLPULLCHAIN1: ! 2494: case PULLCHAIN1: ! 2495: sprite[neartagsprite].lotag = 0; ! 2496: newstatus(neartagsprite, PULLTHECHAIN); ! 2497: break; ! 2498: case LEVERUP: ! 2499: sprite[neartagsprite].lotag = 0; ! 2500: newstatus(neartagsprite, ANIMLEVERUP); ! 2501: break; ! 2502: } ! 2503: for (i = 0; i < numsectors; i++) ! 2504: if (sector[i].hitag == sprite[neartagsprite].hitag) ! 2505: operatesector(i); ! 2506: } ! 2507: else ! 2508: operatesprite(neartagsprite); ! 2509: } ! 2510: ! 2511: } ! 2512: ! 2513: void ! 2514: loadnewlevel(int mapon) ! 2515: { ! 2516: struct player *plr; ! 2517: char mapbuf[_MAX_FNAME+_MAX_EXT]; ! 2518: ! 2519: plr = &player[pyrn]; ! 2520: ! 2521: strcpy(mapbuf, "level"); ! 2522: itoa(mapon, tempbuf, 10); ! 2523: strcat(mapbuf, tempbuf); ! 2524: strcat(mapbuf, ".map"); ! 2525: ! 2526: //JSA_DEMO2 ! 2527: // SND_SongFlush(); ! 2528: // SND_StartMusic(mapon-1); ! 2529: //JSA_ENDS ! 2530: loadinglevelmsg(); ! 2531: setupboard(mapbuf); ! 2532: initplayersprite(); ! 2533: updatepics(); ! 2534: lockclock = totalclock; ! 2535: } ! 2536: ! 2537: void ! 2538: victory(int demoflag) ! 2539: { ! 2540: long goaltime; ! 2541: int exit; ! 2542: ! 2543: if (!demoflag) { ! 2544: smkplayseq(1); ! 2545: smkplayseq(3); ! 2546: smkplayseq(4); ! 2547: shutdown(); ! 2548: } ! 2549: goaltime = totalclock + 360; ! 2550: victor = 1; ! 2551: ! 2552: if (svga == 1) { ! 2553: keystatus[0x39] = 0; ! 2554: keystatus[1] = 0; ! 2555: SND_Sound(S_PICKUPFLAG); ! 2556: permanentwritesprite(0, 0, STHEORDER, 0, 0, 0, 639, 239, 0); ! 2557: permanentwritesprite(0, 240, STHEORDER + 1, 0, 0, 240, 639, 479, 0); ! 2558: nextpage(); ! 2559: exit = 0; ! 2560: while (!exit) { ! 2561: if (keystatus[0x39] > 0 || keystatus[1] > 0) ! 2562: exit = 1; ! 2563: } ! 2564: keystatus[0x39] = 0; ! 2565: keystatus[1] = 0; ! 2566: } ! 2567: else { ! 2568: keystatus[0x39] = 0; ! 2569: keystatus[1] = 0; ! 2570: SND_Sound(S_PICKUPFLAG); ! 2571: itemtoscreen(0L, 0L, THEORDER, 0, 0); ! 2572: nextpage(); ! 2573: exit = 0; ! 2574: while (!exit) { ! 2575: if (keystatus[0x39] > 0 || keystatus[1] > 0) ! 2576: exit = 1; ! 2577: } ! 2578: keystatus[0x39] = 0; ! 2579: keystatus[1] = 0; ! 2580: } ! 2581: shutdown(); ! 2582: } ! 2583: ! 2584: extern ! 2585: unsigned hSOSDriverHandles[]; ! 2586: ! 2587: void ! 2588: drawweapons(struct player * plr) ! 2589: { ! 2590: ! 2591: long dax, ! 2592: day; ! 2593: long snakex = 0; ! 2594: long snakey = 0; ! 2595: char dabits; ! 2596: char dashade; ! 2597: char dapalnum; ! 2598: short startwall, ! 2599: endwall; ! 2600: short rotateit; ! 2601: int j, ! 2602: k; ! 2603: ! 2604: ! 2605: if (spelltime > 0) { ! 2606: spelltime -= synctics; ! 2607: } ! 2608: ! 2609: if (spellbook == 8 && spelltime > 0 && plr->screensize > 320) { ! 2610: if (svga == 1) { ! 2611: spellbookframe = sspellbookanim[currentorb][8].daweaponframe; ! 2612: dax = sspellbookanim[currentorb][8].currx; ! 2613: day = sspellbookanim[currentorb][8].curry; ! 2614: itemtoscreen(dax << 1, day, spellbookframe, 0, 0); ! 2615: itoa(plr->orbammo[currentorb], tempbuf, 10); ! 2616: fancyfont(126L << 1, 439L, SSCOREFONT - 26, tempbuf, 0); ! 2617: } ! 2618: else { ! 2619: spellbookframe = spellbookanim[currentorb][8].daweaponframe; ! 2620: dax = spellbookanim[currentorb][8].currx; ! 2621: day = spellbookanim[currentorb][8].curry; ! 2622: itemtoscreen(dax, day, spellbookframe, 0, 0); ! 2623: itoa(plr->orbammo[currentorb], tempbuf, 10); ! 2624: fancyfont(126L, 181L, SCOREFONT - 26, tempbuf, 0); ! 2625: } ! 2626: } ! 2627: ! 2628: ! 2629: if (shadowtime > 0) { ! 2630: dashade = 31, dapalnum = 0; ! 2631: } ! 2632: else { ! 2633: if (plr->weapon[currweapon] == 3) { ! 2634: if (enchantedsoundhandle == -1) { ! 2635: switch (currweapon) { ! 2636: case 2: ! 2637: if (enchantedsoundhandle == -1 ! 2638: && plr->weapon[selectedgun] == 3) { ! 2639: enchantedsoundhandle=SND_PlaySound(S_FIREWEAPONLOOP, ! 2640: 0,0,0,-1); ! 2641: } ! 2642: break; ! 2643: case 3: ! 2644: case 5: ! 2645: if (enchantedsoundhandle == -1 ! 2646: && plr->weapon[selectedgun] == 3) { ! 2647: enchantedsoundhandle=SND_PlaySound(S_ENERGYWEAPONLOOP, ! 2648: 0,0,0,-1); ! 2649: } ! 2650: break; ! 2651: case 6: ! 2652: if (enchantedsoundhandle == -1 ! 2653: && plr->weapon[selectedgun] == 3) { ! 2654: enchantedsoundhandle=SND_PlaySound(S_FIREWEAPONLOOP, ! 2655: 0,0,0,-1); ! 2656: } ! 2657: break; ! 2658: case 7: ! 2659: if (enchantedsoundhandle == -1 ! 2660: && plr->weapon[selectedgun] == 3) { ! 2661: enchantedsoundhandle=SND_PlaySound(S_ENERGYWEAPONLOOP, ! 2662: 0,0,0,-1); ! 2663: } ! 2664: break; ! 2665: case 8: ! 2666: if (enchantedsoundhandle == -1 ! 2667: && plr->weapon[selectedgun] == 3) { ! 2668: enchantedsoundhandle=SND_PlaySound(S_FIREWEAPONLOOP, ! 2669: 0,0,0,-1); ! 2670: } ! 2671: break; ! 2672: } ! 2673: } ! 2674: dashade = 0; ! 2675: dapalnum = 0; ! 2676: } ! 2677: else { ! 2678: dashade = sector[plr->sector].ceilingshade; ! 2679: dapalnum = 0; ! 2680: } ! 2681: } ! 2682: ! 2683: if (invisibletime > 0) ! 2684: // dabits=0x06; ! 2685: dabits = 2 + 4; ! 2686: else ! 2687: // dabits=0x02; ! 2688: dabits = 2; ! 2689: ! 2690: if (currweaponflip == 1) { ! 2691: // dabits+=0x08; ! 2692: dabits |= 2; ! 2693: dabits |= 4; ! 2694: } ! 2695: ! 2696: if (currweapon == 0 && dahand == 0) ! 2697: if (rand() % 2 == 0) ! 2698: dahand = 1; ! 2699: else ! 2700: dahand = 2; ! 2701: ! 2702: ! 2703: switch (currweaponfired) { ! 2704: case 6: ! 2705: ! 2706: switch (currweapon) { ! 2707: case 1: // knife ! 2708: if (currweaponframe == KNIFEATTACK2 + 1) ! 2709: if ((currweaponanim == 2 || currweaponanim == 10) && currweapontics == 8) ! 2710: swingdasound(currweapon); ! 2711: break; ! 2712: case 3: // morning ! 2713: if (currweaponframe == MORNINGATTACK2 + 3) ! 2714: if (currweaponanim == 3 && currweapontics == 12) ! 2715: swingdasound(currweapon); ! 2716: break; ! 2717: } ! 2718: switch (currweaponframe) { ! 2719: case RFIST + 5: ! 2720: case KNIFEATTACK + 6: ! 2721: case ZKNIFEATTACK + 5: // new ! 2722: case MORNINGSTAR + 5: ! 2723: case SWORDATTACK + 7: ! 2724: case BOWWALK + 5: ! 2725: case ZBOWATTACK + 4: ! 2726: case KNIFEATTACK2 + 2: ! 2727: case ZKNIFEATTACK2 + 2: ! 2728: case SWORDATTACK2 + 6: ! 2729: case MORNINGATTACK2 + 3: ! 2730: case HALBERDATTACK1 + 3: ! 2731: case HALBERDATTACK2 + 3: ! 2732: case BIGAXEATTACK + 7: ! 2733: case BIGAXEATTACK2 + 6: ! 2734: case PIKEATTACK1 + 4: ! 2735: case PIKEATTACK2 + 4: ! 2736: case EXCALATTACK1 + 7: ! 2737: case EXCALATTACK2 + 5: ! 2738: case GOBSWORDATTACK2 + 4: ! 2739: case GOBSWORDATTACK + 4: ! 2740: case ZSHORTATTACK + 7: ! 2741: case ZSHORTATTACK2 + 4: ! 2742: case ZSTARATTACK + 7: ! 2743: case ZSTARATTACK2 + 3: ! 2744: case ZAXEATTACK + 12: ! 2745: case ZAXEATTACK2 + 6: ! 2746: case ZPIKEATTACK + 4: ! 2747: case ZPIKEATTACK2 + 4: ! 2748: case ZTWOHANDATTACK + 12: ! 2749: case ZTWOHANDATTACK2 + 5: ! 2750: case ZHALBERDATTACK + 4: ! 2751: case ZHALBERDATTACK2 + 3: ! 2752: // here ! 2753: swingdaweapon(plr); ! 2754: break; ! 2755: } ! 2756: ! 2757: currweapontics -= synctics; ! 2758: ! 2759: if (helmettime > 0) ! 2760: currweapontics--; ! 2761: ! 2762: if (currweapontics < 0) { ! 2763: ! 2764: currweaponanim++; ! 2765: ! 2766: if (currweaponanim > 11) { ! 2767: currweaponanim = 0; ! 2768: currweaponfired = 0; ! 2769: currweaponflip = 0; ! 2770: currweapon = selectedgun; ! 2771: oldmousestatus = 0; ! 2772: ! 2773: if (dahand > 0) ! 2774: dahand = 0; ! 2775: ! 2776: } ! 2777: ! 2778: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) { ! 2779: currweapontics = lefthandanimtics[currweapon][currweaponanim].daweapontics; ! 2780: currweaponframe = lefthandanimtics[currweapon][currweaponanim].daweaponframe; ! 2781: dax = (long) lefthandanimtics[currweapon][currweaponanim].currx; ! 2782: day = (long) lefthandanimtics[currweapon][currweaponanim].curry + 8; ! 2783: } ! 2784: else { ! 2785: currweapontics = zlefthandanimtics[currweapon][currweaponanim].daweapontics; ! 2786: currweaponframe = zlefthandanimtics[currweapon][currweaponanim].daweaponframe; ! 2787: dax = (long) zlefthandanimtics[currweapon][currweaponanim].currx; ! 2788: day = (long) zlefthandanimtics[currweapon][currweaponanim].curry + 8; ! 2789: } ! 2790: } ! 2791: ! 2792: else { ! 2793: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) { ! 2794: currweaponframe = lefthandanimtics[currweapon][currweaponanim].daweaponframe; ! 2795: dax = (long) lefthandanimtics[currweapon][currweaponanim].currx; ! 2796: day = (long) lefthandanimtics[currweapon][currweaponanim].curry + 8; ! 2797: } ! 2798: else { ! 2799: currweaponframe = zlefthandanimtics[currweapon][currweaponanim].daweaponframe; ! 2800: dax = (long) zlefthandanimtics[currweapon][currweaponanim].currx; ! 2801: day = (long) zlefthandanimtics[currweapon][currweaponanim].curry + 8; ! 2802: } ! 2803: } ! 2804: ! 2805: ! 2806: ! 2807: if (currweapon == 0 && currweaponframe != EMPTY) { ! 2808: if (dahand == 1) ! 2809: rotatesprite(dax, ! 2810: day, ! 2811: 65536L, ! 2812: 0, ! 2813: currweaponframe, ! 2814: 0, ! 2815: 0, ! 2816: dabits, ! 2817: windowx1, ! 2818: windowy1, ! 2819: windowx2, ! 2820: windowy2); ! 2821: else if (dahand == 2) { ! 2822: dax = (long) lefthandanimtics[0][currweaponanim].currx; ! 2823: day = (long) lefthandanimtics[0][currweaponanim].curry + 8; ! 2824: overwritesprite(dax, day + 5, currweaponframe + 6, dashade, dabits, dapalnum); ! 2825: } ! 2826: } ! 2827: else { ! 2828: if (currweaponframe != EMPTY) { ! 2829: ! 2830: if (plr->weapon[currweapon] == 1) ! 2831: dax = lefthandanimtics[currweapon][currweaponanim].currx; ! 2832: else ! 2833: dax = zlefthandanimtics[currweapon][currweaponanim].currx; ! 2834: ! 2835: rotatesprite((dax + (tilesizx[currweaponframe] >> 1)) << 16, ! 2836: (day + (tilesizy[currweaponframe] >> 1)) << 16, ! 2837: 65536L, ! 2838: 1024, ! 2839: currweaponframe, ! 2840: 0, ! 2841: 0, ! 2842: dabits, ! 2843: windowx1, windowy1, windowx2, windowy2); ! 2844: ! 2845: } ! 2846: } ! 2847: ! 2848: if (currweapon == 0 && currweaponframe == EMPTY) { ! 2849: dahand = 0; ! 2850: oldmousestatus = 0; ! 2851: currweaponanim = 0; ! 2852: currweaponfired = 0; ! 2853: } ! 2854: ! 2855: if (selectedgun == 4 && currweaponframe == EMPTY) { ! 2856: currweaponanim = 0; ! 2857: currweaponfired = 0; ! 2858: currweaponflip = 0; ! 2859: currweapon = selectedgun; ! 2860: oldmousestatus = 0; ! 2861: } ! 2862: ! 2863: break; ! 2864: ! 2865: ! 2866: case 1: // fire ! 2867: ! 2868: switch (currweapon) { ! 2869: case 0: // fist ! 2870: if (currweaponframe == RFIST + 5) ! 2871: if (currweaponanim == 5 && currweapontics == 10) ! 2872: swingdasound(currweapon); ! 2873: break; ! 2874: case 1: // knife ! 2875: if (currweaponframe == KNIFEATTACK + 6 ! 2876: || currweaponframe == ZKNIFEATTACK + 5) ! 2877: if (currweaponanim == 8 && currweapontics == 8) ! 2878: swingdasound(currweapon); ! 2879: if (currweaponframe == KNIFEATTACK2 + 2 ! 2880: || currweaponframe == ZKNIFEATTACK2 + 2) ! 2881: if ((currweaponanim == 5 || currweaponanim == 9) && currweapontics == 8) ! 2882: swingdasound(currweapon); ! 2883: break; ! 2884: case 2: // shortsword ! 2885: if (currweaponframe == GOBSWORDATTACK + 4 ! 2886: || currweaponframe == ZSHORTATTACK + 7) ! 2887: if (currweaponanim == 4 && currweapontics == 10) ! 2888: swingdasound(currweapon); ! 2889: if (currweaponframe == GOBSWORDATTACK2 + 4 ! 2890: || currweaponframe == ZSHORTATTACK2 + 4) ! 2891: if (currweaponanim == 4 && currweapontics == 10) ! 2892: swingdasound(currweapon); ! 2893: break; ! 2894: case 3: // morning ! 2895: if (currweaponframe == MORNINGSTAR + 5 ! 2896: || currweaponframe == ZSTARATTACK + 7) ! 2897: if (currweaponanim == 7 && currweapontics == 12) ! 2898: swingdasound(currweapon); ! 2899: if (currweaponframe == MORNINGATTACK2 + 3 ! 2900: || currweaponframe == ZSTARATTACK2 + 3) ! 2901: if (currweaponanim == 3 && currweapontics == 12) ! 2902: swingdasound(currweapon); ! 2903: break; ! 2904: case 4: // sword ! 2905: if (currweaponframe == SWORDATTACK + 7) ! 2906: if (currweaponanim == 7 && currweapontics == 8) ! 2907: swingdasound(currweapon); ! 2908: if (currweaponframe == SWORDATTACK2 + 6) ! 2909: if (currweaponanim == 6 && currweapontics == 8) ! 2910: swingdasound(currweapon); ! 2911: break; ! 2912: case 5: // battleaxe ! 2913: if (currweaponframe == BIGAXEATTACK + 7 ! 2914: || currweaponframe == ZAXEATTACK + 12) ! 2915: if (currweaponanim == 7 && currweapontics == 12) ! 2916: swingdasound(currweapon); ! 2917: if (currweaponframe == BIGAXEATTACK2 + 6 ! 2918: || currweaponframe == ZAXEATTACK2 + 6) ! 2919: if (currweaponanim == 6 && currweapontics == 12) ! 2920: swingdasound(currweapon); ! 2921: break; ! 2922: case 6: // bow ! 2923: if (currweaponframe == BOWWALK + 4) ! 2924: if (currweaponanim == 4 && currweapontics == 6) ! 2925: swingdasound(currweapon); ! 2926: if (currweaponframe == ZBOWATTACK + 4) ! 2927: if (currweaponanim == 4 && currweapontics == 6) ! 2928: swingdasound(currweapon); ! 2929: break; ! 2930: case 7: // pike ! 2931: if (currweaponframe == PIKEATTACK1 + 4 ! 2932: || currweaponframe == ZPIKEATTACK + 4) ! 2933: if (currweaponanim == 8 && currweapontics == 10) ! 2934: swingdasound(currweapon); ! 2935: if (currweaponframe == PIKEATTACK2 + 4 ! 2936: || currweaponframe == ZPIKEATTACK2 + 4) ! 2937: if (currweaponanim == 4 && currweapontics == 10) ! 2938: swingdasound(currweapon); ! 2939: break; ! 2940: case 8: // two handed sword ! 2941: if (currweaponframe == EXCALATTACK1 + 7 ! 2942: || currweaponframe == ZTWOHANDATTACK + 12) ! 2943: if (currweaponanim == 7 && currweapontics == 8) ! 2944: swingdasound(currweapon); ! 2945: if (currweaponframe == EXCALATTACK2 + 5 ! 2946: || currweaponframe == ZTWOHANDATTACK2 + 5) ! 2947: if (currweaponanim == 5 && currweapontics == 8) ! 2948: swingdasound(currweapon); ! 2949: break; ! 2950: case 9: // halberd ! 2951: if (currweaponframe == HALBERDATTACK1 + 3 ! 2952: || currweaponframe == ZHALBERDATTACK + 4) ! 2953: if (currweaponanim == 7 && currweapontics == 12) ! 2954: swingdasound(currweapon); ! 2955: if (currweaponframe == HALBERDATTACK2 + 3 ! 2956: || currweaponframe == ZHALBERDATTACK2 + 3) ! 2957: if (currweaponanim == 4 && currweapontics == 12) ! 2958: swingdasound(currweapon); ! 2959: break; ! 2960: } ! 2961: ! 2962: switch (currweaponframe) { ! 2963: case RFIST + 5: ! 2964: case KNIFEATTACK + 6: ! 2965: case ZKNIFEATTACK + 5: // new ! 2966: case MORNINGSTAR + 5: ! 2967: case SWORDATTACK + 7: ! 2968: case BOWWALK + 5: ! 2969: case ZBOWATTACK + 4: ! 2970: case KNIFEATTACK2 + 2: ! 2971: case ZKNIFEATTACK2 + 2: ! 2972: case SWORDATTACK2 + 6: ! 2973: case MORNINGATTACK2 + 3: ! 2974: case HALBERDATTACK1 + 3: ! 2975: case HALBERDATTACK2 + 3: ! 2976: case BIGAXEATTACK + 7: ! 2977: case BIGAXEATTACK2 + 6: ! 2978: case PIKEATTACK1 + 4: ! 2979: case PIKEATTACK2 + 4: ! 2980: case EXCALATTACK1 + 7: ! 2981: case EXCALATTACK2 + 5: ! 2982: case GOBSWORDATTACK2 + 4: ! 2983: case GOBSWORDATTACK + 4: ! 2984: case ZSHORTATTACK + 7: ! 2985: case ZSHORTATTACK2 + 4: ! 2986: case ZSTARATTACK + 7: ! 2987: case ZSTARATTACK2 + 3: ! 2988: case ZAXEATTACK + 12: ! 2989: case ZAXEATTACK2 + 6: ! 2990: case ZPIKEATTACK + 4: ! 2991: case ZPIKEATTACK2 + 4: ! 2992: case ZTWOHANDATTACK + 12: ! 2993: case ZTWOHANDATTACK2 + 5: ! 2994: case ZHALBERDATTACK + 4: ! 2995: case ZHALBERDATTACK2 + 3: ! 2996: swingdaweapon(plr); ! 2997: break; ! 2998: } ! 2999: ! 3000: currweapontics -= ((long) synctics); ! 3001: if (helmettime > 0) ! 3002: currweapontics--; ! 3003: ! 3004: if (shieldpoints <= 0) ! 3005: droptheshield = 1; ! 3006: ! 3007: if ((currweaponframe == SWORDATTACK + 7 ! 3008: || currweaponframe == SWORDATTACK2 + 7) ! 3009: && currweapontics < 0 && droptheshield == 1) { ! 3010: ! 3011: if (rand() % 100 > 50) { ! 3012: if (plr->ammo[1] > 0 && plr->weapon[3] == 0) { ! 3013: currweapon = 1; ! 3014: currweapontics = 6; ! 3015: currweaponanim = -1; ! 3016: currweaponfired = 6; ! 3017: currweaponflip = 1; ! 3018: } ! 3019: if (plr->ammo[3] > 0) { ! 3020: currweapon = 3; ! 3021: currweapontics = 6; ! 3022: currweaponanim = -1; ! 3023: currweaponfired = 6; ! 3024: currweaponflip = 1; ! 3025: } ! 3026: } ! 3027: } ! 3028: if (currweapontics < 0) { ! 3029: currweaponanim++; ! 3030: if (currweaponanim > 11) { ! 3031: // impact=0; ! 3032: currweaponanim = 0; ! 3033: currweaponfired = 0; ! 3034: oldmousestatus = 0; // NEW ! 3035: if (dahand > 0) ! 3036: dahand = 0; ! 3037: } ! 3038: if (currweaponattackstyle == 0) { ! 3039: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) { ! 3040: currweapontics = weaponanimtics[currweapon][currweaponanim].daweapontics; ! 3041: currweaponframe = weaponanimtics[currweapon][currweaponanim].daweaponframe; ! 3042: dax = weaponanimtics[currweapon][currweaponanim].currx + 8; ! 3043: day = weaponanimtics[currweapon][currweaponanim].curry; ! 3044: } ! 3045: else { ! 3046: currweapontics = zweaponanimtics[currweapon][currweaponanim].daweapontics; ! 3047: currweaponframe = zweaponanimtics[currweapon][currweaponanim].daweaponframe; ! 3048: dax = zweaponanimtics[currweapon][currweaponanim].currx + 8; ! 3049: day = zweaponanimtics[currweapon][currweaponanim].curry; ! 3050: } ! 3051: } ! 3052: else { ! 3053: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) { ! 3054: currweapontics = weaponanimtics2[currweapon][currweaponanim].daweapontics; ! 3055: currweaponframe = weaponanimtics2[currweapon][currweaponanim].daweaponframe; ! 3056: dax = weaponanimtics2[currweapon][currweaponanim].currx + 8; ! 3057: day = weaponanimtics2[currweapon][currweaponanim].curry; ! 3058: } ! 3059: else { ! 3060: currweapontics = zweaponanimtics2[currweapon][currweaponanim].daweapontics; ! 3061: currweaponframe = zweaponanimtics2[currweapon][currweaponanim].daweaponframe; ! 3062: dax = zweaponanimtics2[currweapon][currweaponanim].currx + 8; ! 3063: day = zweaponanimtics2[currweapon][currweaponanim].curry; ! 3064: } ! 3065: } ! 3066: } ! 3067: else { ! 3068: if (currweaponattackstyle == 0) { ! 3069: // flip ! 3070: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) { ! 3071: currweaponframe = weaponanimtics[currweapon][currweaponanim].daweaponframe; ! 3072: dax = weaponanimtics[currweapon][currweaponanim].currx; ! 3073: day = weaponanimtics[currweapon][currweaponanim].curry; ! 3074: } ! 3075: else { ! 3076: currweaponframe = zweaponanimtics[currweapon][currweaponanim].daweaponframe; ! 3077: dax = zweaponanimtics[currweapon][currweaponanim].currx; ! 3078: day = zweaponanimtics[currweapon][currweaponanim].curry; ! 3079: } ! 3080: } ! 3081: else { ! 3082: // flip ! 3083: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) { ! 3084: currweaponframe = weaponanimtics2[currweapon][currweaponanim].daweaponframe; ! 3085: dax = weaponanimtics2[currweapon][currweaponanim].currx; ! 3086: day = weaponanimtics2[currweapon][currweaponanim].curry; ! 3087: } ! 3088: else { ! 3089: currweaponframe = zweaponanimtics2[currweapon][currweaponanim].daweaponframe; ! 3090: dax = zweaponanimtics2[currweapon][currweaponanim].currx; ! 3091: day = zweaponanimtics2[currweapon][currweaponanim].curry; ! 3092: } ! 3093: } ! 3094: ! 3095: } ! 3096: if (currweapon == 0 && currweaponframe != EMPTY) { ! 3097: if (dahand == 1) ! 3098: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum); ! 3099: ! 3100: else if (dahand == 2) { ! 3101: dax = lefthandanimtics[0][currweaponanim].currx; ! 3102: day = lefthandanimtics[0][currweaponanim].curry + 8; ! 3103: overwritesprite(dax, day + 5, currweaponframe + 6, dashade, dabits, dapalnum); ! 3104: } ! 3105: } ! 3106: else { ! 3107: if (currweaponframe != EMPTY) { ! 3108: if (currweaponattackstyle == 0) ! 3109: // flip ! 3110: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) ! 3111: dax = weaponanimtics[currweapon][currweaponanim].currx; ! 3112: else ! 3113: dax = zweaponanimtics[currweapon][currweaponanim].currx; ! 3114: else ! 3115: // flip ! 3116: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) ! 3117: dax = weaponanimtics2[currweapon][currweaponanim].currx; ! 3118: else ! 3119: dax = zweaponanimtics2[currweapon][currweaponanim].currx; ! 3120: ! 3121: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum); ! 3122: } ! 3123: } ! 3124: ! 3125: if (currweapon == 0 && currweaponframe == EMPTY) { ! 3126: dahand = 0; ! 3127: oldmousestatus = 0; // NEW ! 3128: currweaponanim = 0; ! 3129: currweaponfired = 0; ! 3130: } ! 3131: break; ! 3132: ! 3133: ! 3134: case 0: // walking ! 3135: ! 3136: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) ! 3137: currweapontics = weaponanimtics[currweapon][0].daweapontics; ! 3138: else ! 3139: currweapontics = zweaponanimtics[currweapon][0].daweapontics; ! 3140: ! 3141: if (currweapon == 6 && plr->ammo[6] <= 0) { ! 3142: // wango ! 3143: if (plr->weapon[currweapon] == 1) ! 3144: currweaponframe = BOWREADYEND; ! 3145: else ! 3146: currweaponframe = ZBOWWALK; ! 3147: } ! 3148: else { ! 3149: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) ! 3150: currweaponframe = weaponanimtics[currweapon][0].daweaponframe; ! 3151: else ! 3152: currweaponframe = zweaponanimtics[currweapon][0].daweaponframe; ! 3153: } ! 3154: ! 3155: if (vel != 0) { ! 3156: snakex = (sintable[(lockclock << 4) & 2047] >> 12); ! 3157: snakey = (sintable[(totalclock << 4) & 2047] >> 12); ! 3158: ! 3159: if (plr->screensize <= 320) { ! 3160: /* if( currweaponframe == BOWREADYEND ) { if ! 3161: * (plr->weapon[currweapon] == 1) { ! 3162: * day=readyanimtics[currweapon][6].curry+snakey+16; ! 3163: * dax=readyanimtics[currweapon][6].currx+snakex+16; } else ! 3164: * { day=zreadyanimtics[currweapon][6].curry+snakey+16; ! 3165: * dax=zreadyanimtics[currweapon][6].currx+snakex+16; } } ! 3166: * else { if (plr->weapon[currweapon] == 1 || ! 3167: * plr->weapon[7] == 2) { ! 3168: * day=weaponanimtics[currweapon][0].curry+snakey+16; ! 3169: * dax=weaponanimtics[currweapon][0].currx+snakex+16; } ! 3170: * else { ! 3171: * day=zreadyanimtics[currweapon][6].curry+snakey+16; ! 3172: * dax=zreadyanimtics[currweapon][6].currx+snakex+16; } } */ ! 3173: if (currweaponframe == BOWREADYEND) { ! 3174: if (plr->weapon[currweapon] == 1) { ! 3175: day = readyanimtics[currweapon][6].curry + snakey + 8; ! 3176: dax = readyanimtics[currweapon][6].currx + snakex + 8; ! 3177: } ! 3178: else { ! 3179: day = zreadyanimtics[currweapon][6].curry + snakey + 8; ! 3180: dax = zreadyanimtics[currweapon][6].currx + snakex + 8; ! 3181: } ! 3182: } ! 3183: else { ! 3184: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) { ! 3185: day = weaponanimtics[currweapon][0].curry + snakey + 8; ! 3186: dax = weaponanimtics[currweapon][0].currx + snakex + 8; ! 3187: } ! 3188: else { ! 3189: day = zweaponanimtics[currweapon][0].curry + snakey + 8; ! 3190: dax = zweaponanimtics[currweapon][0].currx + snakex + 8; ! 3191: } ! 3192: } ! 3193: ! 3194: } ! 3195: else { ! 3196: if (currweaponframe == BOWREADYEND) { ! 3197: if (plr->weapon[currweapon] == 1) { ! 3198: day = readyanimtics[currweapon][6].curry + snakey + 8; ! 3199: dax = readyanimtics[currweapon][6].currx + snakex + 8; ! 3200: } ! 3201: else { ! 3202: day = zreadyanimtics[currweapon][6].curry + snakey + 8; ! 3203: dax = zreadyanimtics[currweapon][6].currx + snakex + 8; ! 3204: } ! 3205: } ! 3206: else { ! 3207: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) { ! 3208: day = weaponanimtics[currweapon][0].curry + snakey + 8; ! 3209: dax = weaponanimtics[currweapon][0].currx + snakex + 8; ! 3210: } ! 3211: else { ! 3212: day = zweaponanimtics[currweapon][0].curry + snakey + 8; ! 3213: dax = zweaponanimtics[currweapon][0].currx + snakex + 8; ! 3214: } ! 3215: } ! 3216: } ! 3217: } ! 3218: else { ! 3219: if (currweaponframe == BOWREADYEND) { ! 3220: if (plr->weapon[currweapon] == 1) { ! 3221: day = readyanimtics[currweapon][6].curry + 3; ! 3222: dax = readyanimtics[currweapon][6].currx + 3; ! 3223: } ! 3224: else { ! 3225: day = zreadyanimtics[currweapon][6].curry + 3; ! 3226: dax = zreadyanimtics[currweapon][6].currx + 3; ! 3227: } ! 3228: } ! 3229: else { ! 3230: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) { ! 3231: dax = weaponanimtics[currweapon][0].currx + 3; ! 3232: day = weaponanimtics[currweapon][0].curry + 3; ! 3233: } ! 3234: else { ! 3235: dax = zweaponanimtics[currweapon][0].currx + 3; ! 3236: day = zweaponanimtics[currweapon][0].curry + 3; ! 3237: } ! 3238: } ! 3239: } ! 3240: if (currweapon == 0 && currweaponframe != EMPTY) { ! 3241: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum); ! 3242: overwritesprite(0, day + 8, currweaponframe + 6, dashade, dabits, dapalnum); ! 3243: } ! 3244: else { ! 3245: if (currweaponframe != EMPTY) { ! 3246: overwritesprite(dax + snakex, day, currweaponframe, dashade, dabits, dapalnum); ! 3247: } ! 3248: } ! 3249: break; ! 3250: case 2: // unready ! 3251: if (currweapon == 1) ! 3252: weapondrop += synctics << 1; ! 3253: else ! 3254: weapondrop += synctics; ! 3255: if (weapondrop > weapondropgoal) { ! 3256: currweaponfired = 3; ! 3257: weaponraise = 40; ! 3258: currweapon = selectedgun; ! 3259: weaponuseless = 0; ! 3260: // hasshot=0;//just in case of bugg ! 3261: // make hasshot=1; ! 3262: } ! 3263: ! 3264: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) ! 3265: currweapontics = weaponanimtics[currweapon][0].daweapontics; ! 3266: else ! 3267: currweapontics = zweaponanimtics[currweapon][0].daweapontics; ! 3268: ! 3269: if (currweapon == 6 && plr->ammo[6] <= 0) { ! 3270: if (plr->weapon[currweapon] == 1) ! 3271: currweaponframe = BOWREADYEND; ! 3272: else ! 3273: // currweaponframe=ZBOWREADYEND; ! 3274: currweaponframe = ZBOWWALK; ! 3275: } ! 3276: else { ! 3277: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) ! 3278: currweaponframe = weaponanimtics[currweapon][0].daweaponframe; ! 3279: else ! 3280: currweaponframe = zweaponanimtics[currweapon][0].daweaponframe; ! 3281: } ! 3282: ! 3283: if (currweaponframe == BOWREADYEND) { ! 3284: day = readyanimtics[currweapon][6].curry + (weapondrop); ! 3285: dax = readyanimtics[currweapon][6].currx; ! 3286: } ! 3287: // else if (currweaponframe == ZBOWREADYEND) { ! 3288: else if (currweaponframe == ZBOWWALK) { ! 3289: day = zreadyanimtics[currweapon][6].curry + (weapondrop); ! 3290: dax = zreadyanimtics[currweapon][6].currx; ! 3291: } ! 3292: else { ! 3293: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) { ! 3294: dax = weaponanimtics[currweapon][0].currx; ! 3295: day = weaponanimtics[currweapon][0].curry + (weapondrop); ! 3296: } ! 3297: else { ! 3298: dax = zweaponanimtics[currweapon][0].currx; ! 3299: day = zweaponanimtics[currweapon][0].curry + (weapondrop); ! 3300: } ! 3301: } ! 3302: ! 3303: if (currweapon == 0 && currweaponframe != EMPTY) { ! 3304: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum); ! 3305: overwritesprite(0, day, currweaponframe + 6, dashade, dabits, dapalnum); ! 3306: } ! 3307: ! 3308: else { ! 3309: if (currweaponframe != EMPTY) { ! 3310: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) ! 3311: dax = weaponanimtics[currweapon][0].currx; ! 3312: else ! 3313: dax = weaponanimtics[currweapon][0].currx; ! 3314: ! 3315: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum); ! 3316: } ! 3317: } ! 3318: break; ! 3319: case 3: // ready ! 3320: currweapontics -= ((long) synctics); ! 3321: if (currweapontics < 0) { ! 3322: currweaponanim++; ! 3323: if (currweaponanim == 12) { ! 3324: currweaponanim = 0; ! 3325: currweaponfired = 0; ! 3326: ! 3327: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) { ! 3328: currweaponframe = readyanimtics[currweapon][11].daweaponframe; ! 3329: dax = readyanimtics[currweapon][11].currx; ! 3330: day = readyanimtics[currweapon][11].curry + 8; ! 3331: } ! 3332: else { ! 3333: currweaponframe = zreadyanimtics[currweapon][11].daweaponframe; ! 3334: dax = zreadyanimtics[currweapon][11].currx; ! 3335: day = zreadyanimtics[currweapon][11].curry + 8; ! 3336: } ! 3337: ! 3338: if (currweapon == 0 && currweaponframe != EMPTY) { ! 3339: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum); ! 3340: overwritesprite(0, day, currweaponframe + 6, dashade, dabits, dapalnum); ! 3341: } ! 3342: else { ! 3343: if (currweaponframe != EMPTY) { ! 3344: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum); ! 3345: } ! 3346: } ! 3347: break; ! 3348: if (dahand > 0) ! 3349: dahand = 0; ! 3350: } ! 3351: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) { ! 3352: currweapontics = readyanimtics[currweapon][currweaponanim].daweapontics; ! 3353: currweaponframe = readyanimtics[currweapon][currweaponanim].daweaponframe; ! 3354: dax = readyanimtics[currweapon][currweaponanim].currx; ! 3355: day = readyanimtics[currweapon][currweaponanim].curry + 8; ! 3356: } ! 3357: else { ! 3358: currweapontics = zreadyanimtics[currweapon][currweaponanim].daweapontics; ! 3359: currweaponframe = zreadyanimtics[currweapon][currweaponanim].daweaponframe; ! 3360: dax = zreadyanimtics[currweapon][currweaponanim].currx; ! 3361: day = zreadyanimtics[currweapon][currweaponanim].curry + 8; ! 3362: } ! 3363: } ! 3364: else { ! 3365: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) { ! 3366: currweaponframe = readyanimtics[currweapon][currweaponanim].daweaponframe; ! 3367: dax = readyanimtics[currweapon][currweaponanim].currx; ! 3368: day = readyanimtics[currweapon][currweaponanim].curry + 8; ! 3369: } ! 3370: else { ! 3371: currweaponframe = zreadyanimtics[currweapon][currweaponanim].daweaponframe; ! 3372: dax = zreadyanimtics[currweapon][currweaponanim].currx; ! 3373: day = zreadyanimtics[currweapon][currweaponanim].curry + 8; ! 3374: } ! 3375: ! 3376: } ! 3377: if (currweapon == 0 && currweaponframe != EMPTY) { ! 3378: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum); ! 3379: overwritesprite(0, day, currweaponframe + 6, dashade, dabits, dapalnum); ! 3380: } ! 3381: else { ! 3382: if (currweaponframe != EMPTY) { ! 3383: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum); ! 3384: } ! 3385: } ! 3386: break; ! 3387: ! 3388: case 5: // cock ! 3389: currweapontics -= ((long) synctics); ! 3390: if (currweapontics < 0) { ! 3391: currweaponanim++; ! 3392: if (currweaponanim == 4) { ! 3393: currweaponanim = 0; ! 3394: currweaponfired = 0; ! 3395: ! 3396: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) { ! 3397: currweaponframe = cockanimtics[3].daweaponframe; ! 3398: dax = cockanimtics[3].currx + 3; ! 3399: day = cockanimtics[3].curry + 3; ! 3400: } ! 3401: else { ! 3402: if (plr->weapon[currweapon] == 3) { ! 3403: currweaponframe = zcockanimtics[4].daweaponframe; ! 3404: dax = zcockanimtics[4].currx + 3; ! 3405: day = zcockanimtics[4].curry + 3; ! 3406: } ! 3407: else { ! 3408: currweaponframe = cockanimtics[4].daweaponframe; ! 3409: dax = cockanimtics[4].currx + 3; ! 3410: day = cockanimtics[4].curry + 3; ! 3411: } ! 3412: } ! 3413: ! 3414: if (currweaponframe != EMPTY) ! 3415: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum); ! 3416: break; ! 3417: } ! 3418: ! 3419: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) { ! 3420: currweapontics = cockanimtics[currweaponanim].daweapontics; ! 3421: currweaponframe = cockanimtics[currweaponanim].daweaponframe; ! 3422: dax = cockanimtics[currweaponanim].currx; ! 3423: day = cockanimtics[currweaponanim].curry + 8; ! 3424: } ! 3425: else { ! 3426: if (plr->weapon[currweapon] == 3) { ! 3427: currweapontics = zcockanimtics[currweaponanim].daweapontics; ! 3428: currweaponframe = zcockanimtics[currweaponanim].daweaponframe; ! 3429: dax = zcockanimtics[currweaponanim].currx; ! 3430: day = zcockanimtics[currweaponanim].curry + 8; ! 3431: } ! 3432: else { ! 3433: currweapontics = cockanimtics[currweaponanim].daweapontics; ! 3434: currweaponframe = cockanimtics[currweaponanim].daweaponframe; ! 3435: dax = cockanimtics[currweaponanim].currx; ! 3436: day = cockanimtics[currweaponanim].curry + 8; ! 3437: } ! 3438: } ! 3439: } ! 3440: else { ! 3441: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) { ! 3442: currweaponframe = cockanimtics[currweaponanim].daweaponframe; ! 3443: dax = cockanimtics[currweaponanim].currx; ! 3444: day = cockanimtics[currweaponanim].curry + 8; ! 3445: } ! 3446: else { ! 3447: if (plr->weapon[currweapon] == 3) { ! 3448: currweaponframe = zcockanimtics[currweaponanim].daweaponframe; ! 3449: dax = zcockanimtics[currweaponanim].currx; ! 3450: day = zcockanimtics[currweaponanim].curry + 8; ! 3451: } ! 3452: else { ! 3453: currweaponframe = zcockanimtics[currweaponanim].daweaponframe; ! 3454: dax = zcockanimtics[currweaponanim].currx; ! 3455: day = zcockanimtics[currweaponanim].curry + 8; ! 3456: } ! 3457: } ! 3458: } ! 3459: if (currweaponframe != EMPTY) ! 3460: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum); ! 3461: ! 3462: break; ! 3463: ! 3464: case 4: // throw the orb ! 3465: ! 3466: if (currweaponframe == EMPTY || (currentorb == 0 || currentorb == 2 ! 3467: || currentorb == 3 ! 3468: || currentorb == 6 ! 3469: || currentorb == 7)) { ! 3470: castaorb(plr); ! 3471: currweaponanim = 13; ! 3472: currweapontics = -1; ! 3473: } ! 3474: ! 3475: currweapontics -= ((long) synctics); ! 3476: if (currweapontics < 0) { ! 3477: currweaponanim++; ! 3478: if (currweaponanim > 12) { ! 3479: currweaponanim = 0; ! 3480: currweaponfired = 0; ! 3481: orbshot = 0; ! 3482: // ! 3483: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) { ! 3484: currweaponframe = throwanimtics[currentorb][currweaponanim].daweaponframe; ! 3485: dax = throwanimtics[currentorb][currweaponanim].currx; ! 3486: day = throwanimtics[currentorb][currweaponanim].curry + 8; ! 3487: } ! 3488: else { ! 3489: currweaponframe = zthrowanimtics[currentorb][currweaponanim].daweaponframe; ! 3490: dax = zthrowanimtics[currentorb][currweaponanim].currx; ! 3491: day = zthrowanimtics[currentorb][currweaponanim].curry + 8; ! 3492: } ! 3493: ! 3494: if (currweapon == 0 && currweaponframe != EMPTY) { ! 3495: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum); ! 3496: } ! 3497: else { ! 3498: if (currweaponframe != EMPTY) { ! 3499: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum); ! 3500: } ! 3501: } ! 3502: // ! 3503: ! 3504: break; ! 3505: } ! 3506: if (plr->weapon[currweapon] == 1) { ! 3507: currweapontics = throwanimtics[currentorb][currweaponanim].daweapontics; ! 3508: currweaponframe = throwanimtics[currentorb][currweaponanim].daweaponframe; ! 3509: dax = throwanimtics[currentorb][currweaponanim].currx; ! 3510: day = throwanimtics[currentorb][currweaponanim].curry + 8; ! 3511: } ! 3512: else { ! 3513: currweapontics = zthrowanimtics[currentorb][currweaponanim].daweapontics; ! 3514: currweaponframe = zthrowanimtics[currentorb][currweaponanim].daweaponframe; ! 3515: dax = zthrowanimtics[currentorb][currweaponanim].currx; ! 3516: day = zthrowanimtics[currentorb][currweaponanim].curry + 8; ! 3517: } ! 3518: } ! 3519: else { ! 3520: if (plr->weapon[currweapon] == 1) { ! 3521: currweaponframe = throwanimtics[currentorb][currweaponanim].daweaponframe; ! 3522: dax = throwanimtics[currentorb][currweaponanim].currx; ! 3523: day = throwanimtics[currentorb][currweaponanim].curry + 8; ! 3524: } ! 3525: else { ! 3526: currweaponframe = zthrowanimtics[currentorb][currweaponanim].daweaponframe; ! 3527: dax = zthrowanimtics[currentorb][currweaponanim].currx; ! 3528: day = zthrowanimtics[currentorb][currweaponanim].curry + 8; ! 3529: } ! 3530: } ! 3531: if (currweaponframe != EMPTY) { ! 3532: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum); ! 3533: } ! 3534: break; ! 3535: } ! 3536: ! 3537: if (shieldpoints > 0 ! 3538: && (currweaponfired == 0 ! 3539: || currweaponfired == 1) ! 3540: && selectedgun > 0 ! 3541: && selectedgun < 5 ! 3542: && droptheshield == 0) { ! 3543: ! 3544: if (currweaponfired == 1) { ! 3545: snakex = (sintable[(lockclock << 4) & 2047] >> 12); ! 3546: if (droptheshield == 1) { ! 3547: dropshieldcnt += synctics << 1; ! 3548: snakey = (sintable[(totalclock << 4) & 2047] >> 12) + dropshieldcnt; ! 3549: } ! 3550: else { ! 3551: snakey = (sintable[(totalclock << 4) & 2047] >> 12); ! 3552: } ! 3553: } ! 3554: if (dropshieldcnt > 200) { ! 3555: dropshieldcnt = 0; ! 3556: droptheshield = 1; ! 3557: } ! 3558: ! 3559: if (shieldtype == 1) { ! 3560: if (shieldpoints > 75) { ! 3561: overwritesprite(-40 + snakex, 100 + snakey, GRONSHIELD, dashade, dabits, dapalnum); ! 3562: } ! 3563: else if (shieldpoints > 50 && shieldpoints < 76) { ! 3564: overwritesprite(-40 + snakex, 100 + snakey, GRONSHIELD + 1, dashade, dabits, dapalnum); ! 3565: } ! 3566: else if (shieldpoints > 25 && shieldpoints < 51) { ! 3567: overwritesprite(-40 + snakex, 100 + snakey, GRONSHIELD + 2, dashade, dabits, dapalnum); ! 3568: } ! 3569: else { ! 3570: overwritesprite(-40 + snakex, 100 + snakey, GRONSHIELD + 3, dashade, dabits, dapalnum); ! 3571: } ! 3572: } ! 3573: else { ! 3574: if (shieldpoints > 150) { ! 3575: overwritesprite(-40 + snakex, 100 + snakey, ROUNDSHIELD, dashade, dabits, dapalnum); ! 3576: } ! 3577: else if (shieldpoints > 100 && shieldpoints < 151) { ! 3578: overwritesprite(-40 + snakex, 100 + snakey, ROUNDSHIELD + 1, dashade, dabits, dapalnum); ! 3579: } ! 3580: else if (shieldpoints > 50 && shieldpoints < 101) { ! 3581: overwritesprite(-40 + snakex, 100 + snakey, ROUNDSHIELD + 2, dashade, dabits, dapalnum); ! 3582: } ! 3583: else { ! 3584: overwritesprite(-40 + snakex, 100 + snakey, ROUNDSHIELD + 3, dashade, dabits, dapalnum); ! 3585: } ! 3586: } ! 3587: ! 3588: } ! 3589: ! 3590: ! 3591: // ! 3592: // spellbook ! 3593: // ! 3594: ! 3595: if (spellbookflip == 1) { ! 3596: if (svga == 0) { ! 3597: if (plr->screensize <= 320) ! 3598: itemtoscreen(122L, 155L, SPELLBOOKBACK, 0, 0); ! 3599: } ! 3600: if (svga == 1) { ! 3601: if (plr->screensize == 320) ! 3602: itemtoscreen(120L << 1, 372L, SSPELLBACK, 0, 0); ! 3603: } ! 3604: ! 3605: spellbooktics -= synctics; ! 3606: if (spellbooktics < 0) { ! 3607: spellbook++; ! 3608: if (spellbook > 8) ! 3609: spellbook = 8; ! 3610: if (spellbook == 8) { ! 3611: spellbooktics = spellbookanim[currentorb][8].daweapontics; ! 3612: if (svga == 1) { ! 3613: spellbookframe = sspellbookanim[currentorb][8].daweaponframe; ! 3614: dax = sspellbookanim[currentorb][8].currx; ! 3615: day = sspellbookanim[currentorb][8].curry; ! 3616: itemtoscreen(dax << 1, day, spellbookframe, 0, 0); ! 3617: } ! 3618: else { ! 3619: spellbookframe = spellbookanim[currentorb][8].daweaponframe; ! 3620: dax = spellbookanim[currentorb][8].currx; ! 3621: day = spellbookanim[currentorb][8].curry; ! 3622: itemtoscreen(dax, day, spellbookframe, 0, 0); ! 3623: } ! 3624: spellbookflip = 0; ! 3625: return; ! 3626: } ! 3627: else { ! 3628: spellbooktics = spellbookanim[currentorb][spellbook].daweapontics; ! 3629: ! 3630: if (svga == 1) { ! 3631: spellbookframe = sspellbookanim[currentorb][spellbook].daweaponframe; ! 3632: dax = sspellbookanim[currentorb][spellbook].currx; ! 3633: day = sspellbookanim[currentorb][spellbook].curry; ! 3634: itemtoscreen(dax << 1, day, spellbookframe, 0, 0); ! 3635: } ! 3636: else { ! 3637: spellbookframe = spellbookanim[currentorb][spellbook].daweaponframe; ! 3638: dax = spellbookanim[currentorb][spellbook].currx; ! 3639: day = spellbookanim[currentorb][spellbook].curry; ! 3640: itemtoscreen(dax, day, spellbookframe, 0, 0); ! 3641: } ! 3642: } ! 3643: } ! 3644: else { ! 3645: ! 3646: if (svga == 1) { ! 3647: spellbookframe = sspellbookanim[currentorb][spellbook].daweaponframe; ! 3648: dax = sspellbookanim[currentorb][spellbook].currx; ! 3649: day = sspellbookanim[currentorb][spellbook].curry; ! 3650: itemtoscreen(dax << 1, day, spellbookframe, 0, 0); ! 3651: } ! 3652: else { ! 3653: spellbookframe = spellbookanim[currentorb][spellbook].daweaponframe; ! 3654: dax = spellbookanim[currentorb][spellbook].currx; ! 3655: day = spellbookanim[currentorb][spellbook].curry; ! 3656: itemtoscreen(dax, day, spellbookframe, 0, 0); ! 3657: } ! 3658: ! 3659: } ! 3660: } ! 3661: ! 3662: ! 3663: } ! 3664: ! 3665: void ! 3666: castaorb(struct player * plr) ! 3667: { ! 3668: ! 3669: int i, k, n, s; ! 3670: short daang; ! 3671: spritetype *spr; ! 3672: ! 3673: switch (currentorb) { ! 3674: case 0: // SCARE ! 3675: playsound_loc(S_GENERALMAGIC4,plr->x,plr->y); ! 3676: shadowtime = ((plr->lvl + 1) * 120) << 4; ! 3677: break; ! 3678: case 1: // NIGHTVISION ! 3679: nightglowtime = 3600 + (plr->lvl * 120); ! 3680: break; ! 3681: case 2: // FREEZE ! 3682: playsound_loc(S_GENERALMAGIC3,plr->x,plr->y); ! 3683: daang = plr->ang; ! 3684: shootgun(plr, daang, 6); ! 3685: // playsound_loc(S_SPELL1,plr->x,plr->y); ! 3686: break; ! 3687: case 3: // MAGIC ARROW ! 3688: lockon(plr,10,2); ! 3689: playsound_loc(S_GENERALMAGIC2,plr->x,plr->y); ! 3690: break; ! 3691: case 4: // OPEN DOORS ! 3692: playsound_loc(S_DOORSPELL,plr->x,plr->y); ! 3693: daang = plr->ang; ! 3694: shootgun(plr, daang, 7); ! 3695: break; ! 3696: case 5: // FLY ! 3697: playsound_loc(S_GENERALMAGIC1,plr->x,plr->y); ! 3698: plr->orbactive[currentorb] = 3600 + (plr->lvl * 120); ! 3699: break; ! 3700: case 6: // FIREBALL ! 3701: lockon(plr,3,3); ! 3702: playsound_loc(S_FIRESPELL,plr->x,plr->y); ! 3703: break; ! 3704: case 7: // NUKE ! 3705: playsound_loc(S_NUKESPELL,plr->x,plr->y); ! 3706: daang = plr->ang; ! 3707: shootgun(plr, daang, 4); ! 3708: break; ! 3709: } ! 3710: ! 3711: } ! 3712: ! 3713: void ! 3714: chunksofmeat(struct player * plr, short hitsprite, long hitx, long hity, long hitz, short hitsect, short daang) ! 3715: { ! 3716: ! 3717: short j; ! 3718: short k; ! 3719: short zgore; ! 3720: int chunk = REDCHUNKSTART; ! 3721: int newchunk; ! 3722: ! 3723: if (goreon == 0) ! 3724: return; ! 3725: ! 3726: if (sprite[hitsprite].shade > 30) ! 3727: return; ! 3728: ! 3729: switch (selectedgun) { ! 3730: case 1: ! 3731: case 2: ! 3732: zgore = 1; ! 3733: break; ! 3734: case 3: ! 3735: case 4: ! 3736: zgore = 2; ! 3737: break; ! 3738: case 5: ! 3739: zgore = 3; ! 3740: break; ! 3741: case 6: ! 3742: zgore = 1; ! 3743: break; ! 3744: case 7: ! 3745: zgore = 2; ! 3746: break; ! 3747: case 8: ! 3748: case 9: ! 3749: zgore = 3; ! 3750: break; ! 3751: } ! 3752: if (sprite[hitsprite].statnum == NUKED) { ! 3753: zgore = 32; ! 3754: } ! 3755: if (sprite[hitsprite].picnum == RAT) ! 3756: zgore = 1; ! 3757: ! 3758: if (sprite[hitsprite].picnum == WILLOW ! 3759: || sprite[hitsprite].picnum == WILLOWEXPLO ! 3760: || sprite[hitsprite].picnum == WILLOWEXPLO + 1 ! 3761: || sprite[hitsprite].picnum == WILLOWEXPLO + 2 ! 3762: || sprite[hitsprite].picnum == GUARDIAN ! 3763: || sprite[hitsprite].picnum == GUARDIANATTACK ! 3764: || sprite[hitsprite].picnum == DEMON) ! 3765: return; ! 3766: ! 3767: if (sprite[hitsprite].picnum == SKELETON ! 3768: || sprite[hitsprite].picnum == SKELETONATTACK ! 3769: || sprite[hitsprite].picnum == SKELETONDIE) { ! 3770: playsound_loc(S_SKELHIT1 + (rand() % 2), sprite[hitsprite].x, sprite[hitsprite].y); ! 3771: } ! 3772: else { ! 3773: if (rand() % 100 > 60) ! 3774: playsound_loc(S_GORE1 + (rand() % 4), sprite[hitsprite].x, sprite[hitsprite].y); ! 3775: } ! 3776: ! 3777: if ((hitsprite >= 0) && (sprite[hitsprite].statnum < MAXSTATUS)) { ! 3778: for (k = 0; k < zgore; k++) { ! 3779: newchunk = 0; ! 3780: j = insertsprite(hitsect, CHUNKOMEAT); ! 3781: sprite[j].x = hitx; ! 3782: sprite[j].y = hity; ! 3783: sprite[j].z = hitz; ! 3784: sprite[j].cstat = 0; ! 3785: if (rand() % 100 > 50) { ! 3786: switch (sprite[hitsprite].picnum) { ! 3787: case GRONHAL: ! 3788: case GRONHALATTACK: ! 3789: case GRONHALPAIN: ! 3790: case GRONMU: ! 3791: case GRONMUATTACK: ! 3792: case GRONMUPAIN: ! 3793: case GRONSW: ! 3794: case GRONSWATTACK: ! 3795: case GRONSWPAIN: ! 3796: chunk = REDCHUNKSTART + (rand() % 8); ! 3797: break; ! 3798: ! 3799: case KOBOLD: ! 3800: case KOBOLDATTACK: ! 3801: if (sprite[hitsprite].pal == 0) ! 3802: chunk = BROWNCHUNKSTART + (rand() % 8); ! 3803: if (sprite[hitsprite].pal == 4) ! 3804: chunk = GREENCHUNKSTART + (rand() % 8); ! 3805: if (sprite[hitsprite].pal == 7) ! 3806: chunk = REDCHUNKSTART + (rand() % 8); ! 3807: break; ! 3808: case DEVILSTAND: ! 3809: case DEVIL: ! 3810: case DEVILATTACK: ! 3811: chunk = REDCHUNKSTART + (rand() % 8); ! 3812: break; ! 3813: case IMP: ! 3814: case IMPATTACK: ! 3815: case IMPPAIN: ! 3816: if (sprite[hitsprite].pal == 0) ! 3817: chunk = GREENCHUNKSTART + (rand() % 8); ! 3818: break; ! 3819: case MINOTAUR: ! 3820: case MINOTAURATTACK: ! 3821: case MINOTAURPAIN: ! 3822: chunk = TANCHUNKSTART + (rand() % 8); ! 3823: break; ! 3824: } ! 3825: } ! 3826: else { ! 3827: newchunk = 1; ! 3828: // chunk = NEWCHUNK + (rand() % 9); ! 3829: chunk = REDCHUNKSTART + (rand() % 8); ! 3830: } ! 3831: if (sprite[hitsprite].picnum == SKELETON || ! 3832: sprite[hitsprite].picnum == SKELETONATTACK || ! 3833: sprite[hitsprite].picnum == SKELETONDIE) { ! 3834: chunk = BONECHUNK1 + (rand() % 9); ! 3835: } ! 3836: if (plr->weapon[2] == 3 && currweapon == 2) { ! 3837: sprite[j].picnum = ARROWFLAME; ! 3838: } ! 3839: else { ! 3840: sprite[j].picnum = chunk; // = REDCHUNKSTART + (rand() % 8); ! 3841: } ! 3842: ! 3843: sprite[j].shade = -16; ! 3844: sprite[j].xrepeat = 64; ! 3845: sprite[j].yrepeat = 64; ! 3846: sprite[j].clipdist = 16; ! 3847: sprite[j].ang = ((rand() & 1023) - 1024) & 2047; ! 3848: sprite[j].xvel = ((rand() & 1023) - 512); ! 3849: sprite[j].yvel = ((rand() & 1023) - 512); ! 3850: sprite[j].zvel = ((rand() & 1023) - 512); ! 3851: if (newchunk == 1) ! 3852: sprite[j].zvel <<= 1; ! 3853: sprite[j].owner = 4096; ! 3854: sprite[j].lotag = 512; ! 3855: sprite[j].hitag = 0; ! 3856: sprite[j].pal = 0; ! 3857: movesprite((short) j, (((long) sintable[(sprite[j].ang + 512) & 2047]) * synctics) << 3, (((long) sintable[sprite[j].ang]) * synctics) << 3, 0L, 4L << 8, 4L << 8, 0); ! 3858: } ! 3859: } ! 3860: ! 3861: } ! 3862: ! 3863: void ! 3864: swingdapunch(int daweapon) ! 3865: { ! 3866: ! 3867: switch (daweapon) { ! 3868: case 0: // hands ! 3869: //JSA SPOOGE ! 3870: SND_Sound(S_SOCK4); ! 3871: SND_Sound(S_PLRPAIN1 + (rand() % 2)); ! 3872: healthpic(-1); ! 3873: startredflash(10); ! 3874: break; ! 3875: case 1: // knife ! 3876: case 2: // mace ! 3877: case 4: // sword ! 3878: SND_PlaySound(S_WALLHIT1, 0, 0, 0, 0); ! 3879: break; ! 3880: case 3: // arrow ! 3881: break; ! 3882: case 5: ! 3883: case 6: ! 3884: case 7: ! 3885: case 8: ! 3886: SND_PlaySound(S_WALLHIT1, 0, 0, 0, 0); ! 3887: break; ! 3888: ! 3889: } ! 3890: ! 3891: ! 3892: } ! 3893: ! 3894: void ! 3895: shootgun(struct player * plr, short daang, char guntype) ! 3896: { ! 3897: ! 3898: short hitsect, ! 3899: hitwall, ! 3900: hitsprite, ! 3901: daang2, ! 3902: daang3, ! 3903: k; ! 3904: long i, ! 3905: j, ! 3906: daz2, ! 3907: hitx, ! 3908: hity, ! 3909: hitz; ! 3910: int chunk; ! 3911: long hit, ! 3912: dax, ! 3913: day; ! 3914: int bolts; ! 3915: int cnt; ! 3916: ! 3917: switch (guntype) { ! 3918: case 0: ! 3919: daang2 = daang + 2048; ! 3920: daz2 = (100 - plr->horiz) * 2000; ! 3921: hitscan(plr->x, plr->y, plr->z, plr->sector, // Start position ! 3922: sintable[(daang2 + 2560) & 2047], // X vector of 3D ang ! 3923: sintable[(daang2 + 2048) & 2047], // Y vector of 3D ang ! 3924: daz2, // Z vector of 3D ang ! 3925: &hitsect, &hitwall, &hitsprite, &hitx, &hity, &hitz); ! 3926: ! 3927: if (hitsprite >= 0) ! 3928: madeahit = 1; ! 3929: ! 3930: if (hitwall >= 0) { ! 3931: if ((labs(plr->x - hitx) + labs(plr->y - hity) < 512) && (labs((plr->z >> 8) - ((hitz >> 8) - (64))) <= (512 >> 3))) { ! 3932: madeahit = 1; ! 3933: switch (currweapon) { ! 3934: case 0: // fist ! 3935: if (currweaponframe == RFIST + 5) ! 3936: if (currweaponanim == 5 && currweapontics == 10) ! 3937: swingdapunch(currweapon); ! 3938: break; ! 3939: case 1: // knife ! 3940: if (currweaponframe == KNIFEATTACK + 6) ! 3941: if (currweaponanim == 8 && currweapontics == 8) ! 3942: swingdapunch(currweapon); ! 3943: if (currweaponframe == KNIFEATTACK2 + 2) ! 3944: if (currweaponanim == 5 || currweaponanim == 9 && currweapontics == 8) ! 3945: swingdapunch(currweapon); ! 3946: break; ! 3947: case 2: // short sword ! 3948: if (currweaponframe == GOBSWORDATTACK + 4 ! 3949: || currweaponframe == ZSHORTATTACK + 7) ! 3950: if (currweaponanim == 4 && currweapontics == 10) ! 3951: swingdapunch(currweapon); ! 3952: if (currweaponframe == GOBSWORDATTACK + 4 ! 3953: || currweaponframe == ZSHORTATTACK + 4) ! 3954: if (currweaponanim == 4 && currweapontics == 10) ! 3955: swingdapunch(currweapon); ! 3956: break; ! 3957: case 3: // morning ! 3958: if (currweaponframe == MORNINGSTAR + 5 ! 3959: || currweaponframe == ZSTARATTACK + 7) ! 3960: if (currweaponanim == 7 && currweapontics == 12) ! 3961: swingdapunch(currweapon); ! 3962: if (currweaponframe == MORNINGATTACK2 + 3 ! 3963: || currweaponframe == ZSTARATTACK + 3) ! 3964: if (currweaponanim == 3 && currweapontics == 12) ! 3965: swingdapunch(currweapon); ! 3966: ! 3967: if (plr->weapon[currweapon] == 3) { ! 3968: explosion(hitsprite, hitx, hity, hitz, 4096); ! 3969: } ! 3970: break; ! 3971: case 4: // sword ! 3972: if (currweaponframe == SWORDATTACK + 7) ! 3973: if (currweaponanim == 7 && currweapontics == 8) { ! 3974: swingdapunch(currweapon); ! 3975: madenoise(2, plr->x, plr->y, plr->z); ! 3976: } ! 3977: if (currweaponframe == SWORDATTACK2 + 6) ! 3978: if (currweaponanim == 6 && currweapontics == 8) { ! 3979: swingdapunch(currweapon); ! 3980: madenoise(2, plr->x, plr->y, plr->z); ! 3981: } ! 3982: break; ! 3983: case 5: // battleaxe ! 3984: if (currweaponframe == BIGAXEATTACK + 7 ! 3985: || currweaponframe == ZAXEATTACK + 12) ! 3986: if (currweaponanim == 7 && currweapontics == 12) ! 3987: swingdapunch(currweapon); ! 3988: if (currweaponframe == BIGAXEATTACK2 + 6 ! 3989: || currweaponframe == ZAXEATTACK2 + 6) ! 3990: if (currweaponanim == 6 && currweapontics == 12) ! 3991: swingdapunch(currweapon); ! 3992: break; ! 3993: case 6: // bow ! 3994: if (currweaponframe == BOWWALK + 4) ! 3995: if (currweaponanim == 4 && currweapontics == 6) ! 3996: swingdapunch(currweapon); ! 3997: if (currweaponframe == ZBOWATTACK + 4) ! 3998: if (currweaponanim == 4 && currweapontics == 6) ! 3999: swingdapunch(currweapon); ! 4000: break; ! 4001: case 7: // pike ! 4002: if (currweaponframe == PIKEATTACK1 + 4 ! 4003: || currweaponframe == ZPIKEATTACK + 4) ! 4004: if (currweaponanim == 8 && currweapontics == 10) ! 4005: swingdapunch(currweapon); ! 4006: if (currweaponframe == PIKEATTACK2 + 4 ! 4007: || currweaponframe == ZPIKEATTACK2 + 4) ! 4008: if (currweaponanim == 4 && currweapontics == 10) ! 4009: swingdapunch(currweapon); ! 4010: break; ! 4011: case 8: // two handed sword ! 4012: if (currweaponframe == EXCALATTACK1 + 7 ! 4013: || currweaponframe == ZTWOHANDATTACK + 12) ! 4014: if (currweaponanim == 7 && currweapontics == 8) ! 4015: swingdapunch(currweapon); ! 4016: if (currweaponframe == EXCALATTACK2 + 5 ! 4017: || currweaponframe == ZTWOHANDATTACK2 + 5) ! 4018: if (currweaponanim == 5 && currweapontics == 8) ! 4019: swingdapunch(currweapon); ! 4020: break; ! 4021: case 9: // halberd ! 4022: if (currweaponframe == HALBERDATTACK1 + 3 ! 4023: || currweaponframe == ZHALBERDATTACK + 4) ! 4024: if (currweaponanim == 6 && currweapontics == 12) ! 4025: swingdapunch(currweapon); ! 4026: if (currweaponframe == HALBERDATTACK2 + 3 ! 4027: || currweaponframe == ZHALBERDATTACK2 + 3) ! 4028: if (currweaponanim == 4 && currweapontics == 12) ! 4029: swingdapunch(currweapon); ! 4030: break; ! 4031: } ! 4032: } ! 4033: } ! 4034: if (checkweapondist(hitsprite, plr->x, plr->y, plr->z, guntype)) { ! 4035: switch (sprite[hitsprite].picnum) { ! 4036: case BARREL: ! 4037: case VASEA: ! 4038: case VASEB: ! 4039: case VASEC: ! 4040: case STAINGLASS1: ! 4041: case STAINGLASS2: ! 4042: case STAINGLASS3: ! 4043: case STAINGLASS4: ! 4044: case STAINGLASS5: ! 4045: case STAINGLASS6: ! 4046: case STAINGLASS7: ! 4047: case STAINGLASS8: ! 4048: case STAINGLASS9: ! 4049: newstatus(hitsprite, BROKENVASE); ! 4050: break; ! 4051: ! 4052: case GRONHAL: ! 4053: case GRONHALATTACK: ! 4054: case GRONHALPAIN: ! 4055: case GRONMU: ! 4056: case GRONMUATTACK: ! 4057: case GRONMUPAIN: ! 4058: case GRONSW: ! 4059: case GRONSWATTACK: ! 4060: case GRONSWPAIN: ! 4061: case KOBOLD: ! 4062: case KOBOLDATTACK: ! 4063: case DEVILSTAND: ! 4064: case DEVIL: ! 4065: case DEVILATTACK: ! 4066: case SKELETON: ! 4067: case SKELETONATTACK: ! 4068: case IMP: ! 4069: case IMPATTACK: ! 4070: // case IMPPAIN: ! 4071: case MINOTAUR: ! 4072: case MINOTAURATTACK: ! 4073: case MINOTAURPAIN: ! 4074: case FISH: ! 4075: case RAT: ! 4076: case DEMON: ! 4077: case GUARDIAN: ! 4078: case GUARDIANATTACK: ! 4079: case WILLOW: ! 4080: ! 4081: case NEWGUYSTAND: ! 4082: case NEWGUYKNEE: ! 4083: case NEWGUY: ! 4084: case NEWGUYCAST: ! 4085: case NEWGUYBOW: ! 4086: case NEWGUYMACE: ! 4087: case NEWGUYPUNCH: ! 4088: ! 4089: case KURTSTAND: ! 4090: case KURTKNEE: ! 4091: case KURTAT: ! 4092: case KURTPUNCH: ! 4093: case KURTREADY: ! 4094: ! 4095: case GONZOCSW: ! 4096: case GONZOCSWAT: ! 4097: // case GONZOCSWPAIN: ! 4098: ! 4099: case GONZOGSW: ! 4100: case GONZOGSWAT: ! 4101: // case GONZOGSWPAIN: ! 4102: ! 4103: case GONZOGHM: ! 4104: case GONZOGHMAT: ! 4105: // case GONZOGHMPAIN: ! 4106: ! 4107: case GONZOGSH: ! 4108: case GONZOGSHAT: ! 4109: // case GONZOGSHPAIN: ! 4110: ! 4111: case KATIE: ! 4112: case KATIEAT: ! 4113: if (netgame) { ! 4114: netshootgun(hitsprite, currweapon); ! 4115: } ! 4116: ! 4117: if (currweapon == 3) ! 4118: if (plr->weapon[currweapon] == 3) { ! 4119: explosion(hitsprite, hitx, hity, hitz, 4096); ! 4120: } ! 4121: ! 4122: ! 4123: if (invisibletime > 0) ! 4124: if (krand() & 32 > 15) ! 4125: invisibletime = -1; ! 4126: switch (selectedgun) { ! 4127: case 0: // fist ! 4128: k = (krand() % 5) + 1; ! 4129: break; ! 4130: case 1: // dagger ! 4131: k = (krand() % 5) + 5; ! 4132: break; ! 4133: case 2: // short sword ! 4134: k = (krand() % 10) + 5; ! 4135: break; ! 4136: case 3: // morning star ! 4137: k = (krand() % 15) + 5; ! 4138: break; ! 4139: case 4: // broad sword ! 4140: k = (krand() % 20) + 5; ! 4141: break; ! 4142: case 5: // battle axe ! 4143: k = (krand() % 25) + 5; ! 4144: switch (sprite[hitsprite].picnum) { ! 4145: case GRONHAL: ! 4146: case GRONHALATTACK: ! 4147: case GRONHALPAIN: ! 4148: case GRONMU: ! 4149: case GRONMUATTACK: ! 4150: case GRONMUPAIN: ! 4151: case GRONSW: ! 4152: case GRONSWATTACK: ! 4153: case GRONSWPAIN: ! 4154: ! 4155: case NEWGUYSTAND: ! 4156: case NEWGUYKNEE: ! 4157: case NEWGUY: ! 4158: case NEWGUYCAST: ! 4159: case NEWGUYBOW: ! 4160: case NEWGUYMACE: ! 4161: case NEWGUYPUNCH: ! 4162: ! 4163: case KURTSTAND: ! 4164: case KURTKNEE: ! 4165: case KURTAT: ! 4166: case KURTPUNCH: ! 4167: case KURTREADY: ! 4168: ! 4169: case GONZOCSW: ! 4170: case GONZOCSWAT: ! 4171: case GONZOGSW: ! 4172: case GONZOGSWAT: ! 4173: case GONZOGHM: ! 4174: case GONZOGHMAT: ! 4175: case GONZOGSH: ! 4176: case GONZOGSHAT: ! 4177: k += k >> 1; ! 4178: } ! 4179: break; ! 4180: case 6: // bow ! 4181: k = (krand() % 30) + 5; ! 4182: break; ! 4183: case 7: // pike axe ! 4184: k = (krand() % 35) + 5; ! 4185: break; ! 4186: case 8: // two handed sword ! 4187: k = (krand() % 40) + 5; ! 4188: break; ! 4189: case 9: // halberd ! 4190: k = (krand() % 45) + 5; ! 4191: break; ! 4192: } ! 4193: k += plr->lvl; ! 4194: if (plr->weapon[currweapon] == 3) { ! 4195: k <<= 1; ! 4196: } ! 4197: if (vampiretime > 0) { ! 4198: if (plr->health <= plr->maxhealth) ! 4199: healthpic((rand() % 10) + 1); ! 4200: } ! 4201: if (helmettime > 0) ! 4202: k <<= 1; ! 4203: if (strongtime > 0) { ! 4204: k += k >> 1; ! 4205: ! 4206: switch (currweapon) { ! 4207: case 0: // fist ! 4208: if (currweaponframe == RFIST + 5) ! 4209: if (currweaponanim == 5 && currweapontics == 10) ! 4210: swingdacrunch(currweapon); ! 4211: break; ! 4212: case 1: // knife ! 4213: if (currweaponframe == KNIFEATTACK + 6) ! 4214: if (currweaponanim == 8 && currweapontics == 8) ! 4215: swingdacrunch(currweapon); ! 4216: if (currweaponframe == KNIFEATTACK2 + 2) ! 4217: if (currweaponanim == 5 || currweaponanim == 9 && currweapontics == 8) ! 4218: swingdacrunch(currweapon); ! 4219: break; ! 4220: case 2: // short sword ! 4221: if (currweaponframe == GOBSWORDATTACK + 4 ! 4222: || currweaponframe == ZSHORTATTACK + 7) ! 4223: if (currweaponanim == 4 && currweapontics == 10) ! 4224: swingdacrunch(currweapon); ! 4225: if (currweaponframe == GOBSWORDATTACK2 + 4 ! 4226: || currweaponframe == ZSHORTATTACK2 + 4) ! 4227: if (currweaponanim == 4 && currweapontics == 10) ! 4228: swingdacrunch(currweapon); ! 4229: break; ! 4230: case 3: // morning ! 4231: if (currweaponframe == MORNINGSTAR + 5 ! 4232: || currweaponframe == ZSTARATTACK + 7) ! 4233: if (currweaponanim == 7 && currweapontics == 12) ! 4234: swingdacrunch(currweapon); ! 4235: if (currweaponframe == MORNINGATTACK2 + 3 ! 4236: || currweaponframe == ZSTARATTACK2 + 3) ! 4237: if (currweaponanim == 3 && currweapontics == 12) ! 4238: swingdacrunch(currweapon); ! 4239: break; ! 4240: case 4: // sword ! 4241: if (currweaponframe == SWORDATTACK + 7) ! 4242: if (currweaponanim == 7 && currweapontics == 8) ! 4243: swingdacrunch(currweapon); ! 4244: if (currweaponframe == SWORDATTACK2 + 6) ! 4245: if (currweaponanim == 6 && currweapontics == 8) ! 4246: swingdacrunch(currweapon); ! 4247: break; ! 4248: case 5: // battleaxe ! 4249: if (currweaponframe == BIGAXEATTACK + 7 ! 4250: || currweaponframe == ZAXEATTACK + 12) ! 4251: if (currweaponanim == 7 && currweapontics == 12) ! 4252: swingdacrunch(currweapon); ! 4253: if (currweaponframe == BIGAXEATTACK2 + 6 ! 4254: || currweaponframe == ZAXEATTACK2 + 6) ! 4255: if (currweaponanim == 6 && currweapontics == 12) ! 4256: swingdacrunch(currweapon); ! 4257: break; ! 4258: case 6: // bow ! 4259: if (currweaponframe == BOWWALK + 4) ! 4260: if (currweaponanim == 4 && currweapontics == 6) ! 4261: swingdacrunch(currweapon); ! 4262: if (currweaponframe == ZBOWATTACK + 4) ! 4263: if (currweaponanim == 4 && currweapontics == 6) ! 4264: swingdacrunch(currweapon); ! 4265: break; ! 4266: case 7: // pike ! 4267: if (currweaponframe == PIKEATTACK1 + 4 ! 4268: || currweaponframe == ZPIKEATTACK + 4) ! 4269: if (currweaponanim == 8 && currweapontics == 10) ! 4270: swingdacrunch(currweapon); ! 4271: if (currweaponframe == PIKEATTACK2 + 4 ! 4272: || currweaponframe == ZPIKEATTACK2 + 4) ! 4273: if (currweaponanim == 4 && currweapontics == 10) ! 4274: swingdacrunch(currweapon); ! 4275: break; ! 4276: case 8: // two handed sword ! 4277: if (currweaponframe == EXCALATTACK1 + 7 ! 4278: || currweaponframe == ZTWOHANDATTACK + 12) ! 4279: if (currweaponanim == 7 && currweapontics == 8) ! 4280: swingdacrunch(currweapon); ! 4281: if (currweaponframe == EXCALATTACK2 + 5 ! 4282: || currweaponframe == ZTWOHANDATTACK2 + 5) ! 4283: if (currweaponanim == 5 && currweapontics == 8) ! 4284: swingdacrunch(currweapon); ! 4285: break; ! 4286: case 9: // halberd ! 4287: if (currweaponframe == HALBERDATTACK1 + 3 ! 4288: || currweaponframe == ZHALBERDATTACK + 4) ! 4289: if (currweaponanim == 6 && currweapontics == 12) ! 4290: swingdacrunch(currweapon); ! 4291: if (currweaponframe == HALBERDATTACK2 + 3 ! 4292: || currweaponframe == ZHALBERDATTACK2 + 3) ! 4293: if (currweaponanim == 4 && currweapontics == 12) ! 4294: swingdacrunch(currweapon); ! 4295: break; ! 4296: } ! 4297: sprite[hitsprite].hitag -= (k << 1); ! 4298: // freeze sword ! 4299: #if 0 ! 4300: if (plr->weapon[currweapon] == 3 && currweapon == 4) { ! 4301: if (sprite[hitsprite].picnum == KATIE ! 4302: || sprite[hitsprite].picnum == KATIEPAIN ! 4303: || sprite[hitsprite].picnum == KATIEAT ! 4304: || sprite[hitsprite].shade > 30) { ! 4305: // do nothing ! 4306: // a laughing sound ! 4307: } ! 4308: else { ! 4309: turntostone(hitsprite); ! 4310: break; ! 4311: } ! 4312: } ! 4313: #endif ! 4314: if (plr->weapon[currweapon] == 3 ! 4315: && currweapon == 8 ! 4316: && sprite[hitsprite].pal != 6) { ! 4317: if (sprite[hitsprite].hitag <= 0) { ! 4318: sprite[hitsprite].hitag = 1; ! 4319: } ! 4320: if (rand() % 100 > 50) ! 4321: medusa(hitsprite); ! 4322: break; ! 4323: } ! 4324: else if (currweapon != 0) { ! 4325: //JSA GORE1 you have strong time ! 4326: if (rand() % 100 > 50) { ! 4327: if (sprite[hitsprite].picnum == SKELETON ! 4328: || sprite[hitsprite].picnum == SKELETONATTACK ! 4329: || sprite[hitsprite].picnum == SKELETONDIE) ! 4330: playsound_loc(S_SKELHIT1 + (rand() % 2), sprite[hitsprite].x, sprite[hitsprite].y); ! 4331: } ! 4332: ! 4333: // HERE ! 4334: switch (currweapon) { ! 4335: case 0: // fist ! 4336: break; ! 4337: case 1: // knife ! 4338: if (currweaponframe == KNIFEATTACK + 6) ! 4339: if (currweaponanim == 8 && currweapontics == 8) ! 4340: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4341: if (currweaponframe == KNIFEATTACK2 + 2) ! 4342: if (currweaponanim == 5 || currweaponanim == 9 && currweapontics == 8) ! 4343: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4344: break; ! 4345: case 2: // short sword ! 4346: if (currweaponframe == GOBSWORDATTACK + 4 ! 4347: || currweaponframe == ZSHORTATTACK + 7) ! 4348: if (currweaponanim == 4 && currweapontics == 10) ! 4349: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4350: if (currweaponframe == GOBSWORDATTACK2 + 4 ! 4351: || currweaponframe == ZSHORTATTACK + 4) ! 4352: if (currweaponanim == 4 && currweapontics == 10) ! 4353: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4354: break; ! 4355: case 3: // morning ! 4356: if (currweaponframe == MORNINGSTAR + 5 ! 4357: || currweaponframe == ZSTARATTACK + 7) ! 4358: if (currweaponanim == 7 && currweapontics == 12) ! 4359: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4360: if (currweaponframe == MORNINGATTACK2 + 3 ! 4361: || currweaponframe == ZSTARATTACK2 + 3) ! 4362: if (currweaponanim == 3 && currweapontics == 12) ! 4363: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4364: break; ! 4365: case 4: // sword ! 4366: if (currweaponframe == SWORDATTACK + 7) ! 4367: if (currweaponanim == 7 && currweapontics == 8) ! 4368: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4369: if (currweaponframe == SWORDATTACK2 + 6) ! 4370: if (currweaponanim == 6 && currweapontics == 8) ! 4371: break; ! 4372: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4373: case 5: // battleaxe ! 4374: if (currweaponframe == BIGAXEATTACK + 7 ! 4375: || currweaponframe == ZAXEATTACK + 12) ! 4376: if (currweaponanim == 7 && currweapontics == 12) ! 4377: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4378: if (currweaponframe == BIGAXEATTACK2 + 6 ! 4379: || currweaponframe == ZAXEATTACK2 + 6) ! 4380: if (currweaponanim == 6 && currweapontics == 12) ! 4381: break; ! 4382: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4383: case 6: // bow ! 4384: if (currweaponframe == BOWWALK + 4) ! 4385: if (currweaponanim == 4 && currweapontics == 6) ! 4386: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4387: if (currweaponframe == ZBOWATTACK + 4) ! 4388: if (currweaponanim == 4 && currweapontics == 6) ! 4389: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4390: break; ! 4391: case 7: // pike ! 4392: if (currweaponframe == PIKEATTACK1 + 4 ! 4393: || currweaponframe == ZPIKEATTACK + 4) ! 4394: if (currweaponanim == 8 && currweapontics == 10) ! 4395: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4396: if (currweaponframe == PIKEATTACK2 + 4 ! 4397: || currweaponframe == ZPIKEATTACK2 + 4) ! 4398: if (currweaponanim == 4 && currweapontics == 10) ! 4399: break; ! 4400: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4401: case 8: // two handed sword ! 4402: if (currweaponframe == EXCALATTACK1 + 7 ! 4403: || currweaponframe == ZTWOHANDATTACK + 12) ! 4404: if (currweaponanim == 7 && currweapontics == 8) ! 4405: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4406: if (currweaponframe == EXCALATTACK2 + 5 ! 4407: || currweaponframe == ZTWOHANDATTACK2 + 5) ! 4408: if (currweaponanim == 5 && currweapontics == 8) ! 4409: break; ! 4410: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4411: case 9: // halberd ! 4412: if (currweaponframe == HALBERDATTACK1 + 3 ! 4413: || currweaponframe == ZHALBERDATTACK + 4) ! 4414: if (currweaponanim == 6 && currweapontics == 12) ! 4415: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4416: if (currweaponframe == HALBERDATTACK2 + 3 ! 4417: || currweaponframe == ZHALBERDATTACK2 + 3) ! 4418: if (currweaponanim == 4 && currweapontics == 12) ! 4419: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4420: break; ! 4421: } ! 4422: // ENDOFHERE ! 4423: // chunksofmeat(plr, hitsprite, hitx, hity, hitz, ! 4424: // hitsect, daang); ! 4425: } ! 4426: } ! 4427: else { ! 4428: switch (currweapon) { ! 4429: case 0: // fist ! 4430: if (currweaponframe == RFIST + 5) ! 4431: if (currweaponanim == 5 && currweapontics == 10) ! 4432: swingdacrunch(currweapon); ! 4433: break; ! 4434: case 1: // knife ! 4435: if (currweaponframe == KNIFEATTACK + 6) ! 4436: if (currweaponanim == 8 && currweapontics == 8) ! 4437: swingdacrunch(currweapon); ! 4438: if (currweaponframe == KNIFEATTACK2 + 2) ! 4439: if (currweaponanim == 5 || currweaponanim == 9 && currweapontics == 8) ! 4440: swingdacrunch(currweapon); ! 4441: break; ! 4442: case 2: // SHORT SWORD ! 4443: if (currweaponframe == GOBSWORDATTACK + 4 ! 4444: || currweaponframe == ZSHORTATTACK + 7) ! 4445: if (currweaponanim == 4 && currweapontics == 10) ! 4446: swingdacrunch(currweapon); ! 4447: if (currweaponframe == GOBSWORDATTACK2 + 4 ! 4448: || currweaponframe == ZSHORTATTACK2 + 4) ! 4449: if (currweaponanim == 4 && currweapontics == 10) ! 4450: swingdacrunch(currweapon); ! 4451: break; ! 4452: case 3: // morning ! 4453: if (currweaponframe == MORNINGSTAR + 5 ! 4454: || currweaponframe == ZSTARATTACK + 7) ! 4455: if (currweaponanim == 7 && currweapontics == 12) ! 4456: swingdacrunch(currweapon); ! 4457: if (currweaponframe == MORNINGATTACK2 + 3 ! 4458: || currweaponframe == ZSTARATTACK2 + 3) ! 4459: if (currweaponanim == 3 && currweapontics == 12) ! 4460: swingdacrunch(currweapon); ! 4461: break; ! 4462: case 4: // sword ! 4463: if (currweaponframe == SWORDATTACK + 7) ! 4464: if (currweaponanim == 7 && currweapontics == 8) ! 4465: swingdacrunch(currweapon); ! 4466: if (currweaponframe == SWORDATTACK2 + 6) ! 4467: if (currweaponanim == 6 && currweapontics == 8) ! 4468: swingdacrunch(currweapon); ! 4469: break; ! 4470: case 5: // battleaxe ! 4471: if (currweaponframe == BIGAXEATTACK + 7 ! 4472: || currweaponframe == ZAXEATTACK + 12) ! 4473: if (currweaponanim == 7 && currweapontics == 12) ! 4474: swingdacrunch(currweapon); ! 4475: if (currweaponframe == BIGAXEATTACK2 + 6 ! 4476: || currweaponframe == ZAXEATTACK2 + 6) ! 4477: if (currweaponanim == 6 && currweapontics == 12) ! 4478: swingdacrunch(currweapon); ! 4479: break; ! 4480: case 6: // bow ! 4481: if (currweaponframe == BOWWALK + 4) ! 4482: if (currweaponanim == 4 && currweapontics == 6) ! 4483: swingdacrunch(currweapon); ! 4484: if (currweaponframe == ZBOWATTACK + 4) ! 4485: if (currweaponanim == 4 && currweapontics == 6) ! 4486: swingdacrunch(currweapon); ! 4487: break; ! 4488: ! 4489: case 7: // pike ! 4490: if (currweaponframe == PIKEATTACK1 + 4 ! 4491: || currweaponframe == ZPIKEATTACK + 4) ! 4492: if (currweaponanim == 8 && currweapontics == 10) ! 4493: swingdacrunch(currweapon); ! 4494: if (currweaponframe == PIKEATTACK2 + 4 ! 4495: || currweaponframe == ZPIKEATTACK2 + 4) ! 4496: if (currweaponanim == 4 && currweapontics == 10) ! 4497: swingdacrunch(currweapon); ! 4498: break; ! 4499: case 8: // two handed sword ! 4500: if (currweaponframe == EXCALATTACK1 + 7 ! 4501: || currweaponframe == ZTWOHANDATTACK + 12) ! 4502: if (currweaponanim == 7 && currweapontics == 8) ! 4503: swingdacrunch(currweapon); ! 4504: if (currweaponframe == EXCALATTACK2 + 5 ! 4505: || currweaponframe == ZTWOHANDATTACK2 + 5) ! 4506: if (currweaponanim == 5 && currweapontics == 8) ! 4507: swingdacrunch(currweapon); ! 4508: break; ! 4509: case 9: // halberd ! 4510: if (currweaponframe == HALBERDATTACK1 + 3 ! 4511: || currweaponframe == ZHALBERDATTACK + 4) ! 4512: if (currweaponanim == 6 && currweapontics == 12) ! 4513: swingdacrunch(currweapon); ! 4514: if (currweaponframe == HALBERDATTACK2 + 3 ! 4515: || currweaponframe == ZHALBERDATTACK2 + 3) ! 4516: if (currweaponanim == 4 && currweapontics == 12) ! 4517: swingdacrunch(currweapon); ! 4518: break; ! 4519: } ! 4520: sprite[hitsprite].hitag -= k; ! 4521: // freeze sword ! 4522: #if 0 ! 4523: if (plr->weapon[currweapon] == 3 && currweapon == 4) { ! 4524: if (sprite[hitsprite].picnum == KATIE ! 4525: || sprite[hitsprite].picnum == KATIEPAIN ! 4526: || sprite[hitsprite].picnum == KATIEAT ! 4527: || sprite[hitsprite].shade > 30) { ! 4528: // do nothing ! 4529: // a laughing sound ! 4530: } ! 4531: else { ! 4532: turntostone(hitsprite); ! 4533: break; ! 4534: } ! 4535: } ! 4536: #endif ! 4537: if (plr->weapon[currweapon] == 3 ! 4538: && currweapon == 8 ! 4539: && sprite[hitsprite].pal != 6) { ! 4540: if (sprite[hitsprite].hitag <= 0) { ! 4541: sprite[hitsprite].hitag = 1; ! 4542: } ! 4543: if (rand() % 100 > 75) ! 4544: medusa(hitsprite); ! 4545: break; ! 4546: } ! 4547: ! 4548: if (currweapon != 0) { ! 4549: //JSA GORE normal ! 4550: if (rand() % 100 > 50) { ! 4551: if (sprite[hitsprite].picnum == SKELETON ! 4552: || sprite[hitsprite].picnum == SKELETONATTACK ! 4553: || sprite[hitsprite].picnum == SKELETONDIE) ! 4554: playsound_loc(S_SKELHIT1 + (rand() % 2), sprite[hitsprite].x, sprite[hitsprite].y); ! 4555: } ! 4556: // HERE ! 4557: switch (currweapon) { ! 4558: case 0: // fist ! 4559: break; ! 4560: case 1: // knife ! 4561: if (currweaponframe == KNIFEATTACK + 6) ! 4562: if (currweaponanim == 8 && currweapontics == 8) ! 4563: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4564: if (currweaponframe == KNIFEATTACK2 + 2) ! 4565: if (currweaponanim == 5 || currweaponanim == 9 && currweapontics == 8) ! 4566: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4567: break; ! 4568: case 2: // short sword ! 4569: if (currweaponframe == GOBSWORDATTACK + 4 ! 4570: || currweaponframe == ZSHORTATTACK + 7) ! 4571: if (currweaponanim == 4 && currweapontics == 10) ! 4572: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4573: if (currweaponframe == GOBSWORDATTACK2 + 4 ! 4574: || currweaponframe == ZSHORTATTACK2 + 4) ! 4575: if (currweaponanim == 4 && currweapontics == 10) ! 4576: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4577: break; ! 4578: case 3: // morning ! 4579: if (currweaponframe == MORNINGSTAR + 5 ! 4580: || currweaponframe == ZSTARATTACK + 7) ! 4581: if (currweaponanim == 7 && currweapontics == 12) ! 4582: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4583: if (currweaponframe == MORNINGATTACK2 + 3 ! 4584: || currweaponframe == ZSTARATTACK2 + 3) ! 4585: if (currweaponanim == 3 && currweapontics == 12) ! 4586: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4587: break; ! 4588: case 4: // sword ! 4589: if (currweaponframe == SWORDATTACK + 7) ! 4590: if (currweaponanim == 7 && currweapontics == 8) ! 4591: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4592: if (currweaponframe == SWORDATTACK2 + 6) ! 4593: if (currweaponanim == 6 && currweapontics == 8) ! 4594: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4595: break; ! 4596: case 5: // battleaxe ! 4597: if (currweaponframe == BIGAXEATTACK + 7 ! 4598: || currweaponframe == ZAXEATTACK + 12) ! 4599: if (currweaponanim == 7 && currweapontics == 12) ! 4600: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4601: if (currweaponframe == BIGAXEATTACK2 + 6 ! 4602: || currweaponframe == ZAXEATTACK2 + 6) ! 4603: if (currweaponanim == 6 && currweapontics == 12) ! 4604: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4605: break; ! 4606: case 6: // bow ! 4607: if (currweaponframe == BOWWALK + 4) ! 4608: if (currweaponanim == 4 && currweapontics == 6) ! 4609: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4610: if (currweaponframe == ZBOWATTACK + 4) ! 4611: if (currweaponanim == 4 && currweapontics == 6) ! 4612: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4613: break; ! 4614: case 7: // pike ! 4615: if (currweaponframe == PIKEATTACK1 + 4 ! 4616: || currweaponframe == ZPIKEATTACK + 4) ! 4617: if (currweaponanim == 8 && currweapontics == 10) ! 4618: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4619: if (currweaponframe == PIKEATTACK2 + 4 ! 4620: || currweaponframe == ZPIKEATTACK2 + 4) ! 4621: if (currweaponanim == 4 && currweapontics == 10) ! 4622: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4623: break; ! 4624: case 8: // two handed sword ! 4625: if (currweaponframe == EXCALATTACK1 + 7 ! 4626: || currweaponframe == ZTWOHANDATTACK + 12) ! 4627: if (currweaponanim == 7 && currweapontics == 8) ! 4628: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4629: if (currweaponframe == EXCALATTACK2 + 5 ! 4630: || currweaponframe == ZTWOHANDATTACK2 + 5) ! 4631: if (currweaponanim == 5 && currweapontics == 8) ! 4632: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4633: break; ! 4634: case 9: // halberd ! 4635: if (currweaponframe == HALBERDATTACK1 + 3 ! 4636: || currweaponframe == ZHALBERDATTACK + 4) ! 4637: if (currweaponanim == 6 && currweapontics == 12) ! 4638: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4639: if (currweaponframe == HALBERDATTACK2 + 3 ! 4640: || currweaponframe == ZHALBERDATTACK2 + 3) ! 4641: if (currweaponanim == 4 && currweapontics == 12) ! 4642: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4643: break; ! 4644: } ! 4645: // ENDOFHERE ! 4646: ! 4647: // chunksomeat(plr, hitsprite, hitx, hity, hitz, ! 4648: // hitsect, daang); ! 4649: } ! 4650: } ! 4651: ! 4652: if (netgame) { ! 4653: break; ! 4654: } ! 4655: ! 4656: if (sprite[hitsprite].hitag <= 0) { ! 4657: if (selectedgun > 1) { ! 4658: //JSA GORE on death ? ! 4659: //RAF ans:death ! 4660: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4661: if (sprite[hitsprite].picnum == SKELETON ! 4662: || sprite[hitsprite].picnum == SKELETONATTACK ! 4663: || sprite[hitsprite].picnum == SKELETONDIE) ! 4664: playsound_loc(S_SKELHIT1 + (rand() % 2), sprite[hitsprite].x, sprite[hitsprite].y); ! 4665: } ! 4666: newstatus(hitsprite, DIE); ! 4667: } ! 4668: sprite[hitsprite].ang = plr->ang + ((krand() & 32) - 64); ! 4669: if (sprite[hitsprite].hitag > 0) ! 4670: newstatus(hitsprite, PAIN); ! 4671: break; ! 4672: case GONZOBSHPAIN: ! 4673: ! 4674: case GONZOCSWPAIN: ! 4675: ! 4676: case GONZOGSWPAIN: ! 4677: case GONZOGHMPAIN: ! 4678: case GONZOGSHPAIN: ! 4679: ! 4680: case GRONHALDIE: ! 4681: case GRONMUDIE: ! 4682: case GRONSWDIE: ! 4683: case KOBOLDDIE: ! 4684: case DEVILDIE: ! 4685: case SKELETONDIE: ! 4686: case IMPDIE: ! 4687: case MINOTAURDIE: ! 4688: ! 4689: case NEWGUYPAIN: ! 4690: case KATIEPAIN: ! 4691: if (sprite[hitsprite].pal == 6) { ! 4692: // JSA_NEW ! 4693: SND_PlaySound(S_SOCK1 + (rand() % 4), 0, 0, 0, 0); ! 4694: playsound_loc(S_FREEZEDIE, hitx, hity); ! 4695: for (k = 0; k < 16; k++) { ! 4696: icecubes(hitsprite, hitx, hity, hitz, hitsprite); ! 4697: } ! 4698: deletesprite((short) hitsprite); ! 4699: } ! 4700: } // switch ! 4701: } // if weapondist ! 4702: if (madeahit == 0) { ! 4703: plr->ammo[currweapon]++; ! 4704: madeahit = 1; ! 4705: } ! 4706: break; ! 4707: case 1: ! 4708: ! 4709: daang2 = (daang + 2048) & 2047; ! 4710: daz2 = (100 - plr->horiz) * 2000; ! 4711: hitscan(plr->x, plr->y, plr->z, plr->sector, // Start position ! 4712: sintable[(daang2 + 2560) & 2047], // X vector of 3D ang ! 4713: sintable[(daang2 + 2048) & 2047], // Y vector of 3D ang ! 4714: daz2, // Z vector of 3D ang ! 4715: &hitsect, &hitwall, &hitsprite, &hitx, &hity, &hitz); ! 4716: ! 4717: ! 4718: if (hitwall >= 0) { ! 4719: ! 4720: arrowcnt=(arrowcnt+1)%ARROWCOUNTLIMIT; ! 4721: if (arrowsprite[arrowcnt] != -1) { ! 4722: deletesprite((short) arrowsprite[arrowcnt]); ! 4723: arrowsprite[arrowcnt]=-1; ! 4724: } ! 4725: ! 4726: neartag(hitx, hity, hitz, hitsect, daang, ! 4727: &neartagsector, ! 4728: &neartagwall, ! 4729: &neartagsprite, ! 4730: &neartaghitdist, 1024, 3); ! 4731: ! 4732: ! 4733: if (sector[neartagsector].lotag < 6 || ! 4734: sector[neartagsector].lotag > 8) { ! 4735: ! 4736: j = insertsprite(hitsect, 0); ! 4737: arrowsprite[arrowcnt]=j; ! 4738: sprite[j].x = hitx; ! 4739: sprite[j].y = hity; ! 4740: sprite[j].z = hitz + (8 << 8); ! 4741: sprite[j].cstat = 17; // was16 ! 4742: sprite[j].picnum = WALLARROW; ! 4743: sprite[j].shade = 0; ! 4744: sprite[j].pal = 0; ! 4745: sprite[j].xrepeat = 16; ! 4746: sprite[j].yrepeat = 48; ! 4747: sprite[j].ang = ((daang + 2048) - 512 + (rand() & 128 - 64)) & 2047; ! 4748: sprite[j].xvel = 0; ! 4749: sprite[j].yvel = 0; ! 4750: sprite[j].zvel = 0; ! 4751: sprite[j].owner = 4096; ! 4752: sprite[j].lotag = 32; ! 4753: sprite[j].hitag = 0; ! 4754: playsound_loc(S_ARROWHIT, sprite[j].x, sprite[j].y); ! 4755: ! 4756: if (plr->weapon[6] == 3 && currweapon == 6) { ! 4757: j = insertsprite(hitsect, FIRECHUNK); ! 4758: sprite[j].x = hitx; ! 4759: sprite[j].y = hity; ! 4760: sprite[j].z = hitz + (14 << 8); ! 4761: sprite[j].cstat = 0; ! 4762: sprite[j].picnum = ARROWFLAME; ! 4763: sprite[j].shade = 0; ! 4764: sprite[j].pal = 0; ! 4765: sprite[j].xrepeat = 64; ! 4766: sprite[j].yrepeat = 64; ! 4767: sprite[j].ang = 0; ! 4768: sprite[j].xvel = 0; ! 4769: sprite[j].yvel = 0; ! 4770: sprite[j].zvel = 0; ! 4771: sprite[j].owner = 0; ! 4772: sprite[j].lotag = 1200; ! 4773: sprite[j].hitag = 0; ! 4774: } ! 4775: ! 4776: } ! 4777: ! 4778: ! 4779: ! 4780: if (netgame) { ! 4781: netshootgun(-1, 5); ! 4782: } ! 4783: ! 4784: } ! 4785: ! 4786: ! 4787: if ((hitsprite >= 0) && (sprite[hitsprite].statnum < MAXSTATUS)) { ! 4788: switch (sprite[hitsprite].picnum) { ! 4789: case VASEA: ! 4790: case VASEB: ! 4791: case VASEC: ! 4792: case STAINGLASS1: ! 4793: case STAINGLASS2: ! 4794: case STAINGLASS3: ! 4795: case STAINGLASS4: ! 4796: case STAINGLASS5: ! 4797: case STAINGLASS6: ! 4798: case STAINGLASS7: ! 4799: case STAINGLASS8: ! 4800: case STAINGLASS9: ! 4801: newstatus(hitsprite, BROKENVASE); ! 4802: break; ! 4803: case GRONHAL: ! 4804: case GRONHALATTACK: ! 4805: case GRONHALPAIN: ! 4806: case GRONMU: ! 4807: case GRONMUATTACK: ! 4808: case GRONMUPAIN: ! 4809: case GRONSW: ! 4810: case GRONSWATTACK: ! 4811: case GRONSWPAIN: ! 4812: ! 4813: ! 4814: case KOBOLD: ! 4815: case KOBOLDATTACK: ! 4816: case DEVILSTAND: ! 4817: case DEVIL: ! 4818: case DEVILATTACK: ! 4819: case SKELETON: ! 4820: case SKELETONATTACK: ! 4821: case IMP: ! 4822: case IMPATTACK: ! 4823: // case IMPPAIN: ! 4824: ! 4825: case MINOTAUR: ! 4826: case MINOTAURATTACK: ! 4827: case MINOTAURPAIN: ! 4828: case FISH: ! 4829: case RAT: ! 4830: case WILLOW: ! 4831: case DEMON: ! 4832: case GUARDIAN: ! 4833: case GUARDIANATTACK: ! 4834: case KURTSTAND: ! 4835: case KURTKNEE: ! 4836: case KURTAT: ! 4837: case KURTPUNCH: ! 4838: case KURTREADY: ! 4839: case NEWGUYSTAND: ! 4840: case NEWGUYKNEE: ! 4841: case NEWGUY: ! 4842: case NEWGUYCAST: ! 4843: case NEWGUYBOW: ! 4844: case NEWGUYMACE: ! 4845: case NEWGUYPUNCH: ! 4846: ! 4847: case GONZOCSW: ! 4848: case GONZOCSWAT: ! 4849: case GONZOGSW: ! 4850: case GONZOGSWAT: ! 4851: case GONZOGHM: ! 4852: case GONZOGHMAT: ! 4853: case GONZOGSH: ! 4854: case GONZOGSHAT: ! 4855: case KATIE: ! 4856: case KATIEAT: ! 4857: ! 4858: if (netgame) { ! 4859: netshootgun(hitsprite, currweapon); ! 4860: break; ! 4861: } ! 4862: ! 4863: sprite[hitsprite].hitag -= (krand() & 30) + 15; ! 4864: if (sprite[hitsprite].hitag <= 0) { ! 4865: newstatus(hitsprite, DIE); ! 4866: if (sprite[hitsprite].picnum == RAT) ! 4867: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang); ! 4868: } ! 4869: else { ! 4870: sprite[hitsprite].ang = (getangle(plr->x - sprite[hitsprite].x, plr->y - sprite[hitsprite].y) & 2047); ! 4871: newstatus(hitsprite, PAIN); ! 4872: } ! 4873: break; ! 4874: // SHATTER FROZEN CRITTER ! 4875: case GRONHALDIE: ! 4876: case GRONMUDIE: ! 4877: case GRONSWDIE: ! 4878: case KOBOLDDIE: ! 4879: case DEVILDIE: ! 4880: case SKELETONDIE: ! 4881: case IMPDIE: ! 4882: case MINOTAURDIE: ! 4883: case KATIEPAIN: ! 4884: if (sprite[hitsprite].pal == 6) { ! 4885: // JSA_NEW ! 4886: SND_PlaySound(S_SOCK1 + (rand() % 4), 0, 0, 0, 0); ! 4887: playsound_loc(S_FREEZEDIE, hitx, hity); ! 4888: for (k = 0; k < 32; k++) ! 4889: icecubes(hitsprite, hitx, hity, hitz, hitsprite); ! 4890: deletesprite((short) hitsprite); ! 4891: } ! 4892: } // switch ! 4893: } ! 4894: break; ! 4895: ! 4896: case 6: // MEDUSA ! 4897: for (i = 0; i < MAXSPRITES; i++) { ! 4898: // cansee ! 4899: if (i != plr->spritenum) ! 4900: if (sprite[i].picnum == KOBOLD ! 4901: || sprite[i].picnum == IMP ! 4902: || sprite[i].picnum == MINOTAUR ! 4903: || sprite[i].picnum == SKELETON ! 4904: || sprite[i].picnum == GRONHAL ! 4905: || sprite[i].picnum == GRONMU ! 4906: || sprite[i].picnum == GRONSW ! 4907: || sprite[i].picnum == GONZOCSW ! 4908: || sprite[i].picnum == GONZOGSW ! 4909: || sprite[i].picnum == GONZOGHM ! 4910: || sprite[i].picnum == GONZOGSH ! 4911: || sprite[i].picnum == KURTSTAND ! 4912: || sprite[i].picnum == KURTKNEE ! 4913: || sprite[i].picnum == KURTAT ! 4914: || sprite[i].picnum == KURTPUNCH ! 4915: || sprite[i].picnum == KURTREADY ! 4916: || sprite[i].picnum == NEWGUYSTAND ! 4917: || sprite[i].picnum == NEWGUYKNEE ! 4918: || sprite[i].picnum == NEWGUY ! 4919: || sprite[i].picnum == NEWGUYCAST ! 4920: || sprite[i].picnum == NEWGUYBOW ! 4921: || sprite[i].picnum == NEWGUYMACE ! 4922: || sprite[i].picnum == NEWGUYPUNCH) ! 4923: if (cansee(plr->x, plr->y, plr->z, plr->sector, ! 4924: sprite[i].x, sprite[i].y, ! 4925: sprite[i].z - (tilesizy[sprite[i].picnum] << 7), ! 4926: sprite[i].sectnum) == 1) { ! 4927: if (checkmedusadist(i, plr->x, plr->y, plr->z, plr->lvl)) ! 4928: medusa(i); ! 4929: } ! 4930: } ! 4931: break; ! 4932: case 7: // KNOCKSPELL ! 4933: ! 4934: daang2 = (daang + 2048) & 2047; ! 4935: daz2 = (100 - plr->horiz) * 2000; ! 4936: ! 4937: hitscan(plr->x, plr->y, plr->z, plr->sector, // Start position ! 4938: sintable[(daang2 + 2560) & 2047], // X vector of 3D ang ! 4939: sintable[(daang2 + 2048) & 2047], // Y vector of 3D ang ! 4940: daz2, // Z vector of 3D ang ! 4941: &hitsect, &hitwall, &hitsprite, &hitx, &hity, &hitz); ! 4942: ! 4943: if (hitsect < 0 && hitsprite < 0 || hitwall >= 0) { ! 4944: ! 4945: neartag(hitx, hity, hitz, hitsect, daang, ! 4946: &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1024, 3); ! 4947: ! 4948: if (neartagsector >= 0) { ! 4949: if (sector[neartagsector].lotag >= 60 && ! 4950: sector[neartagsector].lotag <= 69) { ! 4951: sector[neartagsector].lotag = 6; ! 4952: sector[neartagsector].hitag = 0; ! 4953: } ! 4954: if (sector[neartagsector].lotag >= 70 && ! 4955: sector[neartagsector].lotag <= 79) { ! 4956: sector[neartagsector].lotag = 7; ! 4957: sector[neartagsector].hitag = 0; ! 4958: } ! 4959: operatesector(neartagsector); ! 4960: } ! 4961: ! 4962: } ! 4963: break; ! 4964: case 10: // throw a pike axe ! 4965: if (currweaponframe == PIKEATTACK1 + 4 ! 4966: || currweaponframe == ZPIKEATTACK + 4) { ! 4967: if (currweaponanim == 8 && currweapontics == 10) { ! 4968: ! 4969: if (netgame) { ! 4970: netshootgun(-1, 15); ! 4971: } ! 4972: ! 4973: throwpikecnt=(throwpikecnt+1)%THROWPIKELIMIT; ! 4974: if (throwpikesprite[throwpikecnt] != -1) { ! 4975: deletesprite((short) throwpikesprite[throwpikecnt]); ! 4976: throwpikesprite[throwpikecnt]=-1; ! 4977: } ! 4978: ! 4979: if (plr->weapon[currweapon] == 3) { ! 4980: j = insertsprite(plr->sector, MISSILE); ! 4981: throwpikesprite[throwpikecnt]=j; ! 4982: sprite[j].x = plr->x; ! 4983: sprite[j].y = plr->y; ! 4984: sprite[j].z = plr->z + (24 << 8); ! 4985: sprite[j].cstat = 21; ! 4986: sprite[j].picnum = THROWPIKE; ! 4987: sprite[j].ang = ((daang + 2048 + 96) - 512) & 2047; ! 4988: sprite[j].xrepeat = 24; ! 4989: sprite[j].yrepeat = 24; ! 4990: sprite[j].clipdist = 32; ! 4991: sprite[j].extra = daang; ! 4992: sprite[j].shade = -15; ! 4993: sprite[j].xvel = ((krand() & 256) - 128); ! 4994: sprite[j].yvel = ((krand() & 256) - 128); ! 4995: if (shootgunzvel != 0) { ! 4996: sprite[j].zvel = shootgunzvel; ! 4997: shootgunzvel = 0L; ! 4998: } ! 4999: else { ! 5000: sprite[j].zvel = ((100 - plr->horiz) << 4); ! 5001: } ! 5002: sprite[j].owner = 4096; ! 5003: sprite[j].lotag = 1024; ! 5004: sprite[j].hitag = 0; ! 5005: sprite[j].pal = 0; ! 5006: movesprite((short) j, (((long) sintable[(sprite[j].extra + 512) & 2047]) * synctics) << 3, (((long) sintable[sprite[j].extra]) * synctics) << 3, 0L, 4L << 8, 4L << 8, 0); ! 5007: setsprite((short) j, sprite[j].x, sprite[j].y, sprite[j].z); ! 5008: } ! 5009: else { ! 5010: ! 5011: throwpikecnt=(throwpikecnt+1)%THROWPIKELIMIT; ! 5012: if (throwpikesprite[throwpikecnt] != -1) { ! 5013: deletesprite((short) throwpikesprite[throwpikecnt]); ! 5014: throwpikesprite[throwpikecnt]=-1; ! 5015: } ! 5016: ! 5017: j = insertsprite(plr->sector, MISSILE); ! 5018: throwpikesprite[throwpikecnt]=j; ! 5019: sprite[j].x = plr->x; ! 5020: sprite[j].y = plr->y; ! 5021: sprite[j].z = plr->z + (24 << 8); ! 5022: sprite[j].cstat = 21; ! 5023: sprite[j].picnum = THROWPIKE; ! 5024: sprite[j].ang = ((plr->ang + 2048 + 96) - 512) & 2047; ! 5025: sprite[j].xrepeat = 24; ! 5026: sprite[j].yrepeat = 24; ! 5027: sprite[j].clipdist = 32; ! 5028: sprite[j].extra = plr->ang; ! 5029: sprite[j].shade = -15; ! 5030: sprite[j].xvel = ((krand() & 256) - 128); ! 5031: sprite[j].yvel = ((krand() & 256) - 128); ! 5032: sprite[j].zvel = ((100 - plr->horiz) << 4); ! 5033: sprite[j].owner = 4096; ! 5034: sprite[j].lotag = 1024; ! 5035: sprite[j].hitag = 0; ! 5036: sprite[j].pal = 0; ! 5037: } ! 5038: ! 5039: } ! 5040: } ! 5041: if (currweaponframe == PIKEATTACK2 + 4) { ! 5042: if (currweaponanim == 4 && currweapontics == 10) { ! 5043: ! 5044: throwpikecnt=(throwpikecnt+1)%THROWPIKELIMIT; ! 5045: if (throwpikesprite[throwpikecnt] != -1) { ! 5046: deletesprite((short) throwpikesprite[throwpikecnt]); ! 5047: throwpikesprite[throwpikecnt]=-1; ! 5048: } ! 5049: ! 5050: if (plr->weapon[currweapon] == 3) { ! 5051: #if 0 ! 5052: for (i = 0; i < 3; i++) { ! 5053: #endif ! 5054: j = insertsprite(plr->sector, MISSILE); ! 5055: throwpikesprite[throwpikecnt]=j; ! 5056: sprite[j].x = plr->x; ! 5057: sprite[j].y = plr->y; ! 5058: sprite[j].z = plr->z + (24 << 8); ! 5059: sprite[j].cstat = 21; ! 5060: sprite[j].picnum = THROWPIKE; ! 5061: sprite[j].ang = daang; ! 5062: #if 0 ! 5063: sprite[j].ang = ((plr->ang + 2048 + 96) - 512) & 2047; ! 5064: #endif ! 5065: sprite[j].xrepeat = 24; ! 5066: sprite[j].yrepeat = 24; ! 5067: sprite[j].clipdist = 32; ! 5068: sprite[j].extra = daang; ! 5069: #if 0 ! 5070: switch (i) { ! 5071: case 0: ! 5072: sprite[j].extra = plr->ang; ! 5073: break; ! 5074: case 1: ! 5075: sprite[j].extra = (plr->ang - 64) & 2047; ! 5076: break; ! 5077: case 2: ! 5078: sprite[j].extra = (plr->ang + 64) & 2047; ! 5079: break; ! 5080: } ! 5081: #endif ! 5082: sprite[j].shade = -15; ! 5083: sprite[j].xvel = ((krand() & 256) - 128); ! 5084: sprite[j].yvel = ((krand() & 256) - 128); ! 5085: sprite[j].zvel = ((100 - plr->horiz) << 4); ! 5086: sprite[j].owner = 4096; ! 5087: sprite[j].lotag = 1024; ! 5088: sprite[j].hitag = 0; ! 5089: sprite[j].pal = 0; ! 5090: movesprite((short) j, (((long) sintable[(sprite[j].extra + 512) & 2047]) * synctics) << 3, (((long) sintable[sprite[j].extra]) * synctics) << 3, 0L, 4L << 8, 4L << 8, 0); ! 5091: setsprite((short) j, sprite[j].x, sprite[j].y, sprite[j].z); ! 5092: #if 0 ! 5093: } ! 5094: #endif ! 5095: } ! 5096: else { ! 5097: j = insertsprite(plr->sector, MISSILE); ! 5098: throwpikesprite[throwpikecnt]=j; ! 5099: sprite[j].x = plr->x; ! 5100: sprite[j].y = plr->y; ! 5101: sprite[j].z = plr->z + (24 << 8); ! 5102: sprite[j].cstat = 21; ! 5103: sprite[j].picnum = THROWPIKE; ! 5104: sprite[j].ang = ((plr->ang + 2048 + 96) - 512) & 2047; ! 5105: sprite[j].xrepeat = 24; ! 5106: sprite[j].yrepeat = 24; ! 5107: sprite[j].clipdist = 32; ! 5108: sprite[j].extra = plr->ang; ! 5109: sprite[j].shade = -15; ! 5110: sprite[j].xvel = ((krand() & 256) - 128); ! 5111: sprite[j].yvel = ((krand() & 256) - 128); ! 5112: sprite[j].zvel = ((100 - plr->horiz) << 4); ! 5113: sprite[j].owner = 4096; ! 5114: sprite[j].lotag = 1024; ! 5115: sprite[j].hitag = 0; ! 5116: sprite[j].pal = 0; ! 5117: } ! 5118: ! 5119: } ! 5120: } ! 5121: break; ! 5122: case 2: // parabolic trajectory ! 5123: ! 5124: if (netgame) { ! 5125: netshootgun(-1, 12); ! 5126: } ! 5127: ! 5128: j = insertsprite(plr->sector, MISSILE); ! 5129: sprite[j].x = plr->x; ! 5130: sprite[j].y = plr->y; ! 5131: sprite[j].z = plr->z + (8 << 8) + ((krand() & 10) << 8); ! 5132: sprite[j].cstat = 0; ! 5133: sprite[j].picnum = PLASMA; ! 5134: sprite[j].shade = -32; ! 5135: sprite[j].pal = 0; ! 5136: sprite[j].xrepeat = 16; ! 5137: sprite[j].yrepeat = 16; ! 5138: sprite[j].ang = daang; ! 5139: sprite[j].xvel = (sintable[(daang + 2560) & 2047] >> 5); ! 5140: sprite[j].yvel = (sintable[(daang + 2048) & 2047] >> 5); ! 5141: if (shootgunzvel != 0) { ! 5142: sprite[j].zvel = shootgunzvel; ! 5143: shootgunzvel = 0L; ! 5144: } ! 5145: else { ! 5146: sprite[j].zvel = ((100 - plr->horiz) << 4); ! 5147: } ! 5148: sprite[j].owner = 4096; ! 5149: sprite[j].lotag = 256; ! 5150: sprite[j].hitag = 0; ! 5151: sprite[j].clipdist = 48; ! 5152: ! 5153: // movesprite ! 5154: // setsprite ! 5155: movesprite((short) j, (((long) sintable[(sprite[j].ang + 512) & 2047]) * synctics) << 3, (((long) sintable[sprite[j].ang]) * synctics) << 3, 0L, 4L << 8, 4L << 8, 0); ! 5156: setsprite((short) j, sprite[j].x, sprite[j].y, sprite[j].z); ! 5157: ! 5158: break; ! 5159: case 3: ! 5160: ! 5161: if (netgame) { ! 5162: netshootgun(-1, 13); ! 5163: } ! 5164: ! 5165: j = insertsprite(plr->sector, MISSILE); ! 5166: sprite[j].x = plr->x; ! 5167: sprite[j].y = plr->y; ! 5168: sprite[j].z = plr->z + (8 << 8); ! 5169: sprite[j].cstat = 0; // Hitscan does not hit other bullets ! 5170: sprite[j].picnum = MONSTERBALL; ! 5171: sprite[j].shade = -32; ! 5172: sprite[j].pal = 0; ! 5173: sprite[j].xrepeat = 64; ! 5174: sprite[j].yrepeat = 64; ! 5175: // sprite[j].ang=plr->ang; ! 5176: sprite[j].ang = daang; ! 5177: sprite[j].xvel = (sintable[(daang + 2560) & 2047] >> 7); ! 5178: sprite[j].yvel = (sintable[(daang + 2048) & 2047] >> 7); ! 5179: if (shootgunzvel != 0L) { ! 5180: sprite[j].zvel = shootgunzvel; ! 5181: shootgunzvel = 0L; ! 5182: } ! 5183: else { ! 5184: sprite[j].zvel = ((100 - plr->horiz) << 4); ! 5185: } ! 5186: sprite[j].owner = 4096; ! 5187: sprite[j].lotag = 256; ! 5188: sprite[j].hitag = 0; ! 5189: sprite[j].clipdist = 64; ! 5190: movesprite((short) j, (((long) sintable[(sprite[j].ang + 512) & 2047]) * synctics) << 3, (((long) sintable[sprite[j].ang]) * synctics) << 3, 0L, 4L << 8, 4L << 8, 0); ! 5191: setsprite((short) j, sprite[j].x, sprite[j].y, sprite[j].z); ! 5192: ! 5193: ! 5194: break; ! 5195: case 4: ! 5196: ! 5197: if (netgame) { ! 5198: netshootgun(-1, 14); ! 5199: } ! 5200: for (j=0 ; j < MAXSPRITES ; j++) { ! 5201: switch (sprite[j].picnum) { ! 5202: case KOBOLD: ! 5203: case KOBOLDATTACK: ! 5204: case DEVIL: ! 5205: case DEVILATTACK: ! 5206: case IMP: ! 5207: case IMPATTACK: ! 5208: case MINOTAUR: ! 5209: case MINOTAURATTACK: ! 5210: case SKELETON: ! 5211: case SKELETONATTACK: ! 5212: case GRONHAL: ! 5213: case GRONHALATTACK: ! 5214: case GRONMU: ! 5215: case GRONMUATTACK: ! 5216: case GRONSW: ! 5217: case GRONSWATTACK: ! 5218: case DEMON: ! 5219: case GUARDIAN: ! 5220: case GUARDIANATTACK: ! 5221: case WILLOW: ! 5222: case NEWGUYSTAND: ! 5223: case NEWGUYKNEE: ! 5224: case NEWGUY: ! 5225: case NEWGUYCAST: ! 5226: case NEWGUYBOW: ! 5227: case NEWGUYMACE: ! 5228: case NEWGUYPUNCH: ! 5229: case KURTSTAND: ! 5230: case KURTKNEE: ! 5231: case KURTAT: ! 5232: case KURTPUNCH: ! 5233: case KURTREADY: ! 5234: case GONZOCSW: ! 5235: case GONZOCSWAT: ! 5236: case GONZOCHMAT: ! 5237: case GONZOGSW: ! 5238: case GONZOGSWAT: ! 5239: case GONZOGHM: ! 5240: case GONZOGHMAT: ! 5241: case GONZOGSH: ! 5242: case GONZOGSHAT: ! 5243: if (cansee(plr->x, plr->y, plr->z, plr->sector, ! 5244: sprite[j].x, sprite[j].y, ! 5245: sprite[j].z - (tilesizy[sprite[j].picnum] << 7), ! 5246: sprite[j].sectnum) == 1) { ! 5247: if (sprite[j].owner != 4096) { ! 5248: nukespell(j); ! 5249: } ! 5250: } ! 5251: break; ! 5252: } ! 5253: } ! 5254: /* ! 5255: j=insertsprite(plr->sector,HEATSEEKER); ! 5256: sprite[j].x=plr->x; ! 5257: sprite[j].y=plr->y; ! 5258: sprite[j].z=plr->z+(8<<8); ! 5259: sprite[j].cstat=0; //Hitscan does not hit other bullets ! 5260: sprite[j].picnum=PLASMA; ! 5261: sprite[j].shade=-32; ! 5262: sprite[j].pal=0; ! 5263: sprite[j].xrepeat=16; ! 5264: sprite[j].yrepeat=16; ! 5265: sprite[j].ang=plr->ang; ! 5266: sprite[j].xvel=(sintable[(daang+2560)&2047]>>7); ! 5267: sprite[j].yvel=(sintable[(daang+2048)&2047]>>7); ! 5268: sprite[j].zvel=((100-plr->horiz)<<4); ! 5269: sprite[j].owner=4096; ! 5270: sprite[j].lotag=1024; ! 5271: sprite[j].hitag=0; ! 5272: sprite[j].clipdist=128; ! 5273: ! 5274: movesprite((short)j,(((long)sintable[(sprite[j].ang+512)&2047])*synctics)<<3,(((long)sintable[sprite[j].ang])*synctics)<<3,0L,4L<<8,4L<<8,0); ! 5275: setsprite((short)j,sprite[j].x,sprite[j].y,sprite[j].z); ! 5276: ! 5277: */ ! 5278: ! 5279: break; ! 5280: } ! 5281: ! 5282: ! 5283: } ! 5284: ! 5285: ! 5286: ! 5287: ! 5288: void ! 5289: singleshot(short bstatus) ! 5290: { ! 5291: ! 5292: hasshot = 0; ! 5293: return; ! 5294: if (selectedgun != 1 && oldmousestatus == 0) { ! 5295: keystatus[keys[KEYFIRE]] = keystatus[0x9d] = 0; ! 5296: hasshot = 0; ! 5297: } ! 5298: ! 5299: } ! 5300: ! 5301: void ! 5302: potionpic(int currentpotion) ! 5303: { ! 5304: ! 5305: struct player *plr; ! 5306: int i; ! 5307: int tilenum; ! 5308: ! 5309: if (playerdie == 1) { ! 5310: return; ! 5311: } ! 5312: ! 5313: plr = &player[pyrn]; ! 5314: ! 5315: if (netgame) ! 5316: return; ! 5317: ! 5318: if (svga == 1) { ! 5319: itemtoscreen(260L << 1, 387L, SPOTIONBACKPIC, 0, 0); ! 5320: itemtoscreen((260L << 1) - 4L, 380L, SPOTIONARROW + currentpotion, 0, 0); ! 5321: } ! 5322: else { ! 5323: itemtoscreen(260L, 161L, POTIONBACKPIC, 0, 0); ! 5324: itemtoscreen(258L, 157L, POTIONARROW + currentpotion, 0, 0); ! 5325: } ! 5326: ! 5327: for (i = 0; i < MAXPOTIONS; i++) { ! 5328: if (plr->potion[i] < 0) ! 5329: plr->potion[i] = 0; ! 5330: if (plr->potion[i] > 0) { ! 5331: switch (i) { ! 5332: case 0: ! 5333: if (svga == 1) ! 5334: tilenum = SFLASKBLUE; ! 5335: else ! 5336: tilenum = FLASKBLUE; ! 5337: break; ! 5338: case 1: ! 5339: if (svga == 1) ! 5340: tilenum = SFLASKGREEN; ! 5341: else ! 5342: tilenum = FLASKGREEN; ! 5343: break; ! 5344: case 2: ! 5345: if (svga == 1) ! 5346: tilenum = SFLASKOCHRE; ! 5347: else ! 5348: tilenum = FLASKOCHRE; ! 5349: break; ! 5350: case 3: ! 5351: if (svga == 1) ! 5352: tilenum = SFLASKRED; ! 5353: else ! 5354: tilenum = FLASKRED; ! 5355: break; ! 5356: case 4: ! 5357: if (svga == 1) ! 5358: tilenum = SFLASKTAN; ! 5359: else ! 5360: tilenum = FLASKTAN; ! 5361: break; ! 5362: } ! 5363: ! 5364: potiontilenum = tilenum; ! 5365: ! 5366: if (svga == 1) ! 5367: // overwritesprite((262<<1)+(i*20),406,potiontilenum,0,0,0); ! 5368: // ! 5369: itemtoscreen((long) ((262 << 1) + (i * 20)), 406L, potiontilenum, 0, 0); ! 5370: /* rotatesprite((long)((262<<1)+(i*20))<<16, 406L<<16, 65536L, ! 5371: * 0, potiontilenum, 0, 0, 8+16, 0L,0L,xdim-1,ydim-1); */ ! 5372: else ! 5373: // overwritesprite((long)(262+(i*10)),169L,potiontilenum,0,0 ! 5374: // ,0); ! 5375: itemtoscreen((long) (262 + (i * 10)), 169L, potiontilenum, 0, 0); ! 5376: ! 5377: itoa(plr->potion[i], potionbuf, 10); ! 5378: ! 5379: if (svga == 1) ! 5380: fancyfont((long) ((266 << 1) + (i * 20)), 394L, SPOTIONFONT - 26, potionbuf, 0); ! 5381: else ! 5382: fancyfont((long) (266 + (i * 10)), 164L, SMFONT - 26, potionbuf, 0); ! 5383: ! 5384: } ! 5385: else { ! 5386: if (svga == 1) ! 5387: // overwritesprite((262<<1)+(i*20),406,SFLASKBLACK,0,0,0); ! 5388: // itemtoscreen((long)((262<<1)+(i*10)),406L,SFLASKBLACK,0,0 ! 5389: // ,0); ! 5390: rotatesprite((long) ((262 << 1) + (i * 20)) << 16, ! 5391: 406L << 16, ! 5392: 65536L, ! 5393: 0, ! 5394: SFLASKBLACK, ! 5395: 0, ! 5396: 0, ! 5397: 8 + 16, ! 5398: 0L, 0L, xdim - 1, ydim - 1); ! 5399: ! 5400: else ! 5401: // overwritesprite((long)(262+(i*10)),169L,FLASKBLACK,0,0,0) ! 5402: // ; ! 5403: itemtoscreen((long) (262 + (i * 10)), 169L, FLASKBLACK, 0, 0); ! 5404: } ! 5405: } ! 5406: ! 5407: ! 5408: } ! 5409: ! 5410: ! 5411: void ! 5412: usapotion(struct player * plr) ! 5413: { ! 5414: if (playerdie == 1) { ! 5415: return; ! 5416: } ! 5417: ! 5418: if (currentpotion == 0 && plr->health >= plr->maxhealth) ! 5419: return; ! 5420: ! 5421: if (currentpotion == 2 && poisoned == 0) ! 5422: return; ! 5423: ! 5424: if (plr->potion[currentpotion] <= 0) ! 5425: return; ! 5426: else ! 5427: plr->potion[currentpotion]--; ! 5428: ! 5429: switch (currentpotion) { ! 5430: case 0: // health potion ! 5431: if (plr->health + 25 > plr->maxhealth) { ! 5432: plr->health = plr->maxhealth; ! 5433: SND_PlaySound(S_DRINK, 0, 0, 0, 0); ! 5434: healthpic(0); ! 5435: } ! 5436: else { ! 5437: SND_PlaySound(S_DRINK, 0, 0, 0, 0); ! 5438: healthpic(25); ! 5439: } ! 5440: startblueflash(10); ! 5441: break; ! 5442: case 1: // strength ! 5443: strongtime = 3200; ! 5444: SND_PlaySound(S_DRINK, 0, 0, 0, 0); ! 5445: startblueflash(10); ! 5446: break; ! 5447: case 2: // anti venom ! 5448: SND_PlaySound(S_DRINK, 0, 0, 0, 0); ! 5449: poisoned = 0; ! 5450: poisontime = 0; ! 5451: startwhiteflash(10); ! 5452: strcpy(displaybuf, "poison cured"); ! 5453: healthpic(0); ! 5454: displaytime = 360; ! 5455: break; ! 5456: case 3: // fire resist ! 5457: SND_PlaySound(S_DRINK, 0, 0, 0, 0); ! 5458: manatime = 3200; ! 5459: startwhiteflash(10); ! 5460: if (lavasnd != -1) { ! 5461: SND_StopLoop(lavasnd); ! 5462: lavasnd = -1; ! 5463: } ! 5464: armorpic(0); ! 5465: break; ! 5466: case 4: // invisi ! 5467: SND_PlaySound(S_DRINK, 0, 0, 0, 0); ! 5468: invisibletime = 3200; ! 5469: startgreenflash(10); ! 5470: break; ! 5471: } ! 5472: ! 5473: potionpic(currentpotion); ! 5474: ! 5475: } ! 5476: ! 5477: void ! 5478: orbpic(int currentorb) ! 5479: { ! 5480: ! 5481: int tilenum; ! 5482: int spellbookpage; ! 5483: struct player *plr; ! 5484: long dax, ! 5485: day; ! 5486: ! 5487: plr = &player[pyrn]; ! 5488: ! 5489: if (playerdie == 1) { ! 5490: return; ! 5491: } ! 5492: ! 5493: if (plr->orbammo[currentorb] < 0) ! 5494: plr->orbammo[currentorb] = 0; ! 5495: ! 5496: itoa(plr->orbammo[currentorb], tempbuf, 10); ! 5497: ! 5498: if (svga == 1) ! 5499: spellbookpage = sspellbookanim[currentorb][8].daweaponframe; ! 5500: else ! 5501: spellbookpage = spellbookanim[currentorb][8].daweaponframe; ! 5502: ! 5503: if (svga == 1) { ! 5504: itemtoscreen(120L << 1, 372L, SSPELLBACK, 0, 0); ! 5505: spellbookframe = sspellbookanim[currentorb][8].daweaponframe; ! 5506: dax = sspellbookanim[currentorb][8].currx; ! 5507: day = sspellbookanim[currentorb][8].curry; ! 5508: itemtoscreen(dax << 1, day, spellbookframe, 0, 0); ! 5509: itoa(plr->orbammo[currentorb], tempbuf, 10); ! 5510: fancyfont(126L << 1, 439L, SSCOREFONT - 26, tempbuf, 0); ! 5511: } ! 5512: else { ! 5513: itemtoscreen(122L, 155L, SPELLBOOKBACK, 0, 0); ! 5514: itemtoscreen(121L, 161L, spellbookpage, 0, 0); ! 5515: fancyfont(126L, 181L, SCOREFONT - 26, tempbuf, 0); ! 5516: } ! 5517: ! 5518: } ! 5519: ! 5520: void ! 5521: healthpic(int hp) ! 5522: { ! 5523: ! 5524: int i,tilenum; ! 5525: struct player *plr; ! 5526: ! 5527: plr = &player[pyrn]; ! 5528: ! 5529: if (playerdie == 1) { ! 5530: return; ! 5531: } ! 5532: if (godmode == 1) { ! 5533: plr->health = 200; ! 5534: if (svga == 0) { ! 5535: if (plr->screensize <= 320) { ! 5536: itemtoscreen(72L, 168L, HEALTHBACKPIC, 0, 0); ! 5537: fancyfont(74L, 170L, BGZERO - 26, healthbuf, 0); ! 5538: } ! 5539: } ! 5540: else if (svga == 1) { ! 5541: if (plr->screensize == 320) { ! 5542: itemtoscreen(74L << 1, 406L, SHEALTHBACK, 0, 0); ! 5543: fancyfont(76L << 1, 409L, SHEALTHFONT - 26, healthbuf, 0); ! 5544: } ! 5545: } ! 5546: return; ! 5547: } ! 5548: switch (difficulty) { ! 5549: case 1: ! 5550: hp >>= 1; ! 5551: break; ! 5552: case 3: ! 5553: hp <<= 1; ! 5554: break; ! 5555: } ! 5556: plr->health += hp; ! 5557: ! 5558: if (plr->health < 0) { ! 5559: plr->health = 0; ! 5560: } ! 5561: ! 5562: itoa(plr->health, healthbuf, 10); ! 5563: ! 5564: if (svga == 0) { ! 5565: if (plr->screensize <= 320) { ! 5566: #if 0 ! 5567: if (poisoned == 1) { ! 5568: // overwritesprite(72,168,HEALTHBACKPIC,0,0,6); ! 5569: itemtoscreen(72L, 168L, HEALTHBACKPIC, 0, 6); ! 5570: fancyfont(74L, 170L, BGZERO - 26, healthbuf, 6); ! 5571: } ! 5572: else { ! 5573: #endif ! 5574: // overwritesprite(72,168,HEALTHBACKPIC,0,0,0); ! 5575: itemtoscreen(72L, 168L, HEALTHBACKPIC, 0, 0); ! 5576: fancyfont(74L, 170L, BGZERO - 26, healthbuf, 0); ! 5577: #if 0 ! 5578: } ! 5579: #endif ! 5580: } ! 5581: } ! 5582: else if (svga == 1) { ! 5583: if (plr->screensize == 320) { ! 5584: #if 0 ! 5585: if (poisoned == 1) { ! 5586: // overwritesprite(74<<1,406,SHEALTHBACK,0,0,6); ! 5587: itemtoscreen(74L << 1, 406L, SHEALTHBACK, 0, 6); ! 5588: fancyfont(76L << 1, 409L, SHEALTHFONT - 26, healthbuf, 6); ! 5589: } ! 5590: else { ! 5591: #endif ! 5592: // overwritesprite(74<<1,406,SHEALTHBACK,0,0,0); ! 5593: itemtoscreen(74L << 1, 406L, SHEALTHBACK, 0, 0); ! 5594: fancyfont(76L << 1, 409L, SHEALTHFONT - 26, healthbuf, 0); ! 5595: #if 0 ! 5596: } ! 5597: #endif ! 5598: } ! 5599: } ! 5600: ! 5601: ! 5602: } ! 5603: ! 5604: ! 5605: void ! 5606: armorpic(int arm) ! 5607: { ! 5608: ! 5609: int tilenum; ! 5610: struct player *plr; ! 5611: ! 5612: plr = &player[pyrn]; ! 5613: ! 5614: if (playerdie == 1) { ! 5615: return; ! 5616: } ! 5617: ! 5618: plr->armor += arm; ! 5619: ! 5620: if (plr->armor < 0) { ! 5621: plr->armor = 0; ! 5622: plr->armortype = 0; ! 5623: } ! 5624: ! 5625: itoa(plr->armor, armorbuf, 10); ! 5626: ! 5627: if (svga == 0) { ! 5628: if (plr->screensize <= 320) { ! 5629: // if (manatime > 0) { ! 5630: // itemtoscreen(197L, 168L, HEALTHBACKPIC, 0, 8); ! 5631: // fancyfont(201L, 170L, BGZERO - 26, armorbuf, 8); ! 5632: // } ! 5633: // else { ! 5634: itemtoscreen(197L, 168L, HEALTHBACKPIC, 0, 0); ! 5635: fancyfont(201L, 170L, BGZERO - 26, armorbuf, 0); ! 5636: // } ! 5637: } ! 5638: } ! 5639: else { ! 5640: if (plr->screensize == 320) { ! 5641: // if (manatime > 0) { ! 5642: // itemtoscreen(200L << 1, 406L, SHEALTHBACK, 0, 8); ! 5643: // fancyfont(204L << 1, 409L, SHEALTHFONT - 26, armorbuf, 8); ! 5644: // } ! 5645: // else { ! 5646: itemtoscreen(200L << 1, 406L, SHEALTHBACK, 0, 0); ! 5647: fancyfont(204L << 1, 409L, SHEALTHFONT - 26, armorbuf, 0); ! 5648: // } ! 5649: } ! 5650: } ! 5651: ! 5652: ! 5653: } ! 5654: ! 5655: void ! 5656: levelpic(void) ! 5657: { ! 5658: ! 5659: struct player *plr; ! 5660: int x, ! 5661: y; ! 5662: int tilenum; ! 5663: char temp[20]; ! 5664: char temp2[20]; ! 5665: ! 5666: plr = &player[pyrn]; ! 5667: ! 5668: if (playerdie == 1) { ! 5669: return; ! 5670: } ! 5671: ! 5672: if (selectedgun == 6) { ! 5673: if (plr->ammo[6] < 0) ! 5674: plr->ammo[6] = 0; ! 5675: itoa(plr->ammo[6], temp, 10); ! 5676: strcpy(temp2, temp); ! 5677: if (svga == 0) { ! 5678: // overwritesprite(3,181,ARROWS,0,0,0); ! 5679: itemtoscreen(3L, 181L, ARROWS, 0, 0); ! 5680: fancyfont(42, 183, SCOREFONT - 26, temp2, 0); ! 5681: } ! 5682: else { ! 5683: // overwritesprite(3<<1,434,SARROWS,0,0,0); ! 5684: itemtoscreen(3L << 1, 434L, SARROWS, 0, 0); ! 5685: fancyfont(42 << 1, 439, SSCOREFONT - 26, temp2, 0); ! 5686: } ! 5687: } ! 5688: else if (selectedgun == 7 && plr->weapon[7] == 2) { ! 5689: if (plr->ammo[7] < 0) ! 5690: plr->ammo[7] = 0; ! 5691: itoa(plr->ammo[7], temp, 10); ! 5692: strcpy(temp2, temp); ! 5693: // need pike pic ! 5694: if (svga == 0) { ! 5695: // overwritesprite(3,181,PIKES,0,0,0); ! 5696: itemtoscreen(3L, 181L, PIKES, 0, 0); ! 5697: fancyfont(42, 183, SCOREFONT - 26, temp2, 0); ! 5698: } ! 5699: else { ! 5700: // overwritesprite(3<<1,434,SPIKES,0,0,0); ! 5701: itemtoscreen(3L << 1, 434L, SPIKES, 0, 0); ! 5702: fancyfont(42 << 1, 439, SSCOREFONT - 26, temp2, 0); ! 5703: } ! 5704: } ! 5705: else { ! 5706: ! 5707: if (svga == 0) ! 5708: tilenum = PLAYERLVL + (plr->lvl - 1); ! 5709: else ! 5710: tilenum = SPLAYERLVL + (plr->lvl - 1); ! 5711: ! 5712: if (svga == 0) ! 5713: // overwritesprite(3,181,tilenum,0,0,0); ! 5714: itemtoscreen(3L, 181L, tilenum, 0, 0); ! 5715: else ! 5716: // overwritesprite(3<<1,436,tilenum,0,0,0); ! 5717: itemtoscreen(3L << 1, 436L, tilenum, 0, 0); ! 5718: ! 5719: } ! 5720: ! 5721: } ! 5722: ! 5723: ! 5724: void ! 5725: score(int score) ! 5726: { ! 5727: ! 5728: int x, ! 5729: y; ! 5730: int tilenum; ! 5731: struct player *plr; ! 5732: ! 5733: plr = &player[pyrn]; ! 5734: ! 5735: if (playerdie == 1) { ! 5736: return; ! 5737: } ! 5738: ! 5739: plr->score += score; ! 5740: expgained += score; ! 5741: ! 5742: tilenum = SCOREFONT - 26; ! 5743: ! 5744: itoa(plr->score, tempbuf, 10); ! 5745: ! 5746: if (svga == 1) ! 5747: // overwritesprite(6,394,SSCOREBACKPIC,0,0,0); ! 5748: itemtoscreen(6L, 394L, SSCOREBACKPIC, 0, 0); ! 5749: // itemtoscreen(6L,163L,SSCOREBACKPIC,0,0,0); ! 5750: else ! 5751: // overwritesprite(29,163,SCOREBACKPIC,0,0,0); ! 5752: itemtoscreen(29L, 163L, SCOREBACKPIC, 0, 0); ! 5753: ! 5754: strcpy(scorebuf, tempbuf); ! 5755: ! 5756: if (svga == 1) { ! 5757: if (plr->screensize == 320) ! 5758: fancyfont(60, 396 + 1, SSCOREFONT - 26, scorebuf, 0); ! 5759: } ! 5760: else { ! 5761: if (plr->screensize <= 320) ! 5762: fancyfont(30, 165, SCOREFONT - 26, scorebuf, 0); ! 5763: } ! 5764: ! 5765: goesupalevel(plr); ! 5766: ! 5767: } ! 5768: ! 5769: void ! 5770: goesupalevel(struct player * plr) ! 5771: { ! 5772: switch (plr->lvl) { ! 5773: case 0: ! 5774: case 1: ! 5775: if (plr->score > 9999) { ! 5776: strcpy(displaybuf, "thou art a warrior"); ! 5777: displaytime = 360; ! 5778: plr->lvl = 2; ! 5779: plr->maxhealth = 120; ! 5780: levelpic(); ! 5781: } ! 5782: break; ! 5783: case 2: ! 5784: if (plr->score > 19999) { ! 5785: strcpy(displaybuf, "thou art a swordsman"); ! 5786: displaytime = 360; ! 5787: plr->lvl = 3; ! 5788: plr->maxhealth = 140; ! 5789: levelpic(); ! 5790: } ! 5791: break; ! 5792: case 3: ! 5793: if (plr->score > 29999) { ! 5794: strcpy(displaybuf, "thou art a hero"); ! 5795: displaytime = 360; ! 5796: plr->lvl = 4; ! 5797: plr->maxhealth = 160; ! 5798: levelpic(); ! 5799: } ! 5800: break; ! 5801: case 4: ! 5802: if (plr->score > 39999) { ! 5803: strcpy(displaybuf, "thou art a champion"); ! 5804: displaytime = 360; ! 5805: plr->lvl = 5; ! 5806: plr->maxhealth = 180; ! 5807: levelpic(); ! 5808: } ! 5809: break; ! 5810: case 5: ! 5811: if (plr->score > 49999) { ! 5812: strcpy(displaybuf, "thou art a superhero"); ! 5813: displaytime = 360; ! 5814: plr->lvl = 6; ! 5815: plr->maxhealth = 200; ! 5816: levelpic(); ! 5817: } ! 5818: break; ! 5819: case 6: ! 5820: if (plr->score > 59999) { ! 5821: strcpy(displaybuf, "thou art a lord"); ! 5822: displaytime = 360; ! 5823: plr->lvl = 7; ! 5824: levelpic(); ! 5825: } ! 5826: } ! 5827: } ! 5828: ! 5829: ! 5830: int ! 5831: checkweapondist(short i, long x, long y, long z, char guntype) ! 5832: { ! 5833: ! 5834: int length; ! 5835: ! 5836: if (selectedgun == 0) { ! 5837: length = 1024; ! 5838: } ! 5839: else { ! 5840: switch (selectedgun) { ! 5841: case 1: ! 5842: length = 1024; ! 5843: break; ! 5844: case 2: ! 5845: case 3: ! 5846: case 4: ! 5847: case 5: ! 5848: length = 1536; ! 5849: break; ! 5850: case 6: ! 5851: length = 2048; ! 5852: break; ! 5853: case 7: ! 5854: length = 1024; ! 5855: break; ! 5856: case 8: ! 5857: case 9: ! 5858: length = 2048; ! 5859: break; ! 5860: } ! 5861: } ! 5862: if ((labs(x - sprite[i].x) + labs(y - sprite[i].y) < length) && (labs((z >> 8) - ((sprite[i].z >> 8) - (tilesizy[sprite[i].picnum] >> 1))) <= (length >> 3))) ! 5863: return (1); ! 5864: else ! 5865: return (0); ! 5866: ! 5867: } ! 5868: ! 5869: ! 5870: void ! 5871: updatepics(void) ! 5872: { ! 5873: ! 5874: score(0); // OK ! 5875: if (netgame != 0) { ! 5876: if (gametype >= 1) ! 5877: captureflagpic(); ! 5878: else ! 5879: fragspic(); ! 5880: } ! 5881: else { ! 5882: potionpic(currentpotion);// OK ! 5883: } ! 5884: levelpic(); // ok ! 5885: healthpic(0); // OK ! 5886: armorpic(0); // OK ! 5887: orbpic(currentorb); ! 5888: keyspic(); // OK ! 5889: ! 5890: } ! 5891: ! 5892: extern short teamscore[]; ! 5893: extern short teaminplay[]; ! 5894: ! 5895: struct capt { ! 5896: int x; ! 5897: int y; ! 5898: int palnum; ! 5899: }; ! 5900: ! 5901: void ! 5902: captureflagpic(void) ! 5903: { ! 5904: ! 5905: int i; ! 5906: ! 5907: struct capt flag[4] = {{260, 161, 0}, ! 5908: {286, 161, 10}, ! 5909: {260, 176, 11}, ! 5910: {286, 176, 12}}; ! 5911: ! 5912: struct capt sflag[4] = {{260, 387, 0}, ! 5913: {286, 387, 10}, ! 5914: {260, 417, 11}, ! 5915: {286, 417, 12}}; ! 5916: ! 5917: if (svga == 1) { ! 5918: // overwritesprite(260<<1,387,SPOTIONBACKPIC,0,0,0); ! 5919: itemtoscreen(260L << 1, 387L, SPOTIONBACKPIC, 0, 0); ! 5920: } ! 5921: else { ! 5922: // overwritesprite(260,161,POTIONBACKPIC,0,0,0); ! 5923: itemtoscreen(260L, 161L, POTIONBACKPIC, 0, 0); ! 5924: } ! 5925: ! 5926: for (i = 0; i < 4; i++) { ! 5927: if (svga == 1) { ! 5928: if (teaminplay[i]) { ! 5929: overwritesprite((sflag[i].x << 1) + 6, sflag[i].y + 8, STHEFLAG, 0, 0, sflag[i].palnum); ! 5930: itoa(teamscore[i], tempbuf, 10); ! 5931: fancyfont((sflag[i].x << 1) + 16, sflag[i].y + 16, SPOTIONFONT - 26, tempbuf, 0); ! 5932: } ! 5933: } ! 5934: else { ! 5935: if (teaminplay[i]) { ! 5936: rotatesprite((flag[i].x+3) << 16, (flag[i].y+3) << 16, ! 5937: 65536L, 0, THEFLAG, 0, flag[i].palnum, 8 + 16, ! 5938: 0L, 0L, xdim - 1L, ydim - 1L); ! 5939: // overwritesprite(flag[i].x + 3, flag[i].y + 3, THEFLAG, 0, 0, flag[i].palnum); ! 5940: itoa(teamscore[i], tempbuf, 10); ! 5941: fancyfont(flag[i].x + 6, flag[i].y + 6, SMFONT - 26, ! 5942: tempbuf, 0); ! 5943: } ! 5944: } ! 5945: } ! 5946: } ! 5947: ! 5948: void ! 5949: fragspic(void) ! 5950: { ! 5951: ! 5952: struct player *plr; ! 5953: ! 5954: plr = &player[pyrn]; ! 5955: ! 5956: if (svga == 1) { ! 5957: if (plr->screensize == 320) { ! 5958: // overwritesprite(260<<1,387,SPOTIONBACKPIC,0,0,0); ! 5959: itemtoscreen(260L << 1, 387L, SPOTIONBACKPIC, 0, 0); ! 5960: itoa(teamscore[pyrn], tempbuf, 10); ! 5961: fancyfont((260 << 1) + 10, 387 + 10, SHEALTHFONT - 26, tempbuf, 0); ! 5962: } ! 5963: } ! 5964: else { ! 5965: if (plr->screensize <= 320) { ! 5966: // overwritesprite(260,161,POTIONBACKPIC,0,0,0); ! 5967: itemtoscreen(260L, 161L, POTIONBACKPIC, 0, 0); ! 5968: itoa(teamscore[pyrn], tempbuf, 10); ! 5969: fancyfont(260 + 15, 161 + 5, BGZERO - 26, tempbuf, 0); ! 5970: } ! 5971: } ! 5972: ! 5973: } ! 5974: ! 5975: ! 5976: void ! 5977: keyspic(void) ! 5978: { ! 5979: ! 5980: struct player *plr; ! 5981: ! 5982: plr = &player[pyrn]; ! 5983: ! 5984: if (svga == 1) { ! 5985: if (plr->treasure[14] == 1) ! 5986: // overwritesprite(242<<1,387,SKEYBRASS,0,0,0); ! 5987: itemtoscreen(242L << 1, 387L, SKEYBRASS, 0, 0); ! 5988: else ! 5989: // overwritesprite(242<<1,387,SKEYBLANK,0,0,0); ! 5990: itemtoscreen(242L << 1, 387L, SKEYBLANK, 0, 0); ! 5991: ! 5992: if (plr->treasure[15] == 1) ! 5993: // overwritesprite(242<<1,408,SKEYBLACK,0,0,0); ! 5994: itemtoscreen(242L << 1, 408L, SKEYBLACK, 0, 0); ! 5995: else ! 5996: // overwritesprite(242<<1,408,SKEYBLANK,0,0,0); ! 5997: itemtoscreen(242 << 1, 408, SKEYBLANK, 0, 0); ! 5998: ! 5999: if (plr->treasure[16] == 1) ! 6000: // overwritesprite(242<<1,430,SKEYGLASS,0,0,0); ! 6001: itemtoscreen(242L << 1, 430L, SKEYGLASS, 0, 0); ! 6002: else ! 6003: // overwritesprite(242<<1,430,SKEYBLANK,0,0,0); ! 6004: itemtoscreen(242L << 1, 430L, SKEYBLANK, 0, 0); ! 6005: ! 6006: if (plr->treasure[17] == 1) ! 6007: // overwritesprite(242<<1,452,SKEYIVORY,0,0,0); ! 6008: itemtoscreen(242L << 1, 452L, SKEYIVORY, 0, 0); ! 6009: else ! 6010: // overwritesprite(242<<1,452,SKEYBLANK,0,0,0); ! 6011: itemtoscreen(242L << 1, 452L, SKEYBLANK, 0, 0); ! 6012: } ! 6013: else { ! 6014: if (plr->treasure[14] == 1) ! 6015: // overwritesprite(242,160,KEYBRASS,0,0,0); ! 6016: itemtoscreen(242L, 160L, KEYBRASS, 0, 0); ! 6017: else ! 6018: // overwritesprite(242,160,KEYBLANK,0,0,0); ! 6019: itemtoscreen(242L, 160L, KEYBLANK, 0, 0); ! 6020: ! 6021: if (plr->treasure[15] == 1) ! 6022: // overwritesprite(242,169,KEYBLACK,0,0,0); ! 6023: itemtoscreen(242L, 169L, KEYBLACK, 0, 0); ! 6024: else ! 6025: // overwritesprite(242,169,KEYBLANK,0,0,0); ! 6026: itemtoscreen(242L, 169L, KEYBLANK, 0, 0); ! 6027: ! 6028: if (plr->treasure[16] == 1) ! 6029: // overwritesprite(242,178,KEYGLASS,0,0,0); ! 6030: itemtoscreen(242L, 178L, KEYGLASS, 0, 0); ! 6031: else ! 6032: // overwritesprite(242,178,KEYBLANK,0,0,0); ! 6033: itemtoscreen(242L, 178L, KEYBLANK, 0, 0); ! 6034: ! 6035: if (plr->treasure[17] == 1) ! 6036: // overwritesprite(242,187,KEYIVORY,0,0,0); ! 6037: itemtoscreen(242L, 187L, KEYIVORY, 0, 0); ! 6038: else ! 6039: // overwritesprite(242,187,KEYBLANK,0,0,0); ! 6040: itemtoscreen(242L, 187L, KEYBLANK, 0, 0); ! 6041: } ! 6042: ! 6043: } ! 6044: ! 6045: ! 6046: int ! 6047: adjustscore(int score) ! 6048: { ! 6049: ! 6050: float factor; ! 6051: ! 6052: factor = (krand() % 20) / 100; ! 6053: ! 6054: if (krand() % 100 > 50) ! 6055: return (score * (factor + 1)); ! 6056: else ! 6057: return (score - (score * (factor))); ! 6058: ! 6059: } ! 6060: ! 6061: int ! 6062: lvlspellcheck(struct player * plr) ! 6063: { ! 6064: ! 6065: int legal = 0; ! 6066: ! 6067: legal = 1; ! 6068: #if 0 ! 6069: switch (currentorb) { ! 6070: case 0: ! 6071: legal = 1; ! 6072: break; ! 6073: case 1: ! 6074: legal = 1; ! 6075: break; ! 6076: case 2: ! 6077: if (plr->lvl > 1) { ! 6078: legal = 1; ! 6079: } ! 6080: else { ! 6081: strcpy(displaybuf, "must attain 2nd level"); ! 6082: displaytime = 360; ! 6083: } ! 6084: break; ! 6085: case 3: ! 6086: if (plr->lvl > 1) { ! 6087: legal = 1; ! 6088: } ! 6089: else { ! 6090: strcpy(displaybuf, "must attain 2nd level"); ! 6091: displaytime = 360; ! 6092: } ! 6093: break; ! 6094: case 4: ! 6095: if (plr->lvl > 2) { ! 6096: legal = 1; ! 6097: } ! 6098: else { ! 6099: strcpy(displaybuf, "must attain 3rd level"); ! 6100: displaytime = 360; ! 6101: } ! 6102: break; ! 6103: case 5: ! 6104: if (plr->lvl > 2) { ! 6105: legal = 1; ! 6106: } ! 6107: else { ! 6108: strcpy(displaybuf, "must attain 3rd level"); ! 6109: displaytime = 360; ! 6110: } ! 6111: break; ! 6112: case 6: ! 6113: if (plr->lvl > 3) { ! 6114: legal = 1; ! 6115: } ! 6116: else { ! 6117: strcpy(displaybuf, "must attain 4th level"); ! 6118: displaytime = 360; ! 6119: } ! 6120: break; ! 6121: case 7: ! 6122: if (plr->lvl > 4) { ! 6123: legal = 1; ! 6124: } ! 6125: else { ! 6126: strcpy(displaybuf, "must attain 5th level"); ! 6127: displaytime = 360; ! 6128: } ! 6129: break; ! 6130: } ! 6131: #endif ! 6132: return (legal); ! 6133: } ! 6134: ! 6135: void ! 6136: gronmissile(int s) ! 6137: { ! 6138: ! 6139: struct player *plr; ! 6140: short k, ! 6141: j, ! 6142: daang; ! 6143: long discrim; ! 6144: ! 6145: plr = &player[pyrn]; ! 6146: ! 6147: daang = (sprite[s].ang - 36) & 2047; ! 6148: ! 6149: for (k = 0; k < 10; k++) { ! 6150: ! 6151: daang = (daang + (k << 1)) & 2047; ! 6152: ! 6153: j = insertsprite(sprite[s].sectnum, MISSILE); ! 6154: sprite[j].x = sprite[s].x; ! 6155: sprite[j].y = sprite[s].y; ! 6156: sprite[j].z = sprite[s].z + (8 << 8) + ((krand() & 10) << 8); ! 6157: sprite[j].cstat = 0; ! 6158: sprite[j].picnum = PLASMA; ! 6159: sprite[j].shade = -32; ! 6160: sprite[j].pal = 0; ! 6161: sprite[j].xrepeat = 16; ! 6162: sprite[j].yrepeat = 16; ! 6163: sprite[j].ang = daang; ! 6164: sprite[j].xvel = (sintable[(daang + 2560) & 2047] >> 5); ! 6165: sprite[j].yvel = (sintable[(daang + 2048) & 2047] >> 5); ! 6166: discrim = ksqrt((plr->x - sprite[s].x) * (plr->x - sprite[s].x) ! 6167: + (plr->y - sprite[s].y) * (plr->y - sprite[s].y)); ! 6168: if (discrim == 0) ! 6169: discrim = 1; ! 6170: sprite[j].zvel = (((plr->z + (8 << 8)) - sprite[s].z) << 7) / discrim; ! 6171: sprite[j].owner = s; ! 6172: sprite[j].lotag = 256; ! 6173: sprite[j].hitag = 0; ! 6174: sprite[j].clipdist = 48; ! 6175: ! 6176: } ! 6177: ! 6178: } ! 6179: ! 6180: ! 6181: void ! 6182: displayspelltext(void) ! 6183: { ! 6184: switch (currentorb) { ! 6185: case 0: ! 6186: strcpy(displaybuf, "scare spell"); ! 6187: displaytime = 360; ! 6188: break; ! 6189: case 1: ! 6190: strcpy(displaybuf, "night vision spell"); ! 6191: displaytime = 360; ! 6192: break; ! 6193: case 2: ! 6194: strcpy(displaybuf, "freeze spell"); ! 6195: displaytime = 360; ! 6196: break; ! 6197: case 3: ! 6198: strcpy(displaybuf, "magic arrow spell"); ! 6199: displaytime = 360; ! 6200: break; ! 6201: case 4: ! 6202: strcpy(displaybuf, "open door spell"); ! 6203: displaytime = 360; ! 6204: break; ! 6205: case 5: ! 6206: strcpy(displaybuf, "fly spell"); ! 6207: displaytime = 360; ! 6208: break; ! 6209: case 6: ! 6210: strcpy(displaybuf, "fireball spell"); ! 6211: displaytime = 360; ! 6212: break; ! 6213: case 7: ! 6214: strcpy(displaybuf, "nuke spell"); ! 6215: displaytime = 360; ! 6216: break; ! 6217: } ! 6218: ! 6219: } ! 6220: ! 6221: ! 6222: void ! 6223: painsound(long xplc, long yplc) ! 6224: { ! 6225: playsound_loc(S_BREATH1 + (rand() % 6), xplc, yplc); ! 6226: } ! 6227: ! 6228: #if 0 ! 6229: void ! 6230: turntostone(short i) ! 6231: { ! 6232: ! 6233: switch (sprite[i].picnum) { ! 6234: ! 6235: case KOBOLD: ! 6236: case KOBOLDATTACK: ! 6237: case DEVIL: ! 6238: case DEVILATTACK: ! 6239: case IMP: ! 6240: case IMPATTACK: ! 6241: case MINOTAUR: ! 6242: case MINOTAURATTACK: ! 6243: case SKELETON: ! 6244: case SKELETONATTACK: ! 6245: case GRONHAL: ! 6246: case GRONHALATTACK: ! 6247: case GRONMU: ! 6248: case GRONMUATTACK: ! 6249: case GRONSW: ! 6250: case GRONSWATTACK: ! 6251: case DEMON: ! 6252: case GUARDIAN: ! 6253: case GUARDIANATTACK: ! 6254: case WILLOW: ! 6255: case NEWGUYSTAND: ! 6256: case NEWGUYKNEE: ! 6257: case NEWGUY: ! 6258: case NEWGUYCAST: ! 6259: case NEWGUYBOW: ! 6260: case NEWGUYMACE: ! 6261: case NEWGUYPUNCH: ! 6262: ! 6263: case KURTSTAND: ! 6264: case KURTKNEE: ! 6265: case KURTAT: ! 6266: case KURTPUNCH: ! 6267: case KURTREADY: ! 6268: case GONZOCSW: ! 6269: case GONZOCSWAT: ! 6270: case GONZOCHMAT: ! 6271: case GONZOGSW: ! 6272: case GONZOGSWAT: ! 6273: case GONZOGHM: ! 6274: case GONZOGHMAT: ! 6275: case GONZOGSH: ! 6276: case GONZOGSHAT: ! 6277: sprite[i].picnum++; ! 6278: sprite[i].pal = 8; ! 6279: sprite[i].shade = 15; ! 6280: changespritestat(i, 0); ! 6281: break; ! 6282: } ! 6283: ! 6284: } ! 6285: #endif ! 6286: ! 6287: int ! 6288: inView(struct player *plr,int i) ! 6289: { ! 6290: short a; ! 6291: ! 6292: a = getangle(sprite[i].x - plr->x, sprite[i].y - plr->y); ! 6293: if ((a < plr->ang && plr->ang - a < 256) || ! 6294: (a >= plr->ang && ((plr->ang + a) & 2047) < 256)) { ! 6295: return(1); ! 6296: } ! 6297: return(0); ! 6298: } ! 6299:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.