1#!/usr/bin/wish 2wm title . "Koules 1.4" 3# This is simple user (anti)friendly dialog for starting koules 4# Only reason why I did it is that I wanted to try tcl/tk 5#files - configure here if paths are differ 6set xkoules "/usr/bin/X11/xkoules" 7set koulessvga "/usr/local/bin/koules.svga" 8set koulessound "/usr/local/lib/koules/creator1.raw" 9set config "~/.xkoules.opt" 10set revision 1.1 11# Set default 12set GameMode Single 13set Shm 1 14set private 0 15set Fullscreen 0 16set ScreenSize "-l" 17set Sound 1 18set Monochrome 0 19set blackwhite 0 20set Cursor 0 21set Level 1 22set Host localhost 23set Deatmatch 0 24set SPort 12345 25set CPort 12345 26set Difficulty 2 27set SScreenSize -l 28if {[file exists $config] == 1} { 29 set FileId [open $config "r"] 30 if {[gets $FileId] == $revision } { 31 set GameMode [gets $FileId] 32 set ScreenSize [gets $FileId ] 33 set private [gets $FileId ] 34 set blackwhite [gets $FileId ] 35 set Cursor [gets $FileId ] 36 set Shm [gets $FileId ] 37 set Monochrome [gets $FileId ] 38 set Sound [gets $FileId ] 39 set Fullscreen [gets $FileId ] 40 set CPort [gets $FileId ] 41 set Host [gets $FileId ] 42 set SPort [gets $FileId ] 43 set Level [gets $FileId ] 44 set Difficulty [gets $FileId ] 45 set Deathmatch [gets $FileId ] 46 set SScreenSize [gets $FileId ] 47 } else {puts "Ignoring config file...another version"} 48 close $FileId 49} 50 51frame .gamemode -relief raised -borderwidth 3 52radiobutton .gamemode.single \ 53 -value "Single"\ 54 -variable GameMode\ 55 -text "Single"\ 56 -command "SetMode" 57radiobutton .gamemode.client \ 58 -value "Client"\ 59 -variable GameMode\ 60 -command "SetMode" \ 61 -text "Client" 62radiobutton .gamemode.server \ 63 -value "Server"\ 64 -variable GameMode\ 65 -command "SetMode"\ 66 -text "Server" 67 68pack .gamemode.single\ 69 .gamemode.client\ 70 .gamemode.server\ 71 -side left -expand yes 72frame .buttons -relief raised 73frame .single -relief raised 74frame .single.size -relief raised 75frame .single.gameopt -relief raised 76frame .server -relief raised 77frame .server.left -relief raised 78frame .server.left.size -relief raised 79frame .server.left.data -relief raised 80frame .server.text -relief raised 81frame .server.difficulty -relief raised 82 83radiobutton .server.difficulty.0 \ 84 -value "0"\ 85 -variable Difficulty\ 86 -text "Nightmare" 87radiobutton .server.difficulty.1 \ 88 -value "1"\ 89 -variable Difficulty\ 90 -text "Hard" 91radiobutton .server.difficulty.2 \ 92 -value "2"\ 93 -variable Difficulty\ 94 -text "Medium" 95radiobutton .server.difficulty.3 \ 96 -value "3"\ 97 -variable Difficulty\ 98 -text "Easy" 99radiobutton .server.difficulty.4 \ 100 -value "4"\ 101 -variable Difficulty\ 102 -text "Very easy" 103radiobutton .server.left.size.s \ 104 -value "-l"\ 105 -variable SScreenSize\ 106 -text "350x200 and 640x480" 107radiobutton .server.left.size.m \ 108 -value "-W"\ 109 -variable SScreenSize\ 110 -text "320x200 and 640x380" 111radiobutton .server.left.size.l \ 112 -value "-E"\ 113 -variable SScreenSize\ 114 -text "900x600" 115checkbutton .server.left.size.deathmatch \ 116 -variable Deathmatch\ 117 -text "Deathmatch"\ 118 -command "SetDeath" 119frame .server.left.data.level 120frame .server.left.data.port 121label .server.left.data.level.label -text Level 122label .server.left.data.port.label -text Port 123entry .server.left.data.level.entry -relief sunken -width 3 -textvariable Level 124#.server.left.data.level.entry insert 0 $Level 125entry .server.left.data.port.entry -relief sunken -width 6 -textvariable SPort 126#.server.left.data.port.entry insert 0 $SPort 127frame .client 128label .client.hostlabel -text Host 129label .client.portlabel -text Port 130entry .client.host -relief sunken -textvariable Host 131entry .client.port -relief sunken -width 6 -textvariable CPort 132#.client.host insert 0 $Host 133#.client.port insert 0 $CPort 134pack .client.hostlabel\ 135 .client.host\ 136 .client.portlabel\ 137 .client.port -side left -fill x 138#server.gameopt.level insert $Level 139pack .server.left.data.level.label\ 140 .server.left.data.level.entry -side left -fill x 141pack .server.left.data.port.label\ 142 .server.left.data.port.entry -side left -fill x 143pack .server.left.data.port\ 144 .server.left.data.level -side top -fill x 145pack .server.difficulty.0\ 146 .server.difficulty.1\ 147 .server.difficulty.2\ 148 .server.difficulty.3\ 149 .server.difficulty.4\ 150 -padx 10 -expand 1 -anchor w 151pack .server.left.size.s\ 152 .server.left.size.m\ 153 .server.left.size.l \ 154 .server.left.size.deathmatch -padx 10 -expand 1 -anchor w 155pack .server.left.data\ 156 .server.left.size 157#normal game options 158radiobutton .single.size.s \ 159 -value "-s"\ 160 -variable ScreenSize\ 161 -text "320x250" 162radiobutton .single.size.m \ 163 -value "-l"\ 164 -variable ScreenSize\ 165 -text "640x480" 166radiobutton .single.size.l \ 167 -value "-E"\ 168 -variable ScreenSize\ 169 -text "900x600" 170checkbutton .single.size.mode \ 171 -variable Fullscreen\ 172 -text "Fullscreen"\ 173 -command "SetExtra" 174checkbutton .single.gameopt.sound\ 175 -variable Sound\ 176 -text "sound" 177checkbutton .single.gameopt.shm\ 178 -variable Shm\ 179 -text "Use Shared memory" 180checkbutton .single.gameopt.monochrome\ 181 -variable Monochrome\ 182 -text "Monochrome" 183checkbutton .single.gameopt.blackwhite\ 184 -variable blackwhite\ 185 -text "Black and white" 186checkbutton .single.gameopt.private\ 187 -variable private\ 188 -text "Private colormap" 189checkbutton .single.gameopt.cursor\ 190 -variable Cursor\ 191 -text "Game own mouse cursor" 192button .buttons.start -text Start -command "Start" 193button .buttons.quit -text Quit -command exit 194pack .buttons.start\ 195 .buttons.quit\ 196 -expand 1 -fill x -side left 197pack .single.size.s\ 198 .single.size.m\ 199 .single.size.l\ 200 .single.size.mode -padx 10 -fill x -expand y -anchor w 201pack .single.gameopt.sound \ 202 .single.gameopt.shm \ 203 .single.gameopt.private \ 204 .single.gameopt.monochrome \ 205 .single.gameopt.blackwhite \ 206 .single.gameopt.cursor -side top -anchor w 207pack .single.size\ 208 .single.gameopt -side left 209pack .server.left .server.difficulty -side left -fill x 210pack .gamemode -side top -expand y -fill x -pady 2m 211pack .single -expand y -fill x -pady 2m 212pack .buttons -side bottom -expand y -fill x -pady 2m 213if {[file exists $xkoules] == 1} { 214 set Koulesexe $xkoules 215} else { 216 if {[file exists $koulessvga] == 1} { 217 set Fullscreen 1 218 .single.size.mode configure -state disabled 219 } else { 220 puts "Koules executable not found" 221 exit 222 } 223} 224if {[file exists $koulessound] == 0} { 225 set Sound 0 226 .single.gameopt.sound configure -state disabled 227} 228if {[file exists $koulessvga] == 1} { 229 set Koulesexe $koulessvga 230} else { 231 set Fullscreen 0 232 .single.size.mode configure -state disabled 233} 234proc SetDeath {} { 235 global Deathmatch 236 if {$Deathmatch == "1" } { 237 .server.left.data.level.entry configure -state disabled 238 } else { 239 .server.left.data.level.entry configure -state normal 240 } 241} 242SetDeath 243proc SetExtra {} { 244 global Fullscreen 245 global ScreenSize 246 if {$Fullscreen == "1" } { 247 .single.size.l configure -state disabled 248 .single.size.s configure -text 320x200 249 .single.gameopt.shm configure -state disabled 250 .single.gameopt.private configure -state disabled 251 .single.gameopt.monochrome configure -state disabled 252 .single.gameopt.blackwhite configure -state disabled 253 .single.gameopt.cursor configure -state disabled 254 if {$ScreenSize == "-E"} { 255 set ScreenSize "-l" 256 #.single.size.m configure -state active 257 } 258 } else { 259 .single.size.l configure -state normal 260 .single.size.s configure -text 320x250 261 .single.gameopt.shm configure -state normal 262 .single.gameopt.private configure -state normal 263 .single.gameopt.monochrome configure -state normal 264 .single.gameopt.blackwhite configure -state normal 265 .single.gameopt.cursor configure -state normal 266 } 267} 268SetExtra 269proc Start {} { 270 global GameMode 271 global ScreenSize 272 global private 273 global blackwhite 274 global Cursor 275 global Shm 276 global Monochrome 277 global Sound 278 global Fullscreen 279 global config 280 global revision 281 #client options 282 global CPort 283 global Host 284 #server options 285 global SPort 286 global Level 287 global Difficulty 288 global Deathmatch 289 global SScreenSize 290 global xkoules 291 global koulessvga 292 global Koulesexe 293 set FileId [open $config "w"] 294 puts $FileId $revision 295 puts $FileId $GameMode 296 puts $FileId $ScreenSize 297 puts $FileId $private 298 puts $FileId $blackwhite 299 puts $FileId $Cursor 300 puts $FileId $Shm 301 puts $FileId $Monochrome 302 puts $FileId $Sound 303 puts $FileId $Fullscreen 304 puts $FileId $CPort 305 puts $FileId $Host 306 puts $FileId $SPort 307 puts $FileId $Level 308 puts $FileId $Difficulty 309 puts $FileId $Deathmatch 310 puts $FileId $SScreenSize 311 close $FileId 312 if {$GameMode != "Server" } { 313 set opt $ScreenSize 314 if {$Sound == "0"} { 315 set opt "$opt -d" 316 } 317 if {$Fullscreen == "0"} { 318 set exec $xkoules 319 if {$private == "1"} { 320 set opt "$opt -p" 321 } 322 if {$Monochrome == "1"} { 323 set opt "$opt -m" 324 } 325 if {$blackwhite == "1"} { 326 set opt "$opt -b" 327 } 328 if {$Cursor == "1"} { 329 set opt "$opt -x" 330 } 331 if {$Shm == "0"} { 332 set opt "$opt -M" 333 } 334 } else { 335 set exec $koulessvga 336 } 337 if {$GameMode=="Client"} { 338 set opt "$opt -C $Host -P $CPort" 339 } 340 #puts "$exec $opt" 341 destroy . 342 exec /bin/sh "-c" "$exec $opt" 343 } else { 344 set exec $Koulesexe 345 set opt "-S -P $SPort $SScreenSize -D $Difficulty" 346 if {$Deathmatch == "1"} { 347 set opt "$opt -K" 348 } 349 #puts "$exec $opt" 350 destroy . 351 exec xterm "-iconic" "-title" "Koules server" "-e" "/bin/sh" "-c" "$exec $opt" 352 } 353} 354pack .gamemode\ 355 .buttons -expand 1 -side top -pady 2 -anchor w 356proc SetMode {} { 357 global GameMode 358 if {$GameMode == "Single" } { 359 pack forget .server 360 pack forget .client 361 pack .single\ 362 -before .buttons -expand 1 -side top -pady 2 -anchor w 363 } 364 if {$GameMode == "Server"} { 365 pack forget .single 366 pack forget .client 367 pack .server -before .buttons -expand 1 -side top -pady 2 -anchor w 368 } 369 if {$GameMode == "Client"} { 370 pack forget .server 371 pack .single\ 372 -before .buttons -expand 1 -side top -pady 2 -anchor w 373 pack .client\ 374 -before .buttons -expand 1 -side top -pady 2 -anchor w 375 } 376} 377puts $GameMode 378bind . <Return> Start 379bind . <Escape> exit 380bind . <Control-c> exit 381SetMode 382