Advertisement
ngld

mainhall.patch

Mar 10th, 2014
321
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 17.06 KB | None | 0 0
  1. Index: code/menuui/mainhallmenu.cpp
  2. ===================================================================
  3. --- code/menuui/mainhallmenu.cpp    (revision 10870)
  4. +++ code/menuui/mainhallmenu.cpp    (working copy)
  5. @@ -33,6 +33,7 @@
  6.  #include "menuui/fishtank.h"
  7.  #include "mission/missioncampaign.h"
  8.  #include "parse/parselo.h"
  9. +#include "parse/scripting.h"
  10.  #include "network/multiui.h"
  11.  #include "network/multiutil.h"
  12.  #include "network/multi_voice.h"
  13. @@ -151,8 +152,7 @@
  14.  // ----------------------------------------------------------------------------
  15.  // SNAZZY MENU stuff
  16.  //
  17. -#define NUM_MAIN_HALL_REGIONS 10
  18. -#define NUM_MAIN_HALL_MOUSE_REGIONS 6
  19. +#define NUM_MAIN_HALL_MAX_REGIONS 20
  20.  
  21.  // region mask #'s (identifiers)
  22.  #define EXIT_REGION                0
  23. @@ -165,9 +165,32 @@
  24.  #define LOAD_MISSION_REGION        11
  25.  #define QUICK_START_REGION     12
  26.  #define SKILL_LEVEL_REGION     13
  27. +#define SCRIPT_REGION          14
  28. +#define START_REGION           15
  29.  
  30. +struct main_hall_region_info {
  31. +   int mask;
  32. +   char *name;
  33. +};
  34. +
  35. +main_hall_region_info Main_hall_region_map[] = {
  36. +   { EXIT_REGION, "Exit" },
  37. +   { BARRACKS_REGION, "Barracks" },
  38. +   { READY_ROOM_REGION, "Readyroom" },
  39. +   { TECH_ROOM_REGION, "Techroom" },
  40. +   { OPTIONS_REGION, "Options" },
  41. +   { CAMPAIGN_ROOM_REGION, "Campaigns" },
  42. +   { MULTIPLAYER_REGION, "Multiplayer" },
  43. +   { LOAD_MISSION_REGION, "Load Mission" },
  44. +   { QUICK_START_REGION, "Quickstart" },
  45. +   { SKILL_LEVEL_REGION, "Skilllevel" },
  46. +   { SCRIPT_REGION, "Script" },
  47. +   { START_REGION, "Start" },
  48. +   { -1, NULL }
  49. +};
  50. +
  51.  // all the menu regions in the main hall
  52. -MENU_REGION Main_hall_region[NUM_MAIN_HALL_REGIONS];
  53. +MENU_REGION Main_hall_region[NUM_MAIN_HALL_MAX_REGIONS];
  54.  
  55.  // # of regions (options) on this screen. parsed from a table
  56.  int Main_hall_num_options;
  57. @@ -395,7 +418,6 @@
  58.     }
  59.  
  60.     int idx;
  61. -   char temp[100], whee[100];
  62.     SCP_string main_hall_to_load;
  63.  
  64.     // reparse the table here if the relevant cmdline flag is set
  65. @@ -423,20 +445,27 @@
  66.  
  67.     // create the snazzy interface and load up the info from the table
  68.     snazzy_menu_init();
  69. -   read_menu_tbl(NOX("MAIN HALL"), temp, whee, Main_hall_region, &Main_hall_num_options, 0);
  70. -
  71. +  
  72.     // assign the proper main hall data
  73.     Assert(main_hall_get_pointer(main_hall_to_load) != NULL);
  74.     Main_hall = main_hall_get_pointer(main_hall_to_load);
  75.  
  76. -   // tooltip strings
  77. -   Main_hall->region_descript.at(0) = XSTR( "Exit FreeSpace 2", 353);
  78. -   Main_hall->region_descript.at(1) = XSTR( "Barracks - Manage your FreeSpace 2 pilots", 354);
  79. -   Main_hall->region_descript.at(2) = XSTR( "Ready room - Start or continue a campaign", 355);
  80. -   Main_hall->region_descript.at(3) = XSTR( "Tech room - View specifications of FreeSpace 2 ships and weaponry", 356);
  81. -   Main_hall->region_descript.at(4) = XSTR( "Options - Change your FreeSpace 2 options", 357);
  82. -   Main_hall->region_descript.at(5) = XSTR( "Campaign Room - View all available campaigns", 358);
  83. -   Main_hall->region_descript.at(6) = XSTR( "Multiplayer - Start or join a multiplayer game", 359);
  84. +   // check if we have to change the ready room's description
  85. +   if(Main_hall->default_readyroom) {
  86. +       if (Player->flags & PLAYER_FLAGS_IS_MULTI) {
  87. +           Main_hall->regions.at(2).description = XSTR( "Multiplayer - Start or join a multiplayer game", 359);
  88. +       } else {
  89. +           Main_hall->regions.at(2).description = XSTR( "Ready room - Start or continue a campaign", 355);
  90. +       }
  91. +   }
  92. +  
  93. +   // Read the menu regions from mainhall.tbl
  94. +   main_hall_region *region;
  95. +   for (idx = 0; idx < (int) Main_hall->regions.size(); idx++) {
  96. +       region = &Main_hall->regions.at(idx);
  97. +       snazzy_menu_add_region(Main_hall_region + idx, (char*) region->description.c_str(), region->mask, region->key, -1);
  98. +   }
  99. +   Main_hall_num_options = Main_hall->regions.size();
  100.  
  101.     // init tooltip shader                      // nearly black
  102.     gr_create_shader(&Main_hall_tooltip_shader, 5, 5, 5, 168);
  103. @@ -637,7 +666,7 @@
  104.   */
  105.  void main_hall_do(float frametime)
  106.  {
  107. -   int code, key, snazzy_action;
  108. +   int idx, code, key, snazzy_action, region_action = -1;
  109.  
  110.     // set the screen scale to the main hall's dimensions
  111.     gr_set_screen_scale(Main_hall_bitmap_w, Main_hall_bitmap_h, Main_hall->zoom_area_width, Main_hall->zoom_area_height);
  112. @@ -692,11 +721,38 @@
  113.     // do any processing based upon what happened to the snazzy menu
  114.     switch (snazzy_action) {
  115.         case SNAZZY_OVER:
  116. -           main_hall_handle_mouse_location(code);
  117. +           for (idx = 0; idx < (int) Main_hall->regions.size(); idx++) {
  118. +               if (Main_hall->regions.at(idx).mask == code) {
  119. +                   break;
  120. +               }
  121. +           }
  122. +          
  123. +           main_hall_handle_mouse_location(idx);
  124.             break;
  125.  
  126.         case SNAZZY_CLICKED:
  127. -           switch (code) {
  128. +           if (code == ESC_PRESSED) {
  129. +               region_action = ESC_PRESSED;
  130. +           } else {
  131. +               for (idx = 0; idx < (int) Main_hall->regions.size(); idx++) {
  132. +                   if (Main_hall->regions.at(idx).mask == code) {
  133. +                       region_action = Main_hall->regions.at(idx).action;
  134. +                       break;
  135. +                   }
  136. +               }
  137. +              
  138. +               if (region_action == -1) {
  139. +                   Error(LOCATION, "Region %d doesn't have an action!", code);
  140. +               } else if (region_action == START_REGION) {
  141. +                   if (Player->flags & PLAYER_FLAGS_IS_MULTI) {
  142. +                       region_action = MULTIPLAYER_REGION;
  143. +                   } else {
  144. +                       region_action = READY_ROOM_REGION;
  145. +                   }
  146. +               }
  147. +           }
  148. +          
  149. +           switch (region_action) {
  150.                 // clicked on the exit region
  151.                 case EXIT_REGION:
  152.                     gamesnd_play_iface(SND_IFACE_MOUSE_CLICK);
  153. @@ -705,17 +761,16 @@
  154.  
  155.                 // clicked on the readyroom region
  156.                 case READY_ROOM_REGION:
  157. -                   if (Player->flags & PLAYER_FLAGS_IS_MULTI) {
  158. -                       gamesnd_play_iface(SND_IFACE_MOUSE_CLICK);
  159. -                       main_hall_do_multi_ready();
  160. +                   // Make sure we aren't in multi mode.
  161. +                   Player->flags &= ~PLAYER_FLAGS_IS_MULTI;
  162. +                   Game_mode = GM_NORMAL;
  163. +                  
  164. +                   if (strlen(Main_hall_campaign_cheat)) {
  165. +                       gameseq_post_event(GS_EVENT_CAMPAIGN_CHEAT);
  166.                     } else {
  167. -                       if (strlen(Main_hall_campaign_cheat)) {
  168. -                           gameseq_post_event(GS_EVENT_CAMPAIGN_CHEAT);
  169. -                       } else {
  170. -                           gameseq_post_event(GS_EVENT_NEW_CAMPAIGN);
  171. -                       }
  172. -                       gamesnd_play_iface(SND_IFACE_MOUSE_CLICK);
  173. +                       gameseq_post_event(GS_EVENT_NEW_CAMPAIGN);
  174.                     }
  175. +                   gamesnd_play_iface(SND_IFACE_MOUSE_CLICK);
  176.                     break;
  177.  
  178.                 // clicked on the tech room region
  179. @@ -732,23 +787,20 @@
  180.  
  181.                 // clicked on the campaign toom region
  182.                 case CAMPAIGN_ROOM_REGION:
  183. -                   if (Player->flags & PLAYER_FLAGS_IS_MULTI) {
  184. -                       gamesnd_play_iface(SND_IFACE_MOUSE_CLICK);
  185. -                       main_hall_set_notify_string(XSTR( "Campaign Room not valid for multiplayer pilots", 366));
  186. -                   } else {
  187. -                       gamesnd_play_iface(SND_IFACE_MOUSE_CLICK);
  188. -                       gameseq_post_event(GS_EVENT_CAMPAIGN_ROOM);
  189. -                   }
  190. +                   gamesnd_play_iface(SND_IFACE_MOUSE_CLICK);
  191. +                   gameseq_post_event(GS_EVENT_CAMPAIGN_ROOM);
  192.                     break;
  193.  
  194.                 // clicked on the multiplayer region
  195.                 case MULTIPLAYER_REGION:
  196. -                   if (Player->flags & PLAYER_FLAGS_IS_MULTI) {
  197. -                       // NOTE : this isn't a great thing to be calling this anymore. But we'll leave it for now
  198. -                       gameseq_post_event(GS_EVENT_MULTI_JOIN_GAME);
  199. -                   } else {
  200. -                       main_hall_set_notify_string(XSTR( "Not a valid multiplayer pilot!!", 367));
  201. -                   }
  202. +                   // Make sure we are in multi mode.
  203. +                   Player->flags |= PLAYER_FLAGS_IS_MULTI;
  204. +                   Game_mode = GM_MULTIPLAYER;
  205. +                  
  206. +                   main_hall_do_multi_ready();
  207. +                  
  208. +                   // NOTE : this isn't a great thing to be calling this anymore. But we'll leave it for now
  209. +                   gameseq_post_event(GS_EVENT_MULTI_JOIN_GAME);
  210.                     break;
  211.  
  212.                 // load mission key was pressed
  213. @@ -758,20 +810,16 @@
  214.                 // quick start a game region
  215.                 case QUICK_START_REGION:
  216.             #if !defined(NDEBUG)
  217. -                   if (Player->flags & PLAYER_FLAGS_IS_MULTI) {
  218. -                       main_hall_set_notify_string(XSTR( "Quick Start not valid for multiplayer pilots", 369));
  219. +                   if (Num_recent_missions > 0) {
  220. +                       strcpy_s(Game_current_mission_filename, Recent_missions[0]);
  221.                     } else {
  222. -                       if (Num_recent_missions > 0) {
  223. -                           strcpy_s(Game_current_mission_filename, Recent_missions[0]);
  224. -                       } else {
  225. -                           if (mission_load_up_campaign()) {
  226. -                               main_hall_set_notify_string(XSTR( "Campaign file is currently unavailable", 1606));
  227. -                           }
  228. -                           strcpy_s(Game_current_mission_filename, Campaign.missions[0].name);
  229. +                       if (mission_load_up_campaign()) {
  230. +                           main_hall_set_notify_string(XSTR( "Campaign file is currently unavailable", 1606));
  231.                         }
  232. -                       Campaign.current_mission = -1;
  233. -                       gameseq_post_event(GS_EVENT_START_GAME_QUICK);
  234. +                       strcpy_s(Game_current_mission_filename, Campaign.missions[0].name);
  235.                     }
  236. +                   Campaign.current_mission = -1;
  237. +                   gameseq_post_event(GS_EVENT_START_GAME_QUICK);
  238.             #endif
  239.                     break;
  240.  
  241. @@ -799,11 +847,17 @@
  242.                         help_overlay_set_state(Main_hall_overlay_id,gr_screen.res,0);
  243.                     }
  244.                     break;
  245. +              
  246. +               // custom action
  247. +               case SCRIPT_REGION:
  248. +                   char *lua = (char*) Main_hall->regions.at(idx).lua_action.c_str();
  249. +                   Script_system.EvalString(lua, NULL, NULL, lua);
  250. +                   break;
  251.             } // END switch (code)
  252.  
  253.             // if the escape key wasn't pressed handle any mouse position related events
  254.             if (code != ESC_PRESSED) {
  255. -               main_hall_handle_mouse_location(code);
  256. +               main_hall_handle_mouse_location((region_action == -1 ? -1 : idx));
  257.             }
  258.             break;
  259.  
  260. @@ -1211,8 +1265,8 @@
  261.     if (Main_hall_frame_skip) {
  262.         return;
  263.     }
  264. -
  265. -   if (cur_region > NUM_MAIN_HALL_MOUSE_REGIONS) {
  266. +  
  267. +   if (cur_region > (int)Main_hall->regions.size() - 1) {
  268.         // MWA -- inserted return since Int3() was tripped when hitting L from main menu.
  269.         return;
  270.     }
  271. @@ -1262,7 +1316,7 @@
  272.     }
  273.  
  274.     // don't do anything if there are no animations to play
  275. -   else if(Main_hall_door_anim.size() == 0)
  276. +   else if(region > (int) Main_hall_door_anim.size() - 1)
  277.     {
  278.         return;
  279.     }
  280. @@ -1303,7 +1357,7 @@
  281.     }
  282.  
  283.     // don't do anything if there are no animations to play
  284. -   else if(Main_hall_door_anim.size() == 0)
  285. +   else if(region > (int) Main_hall_door_anim.size() - 1)
  286.     {
  287.         return;
  288.     }
  289. @@ -1351,7 +1405,7 @@
  290.     if (!Main_hall_right_click) {
  291.         if (mouse_down(MOUSE_RIGHT_BUTTON)) {
  292.             // cycle through the available regions
  293. -           if (Main_hall_last_clicked_region == NUM_MAIN_HALL_MOUSE_REGIONS - 1) {
  294. +           if (Main_hall_last_clicked_region == (int) Main_hall_door_anim.size() - 1) {
  295.                 new_region = 0;
  296.             } else {
  297.                 new_region = Main_hall_last_clicked_region + 1;
  298. @@ -1579,31 +1633,25 @@
  299.   */
  300.  void main_hall_maybe_blit_tooltips()
  301.  {
  302. -   int w, h, text_index;
  303. +   int w, h;
  304.  
  305.     // if we're over no region - don't blit anything
  306.     if (Main_hall_mouse_region < 0) {
  307.         return;
  308.     }
  309. -
  310. -   // get the index of the proper text to be using
  311. -   if (Main_hall_mouse_region == READY_ROOM_REGION) {
  312. -       // if this is a multiplayer pilot, the ready room region becomes the multiplayer region
  313. -       if (Player->flags & PLAYER_FLAGS_IS_MULTI){
  314. -           text_index = NUM_REGIONS - 1;
  315. -       } else {
  316. -           text_index = READY_ROOM_REGION;
  317. -       }
  318. -   } else {
  319. -       text_index = Main_hall_mouse_region;
  320. +  
  321. +   if (Main_hall_mouse_region >= (int) Main_hall->regions.size()) {
  322. +       Error(LOCATION, "Missing region description for index %d!\n", Main_hall_mouse_region);
  323.     }
  324.  
  325.     // set the color and blit the string
  326.     if (!help_overlay_active(Main_hall_overlay_id)) {
  327.         int old_font = gr_get_current_fontnum();
  328. +       const char *desc = Main_hall->regions.at(Main_hall_mouse_region).description.c_str();
  329. +      
  330.         gr_set_font(Main_hall->font);
  331.         // get the width of the string
  332. -       gr_get_string_size(&w, &h, Main_hall->region_descript.at(text_index));
  333. +       gr_get_string_size(&w, &h, desc);
  334.         int text_y;
  335.         if (Main_hall->region_yval == -1) {
  336.             text_y = gr_screen.max_h_unscaled - ((gr_screen.max_h_unscaled - gr_screen.max_h_unscaled_zoomed) / 2) - Main_hall->tooltip_padding - h;
  337. @@ -1616,7 +1664,7 @@
  338.         gr_shade(0, shader_y, gr_screen.max_w_unscaled, (gr_screen.max_h_unscaled - shader_y), GR_RESIZE_MENU);
  339.  
  340.         gr_set_color_fast(&Color_bright_white);
  341. -       gr_string((gr_screen.max_w_unscaled - w)/2, text_y, Main_hall->region_descript.at(text_index), GR_RESIZE_MENU);
  342. +       gr_string((gr_screen.max_w_unscaled - w)/2, text_y, desc, GR_RESIZE_MENU);
  343.  
  344.         gr_set_font(old_font);
  345.     }
  346. @@ -1876,7 +1924,6 @@
  347.         m.door_anim_coords.clear();
  348.         m.door_sounds.clear();
  349.         m.door_sound_pan.clear();
  350. -       m.region_descript.clear();
  351.     }
  352.  
  353.     SCP_vector<int> temp;
  354. @@ -1901,12 +1948,30 @@
  355.         // door_sound_pan
  356.         m.door_sound_pan.push_back(0.0f);
  357.     }
  358. +}
  359.  
  360. -   // region_descript
  361. -   for (idx = 0; idx < NUM_REGIONS; idx++) {
  362. -       m.region_descript.push_back(NULL);
  363. +void region_info_init(main_hall_defines &m)
  364. +{
  365. +   if (Cmdline_reparse_mainhall) {
  366. +       m.regions.clear();
  367.     }
  368. -
  369. +  
  370. +   main_hall_region defaults[] = {
  371. +       {0,  0,  XSTR( "Exit FreeSpace 2", 353), EXIT_REGION, ""},
  372. +       {1, 'B', XSTR( "Barracks - Manage your FreeSpace 2 pilots", 354), BARRACKS_REGION, ""},
  373. +       {2, 'R', XSTR( "Ready room - Start or continue a campaign", 355), START_REGION, ""},
  374. +       {3, 'T', XSTR( "Tech room - View specifications of FreeSpace 2 ships and weaponry", 356), TECH_ROOM_REGION, ""},
  375. +       {4,  0,  XSTR( "Options - Change your FreeSpace 2 options", 357), OPTIONS_REGION, ""},
  376. +       {5, 'C', XSTR( "Campaign Room - View all available campaigns", 358), CAMPAIGN_ROOM_REGION, ""},
  377. +       {6, 'G', "Quick start", QUICK_START_REGION, ""}
  378. +   };
  379. +  
  380. +   for (int idx = 0; idx < 7; idx++) {
  381. +       m.regions.push_back(defaults[idx]);
  382. +   }
  383. +  
  384. +   // XSTR( "Multiplayer - Start or join a multiplayer game", 359)
  385. +   m.default_readyroom = true;
  386.  }
  387.  
  388.  /**
  389. @@ -1935,6 +2000,7 @@
  390.     int num_resolutions = 2;
  391.     unsigned int count;
  392.     char temp_string[MAX_FILENAME_LEN];
  393. +   SCP_string temp_scp_string;
  394.  
  395.     if ((rval = setjmp(parse_abort)) != 0) {
  396.         mprintf(("TABLES: Unable to parse '%s'!  Error code = %i.\n", filename, rval));
  397. @@ -2165,7 +2231,9 @@
  398.                     m->misc_anim_sound_flag.at(idx).push_back(0);
  399.                 }
  400.             }
  401. -
  402. +          
  403. +           region_info_init(*m);
  404. +          
  405.             // door animations
  406.             required_string("+Num Door Animations:");
  407.             stuff_int(&m->num_door_animations);
  408. @@ -2207,6 +2275,83 @@
  409.                 m->font = FONT1;
  410.             }
  411.  
  412. +           int mask;
  413. +           for (idx = 0; optional_string("+Door mask value:"); idx++) {
  414. +               // door mask
  415. +               stuff_string(temp_string, F_RAW, MAX_FILENAME_LEN);
  416. +              
  417. +               mask = (int) strtol(temp_string, NULL, 0);
  418. +               mask = 255 - mask;
  419. +              
  420. +               if ((int) m->regions.size() <= idx) {
  421. +                   m->regions.resize(idx + 1);
  422. +               }
  423. +              
  424. +               m->regions.at(idx).mask = mask;
  425. +           }
  426. +          
  427. +           for (idx = 0; optional_string("+Door action:"); idx++) {
  428. +               // door action
  429. +              
  430. +               if ((int) m->regions.size() <= idx) {
  431. +                   m->regions.resize(idx + 1);
  432. +               }
  433. +              
  434. +               if (optional_string("Script")) {
  435. +                   m->regions.at(idx).action = SCRIPT_REGION;
  436. +                   stuff_string(m->regions.at(idx).lua_action, F_RAW);
  437. +               } else {
  438. +                   stuff_string(temp_scp_string, F_RAW);
  439. +                  
  440. +                   int action = -1;
  441. +                   for (int i = 0; Main_hall_region_map[i].name != NULL; i++) {
  442. +                       if (temp_scp_string == Main_hall_region_map[i].name) {
  443. +                           action = Main_hall_region_map[i].mask;
  444. +                           break;
  445. +                       }
  446. +                   }
  447. +                  
  448. +                   if (action == -1) {
  449. +                       SCP_string err_msg = "";
  450. +                       for (int i = 0; Main_hall_region_map[i].name != NULL; i++) {
  451. +                           err_msg += ", ";
  452. +                           err_msg += Main_hall_region_map[i].name;
  453. +                       }
  454. +                      
  455. +                       Error(LOCATION, "Unkown Door Region '%s'! Expected one of: %s", temp_scp_string.c_str(), err_msg.substr(2).c_str());
  456. +                   }
  457. +                  
  458. +                   m->regions.at(idx).action = action;
  459. +               }
  460. +           }
  461. +          
  462. +           for (idx = 0; optional_string("+Door key:"); idx++) {
  463. +               // door key
  464. +               stuff_string(temp_string, F_RAW, MAX_FILENAME_LEN);
  465. +              
  466. +               if ((int) m->regions.size() <= idx) {
  467. +                   m->regions.resize(idx + 1);
  468. +               }
  469. +               m->regions.at(idx).key = (int) temp_string[0];
  470. +           }
  471. +
  472. +           for (idx = 0; optional_string("+Door description:"); idx++) {
  473. +               // region description (tooltip)
  474. +               stuff_string(temp_scp_string, F_MESSAGE);
  475. +
  476. +               if (temp_scp_string != "default") {
  477. +                   if ((int) m->regions.size() <= idx) {
  478. +                       m->regions.resize(idx + 1);
  479. +                   }
  480. +                  
  481. +                   m->regions.at(idx).description = temp_scp_string;
  482. +                  
  483. +                   if (idx == 2) {
  484. +                       m->default_readyroom = false;
  485. +                   }
  486. +               }
  487. +           }
  488. +          
  489.             // tooltip padding
  490.             if (optional_string("+Tooltip Padding:")) {
  491.                 stuff_int(&m->tooltip_padding);
  492. Index: code/menuui/mainhallmenu.h
  493. ===================================================================
  494. --- code/menuui/mainhallmenu.h  (revision 10870)
  495. +++ code/menuui/mainhallmenu.h  (working copy)
  496. @@ -16,6 +16,14 @@
  497.  // CommanderDJ - this is now dynamic
  498.  // #define MAIN_HALLS_MAX          10
  499.  
  500. +typedef struct main_hall_region {
  501. +   int mask;
  502. +   int key;
  503. +   SCP_string description;
  504. +   int action;
  505. +   SCP_string lua_action;
  506. +} main_hall_region;
  507. +
  508.  typedef struct main_hall_defines {
  509.     // mainhall name identifier
  510.     SCP_string name;
  511. @@ -115,8 +123,10 @@
  512.     // font used for the tooltips, version number, etc.
  513.     int font;
  514.  
  515. -   // text (tooltip) description
  516. -   SCP_vector<const char*> region_descript;
  517. +   // action
  518. +   SCP_vector<main_hall_region> regions;
  519. +  
  520. +   bool default_readyroom;
  521.  
  522.     // num pixels shader is above/below tooltip text
  523.     int tooltip_padding;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement