wolf_sprites.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
  1. /*
  2. Copyright (C) 2004 Michael Liebscher
  3. Copyright (C) 2000-2002 by DarkOne the Hacker
  4. This program is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU General Public License
  6. as published by the Free Software Foundation; either version 2
  7. of the License, or (at your option) any later version.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with this program; if not, write to the Free Software
  14. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  15. */
  16. /*
  17. * wolf_sprites.h: Wolfenstein3-D sprite handling.
  18. *
  19. * Author: Michael Liebscher <johnnycanuck@users.sourceforge.net>
  20. * Date: 2004
  21. *
  22. * Acknowledgement:
  23. * Portion of this code was derived from NewWolf, and was originally
  24. * written by DarkOne the Hacker.
  25. *
  26. * Portion of this code was derived from Wolfenstein3-D, and was originally
  27. * written by Id Software, Inc.
  28. *
  29. */
  30. /*
  31. Notes:
  32. This module is implemented by wolf_sprites.c
  33. */
  34. #ifndef __WOLF_SPRITES_H__
  35. #define __WOLF_SPRITES_H__
  36. //
  37. // sprite constants
  38. //
  39. enum {
  40. SPR_DEMO,
  41. SPR_DEATHCAM,
  42. //
  43. // static sprites
  44. //
  45. SPR_STAT_0, SPR_STAT_1,SPR_STAT_2, SPR_STAT_3,
  46. SPR_STAT_4, SPR_STAT_5,SPR_STAT_6, SPR_STAT_7,
  47. SPR_STAT_8, SPR_STAT_9,SPR_STAT_10,SPR_STAT_11,
  48. SPR_STAT_12,SPR_STAT_13,SPR_STAT_14,SPR_STAT_15,
  49. SPR_STAT_16,SPR_STAT_17,SPR_STAT_18,SPR_STAT_19,
  50. SPR_STAT_20,SPR_STAT_21,SPR_STAT_22,SPR_STAT_23,
  51. SPR_STAT_24,SPR_STAT_25,SPR_STAT_26,SPR_STAT_27,
  52. SPR_STAT_28,SPR_STAT_29,SPR_STAT_30,SPR_STAT_31,
  53. SPR_STAT_32,SPR_STAT_33,SPR_STAT_34,SPR_STAT_35,
  54. SPR_STAT_36,SPR_STAT_37,SPR_STAT_38,SPR_STAT_39,
  55. SPR_STAT_40,SPR_STAT_41,SPR_STAT_42,SPR_STAT_43,
  56. SPR_STAT_44,SPR_STAT_45,SPR_STAT_46,SPR_STAT_47,
  57. SPR_STAT_48,SPR_STAT_49,SPR_STAT_50,SPR_STAT_51,
  58. //
  59. // Guard
  60. //
  61. SPR_GRD_S_1,SPR_GRD_S_2,SPR_GRD_S_3,SPR_GRD_S_4,
  62. SPR_GRD_S_5,SPR_GRD_S_6,SPR_GRD_S_7,SPR_GRD_S_8,
  63. SPR_GRD_W1_1,SPR_GRD_W1_2,SPR_GRD_W1_3,SPR_GRD_W1_4,
  64. SPR_GRD_W1_5,SPR_GRD_W1_6,SPR_GRD_W1_7,SPR_GRD_W1_8,
  65. SPR_GRD_W2_1,SPR_GRD_W2_2,SPR_GRD_W2_3,SPR_GRD_W2_4,
  66. SPR_GRD_W2_5,SPR_GRD_W2_6,SPR_GRD_W2_7,SPR_GRD_W2_8,
  67. SPR_GRD_W3_1,SPR_GRD_W3_2,SPR_GRD_W3_3,SPR_GRD_W3_4,
  68. SPR_GRD_W3_5,SPR_GRD_W3_6,SPR_GRD_W3_7,SPR_GRD_W3_8,
  69. SPR_GRD_W4_1,SPR_GRD_W4_2,SPR_GRD_W4_3,SPR_GRD_W4_4,
  70. SPR_GRD_W4_5,SPR_GRD_W4_6,SPR_GRD_W4_7,SPR_GRD_W4_8,
  71. SPR_GRD_PAIN_1,SPR_GRD_DIE_1,SPR_GRD_DIE_2,SPR_GRD_DIE_3,
  72. SPR_GRD_PAIN_2,SPR_GRD_DEAD,
  73. SPR_GRD_SHOOT1,SPR_GRD_SHOOT2,SPR_GRD_SHOOT3,
  74. //
  75. // Dog
  76. //
  77. SPR_DOG_W1_1,SPR_DOG_W1_2,SPR_DOG_W1_3,SPR_DOG_W1_4,
  78. SPR_DOG_W1_5,SPR_DOG_W1_6,SPR_DOG_W1_7,SPR_DOG_W1_8,
  79. SPR_DOG_W2_1,SPR_DOG_W2_2,SPR_DOG_W2_3,SPR_DOG_W2_4,
  80. SPR_DOG_W2_5,SPR_DOG_W2_6,SPR_DOG_W2_7,SPR_DOG_W2_8,
  81. SPR_DOG_W3_1,SPR_DOG_W3_2,SPR_DOG_W3_3,SPR_DOG_W3_4,
  82. SPR_DOG_W3_5,SPR_DOG_W3_6,SPR_DOG_W3_7,SPR_DOG_W3_8,
  83. SPR_DOG_W4_1,SPR_DOG_W4_2,SPR_DOG_W4_3,SPR_DOG_W4_4,
  84. SPR_DOG_W4_5,SPR_DOG_W4_6,SPR_DOG_W4_7,SPR_DOG_W4_8,
  85. SPR_DOG_DIE_1,SPR_DOG_DIE_2,SPR_DOG_DIE_3,SPR_DOG_DEAD,
  86. SPR_DOG_JUMP1,SPR_DOG_JUMP2,SPR_DOG_JUMP3,
  87. //
  88. // SS
  89. //
  90. SPR_SS_S_1,SPR_SS_S_2,SPR_SS_S_3,SPR_SS_S_4,
  91. SPR_SS_S_5,SPR_SS_S_6,SPR_SS_S_7,SPR_SS_S_8,
  92. SPR_SS_W1_1,SPR_SS_W1_2,SPR_SS_W1_3,SPR_SS_W1_4,
  93. SPR_SS_W1_5,SPR_SS_W1_6,SPR_SS_W1_7,SPR_SS_W1_8,
  94. SPR_SS_W2_1,SPR_SS_W2_2,SPR_SS_W2_3,SPR_SS_W2_4,
  95. SPR_SS_W2_5,SPR_SS_W2_6,SPR_SS_W2_7,SPR_SS_W2_8,
  96. SPR_SS_W3_1,SPR_SS_W3_2,SPR_SS_W3_3,SPR_SS_W3_4,
  97. SPR_SS_W3_5,SPR_SS_W3_6,SPR_SS_W3_7,SPR_SS_W3_8,
  98. SPR_SS_W4_1,SPR_SS_W4_2,SPR_SS_W4_3,SPR_SS_W4_4,
  99. SPR_SS_W4_5,SPR_SS_W4_6,SPR_SS_W4_7,SPR_SS_W4_8,
  100. SPR_SS_PAIN_1,SPR_SS_DIE_1,SPR_SS_DIE_2,SPR_SS_DIE_3,
  101. SPR_SS_PAIN_2,SPR_SS_DEAD,
  102. SPR_SS_SHOOT1,SPR_SS_SHOOT2,SPR_SS_SHOOT3,
  103. //
  104. // Mutant
  105. //
  106. SPR_MUT_S_1,SPR_MUT_S_2,SPR_MUT_S_3,SPR_MUT_S_4,
  107. SPR_MUT_S_5,SPR_MUT_S_6,SPR_MUT_S_7,SPR_MUT_S_8,
  108. SPR_MUT_W1_1,SPR_MUT_W1_2,SPR_MUT_W1_3,SPR_MUT_W1_4,
  109. SPR_MUT_W1_5,SPR_MUT_W1_6,SPR_MUT_W1_7,SPR_MUT_W1_8,
  110. SPR_MUT_W2_1,SPR_MUT_W2_2,SPR_MUT_W2_3,SPR_MUT_W2_4,
  111. SPR_MUT_W2_5,SPR_MUT_W2_6,SPR_MUT_W2_7,SPR_MUT_W2_8,
  112. SPR_MUT_W3_1,SPR_MUT_W3_2,SPR_MUT_W3_3,SPR_MUT_W3_4,
  113. SPR_MUT_W3_5,SPR_MUT_W3_6,SPR_MUT_W3_7,SPR_MUT_W3_8,
  114. SPR_MUT_W4_1,SPR_MUT_W4_2,SPR_MUT_W4_3,SPR_MUT_W4_4,
  115. SPR_MUT_W4_5,SPR_MUT_W4_6,SPR_MUT_W4_7,SPR_MUT_W4_8,
  116. SPR_MUT_PAIN_1,SPR_MUT_DIE_1,SPR_MUT_DIE_2,SPR_MUT_DIE_3,
  117. SPR_MUT_PAIN_2,SPR_MUT_DIE_4,SPR_MUT_DEAD,
  118. SPR_MUT_SHOOT1,SPR_MUT_SHOOT2,SPR_MUT_SHOOT3,SPR_MUT_SHOOT4,
  119. //
  120. // Officer
  121. //
  122. SPR_OFC_S_1,SPR_OFC_S_2,SPR_OFC_S_3,SPR_OFC_S_4,
  123. SPR_OFC_S_5,SPR_OFC_S_6,SPR_OFC_S_7,SPR_OFC_S_8,
  124. SPR_OFC_W1_1,SPR_OFC_W1_2,SPR_OFC_W1_3,SPR_OFC_W1_4,
  125. SPR_OFC_W1_5,SPR_OFC_W1_6,SPR_OFC_W1_7,SPR_OFC_W1_8,
  126. SPR_OFC_W2_1,SPR_OFC_W2_2,SPR_OFC_W2_3,SPR_OFC_W2_4,
  127. SPR_OFC_W2_5,SPR_OFC_W2_6,SPR_OFC_W2_7,SPR_OFC_W2_8,
  128. SPR_OFC_W3_1,SPR_OFC_W3_2,SPR_OFC_W3_3,SPR_OFC_W3_4,
  129. SPR_OFC_W3_5,SPR_OFC_W3_6,SPR_OFC_W3_7,SPR_OFC_W3_8,
  130. SPR_OFC_W4_1,SPR_OFC_W4_2,SPR_OFC_W4_3,SPR_OFC_W4_4,
  131. SPR_OFC_W4_5,SPR_OFC_W4_6,SPR_OFC_W4_7,SPR_OFC_W4_8,
  132. SPR_OFC_PAIN_1,SPR_OFC_DIE_1,SPR_OFC_DIE_2,SPR_OFC_DIE_3,
  133. SPR_OFC_PAIN_2,SPR_OFC_DIE_4,SPR_OFC_DEAD,
  134. SPR_OFC_SHOOT1,SPR_OFC_SHOOT2,SPR_OFC_SHOOT3,
  135. //
  136. // Ghosts
  137. //
  138. SPR_BLINKY_W1,SPR_BLINKY_W2,SPR_PINKY_W1,SPR_PINKY_W2,
  139. SPR_CLYDE_W1,SPR_CLYDE_W2,SPR_INKY_W1,SPR_INKY_W2,
  140. //
  141. // Hans
  142. //
  143. SPR_BOSS_W1,SPR_BOSS_W2,SPR_BOSS_W3,SPR_BOSS_W4,
  144. SPR_BOSS_SHOOT1,SPR_BOSS_SHOOT2,SPR_BOSS_SHOOT3,SPR_BOSS_DEAD,
  145. SPR_BOSS_DIE1,SPR_BOSS_DIE2,SPR_BOSS_DIE3,
  146. //
  147. // Schabbs
  148. //
  149. SPR_SCHABB_W1,SPR_SCHABB_W2,SPR_SCHABB_W3,SPR_SCHABB_W4,
  150. SPR_SCHABB_SHOOT1,SPR_SCHABB_SHOOT2,
  151. SPR_SCHABB_DIE1,SPR_SCHABB_DIE2,SPR_SCHABB_DIE3,SPR_SCHABB_DEAD,
  152. SPR_HYPO1,SPR_HYPO2,SPR_HYPO3,SPR_HYPO4,
  153. //
  154. // Fake
  155. //
  156. SPR_FAKE_W1,SPR_FAKE_W2,SPR_FAKE_W3,SPR_FAKE_W4,
  157. SPR_FAKE_SHOOT,SPR_FIRE1,SPR_FIRE2,
  158. SPR_FAKE_DIE1,SPR_FAKE_DIE2,SPR_FAKE_DIE3,SPR_FAKE_DIE4,
  159. SPR_FAKE_DIE5,SPR_FAKE_DEAD,
  160. //
  161. // Hitler
  162. //
  163. SPR_MECHA_W1,SPR_MECHA_W2,SPR_MECHA_W3,SPR_MECHA_W4,
  164. SPR_MECHA_SHOOT1,SPR_MECHA_SHOOT2,SPR_MECHA_SHOOT3,SPR_MECHA_DEAD,
  165. SPR_MECHA_DIE1,SPR_MECHA_DIE2,SPR_MECHA_DIE3,
  166. SPR_HITLER_W1,SPR_HITLER_W2,SPR_HITLER_W3,SPR_HITLER_W4,
  167. SPR_HITLER_SHOOT1,SPR_HITLER_SHOOT2,SPR_HITLER_SHOOT3,SPR_HITLER_DEAD,
  168. SPR_HITLER_DIE1,SPR_HITLER_DIE2,SPR_HITLER_DIE3,SPR_HITLER_DIE4,
  169. SPR_HITLER_DIE5,SPR_HITLER_DIE6,SPR_HITLER_DIE7,
  170. //
  171. // Giftmacher
  172. //
  173. SPR_GIFT_W1,SPR_GIFT_W2,SPR_GIFT_W3,SPR_GIFT_W4,
  174. SPR_GIFT_SHOOT1,SPR_GIFT_SHOOT2,
  175. SPR_GIFT_DIE1,SPR_GIFT_DIE2,SPR_GIFT_DIE3,SPR_GIFT_DEAD,
  176. //
  177. // Rocket, smoke and small explosion
  178. //
  179. SPR_ROCKET_1,SPR_ROCKET_2,SPR_ROCKET_3,SPR_ROCKET_4,
  180. SPR_ROCKET_5,SPR_ROCKET_6,SPR_ROCKET_7,SPR_ROCKET_8,
  181. SPR_SMOKE_1,SPR_SMOKE_2,SPR_SMOKE_3,SPR_SMOKE_4,
  182. SPR_BOOM_1,SPR_BOOM_2,SPR_BOOM_3,
  183. //
  184. // Angel of Death's DeathSparks(tm)
  185. //
  186. SPR_HROCKET_1,SPR_HROCKET_2,SPR_HROCKET_3,SPR_HROCKET_4,
  187. SPR_HROCKET_5,SPR_HROCKET_6,SPR_HROCKET_7,SPR_HROCKET_8,
  188. SPR_HSMOKE_1,SPR_HSMOKE_2,SPR_HSMOKE_3,SPR_HSMOKE_4,
  189. SPR_HBOOM_1,SPR_HBOOM_2,SPR_HBOOM_3,
  190. SPR_SPARK1,SPR_SPARK2,SPR_SPARK3,SPR_SPARK4,
  191. //
  192. // Gretel
  193. //
  194. SPR_GRETEL_W1,SPR_GRETEL_W2,SPR_GRETEL_W3,SPR_GRETEL_W4,
  195. SPR_GRETEL_SHOOT1,SPR_GRETEL_SHOOT2,SPR_GRETEL_SHOOT3,SPR_GRETEL_DEAD,
  196. SPR_GRETEL_DIE1,SPR_GRETEL_DIE2,SPR_GRETEL_DIE3,
  197. //
  198. // Fat Face
  199. //
  200. SPR_FAT_W1,SPR_FAT_W2,SPR_FAT_W3,SPR_FAT_W4,
  201. SPR_FAT_SHOOT1,SPR_FAT_SHOOT2,SPR_FAT_SHOOT3,SPR_FAT_SHOOT4,
  202. SPR_FAT_DIE1,SPR_FAT_DIE2,SPR_FAT_DIE3,SPR_FAT_DEAD,
  203. //
  204. // bj
  205. //
  206. SPR_BJ_W1,SPR_BJ_W2,SPR_BJ_W3,SPR_BJ_W4,
  207. SPR_BJ_JUMP1,SPR_BJ_JUMP2,SPR_BJ_JUMP3,SPR_BJ_JUMP4,
  208. //
  209. // SPEAR OF DESTINY
  210. //
  211. //
  212. // Trans Grosse
  213. //
  214. SPR_TRANS_W1,SPR_TRANS_W2,SPR_TRANS_W3,SPR_TRANS_W4,
  215. SPR_TRANS_SHOOT1,SPR_TRANS_SHOOT2,SPR_TRANS_SHOOT3,SPR_TRANS_DEAD,
  216. SPR_TRANS_DIE1,SPR_TRANS_DIE2,SPR_TRANS_DIE3,
  217. //
  218. // Wilhelm
  219. //
  220. SPR_WILL_W1,SPR_WILL_W2,SPR_WILL_W3,SPR_WILL_W4,
  221. SPR_WILL_SHOOT1,SPR_WILL_SHOOT2,SPR_WILL_SHOOT3,SPR_WILL_SHOOT4,
  222. SPR_WILL_DIE1,SPR_WILL_DIE2,SPR_WILL_DIE3,SPR_WILL_DEAD,
  223. //
  224. // UberMutant
  225. //
  226. SPR_UBER_W1,SPR_UBER_W2,SPR_UBER_W3,SPR_UBER_W4,
  227. SPR_UBER_SHOOT1,SPR_UBER_SHOOT2,SPR_UBER_SHOOT3,SPR_UBER_SHOOT4,
  228. SPR_UBER_DIE1,SPR_UBER_DIE2,SPR_UBER_DIE3,SPR_UBER_DIE4,
  229. SPR_UBER_DEAD,
  230. //
  231. // Death Knight
  232. //
  233. SPR_DEATH_W1,SPR_DEATH_W2,SPR_DEATH_W3,SPR_DEATH_W4,
  234. SPR_DEATH_SHOOT1,SPR_DEATH_SHOOT2,SPR_DEATH_SHOOT3,SPR_DEATH_SHOOT4,
  235. SPR_DEATH_DIE1,SPR_DEATH_DIE2,SPR_DEATH_DIE3,SPR_DEATH_DIE4,
  236. SPR_DEATH_DIE5,SPR_DEATH_DIE6,SPR_DEATH_DEAD,
  237. //
  238. // Ghost
  239. //
  240. SPR_SPECTRE_W1,SPR_SPECTRE_W2,SPR_SPECTRE_W3,SPR_SPECTRE_W4,
  241. SPR_SPECTRE_F1,SPR_SPECTRE_F2,SPR_SPECTRE_F3,SPR_SPECTRE_F4,
  242. //
  243. // Angel of Death
  244. //
  245. SPR_ANGEL_W1,SPR_ANGEL_W2,SPR_ANGEL_W3,SPR_ANGEL_W4,
  246. SPR_ANGEL_SHOOT1,SPR_ANGEL_SHOOT2,SPR_ANGEL_TIRED1,SPR_ANGEL_TIRED2,
  247. SPR_ANGEL_DIE1,SPR_ANGEL_DIE2,SPR_ANGEL_DIE3,SPR_ANGEL_DIE4,
  248. SPR_ANGEL_DIE5,SPR_ANGEL_DIE6,SPR_ANGEL_DIE7,SPR_ANGEL_DEAD,
  249. //
  250. // player attack frames
  251. //
  252. SPR_KNIFEREADY,SPR_KNIFEATK1,SPR_KNIFEATK2,SPR_KNIFEATK3,
  253. SPR_KNIFEATK4,
  254. SPR_PISTOLREADY,SPR_PISTOLATK1,SPR_PISTOLATK2,SPR_PISTOLATK3,
  255. SPR_PISTOLATK4,
  256. SPR_MACHINEGUNREADY,SPR_MACHINEGUNATK1,SPR_MACHINEGUNATK2,MACHINEGUNATK3,
  257. SPR_MACHINEGUNATK4,
  258. SPR_CHAINREADY,SPR_CHAINATK1,SPR_CHAINATK2,SPR_CHAINATK3,
  259. SPR_CHAINATK4,
  260. };
  261. #define SPRT_ONE_TEX 1
  262. #define SPRT_NO_ROT 2
  263. #define SPRT_CHG_POS 4
  264. #define SPRT_CHG_TEX 8
  265. #define SPRT_REMOVE 16
  266. typedef struct sprite_s
  267. {
  268. vec3_t position;
  269. int x, y, ang;
  270. // very clever to make it not just (x>>TILESHIFT)
  271. // but also (x>>TILESHIFT)-1 if (x%TILEWIDTH)<HALFTILE
  272. // so we will check only 4 files instead of 9 as Carmack did!
  273. int tilex, tiley;
  274. // controls appearence of this sprite:
  275. // SPRT_ONE_TEX: use one texture for each rotation
  276. // SPRT_NO_ROT: do not rotate sprite (fence)
  277. // SPRT_CHG_POS
  278. // SPRT_CHG_TEX
  279. // SPRT_REMOVE
  280. int flags;
  281. // 8 textures: one for each rotation phase!
  282. // if SPRT_ONE_TEX flag use tex with index 0!
  283. // these are Wolf sprite texture numbers, not OpenGL sprites
  284. // or indexes in the textureManager list
  285. int tex[ 8 ];
  286. } sprite_t;
  287. // total sprites on level in a moment
  288. #define MAX_SPRITES 1024
  289. typedef struct visobj_s
  290. {
  291. int viewx, viewheight; // obsolete, but will do in software rendering!
  292. int dist; // how we will sort them
  293. int x, y; // position in game space! (for OpenGL)
  294. int ang; // for md2 rotation
  295. int tex; // texture to draw (renderer must know what to draw by this number!
  296. } visobj_t;
  297. extern visobj_t vislist[];
  298. extern void Sprite_Reset( void );
  299. extern void Sprite_RemoveSprite( int sprite_id );
  300. extern int Sprite_GetNewSprite( void );
  301. extern void Sprite_SetPos( int sprite_id, int x, int y, int angle );
  302. extern void Sprite_SetTex( int sprite_id, int index, int tex );
  303. extern int Sprite_CreateVisList( void );
  304. #endif /* __WOLF_SPRITES_H__ */