|
|
1.1.1.3 ! root 1: /* ! 2: Copyright (C) 1997-2001 Id Software, Inc. ! 3: ! 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: ! 9: This program is distributed in the hope that it will be useful, ! 10: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 11: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! 12: ! 13: See the GNU General Public License for more details. ! 14: ! 15: You should have received a copy of the GNU General Public License ! 16: along with this program; if not, write to the Free Software ! 17: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ! 18: ! 19: */ 1.1 root 20: // cl_inv.c -- client inventory screen 21: 22: #include "client.h" 23: 24: /* 25: ================ 26: CL_ParseInventory 27: ================ 28: */ 29: void CL_ParseInventory (void) 30: { 31: int i; 32: 33: for (i=0 ; i<MAX_ITEMS ; i++) 34: cl.inventory[i] = MSG_ReadShort (&net_message); 35: } 36: 37: 38: /* 39: ================ 40: Inv_DrawString 41: ================ 42: */ 43: void Inv_DrawString (int x, int y, char *string) 44: { 45: while (*string) 46: { 47: re.DrawChar (x, y, *string); 48: x+=8; 49: string++; 50: } 51: } 52: 53: void SetStringHighBit (char *s) 54: { 55: while (*s) 56: *s++ |= 128; 57: } 58: 59: /* 60: ================ 61: CL_DrawInventory 62: ================ 63: */ 64: #define DISPLAY_ITEMS 17 65: 66: void CL_DrawInventory (void) 67: { 68: int i, j; 69: int num, selected_num, item; 70: int index[MAX_ITEMS]; 71: char string[1024]; 72: int x, y; 73: char binding[1024]; 74: char *bind; 75: int selected; 76: int top; 77: 78: selected = cl.frame.playerstate.stats[STAT_SELECTED_ITEM]; 79: 80: num = 0; 81: selected_num = 0; 82: for (i=0 ; i<MAX_ITEMS ; i++) 83: { 84: if (i==selected) 85: selected_num = num; 86: if (cl.inventory[i]) 87: { 88: index[num] = i; 89: num++; 90: } 91: } 92: 93: // determine scroll point 94: top = selected_num - DISPLAY_ITEMS/2; 95: if (num - top < DISPLAY_ITEMS) 96: top = num - DISPLAY_ITEMS; 97: if (top < 0) 98: top = 0; 99: 100: x = (viddef.width-256)/2; 101: y = (viddef.height-240)/2; 102: 103: // repaint everything next frame 104: SCR_DirtyScreen (); 105: 106: re.DrawPic (x, y+8, "inventory"); 107: 108: y += 24; 109: x += 24; 110: Inv_DrawString (x, y, "hotkey ### item"); 111: Inv_DrawString (x, y+8, "------ --- ----"); 112: y += 16; 113: for (i=top ; i<num && i < top+DISPLAY_ITEMS ; i++) 114: { 115: item = index[i]; 116: // search for a binding 117: Com_sprintf (binding, sizeof(binding), "use %s", cl.configstrings[CS_ITEMS+item]); 118: bind = ""; 119: for (j=0 ; j<256 ; j++) 1.1.1.2 root 120: if (keybindings[j] && !Q_stricmp (keybindings[j], binding)) 1.1 root 121: { 122: bind = Key_KeynumToString(j); 123: break; 124: } 125: 126: Com_sprintf (string, sizeof(string), "%6s %3i %s", bind, cl.inventory[item], 127: cl.configstrings[CS_ITEMS+item] ); 128: if (item != selected) 129: SetStringHighBit (string); 130: else // draw a blinky cursor by the selected item 131: { 132: if ( (int)(cls.realtime*10) & 1) 133: re.DrawChar (x-8, y, 15); 134: } 135: Inv_DrawString (x, y, string); 136: y += 8; 137: } 138: 139: 140: } 141: 142:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.