a015ff2469a83c4c7b2d48742482f74f6fa77181
[voretournament/voretournament.git] / data / qcsrc / menu / voret / dialog_multiplayer_create.c
1 #ifdef INTERFACE\r
2 CLASS(VoretServerCreateTab) EXTENDS(VoretTab)\r
3         METHOD(VoretServerCreateTab, fill, void(entity))\r
4         METHOD(VoretServerCreateTab, gameTypeChangeNotify, void(entity))\r
5         ATTRIB(VoretServerCreateTab, title, string, "Create")\r
6         ATTRIB(VoretServerCreateTab, intendedWidth, float, 0.9)\r
7         ATTRIB(VoretServerCreateTab, rows, float, 22)\r
8         ATTRIB(VoretServerCreateTab, columns, float, 6.5)\r
9 \r
10         ATTRIB(VoretServerCreateTab, mapListBox, entity, NULL)\r
11         ATTRIB(VoretServerCreateTab, sliderFraglimit, entity, NULL)\r
12         ATTRIB(VoretServerCreateTab, sliderTimelimit, entity, NULL)\r
13         ATTRIB(VoretServerCreateTab, checkboxFraglimit, entity, NULL)\r
14         ATTRIB(VoretServerCreateTab, checkboxFraglimitMapinfo, entity, NULL)\r
15 ENDCLASS(VoretServerCreateTab)\r
16 entity makeVoretServerCreateTab();\r
17 #endif\r
18 \r
19 #ifdef IMPLEMENTATION\r
20 \r
21 entity makeVoretServerCreateTab()\r
22 {\r
23         entity me;\r
24         me = spawnVoretServerCreateTab();\r
25         me.configureDialog(me);\r
26         return me;\r
27 }\r
28 \r
29 void fillVoretServerCreateTab(entity me)\r
30 {\r
31         entity e, e0;\r
32         float n;\r
33 \r
34         me.TR(me);\r
35                 me.TD(me, 1, 0.5, me.playerNameLabel = makeVoretTextLabel(0, "Single:"));\r
36                         me.playerNameLabelAlpha = me.playerNameLabel.alpha;\r
37                 n = 5.5;\r
38                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_dm", "DM"));\r
39                         e0 = e;\r
40                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_lms", "LMS"));\r
41                         if(e.checked) e0 = NULL;\r
42                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_arena", "Arena"));\r
43                         if(e.checked) e0 = NULL;\r
44                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_race", "Race"));\r
45                         if(e.checked) e0 = NULL;\r
46                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_cts", "Race CTS"));\r
47                         if(e.checked) e0 = NULL;\r
48         me.TR(me);\r
49                 me.TD(me, 1, 0.5, me.playerNameLabel = makeVoretTextLabel(0, "Team:"));\r
50                         me.playerNameLabelAlpha = me.playerNameLabel.alpha;\r
51                 n = 7.7;\r
52                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_tdm", "TDM"));\r
53                         if(e.checked) e0 = NULL;\r
54                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_ctf", "CTF"));\r
55                         if(e.checked) e0 = NULL;\r
56                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_ca", "CA"));\r
57                         if(e.checked) e0 = NULL;\r
58                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_domination", "Domination"));\r
59                         if(e.checked) e0 = NULL;\r
60                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_keyhunt", "Key Hunt"));\r
61                         if(e.checked) e0 = NULL;\r
62                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_assault", "Assault"));\r
63                         if(e.checked) e0 = NULL;\r
64                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_onslaught", "Onslaught"));\r
65                         if(e.checked) e0 = NULL;\r
66                 if(e0)\r
67                 {\r
68                         //print("NO CHECK\n");\r
69                         e0.setChecked(e0, 1);\r
70                 }\r
71         me.TR(me);\r
72         me.TR(me);\r
73                 me.mapListBox = makeVoretMapList();\r
74                 me.TD(me, 1, 3, e = makeVoretTextLabel(0, "Map list:"));\r
75                         makeCallback(e, me.mapListBox, me.mapListBox.refilterCallback);\r
76         me.TR(me);\r
77                 me.TD(me, me.rows - 7, 3, me.mapListBox);\r
78         me.gotoRC(me, me.rows - 3, 0);\r
79                 me.TDempty(me, 0.5);\r
80                 me.TD(me, 1, 1, e = makeVoretButton("All", '0 0 0'));\r
81                         e.onClick = MapList_All;\r
82                         e.onClickEntity = me.mapListBox;\r
83                 me.TD(me, 1, 1, e = makeVoretButton("None", '0 0 0'));\r
84                         e.onClick = MapList_None;\r
85                         e.onClickEntity = me.mapListBox;\r
86                 me.TDempty(me, 0.5);\r
87 \r
88         me.gotoRC(me, 3, 3.5); me.setFirstColumn(me, me.currentColumn);\r
89                 me.TD(me, 1, 3, e = makeVoretTextLabel(0, "Match settings:"));\r
90         me.TR(me);\r
91                 me.sliderTimelimit = makeVoretSlider(1.0, 60.0, 0.5, "timelimit_override");\r
92                 me.TD(me, 1, 1, e = makeVoretSliderCheckBox(0, 1, me.sliderTimelimit, "Time limit:"));\r
93                 me.TD(me, 1, 2, me.sliderTimelimit);\r
94         me.TR(me);\r
95                 me.TDempty(me, 0.2);\r
96                 me.TD(me, 1, 2.8, e = makeVoretSliderCheckBox(-1, 0, me.sliderTimelimit, "Use map specified default"));\r
97         me.TR(me);\r
98                 me.sliderFraglimit = makeVoretSlider(1.0, 2000.0, 5, "fraglimit_override");\r
99                 me.TD(me, 1, 1, e = makeVoretSliderCheckBox(0, 1, me.sliderFraglimit, "Point limit:"));\r
100                         me.checkboxFraglimit = e;\r
101                 me.TD(me, 1, 2, me.sliderFraglimit);\r
102         me.TR(me);\r
103                 me.TDempty(me, 0.2);\r
104                 me.TD(me, 1, 2.8, e = makeVoretSliderCheckBox(-1, 0, me.sliderFraglimit, "Use map specified default"));\r
105                         me.checkboxFraglimitMapinfo = e;\r
106         me.TR(me);\r
107         me.TR(me);\r
108                 me.TD(me, 1, 1, e = makeVoretTextLabel(0, "Player slots:"));\r
109                 me.TD(me, 1, 2, makeVoretSlider(1, 32, 1, "menu_maxplayers"));\r
110         me.TR(me);\r
111                 me.TD(me, 1, 1, e = makeVoretTextLabel(0, "Number of bots:"));\r
112                 me.TD(me, 1, 2, makeVoretSlider(0, 9, 1, "bot_number"));\r
113         me.TR(me);\r
114                 me.TDempty(me, 0.2);\r
115                 me.TD(me, 1, 0.8, e = makeVoretTextLabel(0, "Bot skill:"));\r
116                         setDependent(e, "bot_number", 0, -1);\r
117                 me.TD(me, 1, 2, e = makeVoretTextSlider("skill"));\r
118                         e.addValue(e, "(no skill)", "0");\r
119                         e.addValue(e, "Vegetable", "1");\r
120                         e.addValue(e, "Insect", "2");\r
121                         e.addValue(e, "Mouse", "3");\r
122                         e.addValue(e, "Badger", "4");\r
123                         e.addValue(e, "Fox", "5");\r
124                         e.addValue(e, "Tiger", "6");\r
125                         e.addValue(e, "Crocodile", "7");\r
126                         e.addValue(e, "Dinosaur", "8");\r
127                         e.addValue(e, "Dragon", "9");\r
128                         e.addValue(e, "Vore Lord", "10");\r
129                         e.configureVoretTextSliderValues(e);\r
130                         setDependent(e, "bot_number", 0, -1);\r
131         me.TR(me);\r
132                 me.TDempty(me, 0.2);\r
133                 me.TD(me, 1, 0.8, e = makeVoretTextLabel(0, "Bot names:"));\r
134                 me.TD(me, 1, 0.7, e = makeVoretInputBox(1, "bot_prefix"));\r
135                         setDependent(e, "bot_number", 0, -1);\r
136                 me.TD(me, 1, 0.6, e = makeVoretTextLabel(0.5, "Shadow"));\r
137                         setDependent(e, "bot_number", 0, -1);\r
138                 me.TD(me, 1, 0.7, e = makeVoretInputBox(1, "bot_suffix"));\r
139                         setDependent(e, "bot_number", 0, -1);\r
140         me.TR(me);\r
141         me.TR(me);\r
142                 me.TD(me, 1, 1, e = makeVoretTextLabel(0, "Map voting:"));\r
143                 me.TD(me, 1, 2, e = makeVoretTextSlider("g_maplist_votable"));\r
144                         e.addValue(e, "No voting", "0");\r
145                         e.addValue(e, "2 choices", "2");\r
146                         e.addValue(e, "3 choices", "3");\r
147                         e.addValue(e, "4 choices", "4");\r
148                         e.addValue(e, "5 choices", "5");\r
149                         e.addValue(e, "6 choices", "6");\r
150                         e.addValue(e, "7 choices", "7");\r
151                         e.addValue(e, "8 choices", "8");\r
152                         e.addValue(e, "9 choices", "9");\r
153                         e.configureVoretTextSliderValues(e);\r
154         me.TR(me);\r
155                 me.TD(me, 1, 3, e = makeVoretCheckBoxEx(0.5, 0, "sv_vote_simple_majority_factor", "Simple majority wins vcall"));\r
156         me.TR(me);\r
157         me.TR(me);\r
158                 me.TDempty(me, 0.5);\r
159                 me.TD(me, 1, 2, e = makeVoretButton("Advanced settings...", '0 0 0'));\r
160                         e.onClick = DialogOpenButton_Click;\r
161                         e.onClickEntity = main.advancedDialog;\r
162                         main.advancedDialog.refilterEntity = me.mapListBox;\r
163                 me.TR(me);\r
164                 me.TR(me);\r
165                 me.TD(me, 1, 1, e = makeVoretButton("Mutators...", '0 0 0'));\r
166                         e.onClick = DialogOpenButton_Click;\r
167                         e.onClickEntity = main.mutatorsDialog;\r
168                         main.mutatorsDialog.refilterEntity = me.mapListBox;\r
169                 me.TD(me, 1, 2, e0 = makeVoretTextLabel(0, string_null));\r
170                         e0.textEntity = main.mutatorsDialog;\r
171                         e0.allowCut = 1;\r
172 \r
173         me.gotoRC(me, me.rows - 1, 0);\r
174                 me.TD(me, 1, 2, e = makeVoretCommandButton("Vore Town", '1 0 0', "map voretown", 0));\r
175                 me.TD(me, 1, me.columns - 2, e = makeVoretButton("Start Match!", '0 0 0'));\r
176                         e.onClick = MapList_LoadMap;\r
177                         e.onClickEntity = me.mapListBox;\r
178                         me.mapListBox.startButton = e;\r
179 \r
180         me.gameTypeChangeNotify(me);\r
181 }\r
182 \r
183 void GameType_ConfigureSliders(entity e, entity l, entity l2, string pLabel, float pMin, float pMax, float pStep, string pCvar)\r
184 {\r
185         if(pCvar == "")\r
186         {\r
187                 e.configureVoretSlider(e, pMin, pMax, pStep, string_null);\r
188                 l.setText(l, pLabel);\r
189                 e.disabled = l.disabled = l2.disabled = TRUE;\r
190         }\r
191         else\r
192         {\r
193                 e.configureVoretSlider(e, pMin, pMax, pStep, pCvar);\r
194                 l.setText(l, pLabel);\r
195                 e.disabled = l.disabled = l2.disabled = FALSE;\r
196         }\r
197 }\r
198 \r
199 void gameTypeChangeNotifyVoretServerCreateTab(entity me)\r
200 {\r
201         // tell the map list to update\r
202         float gt;\r
203         entity e, l, l2;\r
204         gt = MapInfo_CurrentGametype();\r
205         e = me.sliderFraglimit;\r
206         l = me.checkboxFraglimit;\r
207         l2 = me.checkboxFraglimitMapinfo;\r
208         switch(gt)\r
209         {\r
210                 case MAPINFO_TYPE_CTF:        GameType_ConfigureSliders(e, l, l2, "Capture limit:",   1,   20, 1, "capturelimit_override");     break;\r
211                 case MAPINFO_TYPE_DOMINATION: GameType_ConfigureSliders(e, l, l2, "Point limit:",    50,  500, 10, "g_domination_point_limit"); break;\r
212                 case MAPINFO_TYPE_KEYHUNT:    GameType_ConfigureSliders(e, l, l2, "Point limit:",   200, 1500, 50, "g_keyhunt_point_limit");    break;\r
213                 case MAPINFO_TYPE_LMS:        GameType_ConfigureSliders(e, l, l2, "Lives:",           3,   50,  1, "g_lms_lives_override");     break;\r
214                 case MAPINFO_TYPE_RACE:       GameType_ConfigureSliders(e, l, l2, "Laps:",            1,   25,  1, "g_race_laps_limit");        break;\r
215                 case MAPINFO_TYPE_ASSAULT:    GameType_ConfigureSliders(e, l, l2, "Point limit:",    50,  500, 10, "");                         break;\r
216                 case MAPINFO_TYPE_ONSLAUGHT:  GameType_ConfigureSliders(e, l, l2, "Point limit:",    50,  500, 10, "");                         break;\r
217                 case MAPINFO_TYPE_CTS:        GameType_ConfigureSliders(e, l, l2, "Point limit:",    50,  500, 10, "");                         break;\r
218                 default:                      GameType_ConfigureSliders(e, l, l2, "Frag limit:",      5,  100,  5, "fraglimit_override");       break;\r
219         }\r
220         me.mapListBox.refilter(me.mapListBox);\r
221 }\r
222 \r
223 #endif\r