Guest User

20130730_r11991.patch

a guest
Jul 30th, 2013
132
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Index: cl_main.c
  2. ===================================================================
  3. --- cl_main.c   (revision 11991)
  4. +++ cl_main.c   (working copy)
  5. @@ -178,6 +178,13 @@
  6.         VectorSet(cl.playercrouchmins, -16, -16, -24);
  7.         VectorSet(cl.playercrouchmaxs, 16, 16, 25);
  8.     }
  9. +   else if (gamemode == GAME_TRANSFUSION)
  10. +   {
  11. +       VectorSet(cl.playerstandmins, -16, -16, -20);
  12. +       VectorSet(cl.playerstandmaxs, 16, 16, 32);
  13. +       VectorSet(cl.playercrouchmins, -16, -16, -20);
  14. +       VectorSet(cl.playercrouchmaxs, 16, 16, -5);
  15. +   }
  16.     else
  17.     {
  18.         VectorSet(cl.playerstandmins, -16, -16, -24);
  19. Index: common.c
  20. ===================================================================
  21. --- common.c    (revision 11991)
  22. +++ common.c    (working copy)
  23. @@ -1178,6 +1178,8 @@
  24.                     c = '\n';
  25.                 else if (c == 't')
  26.                     c = '\t';
  27. +               else
  28. +                   c = *--data;
  29.             }
  30.             if (len < (int)sizeof(com_token) - 1)
  31.                 com_token[len++] = c;
  32. Index: console.c
  33. ===================================================================
  34. --- console.c   (revision 11991)
  35. +++ console.c   (working copy)
  36. @@ -1680,7 +1680,26 @@
  37.     if (con_notify.integer < 0)
  38.         Cvar_SetValueQuick(&con_notify, 0);
  39.     if (gamemode == GAME_TRANSFUSION)
  40. -       v = 8; // vertical offset
  41. +   {
  42. +       if (cl.gametype == GAME_DEATHMATCH)
  43. +       {
  44. +           int active_players = 0;
  45. +           int i;
  46. +           for (i=0 ; i<cl.maxclients ; i++)
  47. +           {
  48. +               if (cl.scores[i].name[0])
  49. +               {
  50. +                   active_players++;
  51. +               }
  52. +           }
  53. +           if (active_players > 4)
  54. +               v = 48;
  55. +           else
  56. +               v = 24;
  57. +       }
  58. +       else
  59. +           v = 0;
  60. +   }
  61.     else
  62.         v = 0;
  63.  
  64. Index: darkplaces.ico
  65. ===================================================================
  66. Cannot display: file marked as a binary type.
  67. svn:mime-type = image/x-icon
  68. Index: menu.c
  69. ===================================================================
  70. --- menu.c  (revision 11991)
  71. +++ menu.c  (working copy)
  72. @@ -1044,18 +1044,19 @@
  73.  
  74.  static void M_Transfusion_Episode_Draw (void)
  75.  {
  76. -   int y;
  77. +   /*int y;
  78.     cachepic_t *p;
  79. -   char vabuf[1024];
  80. +   char vabuf[1024];*/
  81.     M_Background(640, 480);
  82.  
  83. -   p = Draw_CachePic ("gfx/menu/tb-episodes");
  84. +   M_Print(264, 236, "Coming Soon...");
  85. +   /*p = Draw_CachePic ("gfx/menu/tb-episodes");
  86.     M_DrawPic (640/2 - p->width/2, 40, "gfx/menu/tb-episodes");
  87.     for (y = 0; y < EPISODE_ITEMS; y++){
  88.         M_DrawPic (0, 160 + y * 40, va(vabuf, sizeof(vabuf), "gfx/menu/episode%i", y+1));
  89.     }
  90.  
  91. -   M_DrawPic (0, 120 + (m_episode_cursor + 1) * 40, va(vabuf, sizeof(vabuf), "gfx/menu/episode%iselected", m_episode_cursor + 1));
  92. +   M_DrawPic (0, 120 + (m_episode_cursor + 1) * 40, va("gfx/menu/episode%iselected", m_episode_cursor + 1));*/
  93.  }
  94.  
  95.  static void M_Transfusion_Episode_Key (int key, int ascii)
  96. @@ -1066,7 +1067,7 @@
  97.         M_Menu_Main_f ();
  98.         break;
  99.  
  100. -   case K_DOWNARROW:
  101. +   /*case K_DOWNARROW:
  102.         S_LocalSound ("sound/misc/menu1.wav");
  103.         m_episode_cursor++;
  104.         if (m_episode_cursor >= EPISODE_ITEMS)
  105. @@ -1083,7 +1084,7 @@
  106.     case K_ENTER:
  107.         Cbuf_AddText ("deathmatch 0\n");
  108.         m_entersound = true;
  109. -       M_Menu_Transfusion_Skill_f ();
  110. +       M_Menu_Transfusion_Skill_f ();*/
  111.     }
  112.  }
  113.  
  114. @@ -2373,14 +2374,15 @@
  115.  static const char *transfusionbindnames[][2] =
  116.  {
  117.  {"",               "Movement"},        // Movement commands
  118. -{"+forward",       "walk forward"},
  119. -{"+back",          "backpedal"},
  120. -{"+left",          "turn left"},
  121. -{"+right",             "turn right"},
  122. -{"+moveleft",      "step left"},
  123. -{"+moveright",         "step right"},
  124. -{"+jump",          "jump / swim up"},
  125. -{"+movedown",      "swim down"},
  126. +{"+forward",       "Walk Forward"},
  127. +{"+back",          "Backpedal"},
  128. +{"+left",          "Turn Left"},
  129. +{"+right",             "Turn Right"},
  130. +{"+moveleft",      "Step Left"},
  131. +{"+moveright",         "Step Right"},
  132. +{"+button5",       "Crouch"},
  133. +{"+jump",          "Jump / Swim Up"},
  134. +{"+movedown",      "Swim Down"},
  135.  {"",               "Combat"},          // Combat commands
  136.  {"impulse 1",      "Pitch Fork"},
  137.  {"impulse 2",      "Flare Gun"},
  138. @@ -2394,28 +2396,29 @@
  139.  {"impulse 8",      "Tesla Cannon"},
  140.  {"impulse 9",      "Life Leech"},
  141.  {"impulse 10",     "Voodoo Doll"},
  142. -{"impulse 21",     "next weapon"},
  143. -{"impulse 22",     "previous weapon"},
  144. -{"+attack",        "attack"},
  145. -{"+button3",       "altfire"},
  146. +{"impulse 21",     "Next Weapon"},
  147. +{"impulse 22",     "Previous Weapon"},
  148. +{"+attack",        "Attack"},
  149. +{"+button3",       "Alt-fire"},
  150.  {"",               "Inventory"},       // Inventory commands
  151.  {"impulse 40",     "Dr.'s Bag"},
  152.  {"impulse 41",     "Crystal Ball"},
  153.  {"impulse 42",     "Beast Vision"},
  154.  {"impulse 43",     "Jump Boots"},
  155. -{"impulse 23",     "next item"},
  156. -{"impulse 24",     "previous item"},
  157. -{"impulse 25",     "use item"},
  158. +{"impulse 23",     "Next Item"},
  159. +{"impulse 24",     "Previous Item"},
  160. +{"impulse 25",     "Use Item"},
  161.  {"",               "Misc"},            // Misc commands
  162. -{"+button4",       "use"},
  163. -{"impulse 50",     "add bot (red)"},
  164. -{"impulse 51",     "add bot (blue)"},
  165. -{"impulse 52",     "kick a bot"},
  166. -{"impulse 26",     "next armor type"},
  167. -{"impulse 27",     "identify player"},
  168. -{"impulse 55",     "voting menu"},
  169. -{"impulse 56",     "observer mode"},
  170. -{"",               "Taunts"},            // Taunts
  171. +{"+button4",       "Use"},
  172. +{"impulse 50",     "Add bot (Red)"},
  173. +{"impulse 51",     "Add bot (Blue)"},
  174. +{"impulse 52",     "Kick a bot"},
  175. +//{"impulse 26",       "Next armor type"},
  176. +{"impulse 27",     "Identify Player"},
  177. +{"impulse 55",     "Voting Menu"},
  178. +{"impulse 56",     "Observer Mode"},
  179. +{"impulse 70",     "Taunt"}
  180. +/*{"",             "Taunts"},            // Taunts
  181.  {"impulse 70",     "taunt 0"},
  182.  {"impulse 71",     "taunt 1"},
  183.  {"impulse 72",     "taunt 2"},
  184. @@ -2425,7 +2428,7 @@
  185.  {"impulse 76",     "taunt 6"},
  186.  {"impulse 77",     "taunt 7"},
  187.  {"impulse 78",     "taunt 8"},
  188. -{"impulse 79",     "taunt 9"}
  189. +{"impulse 79",     "taunt 9"}*/
  190.  };
  191.  
  192.  static const char *goodvsbad2bindnames[][2] =
  193. @@ -3155,10 +3158,10 @@
  194.  static void M_Credits_Draw (void)
  195.  {
  196.     M_Background(640, 480);
  197. -   M_DrawPic (0, 0, "gfx/creditsmiddle");
  198. +   M_DrawPic (180, 66, "gfx/menu/tile2573");//middle
  199. +   //draw scroller here
  200.     M_Print (640/2 - 14/2*8, 236, "Coming soon...");
  201. -   M_DrawPic (0, 0, "gfx/creditstop");
  202. -   M_DrawPic (0, 433, "gfx/creditsbottom");
  203. +   M_DrawPic (0, 0, "gfx/menu/tile2574");//outline
  204.  }
  205.  
  206.  
  207. @@ -3423,7 +3426,7 @@
  208.         if (lanConfig_cursor < 0)
  209.             lanConfig_cursor = NUM_LANCONFIG_CMDS-1;
  210.         // when in start game menu, skip the unused search qw servers item
  211. -       if (StartingGame && lanConfig_cursor == 2)
  212. +       if (StartingGame && lanConfig_cursor >= 2)
  213.             lanConfig_cursor = 1;
  214.         break;
  215.  
  216. @@ -3433,8 +3436,8 @@
  217.         if (lanConfig_cursor >= NUM_LANCONFIG_CMDS)
  218.             lanConfig_cursor = 0;
  219.         // when in start game menu, skip the unused search qw servers item
  220. -       if (StartingGame && lanConfig_cursor == 1)
  221. -           lanConfig_cursor = 2;
  222. +       if (StartingGame && lanConfig_cursor >= 2)
  223. +           lanConfig_cursor = 0;
  224.         break;
  225.  
  226.     case K_ENTER:
  227. @@ -3707,6 +3710,35 @@
  228.  // Map list for Transfusion
  229.  static level_t     transfusionlevels[] =
  230.  {
  231. +   {"bb1",         "The Stronghold"},
  232. +   {"bb2",         "Winter Wonderland"},
  233. +   {"bb3",         "Bodies"},
  234. +   {"bb4",         "The Tower"},
  235. +   {"bb5",         "Click!"},
  236. +   {"bb7",         "Midgard"},
  237. +   {"bb8",         "Fun With Heads"},
  238. +   {"bodiesctf",   "Bodies CTF"},
  239. +
  240. +   {"e1m7",        "Altar of Stone"},
  241. +   {"e3m7",        "The Pit of Cerberus"},
  242. +   {"e4m8",        "The Hall of the Epiphany"},
  243. +
  244. +   {"cpbb03",      "Unholy Cathedral"},
  245. +
  246. +   {"b2a15",       "B2 Area 15"},
  247. +   {"b2bodies",    "B2 Bodies"},
  248. +   {"b2cabana",    "B2 Cabana"},
  249. +   {"b2crypt",     "B2 Crypt"},
  250. +   {"b2power",     "B2 Power"},
  251. +
  252. +   {"cabalarena",  "Cabal Arena"},
  253. +   {"fragenstein", "Fragenstein"},
  254. +   {"fragm",       "Frag'm"},
  255. +   {"qmorbias",    "Qmorbias"},
  256. +   {"qe1m7",       "Quake 1 e1m7"},
  257. +   {"highnoon",    "High Noon"}
  258. +
  259. +   /*
  260.     {"e1m1",        "Cradle to Grave"},
  261.     {"e1m2",        "Wrong Side of the Tracks"},
  262.     {"e1m3",        "Phantom Express"},
  263. @@ -3811,10 +3843,18 @@
  264.     {"qdm5",        "The Cistern"},
  265.     {"qmorbias",    "DM-Morbias"},
  266.     {"simple",      "Dead Simple"}
  267. +   */
  268.  };
  269.  
  270.  static episode_t   transfusionepisodes[] =
  271.  {
  272. +   {"BloodBath", 0, 8},
  273. +   {"Blood 1", 8, 3},
  274. +   {"Cryptic Passage", 11, 1},
  275. +   {"Blood 2", 12, 5},
  276. +   {"Custom", 17, 6}
  277. +  
  278. +   /*
  279.     {"The Way of All Flesh", 0, 8},
  280.     {"Even Death May Die", 8, 9},
  281.     {"Farewell to Arms", 17, 8},
  282. @@ -3826,6 +3866,7 @@
  283.     {"Blood 2", 68, 8},
  284.     {"Transfusion", 76, 9},
  285.     {"Conversions", 85, 9}
  286. +   */
  287.  };
  288.  
  289.  static level_t goodvsbad2levels[] =
  290. @@ -3918,7 +3959,7 @@
  291.  static gamelevels_t hipnoticgame = {"Scourge of Armagon", hipnoticlevels, hipnoticepisodes, 6};
  292.  static gamelevels_t roguegame = {"Dissolution of Eternity", roguelevels, rogueepisodes, 4};
  293.  static gamelevels_t nehahragame = {"Nehahra", nehahralevels, nehahraepisodes, 4};
  294. -static gamelevels_t transfusiongame = {"Transfusion", transfusionlevels, transfusionepisodes, 11};
  295. +static gamelevels_t transfusiongame = {"Transfusion", transfusionlevels, transfusionepisodes, 5};
  296.  static gamelevels_t goodvsbad2game = {"Good Vs. Bad 2", goodvsbad2levels, goodvsbad2episodes, 1};
  297.  static gamelevels_t battlemechgame = {"Battlemech", battlemechlevels, battlemechepisodes, 1};
  298.  static gamelevels_t openquartzgame = {"OpenQuartz", openquartzlevels, openquartzepisodes, 3};
  299. Index: prvm_offsets.h
  300. ===================================================================
  301. --- prvm_offsets.h  (revision 11991)
  302. +++ prvm_offsets.h  (working copy)
  303. @@ -398,6 +398,22 @@
  304.  PRVM_DECLARE_field(weaponframe)
  305.  PRVM_DECLARE_field(weaponmodel)
  306.  PRVM_DECLARE_field(yaw_speed)
  307. +PRVM_DECLARE_field(ammo_flare) // Transfusion flare ammo
  308. +PRVM_DECLARE_field(ammo_tnt_bundle) // Transfusion TNT Bundle
  309. +PRVM_DECLARE_field(ammo_tnt_remote) // Transfusion Remote Det TNT
  310. +PRVM_DECLARE_field(ammo_tnt_proxy) // Transfusion Proximity Det TNT
  311. +PRVM_DECLARE_field(ammo_spray) // Transfusion Hairspray Can
  312. +PRVM_DECLARE_field(ammo_leech) // Transfusion Life Leech ammo
  313. +PRVM_DECLARE_field(ammo_voodoo) // Transfusion VooDoo Doll ammo
  314. +PRVM_DECLARE_field(armor_fire) // Transfusion Fire Armor
  315. +PRVM_DECLARE_field(armor_body) // Transfusion Body Armor
  316. +PRVM_DECLARE_field(armor_spirit) // Transfusion Spirit Armor
  317. +PRVM_DECLARE_field(item_boots) // Transfusion Jump Boots
  318. +PRVM_DECLARE_field(item_medkit) // Transfusion Medkit
  319. +PRVM_DECLARE_field(item_beastvision) // Transfusion Beastvision
  320. +PRVM_DECLARE_field(item_crystalball) // Transfusion Crystal Ball
  321. +PRVM_DECLARE_field(item_divingsuit) // Transfusion Diving Suit
  322. +PRVM_DECLARE_field(active_inventory) // Transfusion Active Inventory Item
  323.  PRVM_DECLARE_function(CSQC_ConsoleCommand)
  324.  PRVM_DECLARE_function(CSQC_Ent_Remove)
  325.  PRVM_DECLARE_function(CSQC_Ent_Spawn)
  326. Index: quakedef.h
  327. ===================================================================
  328. --- quakedef.h  (revision 11991)
  329. +++ quakedef.h  (working copy)
  330. @@ -365,7 +365,52 @@
  331.  #define HIT_EMPATHY_SHIELDS (1<<(23+3))
  332.  
  333.  //===========================================
  334. +//Transfusion added defines
  335. +//stats - items requring a full int value
  336. +//the HUD can show almost all values at once, requiring more stats than just y/n items
  337. +#define    TFN_AMMO_FLARE          30
  338. +#define    TFN_AMMO_SHELLS         6
  339. +#define    TFN_AMMO_BULLETS        7
  340. +#define    TFN_AMMO_NAPALM         8
  341. +#define    TFN_AMMO_TNT_BUNDLE     31
  342. +#define    TFN_AMMO_TNT_REMOTE     32
  343. +#define    TFN_AMMO_TNT_PROXY      33
  344. +#define    TFN_AMMO_SPRAY          34
  345. +#define    TFN_AMMO_TESLA          9
  346. +#define    TFN_AMMO_LEECH          35
  347. +#define    TFN_AMMO_VOODOO         36
  348. +#define TFN_ITEM_MEDKIT            37
  349. +#define TFN_ITEM_DIVINGSUIT        38
  350. +#define TFN_ITEM_CRYSTALBALL   39
  351. +#define TFN_ITEM_BEASTVISION   40
  352. +#define TFN_ITEM_BOOTS         41
  353. +#define    TFN_ARMOR_FIRE          42
  354. +#define    TFN_ARMOR_BODY          43
  355. +#define TFN_ARMOR_SPIRIT       44
  356. +#define TFN_ACTIVE_INVENTORY   45
  357.  
  358. +//items - yes/no items
  359. +#define TFN_WEAPON_PITCHFORK   1
  360. +#define TFN_WEAPON_FLARE       2
  361. +#define TFN_WEAPON_SHOTGUN     4
  362. +#define TFN_WEAPON_TOMMYGUN        8
  363. +#define TFN_WEAPON_NAPALM      16
  364. +#define TFN_WEAPON_TNT_BUNDLE  32
  365. +#define TFN_WEAPON_TNT_PROXY   64
  366. +#define TFN_WEAPON_TNT_REMOTE  128
  367. +#define TFN_WEAPON_HAIRSPRAY   256
  368. +#define TFN_WEAPON_TESLA       512
  369. +#define TFN_WEAPON_LIFELEECH   1024
  370. +#define TFN_WEAPON_VOODOO      2048
  371. +#define TFN_KEY_SKULL          (1<<23)
  372. +#define TFN_KEY_EYE                (1<<24)
  373. +#define TFN_KEY_FIRE           (1<<25)
  374. +#define TFN_KEY_DAGGER         (1<<26)
  375. +#define TFN_KEY_SPIDER         (1<<27)
  376. +#define TFN_KEY_MOON           (1<<28)
  377. +#define TFN_DEATHMASK          262144
  378. +//===========================================
  379. +
  380.  #include "zone.h"
  381.  #include "fs.h"
  382.  #include "common.h"
  383. Index: sbar.c
  384. ===================================================================
  385. --- sbar.c  (revision 11991)
  386. +++ sbar.c  (working copy)
  387. @@ -36,6 +36,14 @@
  388.  cachepic_t *sb_sbar_minimal;
  389.  cachepic_t *sb_sbar_overlay;
  390.  
  391. +// only used by TFn
  392. +cachepic_t *sb_sbar_min_left;
  393. +cachepic_t *sb_sbar_min_right;
  394. +cachepic_t *sb_scoreboard;
  395. +cachepic_t *sb_tfhudnums[6][11];
  396. +cachepic_t *sb_keys[2][6];
  397. +cachepic_t *sb_inventory[5];
  398. +
  399.  // AK changed the bound to 9
  400.  cachepic_t *sb_weapons[7][9]; // 0 is active, 1 is owned, 2-5 are flashes
  401.  cachepic_t *sb_ammo[4];
  402. @@ -206,6 +214,42 @@
  403.         zymsb_crosshair_left2 = Draw_CachePic_Flags ("gfx/hud/crosshair_left2", CACHEPICFLAG_QUIET);
  404.         zymsb_crosshair_right = Draw_CachePic_Flags ("gfx/hud/crosshair_right", CACHEPICFLAG_QUIET);
  405.     }
  406. +   else if (gamemode == GAME_TRANSFUSION)
  407. +   {
  408. +       for (i = 0;i < 10;i++)
  409. +       {
  410. +           sb_tfhudnums[0][i] = Draw_CachePic_Flags (va(vabuf, sizeof(vabuf), "gfx/hud/num_sm_dblue/hn_b2-%i",i), CACHEPICFLAG_QUIET); //small dark blue
  411. +           sb_tfhudnums[1][i] = Draw_CachePic_Flags (va(vabuf, sizeof(vabuf), "gfx/hud/num_sm_lblue/hn_b1-%i",i), CACHEPICFLAG_QUIET); //small light blue
  412. +           sb_tfhudnums[2][i] = Draw_CachePic_Flags (va(vabuf, sizeof(vabuf), "gfx/hud/num_sm_gray/hn_a-%i",i), CACHEPICFLAG_QUIET); //small white/gray
  413. +           sb_tfhudnums[3][i] = Draw_CachePic_Flags (va(vabuf, sizeof(vabuf), "gfx/hud/num_med_red/tile225%i",i), CACHEPICFLAG_QUIET); //medium red
  414. +           sb_tfhudnums[4][i] = Draw_CachePic_Flags (va(vabuf, sizeof(vabuf), "gfx/hud/num_lg_blue/tile224%i",i), CACHEPICFLAG_QUIET); //large blue
  415. +           sb_tfhudnums[5][i] = Draw_CachePic_Flags (va(vabuf, sizeof(vabuf), "gfx/hud/num_lg_red/tile219%i",i), CACHEPICFLAG_QUIET); //large red
  416. +       }
  417. +       sb_sbar = Draw_CachePic_Flags("gfx/hud/tile2200", CACHEPICFLAG_QUIET);
  418. +       sb_sbar_min_left = Draw_CachePic_Flags("gfx/hud/tile2201", CACHEPICFLAG_QUIET);
  419. +       sb_sbar_min_right = Draw_CachePic_Flags("gfx/hud/tile2173", CACHEPICFLAG_QUIET);
  420. +       sb_scoreboard = Draw_CachePic_Flags("gfx/hud/scoreboard", CACHEPICFLAG_QUIET);
  421. +       sb_keys[0][0] = Draw_CachePic_Flags("gfx/hud/keys/tile2220-g", CACHEPICFLAG_QUIET); //skull
  422. +       sb_keys[0][1] = Draw_CachePic_Flags("gfx/hud/keys/tile2221-g", CACHEPICFLAG_QUIET); //eye
  423. +       sb_keys[0][2] = Draw_CachePic_Flags("gfx/hud/keys/tile2222-g", CACHEPICFLAG_QUIET); //fire
  424. +       sb_keys[0][3] = Draw_CachePic_Flags("gfx/hud/keys/tile2223-g", CACHEPICFLAG_QUIET); //dagger
  425. +       sb_keys[0][4] = Draw_CachePic_Flags("gfx/hud/keys/tile2224-g", CACHEPICFLAG_QUIET); //spider
  426. +       sb_keys[0][5] = Draw_CachePic_Flags("gfx/hud/keys/tile2225-g", CACHEPICFLAG_QUIET); //moon
  427. +       sb_keys[1][0] = Draw_CachePic_Flags("gfx/hud/keys/tile2220", CACHEPICFLAG_QUIET);
  428. +       sb_keys[1][1] = Draw_CachePic_Flags("gfx/hud/keys/tile2221", CACHEPICFLAG_QUIET);
  429. +       sb_keys[1][2] = Draw_CachePic_Flags("gfx/hud/keys/tile2222", CACHEPICFLAG_QUIET);
  430. +       sb_keys[1][3] = Draw_CachePic_Flags("gfx/hud/keys/tile2223", CACHEPICFLAG_QUIET);
  431. +       sb_keys[1][4] = Draw_CachePic_Flags("gfx/hud/keys/tile2224", CACHEPICFLAG_QUIET);
  432. +       sb_keys[1][5] = Draw_CachePic_Flags("gfx/hud/keys/tile2225", CACHEPICFLAG_QUIET);
  433. +       sb_armor[0] = Draw_CachePic_Flags("gfx/hud/armorbars/tile2207", CACHEPICFLAG_QUIET);
  434. +       sb_armor[1] = Draw_CachePic_Flags("gfx/hud/armorbars/tile2209", CACHEPICFLAG_QUIET);
  435. +       sb_armor[2] = Draw_CachePic_Flags("gfx/hud/armorbars/tile2208", CACHEPICFLAG_QUIET);
  436. +       sb_inventory[0] = Draw_CachePic_Flags("gfx/hud/inventory/tile2569", CACHEPICFLAG_QUIET); //medkit
  437. +       sb_inventory[1] = Draw_CachePic_Flags("gfx/hud/inventory/tile2564", CACHEPICFLAG_QUIET); //diving suit
  438. +       sb_inventory[2] = Draw_CachePic_Flags("gfx/hud/inventory/tile2566", CACHEPICFLAG_QUIET); //crystal ball
  439. +       sb_inventory[3] = Draw_CachePic_Flags("gfx/hud/inventory/tile2568", CACHEPICFLAG_QUIET); //beast vision
  440. +       sb_inventory[4] = Draw_CachePic_Flags("gfx/hud/inventory/tile2560", CACHEPICFLAG_QUIET); //jump boots
  441. +   }
  442.     else
  443.     {
  444.         sb_disc = Draw_CachePic_Flags ("gfx/disc", CACHEPICFLAG_QUIET);
  445. @@ -448,14 +492,27 @@
  446.  static void Sbar_DrawNum (int x, int y, int num, int digits, int color)
  447.  {
  448.     char str[32], *ptr;
  449. -   int l, frame;
  450. +   int l, frame, x_length;
  451.  
  452. +   if (gamemode == GAME_TRANSFUSION)
  453. +   {
  454. +       if (num == 0 && color == 2 )
  455. +           return;
  456. +       if (color > 3) //health and large ammo
  457. +           x_length = 18;
  458. +       else if (color > 2) //smaller red is a medium font
  459. +           x_length = 10;
  460. +       else //small fonts, small ammo, armor
  461. +           x_length = 8;
  462. +   }
  463. +   else
  464. +       x_length = 24;
  465.     l = dpsnprintf(str, sizeof(str), "%i", num);
  466.     ptr = str;
  467.     if (l > digits)
  468.         ptr += (l-digits);
  469.     if (l < digits)
  470. -       x += (digits-l)*24;
  471. +       x += (digits-l)*x_length;
  472.  
  473.     while (*ptr)
  474.     {
  475. @@ -464,9 +521,15 @@
  476.         else
  477.             frame = *ptr -'0';
  478.  
  479. -       Sbar_DrawPic (x, y, sb_nums[color][frame]);
  480. -       x += 24;
  481. -
  482. +       if (gamemode == GAME_TRANSFUSION)
  483. +       {
  484. +           if (!(color == 4 && !num))
  485. +               Sbar_DrawPic (x, y, sb_tfhudnums[color][frame]);
  486. +       }
  487. +       else
  488. +           Sbar_DrawPic (x, y, sb_nums[color][frame]);
  489. +       x += x_length;
  490. +      
  491.         ptr++;
  492.     }
  493.  }
  494. @@ -1214,7 +1277,11 @@
  495.         fps_scaley = 12;
  496.         //fps_y = vid_conheight.integer - sb_lines; // yes this may draw over the sbar
  497.         //fps_y = bound(0, fps_y, vid_conheight.integer - fps_strings*fps_scaley);
  498. -       fps_y = vid_conheight.integer - sbar_info_pos.integer - fps_strings*fps_scaley;
  499. +       if (gamemode == GAME_TRANSFUSION)
  500. +           fps_y = 0;
  501. +       else
  502. +           fps_y = vid_conheight.integer - sbar_info_pos.integer - fps_strings*fps_scaley;
  503. +
  504.         if (soundstring[0])
  505.         {
  506.             fps_x = vid_conwidth.integer - DrawQ_TextWidth(soundstring, 0, fps_scalex, fps_scaley, true, FONT_INFOBAR);
  507. @@ -1609,6 +1676,92 @@
  508.             DrawQ_Pic(sbar_x + 120 * scale, sbar_y + 120 * scale, zymsb_crosshair_center, 16 * scale, 16 * scale, 1, 1, 1, 1, DRAWFLAG_NORMAL);
  509.  #endif
  510.         }
  511. +       else if (gamemode == GAME_TRANSFUSION)
  512. +       {
  513. +           if (sb_showscores || (cl.stats[STAT_HEALTH] <= 0 && cl_deathscoreboard.integer))
  514. +               Sbar_DrawScoreboard ();
  515. +
  516. +           //if deathmatch, draw scoreboard
  517. +           if (cl.gametype == GAME_DEATHMATCH)
  518. +           {
  519. +               Sbar_DrawAlphaPic(0,0,sb_scoreboard, sbar_alpha_bg.value);
  520. +               if (scoreboardlines > 4)
  521. +                   Sbar_DrawAlphaPic(0,22,sb_scoreboard, sbar_alpha_bg.value);
  522. +               Sbar_MiniDeathmatchOverlay (8, 6);
  523. +           }
  524. +
  525. +           if (sb_lines > 24) //Large HUD
  526. +           {
  527. +               // sbar
  528. +               Sbar_DrawAlphaPic ((vid_conwidth.integer/2 - 320), (vid_conheight.integer - 113), sb_sbar, sbar_alpha_bg.value);
  529. +               // keys
  530. +               Sbar_DrawPic ((vid_conwidth.integer/2 - 183), (vid_conheight.integer - 67), cl.stats[STAT_ITEMS] & TFN_KEY_SKULL ? sb_keys[1][0] : sb_keys[0][0]);
  531. +               Sbar_DrawPic ((vid_conwidth.integer/2 + 163), (vid_conheight.integer - 67), cl.stats[STAT_ITEMS] & TFN_KEY_EYE ? sb_keys[1][1] : sb_keys[0][1]);
  532. +               Sbar_DrawPic ((vid_conwidth.integer/2 - 183), (vid_conheight.integer - 45), cl.stats[STAT_ITEMS] & TFN_KEY_FIRE ? sb_keys[1][2] : sb_keys[0][2]);
  533. +               Sbar_DrawPic ((vid_conwidth.integer/2 + 163), (vid_conheight.integer - 45), cl.stats[STAT_ITEMS] & TFN_KEY_DAGGER ? sb_keys[1][3] : sb_keys[0][3]);
  534. +               Sbar_DrawPic ((vid_conwidth.integer/2 - 183), (vid_conheight.integer - 23), cl.stats[STAT_ITEMS] & TFN_KEY_SPIDER ? sb_keys[1][4] : sb_keys[0][4]);
  535. +               Sbar_DrawPic ((vid_conwidth.integer/2 + 163), (vid_conheight.integer - 23), cl.stats[STAT_ITEMS] & TFN_KEY_MOON ? sb_keys[1][5] : sb_keys[0][5]);
  536. +               // health
  537. +               Sbar_DrawNum ((vid_conwidth.integer/2 - 157), (vid_conheight.integer - 45), cl.stats[STAT_HEALTH], 3, 5);
  538. +               // armor
  539. +               if (cl.stats[TFN_ARMOR_FIRE] >= 5)
  540. +                   DrawQ_Pic((vid_conwidth.integer/2 - 233), (vid_conheight.integer - 51), sb_armor[0] , (cl.stats[TFN_ARMOR_FIRE] / 5 + 2), 14, 1, 1, 1, sbar_alpha_fg.value, 0);
  541. +               if (cl.stats[TFN_ARMOR_BODY] >= 5)
  542. +                   DrawQ_Pic((vid_conwidth.integer/2 - 233), (vid_conheight.integer - 35), sb_armor[1], (cl.stats[TFN_ARMOR_BODY] / 5 + 2), 14, 1, 1, 1, sbar_alpha_fg.value, 0);
  543. +               if (cl.stats[TFN_ARMOR_SPIRIT] >= 5)
  544. +                   DrawQ_Pic((vid_conwidth.integer/2 - 233), (vid_conheight.integer - 19), sb_armor[2], (cl.stats[TFN_ARMOR_SPIRIT] / 5 + 2), 14, 1, 1, 1, sbar_alpha_fg.value, 0);
  545. +               Sbar_DrawNum ((vid_conwidth.integer/2 - 225), (vid_conheight.integer - 51), cl.stats[TFN_ARMOR_FIRE], 3, 2);
  546. +               Sbar_DrawNum ((vid_conwidth.integer/2 - 225), (vid_conheight.integer - 35), cl.stats[TFN_ARMOR_BODY], 3, 2);
  547. +               Sbar_DrawNum ((vid_conwidth.integer/2 - 225), (vid_conheight.integer - 19), cl.stats[TFN_ARMOR_SPIRIT], 3, 2);
  548. +               // ammo_big - only thing thats hidden when you're dead
  549. +               if (cl.stats[STAT_HEALTH])
  550. +                   Sbar_DrawNum ((vid_conwidth.integer/2 + 103), (vid_conheight.integer - 45), cl.stats[STAT_AMMO], 3, 4);
  551. +               // inventory
  552. +               if (!(cl.stats[TFN_ACTIVE_INVENTORY] == 0 && cl.stats[TFN_ITEM_MEDKIT] == 0))
  553. +               {
  554. +                   Sbar_DrawNum ((vid_conwidth.integer - 125), (vid_conheight.integer - 62), cl.stats[TFN_ITEM_MEDKIT + cl.stats[TFN_ACTIVE_INVENTORY]], 3, 3);
  555. +                   Sbar_DrawPic ((vid_conwidth.integer - 129), (vid_conheight.integer - 47), sb_inventory[cl.stats[TFN_ACTIVE_INVENTORY]]);
  556. +               }
  557. +
  558. +               // ammo counts
  559. +               Sbar_DrawNum ((vid_conwidth.integer/2 - 55), (vid_conheight.integer - 41), cl.stats[TFN_AMMO_FLARE], 3, cl.stats[STAT_ACTIVEWEAPON] == TFN_WEAPON_FLARE ? 1:0);
  560. +               Sbar_DrawNum ((vid_conwidth.integer/2 - 55), (vid_conheight.integer - 29), cl.stats[TFN_AMMO_SHELLS], 3, cl.stats[STAT_ACTIVEWEAPON] == TFN_WEAPON_SHOTGUN ? 1:0);
  561. +               Sbar_DrawNum ((vid_conwidth.integer/2 - 55), (vid_conheight.integer - 17), cl.stats[TFN_AMMO_BULLETS], 3, cl.stats[STAT_ACTIVEWEAPON] == TFN_WEAPON_TOMMYGUN ? 1:0);
  562. +               Sbar_DrawNum ((vid_conwidth.integer/2 - 9), (vid_conheight.integer - 41), cl.stats[TFN_AMMO_NAPALM], 3, cl.stats[STAT_ACTIVEWEAPON] == TFN_WEAPON_NAPALM ? 1:0);
  563. +               Sbar_DrawNum ((vid_conwidth.integer/2 - 9), (vid_conheight.integer - 29), cl.stats[TFN_AMMO_TNT_BUNDLE], 3, cl.stats[STAT_ACTIVEWEAPON] == TFN_WEAPON_TNT_BUNDLE ? 1:0);
  564. +               Sbar_DrawNum ((vid_conwidth.integer/2 + 250), (vid_conheight.integer - 17), cl.stats[TFN_AMMO_TNT_PROXY], 3, cl.stats[STAT_ACTIVEWEAPON] == TFN_WEAPON_TNT_PROXY ? 1:0);
  565. +               Sbar_DrawNum ((vid_conwidth.integer/2 + 285), (vid_conheight.integer - 17), cl.stats[TFN_AMMO_TNT_REMOTE], 3, cl.stats[STAT_ACTIVEWEAPON] == TFN_WEAPON_TNT_REMOTE ? 1:0);
  566. +               Sbar_DrawNum ((vid_conwidth.integer/2 - 9), (vid_conheight.integer - 17), cl.stats[TFN_AMMO_SPRAY], 3, cl.stats[STAT_ACTIVEWEAPON] == TFN_WEAPON_HAIRSPRAY ? 1:0);
  567. +               Sbar_DrawNum ((vid_conwidth.integer/2 + 37), (vid_conheight.integer - 41), cl.stats[TFN_AMMO_TESLA], 3, cl.stats[STAT_ACTIVEWEAPON] == TFN_WEAPON_TESLA ? 1:0);
  568. +               Sbar_DrawNum ((vid_conwidth.integer/2 + 37), (vid_conheight.integer - 29), cl.stats[TFN_AMMO_LEECH], 3, cl.stats[STAT_ACTIVEWEAPON] == TFN_WEAPON_LIFELEECH ? 1:0);
  569. +               Sbar_DrawNum ((vid_conwidth.integer/2 + 37), (vid_conheight.integer - 17), cl.stats[TFN_AMMO_VOODOO], 3, cl.stats[STAT_ACTIVEWEAPON] == TFN_WEAPON_VOODOO ? 1:0);
  570. +           }
  571. +           else if (sb_lines <= 24 && sb_lines) //Minimized HUD, !sb_lines = completely blank, no HUD
  572. +           {
  573. +               Sbar_DrawAlphaPic (0, (vid_conheight.integer - 52), sb_sbar_min_left, sbar_alpha_bg.value);
  574. +               Sbar_DrawAlphaPic ((vid_conwidth.integer - 145), (vid_conheight.integer - 51), sb_sbar_min_right,sbar_alpha_bg.value);
  575. +               // health
  576. +               Sbar_DrawNum (7, (vid_conheight.integer - 45), cl.stats[STAT_HEALTH], 3, 5);
  577. +               // ammo_big
  578. +               Sbar_DrawNum (75, (vid_conheight.integer - 45), cl.stats[STAT_AMMO], 3, 4);
  579. +               //armor
  580. +               if (cl.stats[TFN_ARMOR_FIRE] >= 5)
  581. +                   DrawQ_Pic((vid_conwidth.integer/2 + 178), (vid_conheight.integer - 48), sb_armor[0], (cl.stats[TFN_ARMOR_FIRE] / 5 + 2), 14, 1, 1, 1, sbar_alpha_fg.value, 0);
  582. +               if (cl.stats[TFN_ARMOR_BODY] >= 5)
  583. +                   DrawQ_Pic((vid_conwidth.integer/2 + 178), (vid_conheight.integer - 32), sb_armor[1], (cl.stats[TFN_ARMOR_BODY] / 5 + 2), 14, 1, 1, 1, sbar_alpha_fg.value, 0);
  584. +               if (cl.stats[TFN_ARMOR_SPIRIT] >= 5)
  585. +                   DrawQ_Pic((vid_conwidth.integer/2 + 178), (vid_conheight.integer - 16), sb_armor[2], (cl.stats[TFN_ARMOR_SPIRIT] / 5 + 2), 14, 1, 1, 1, sbar_alpha_fg.value, 0);
  586. +               Sbar_DrawNum ((vid_conwidth.integer/2 + 186), (vid_conheight.integer - 48), cl.stats[TFN_ARMOR_FIRE], 3, 2);
  587. +               Sbar_DrawNum ((vid_conwidth.integer/2 + 186), (vid_conheight.integer - 32), cl.stats[TFN_ARMOR_BODY], 3, 2);
  588. +               Sbar_DrawNum ((vid_conwidth.integer/2 + 186), (vid_conheight.integer - 16), cl.stats[TFN_ARMOR_SPIRIT], 3, 2);
  589. +               // inventory
  590. +               if (!(cl.stats[TFN_ACTIVE_INVENTORY] == 0 && cl.stats[TFN_ITEM_MEDKIT] == 0))
  591. +               {
  592. +                   Sbar_DrawNum ((vid_conwidth.integer - 40), (vid_conheight.integer - 40), cl.stats[TFN_ITEM_MEDKIT + cl.stats[TFN_ACTIVE_INVENTORY]], 3, 3);
  593. +                   Sbar_DrawPic ((vid_conwidth.integer - 88), (vid_conheight.integer - 45), sb_inventory[cl.stats[TFN_ACTIVE_INVENTORY]]);
  594. +               }
  595. +           }
  596. +       }
  597.         else // Quake and others
  598.         {
  599.             sbar_x = (vid_conwidth.integer - 320)/2;
  600. @@ -1797,6 +1950,17 @@
  601.             else
  602.                 DrawQ_String(x, y, va(vabuf, sizeof(vabuf), "         spect %c%s", myself ? 13 : ' ', s->name), 0, 8, 8, 1, 1, 1, 1 * sbar_alpha_fg.value, 0, NULL, false, FONT_SBAR );
  603.         }
  604. +       else if (gamemode == GAME_TRANSFUSION)
  605. +       {
  606. +           // draw colors behind score
  607. +           c = palette_rgb_pantsscoreboard[(s->colors & 0xf0) >> 4];
  608. +           DrawQ_Fill(x, y+1, 40*FONT_SBAR->width_of[0], 3, c[0] * (1.0f / 255.0f), c[1] * (1.0f / 255.0f), c[2] * (1.0f / 255.0f), sbar_alpha_fg.value, 0);
  609. +           c = palette_rgb_shirtscoreboard[s->colors & 0xf];
  610. +           DrawQ_Fill(x, y+4, 40*FONT_SBAR->width_of[0], 3, c[0] * (1.0f / 255.0f), c[1] * (1.0f / 255.0f), c[2] * (1.0f / 255.0f), sbar_alpha_fg.value, 0);
  611. +           // print the text
  612. +           //DrawQ_String(x, y, va("%c%4i %s", myself ? 13 : ' ', (int) s->frags, s->name), 0, 8, 8, 1, 1, 1, 1 * sbar_alpha_fg.value, 0, NULL, true);
  613. +           DrawQ_String(x, y, va(vabuf, sizeof(vabuf), "%5i %c%s", (int) s->frags, myself ? 13 : ' ', s->name), 0, 8, 8, 1, 1, 1, 1 * sbar_alpha_fg.value, 0, NULL, false, FONT_SBAR );
  614. +       }
  615.         else
  616.         {
  617.             // draw colors behind score
  618. @@ -1873,15 +2037,20 @@
  619.     DrawQ_Pic ((vid_conwidth.integer - sb_ranking->width)/2, 8, sb_ranking, 0, 0, 1, 1, 1, 1 * sbar_alpha_fg.value, 0);
  620.  
  621.     // draw the text
  622. -   y = 40;
  623. +
  624. +   if (gamemode == GAME_TRANSFUSION)
  625. +       y = 82;
  626. +   else
  627. +       y = 40;
  628.     if (cls.protocol == PROTOCOL_QUAKEWORLD)
  629.     {
  630.         DrawQ_String(xmin, y, va(vabuf, sizeof(vabuf), "ping pl%% time frags team  name"), 0, 8, 8, 1, 1, 1, 1 * sbar_alpha_fg.value, 0, NULL, false, FONT_SBAR );
  631.     }
  632. +   else if (gamemode == GAME_TRANSFUSION)
  633. +       DrawQ_String(xmin, y, va(vabuf, sizeof(vabuf), "frags  name"), 0, 8, 8, 1, 1, 1, 1 * sbar_alpha_fg.value, 0, NULL, false, FONT_SBAR );
  634.     else
  635. -   {
  636.         DrawQ_String(xmin, y, va(vabuf, sizeof(vabuf), "ping pl%% frags  name"), 0, 8, 8, 1, 1, 1, 1 * sbar_alpha_fg.value, 0, NULL, false, FONT_SBAR );
  637. -   }
  638. +
  639.     y += 8;
  640.  
  641.     if (Sbar_IsTeammatch ())
  642. @@ -1964,6 +2133,37 @@
  643.  
  644.     if (gamemode == GAME_TRANSFUSION)
  645.     {
  646. +       // decide where to print
  647. +       numlines = 8;
  648. +      
  649. +       // give up if there isn't room
  650. +       if (numlines < 1)
  651. +           return;
  652. +      
  653. +       // scores
  654. +       Sbar_SortFrags ();
  655. +      
  656. +       //find us
  657. +       for (i = 0; i < scoreboardlines; i++)
  658. +           if (fragsort[i] == cl.playerentity - 1)
  659. +               break;
  660. +          
  661. +       // figure out start
  662. +       i -= numlines/2;
  663. +       i = min(i, scoreboardlines - numlines);
  664. +       i = max(i, 0);
  665. +      
  666. +       for (;i < scoreboardlines ;i++)
  667. +       {
  668. +           if (x >= 600)
  669. +           {
  670. +               x = 8;
  671. +               y += 22;
  672. +               if (y > 40)
  673. +                   return;
  674. +           }
  675. +           x += 152 + Sbar_PrintScoreboardItem(cl.scores + fragsort[i], x, y);
  676. +       }
  677.         for (;i < range_end && x < vid_conwidth.integer;i++)
  678.             x += 128 + (int)Sbar_PrintScoreboardItem(cl.scores + fragsort[i], x, y);
  679.     }
  680. Index: sv_main.c
  681. ===================================================================
  682. --- sv_main.c   (revision 11991)
  683. +++ sv_main.c   (working copy)
  684. @@ -2062,6 +2062,31 @@
  685.     stats[STAT_ROCKETS] = (int)PRVM_serveredictfloat(ent, ammo_rockets);
  686.     stats[STAT_CELLS] = (int)PRVM_serveredictfloat(ent, ammo_cells);
  687.     stats[STAT_ACTIVEWEAPON] = (int)PRVM_serveredictfloat(ent, weapon);
  688. +
  689. +   if (gamemode == GAME_TRANSFUSION)
  690. +   {
  691. +       stats[TFN_AMMO_FLARE] = (int)PRVM_EDICTFIELDFLOAT(ent, prog->fieldoffsets.ammo_flare);
  692. +       //stats[TFN_AMMO_SHELLS] =  // Done by Quake already
  693. +       //stats[TFN_AMMO_BULLETS] = // Done by Quake already
  694. +       //stats[TFN_AMMO_NAPALM] =  // Done by Quake already
  695. +       stats[TFN_AMMO_TNT_BUNDLE] = (int)PRVM_EDICTFIELDFLOAT(ent, prog->fieldoffsets.ammo_tnt_bundle);
  696. +       stats[TFN_AMMO_TNT_REMOTE] = (int)PRVM_EDICTFIELDFLOAT(ent, prog->fieldoffsets.ammo_tnt_remote);
  697. +       stats[TFN_AMMO_TNT_PROXY] = (int)PRVM_EDICTFIELDFLOAT(ent, prog->fieldoffsets.ammo_tnt_proxy);
  698. +       stats[TFN_AMMO_SPRAY] = (int)PRVM_EDICTFIELDFLOAT(ent, prog->fieldoffsets.ammo_spray);
  699. +       //stats[TFN_AMMO_TESLA] =  // Done by Quake already
  700. +       stats[TFN_AMMO_LEECH] = (int)PRVM_EDICTFIELDFLOAT(ent, prog->fieldoffsets.ammo_leech);
  701. +       stats[TFN_AMMO_VOODOO] = (int)PRVM_EDICTFIELDFLOAT(ent, prog->fieldoffsets.ammo_voodoo);
  702. +       stats[TFN_ARMOR_FIRE] = (int)PRVM_EDICTFIELDFLOAT(ent, prog->fieldoffsets.armor_fire);
  703. +       stats[TFN_ARMOR_BODY] = (int)PRVM_EDICTFIELDFLOAT(ent, prog->fieldoffsets.armor_body);
  704. +       stats[TFN_ARMOR_SPIRIT] = (int)PRVM_EDICTFIELDFLOAT(ent, prog->fieldoffsets.armor_spirit);
  705. +       stats[TFN_ITEM_BOOTS] = (int)PRVM_EDICTFIELDFLOAT(ent, prog->fieldoffsets.item_boots);
  706. +       stats[TFN_ITEM_MEDKIT] = (int)PRVM_EDICTFIELDFLOAT(ent, prog->fieldoffsets.item_medkit);
  707. +       stats[TFN_ITEM_BEASTVISION] = (int)PRVM_EDICTFIELDFLOAT(ent, prog->fieldoffsets.item_beastvision);
  708. +       stats[TFN_ITEM_CRYSTALBALL] = (int)PRVM_EDICTFIELDFLOAT(ent, prog->fieldoffsets.item_crystalball);
  709. +       stats[TFN_ITEM_DIVINGSUIT] = (int)PRVM_EDICTFIELDFLOAT(ent, prog->fieldoffsets.item_divingsuit);
  710. +       stats[TFN_ACTIVE_INVENTORY] = (int)PRVM_EDICTFIELDFLOAT(ent, prog->fieldoffsets.active_inventory);
  711. +   }
  712. +
  713.     stats[STAT_VIEWZOOM] = viewzoom;
  714.     stats[STAT_TOTALSECRETS] = (int)PRVM_serverglobalfloat(total_secrets);
  715.     stats[STAT_TOTALMONSTERS] = (int)PRVM_serverglobalfloat(total_monsters);
RAW Paste Data