Implement RPG / Free Roam gametype. Next step is to remove scoring under this type...
[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         me.TR(me);\r
67                 me.TD(me, 1, 0.5, me.playerNameLabel = makeVoretTextLabel(0, "Other:"));\r
68                         me.playerNameLabelAlpha = me.playerNameLabel.alpha;\r
69                 n = 1;\r
70                 me.TD(me, 1, me.columns / n, e = makeVoretGametypeButton(1, "g_rpg", "Role Play"));\r
71                         if(e.checked) e0 = NULL;\r
72                 if(e0)\r
73                 {\r
74                         //print("NO CHECK\n");\r
75                         e0.setChecked(e0, 1);\r
76                 }\r
77         me.TR(me);\r
78         me.TR(me);\r
79                 me.mapListBox = makeVoretMapList();\r
80                 me.TD(me, 1, 3, e = makeVoretTextLabel(0, "Map list:"));\r
81                         makeCallback(e, me.mapListBox, me.mapListBox.refilterCallback);\r
82         me.TR(me);\r
83                 me.TD(me, me.rows - 7, 3, me.mapListBox);\r
84         me.gotoRC(me, me.rows - 3, 0);\r
85                 me.TDempty(me, 0.5);\r
86                 me.TD(me, 1, 1, e = makeVoretButton("All", '0 0 0'));\r
87                         e.onClick = MapList_All;\r
88                         e.onClickEntity = me.mapListBox;\r
89                 me.TD(me, 1, 1, e = makeVoretButton("None", '0 0 0'));\r
90                         e.onClick = MapList_None;\r
91                         e.onClickEntity = me.mapListBox;\r
92                 me.TDempty(me, 0.5);\r
93 \r
94         me.gotoRC(me, 3, 3.5); me.setFirstColumn(me, me.currentColumn);\r
95                 me.TD(me, 1, 3, e = makeVoretTextLabel(0, "Match settings:"));\r
96         me.TR(me);\r
97                 me.sliderTimelimit = makeVoretSlider(1.0, 60.0, 0.5, "timelimit_override");\r
98                 me.TD(me, 1, 1, e = makeVoretSliderCheckBox(0, 1, me.sliderTimelimit, "Time limit:"));\r
99                 me.TD(me, 1, 2, me.sliderTimelimit);\r
100         me.TR(me);\r
101                 me.TDempty(me, 0.2);\r
102                 me.TD(me, 1, 2.8, e = makeVoretSliderCheckBox(-1, 0, me.sliderTimelimit, "Use map specified default"));\r
103         me.TR(me);\r
104                 me.sliderFraglimit = makeVoretSlider(1.0, 2000.0, 5, "fraglimit_override");\r
105                 me.TD(me, 1, 1, e = makeVoretSliderCheckBox(0, 1, me.sliderFraglimit, "Point limit:"));\r
106                         me.checkboxFraglimit = e;\r
107                 me.TD(me, 1, 2, me.sliderFraglimit);\r
108         me.TR(me);\r
109                 me.TDempty(me, 0.2);\r
110                 me.TD(me, 1, 2.8, e = makeVoretSliderCheckBox(-1, 0, me.sliderFraglimit, "Use map specified default"));\r
111                         me.checkboxFraglimitMapinfo = e;\r
112         me.TR(me);\r
113         me.TR(me);\r
114                 me.TD(me, 1, 1, e = makeVoretTextLabel(0, "Player slots:"));\r
115                 me.TD(me, 1, 2, makeVoretSlider(1, 32, 1, "menu_maxplayers"));\r
116         me.TR(me);\r
117                 me.TD(me, 1, 1, e = makeVoretTextLabel(0, "Number of bots:"));\r
118                 me.TD(me, 1, 2, makeVoretSlider(0, 9, 1, "bot_number"));\r
119         me.TR(me);\r
120                 me.TDempty(me, 0.2);\r
121                 me.TD(me, 1, 0.8, e = makeVoretTextLabel(0, "Bot skill:"));\r
122                         setDependent(e, "bot_number", 0, -1);\r
123                 me.TD(me, 1, 2, e = makeVoretTextSlider("skill"));\r
124                         e.addValue(e, "(no skill)", "0");\r
125                         e.addValue(e, "Vegetable", "1");\r
126                         e.addValue(e, "Insect", "2");\r
127                         e.addValue(e, "Mouse", "3");\r
128                         e.addValue(e, "Badger", "4");\r
129                         e.addValue(e, "Fox", "5");\r
130                         e.addValue(e, "Tiger", "6");\r
131                         e.addValue(e, "Crocodile", "7");\r
132                         e.addValue(e, "Dinosaur", "8");\r
133                         e.addValue(e, "Dragon", "9");\r
134                         e.addValue(e, "Vore Lord", "10");\r
135                         e.configureVoretTextSliderValues(e);\r
136                         setDependent(e, "bot_number", 0, -1);\r
137         me.TR(me);\r
138                 me.TDempty(me, 0.2);\r
139                 me.TD(me, 1, 0.8, e = makeVoretTextLabel(0, "Bot names:"));\r
140                 me.TD(me, 1, 0.7, e = makeVoretInputBox(1, "bot_prefix"));\r
141                         setDependent(e, "bot_number", 0, -1);\r
142                 me.TD(me, 1, 0.6, e = makeVoretTextLabel(0.5, "Shadow"));\r
143                         setDependent(e, "bot_number", 0, -1);\r
144                 me.TD(me, 1, 0.7, e = makeVoretInputBox(1, "bot_suffix"));\r
145                         setDependent(e, "bot_number", 0, -1);\r
146         me.TR(me);\r
147         me.TR(me);\r
148                 me.TD(me, 1, 1, e = makeVoretTextLabel(0, "Map voting:"));\r
149                 me.TD(me, 1, 2, e = makeVoretTextSlider("g_maplist_votable"));\r
150                         e.addValue(e, "No voting", "0");\r
151                         e.addValue(e, "2 choices", "2");\r
152                         e.addValue(e, "3 choices", "3");\r
153                         e.addValue(e, "4 choices", "4");\r
154                         e.addValue(e, "5 choices", "5");\r
155                         e.addValue(e, "6 choices", "6");\r
156                         e.addValue(e, "7 choices", "7");\r
157                         e.addValue(e, "8 choices", "8");\r
158                         e.addValue(e, "9 choices", "9");\r
159                         e.configureVoretTextSliderValues(e);\r
160         me.TR(me);\r
161                 me.TD(me, 1, 3, e = makeVoretCheckBoxEx(0.5, 0, "sv_vote_simple_majority_factor", "Simple majority wins vcall"));\r
162         me.TR(me);\r
163         me.TR(me);\r
164                 me.TDempty(me, 0.5);\r
165                 me.TD(me, 1, 2, e = makeVoretButton("Advanced settings...", '0 0 0'));\r
166                         e.onClick = DialogOpenButton_Click;\r
167                         e.onClickEntity = main.advancedDialog;\r
168                         main.advancedDialog.refilterEntity = me.mapListBox;\r
169                 me.TR(me);\r
170                 me.TR(me);\r
171                 me.TD(me, 1, 1, e = makeVoretButton("Mutators...", '0 0 0'));\r
172                         e.onClick = DialogOpenButton_Click;\r
173                         e.onClickEntity = main.mutatorsDialog;\r
174                         main.mutatorsDialog.refilterEntity = me.mapListBox;\r
175                 me.TD(me, 1, 2, e0 = makeVoretTextLabel(0, string_null));\r
176                         e0.textEntity = main.mutatorsDialog;\r
177                         e0.allowCut = 1;\r
178 \r
179         me.gotoRC(me, me.rows - 1, 0);\r
180                 me.TD(me, 1, 2, e = makeVoretCommandButton("Vore Town", '1 0 0', "map voretown", 0));\r
181                 me.TD(me, 1, me.columns - 2, e = makeVoretButton("Start Match!", '0 0 0'));\r
182                         e.onClick = MapList_LoadMap;\r
183                         e.onClickEntity = me.mapListBox;\r
184                         me.mapListBox.startButton = e;\r
185 \r
186         me.gameTypeChangeNotify(me);\r
187 }\r
188 \r
189 void GameType_ConfigureSliders(entity e, entity l, entity l2, string pLabel, float pMin, float pMax, float pStep, string pCvar)\r
190 {\r
191         if(pCvar == "")\r
192         {\r
193                 e.configureVoretSlider(e, pMin, pMax, pStep, string_null);\r
194                 l.setText(l, pLabel);\r
195                 e.disabled = l.disabled = l2.disabled = TRUE;\r
196         }\r
197         else\r
198         {\r
199                 e.configureVoretSlider(e, pMin, pMax, pStep, pCvar);\r
200                 l.setText(l, pLabel);\r
201                 e.disabled = l.disabled = l2.disabled = FALSE;\r
202         }\r
203 }\r
204 \r
205 void gameTypeChangeNotifyVoretServerCreateTab(entity me)\r
206 {\r
207         // tell the map list to update\r
208         float gt;\r
209         entity e, l, l2;\r
210         gt = MapInfo_CurrentGametype();\r
211         e = me.sliderFraglimit;\r
212         l = me.checkboxFraglimit;\r
213         l2 = me.checkboxFraglimitMapinfo;\r
214         switch(gt)\r
215         {\r
216                 case MAPINFO_TYPE_CTF:        GameType_ConfigureSliders(e, l, l2, "Capture limit:",   1,   20, 1, "capturelimit_override");     break;\r
217                 case MAPINFO_TYPE_DOMINATION: GameType_ConfigureSliders(e, l, l2, "Point limit:",    50,  500, 10, "g_domination_point_limit"); break;\r
218                 case MAPINFO_TYPE_KEYHUNT:    GameType_ConfigureSliders(e, l, l2, "Point limit:",   200, 1500, 50, "g_keyhunt_point_limit");    break;\r
219                 case MAPINFO_TYPE_LMS:        GameType_ConfigureSliders(e, l, l2, "Lives:",           3,   50,  1, "g_lms_lives_override");     break;\r
220                 case MAPINFO_TYPE_RACE:       GameType_ConfigureSliders(e, l, l2, "Laps:",            1,   25,  1, "g_race_laps_limit");        break;\r
221                 case MAPINFO_TYPE_ASSAULT:    GameType_ConfigureSliders(e, l, l2, "Point limit:",    50,  500, 10, "");                         break;\r
222                 case MAPINFO_TYPE_ONSLAUGHT:  GameType_ConfigureSliders(e, l, l2, "Point limit:",    50,  500, 10, "");                         break;\r
223                 case MAPINFO_TYPE_CTS:        GameType_ConfigureSliders(e, l, l2, "Point limit:",    50,  500, 10, "");                         break;\r
224                 default:                      GameType_ConfigureSliders(e, l, l2, "Frag limit:",      5,  100,  5, "fraglimit_override");       break;\r
225         }\r
226         me.mapListBox.refilter(me.mapListBox);\r
227 }\r
228 \r
229 #endif\r