X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/micropolis/blobdiff_plain/403895917c093bdb88836e8e1694e937e1dd966e..81583a602d526bf267d2426f84615e512567b29a:/res/micropolis.tcl diff --git a/res/micropolis.tcl b/res/micropolis.tcl index dc7d352..8c4c36a 100644 --- a/res/micropolis.tcl +++ b/res/micropolis.tcl @@ -97,6 +97,7 @@ set DemandCom 0 set DemandInd 0 set Priority 2 set Time 3 +set Pause 0 set AutoGoto 1 set AutoBudget 1 set Disasters 1 @@ -173,8 +174,10 @@ set NoticePanelHeight 250 set SplashPanelWidth 1200 set SplashPanelHeight 900 -set ScenarioPanelWidth 420 -set ScenarioPanelHeight 440 +#set ScenarioPanelWidth 420 +#set ScenarioPanelHeight 440 +set ScenarioPanelWidth 1200 +set ScenarioPanelHeight 900 set SugarURI "" set SugarNickName "" @@ -203,7 +206,7 @@ set SubWindows { # 0 1 2 3 4 5 6 7 8 9 10 11 12 13 # type id callback param var x y w h normal over disabled checked checkedover # ----------- --------------- --------------- ------- ------- --- --- --- --- ------- ---- -------- ------- ----------- -set ScenarioButtons { +set ScenarioButtons1200x900 { { button load DoLoad "" "" 70 238 157 90 "" @images/button1hilite.xpm "" } { button generate DoGenerate "" "" 62 392 157 90 "" @images/button2hilite.xpm "" } { button quit DoQuit "" "" 68 544 157 90 "" @images/button3hilite.xpm "" } @@ -224,6 +227,67 @@ set ScenarioButtons { { button scenario8 DoPickScenario "6" "" 937 638 209 188 "" @images/scenario8hilite.xpm "" } } +set ScenarioButtons600x450 { + { button load DoLoad "" "" 35 119 79 45 "" @images/button1hilite-small.xpm "" } + { button generate DoGenerate "" "" 31 196 79 45 "" @images/button2hilite-small.xpm "" } + { button quit DoQuit "" "" 34 272 79 45 "" @images/button3hilite-small.xpm "" } + { button about DoAbout "" "" 51 353 79 45 "" @images/button4hilite-small.xpm "" } + { checkbox easy DoLevel 0 "" 491 53 95 35 "" @images/checkbox1hilite-small.xpm "" @images/checkbox1checked-small.xpm @images/checkbox1hilitechecked-small.xpm } + { checkbox medium DoLevel 1 "" 491 88 95 35 "" @images/checkbox2hilite-small.xpm "" @images/checkbox2checked-small.xpm @images/checkbox2hilitechecked-small.xpm } + { checkbox hard DoLevel 2 "" 491 123 95 35 "" @images/checkbox3hilite-small.xpm "" @images/checkbox3checked-small.xpm @images/checkbox3hilitechecked-small.xpm } + { button left DoLeft "" "" 270 187 25 25 "" @images/lefthilite-small.xpm @images/leftdisabled-small.xpm } + { button right DoRight "" "" 420 187 25 25 "" @images/righthilite-small.xpm @images/rightdisabled-small.xpm } + { button play DoPlay "" "" 312 188 90 25 "" @images/playhilite-small.xpm "" } + { button scenario1 DoPickScenario "1" "" 155 225 105 94 "" @images/scenario1hilite-small.xpm "" } + { button scenario2 DoPickScenario "2" "" 259 225 105 94 "" @images/scenario2hilite-small.xpm "" } + { button scenario3 DoPickScenario "3" "" 363 225 105 94 "" @images/scenario3hilite-small.xpm "" } + { button scenario4 DoPickScenario "4" "" 468 225 105 94 "" @images/scenario4hilite-small.xpm "" } + { button scenario5 DoPickScenario "5" "" 155 319 105 94 "" @images/scenario5hilite-small.xpm "" } + { button scenario6 DoPickScenario "8" "" 259 319 105 94 "" @images/scenario6hilite-small.xpm "" } + { button scenario7 DoPickScenario "7" "" 363 319 105 94 "" @images/scenario7hilite-small.xpm "" } + { button scenario8 DoPickScenario "6" "" 468 319 105 94 "" @images/scenario8hilite-small.xpm "" } + { button map DoMap "" "" 267 24 180 150 "" "" "" } +} + +set ScenarioButtons $ScenarioButtons1200x900 +set ScenarioBackground "@images/background-micropolis.xpm" +set ScenarioMapX 534 +set ScenarioMapY 48 +set ScenarioMapFloatX -1 +set ScenarioMapFloatY -1 +set ScenarioCityNameX 530 +set ScenarioCityNameY 0 +set ScenarioDescX 232 +set ScenarioDescY 170 +set ScenarioDescWidth 280 +set ScenarioDescHeight 285 +set ScenarioDescFont Large +set EventLines 5 + +set screenwidth [winfo screenwidth .] +set screenheight [winfo screenheight .] + +if {($screenwidth < $ScenarioPanelWidth) || + ($screenheight < $ScenarioPanelHeight)} { + puts stdout "Screen too small for normal scenario window, using resized version.\n" + set ScenarioBackground "@images/background-micropolis-small.xpm" + set ScenarioPanelWidth 600 + set ScenarioPanelHeight 450 + set ScenarioMapX -1 + set ScenarioMapY -1 + set ScenarioMapFloatX 140 + set ScenarioMapFloatY 2 + set ScenarioCityNameX 162 + set ScenarioCityNameY 422 + set ScenarioDescX 250 + set ScenarioDescY 4 + set ScenarioDescWidth 240 + set ScenarioDescHeight 210 + set ScenarioDescFont Tiny + set ScenarioButtons $ScenarioButtons600x450 + set EventLines 2 +} + # Disabled until we handle mouse events on the map itself. # { button map DoMap "" "" 516 30 396 338 "" @images/maphilite.xpm } @@ -412,8 +476,12 @@ sim ResetDynamic # the font in res (because it's already in the system fonts). These lines # are for other systems that lack the font. set FontPath "[pwd]/res/dejavu-lgc" -system "xset -fp $FontPath >/dev/null 2>&1" -system "xset +fp $FontPath >/dev/null 2>&1" +system "xset -fp \"$FontPath\" >/dev/null 2>&1" +system "xset +fp \"$FontPath\" >/dev/null 2>&1" + +# Ignore SIGCHLD for spawned sound-player childs, this should lead to them +# being reaped by init +signal ignore SIGCHLD ######################################################################## @@ -937,21 +1005,11 @@ proc UISetChannelVolume {win chan vol} { proc EchoPlaySound {soundspec} { - # Temporary workaround to tell Python Sugar app to play sound. - global Sound - if {$Sound} { - #echo PlaySound [lindex $soundspec 0] - signal ignore SIGCHLD - exec res/sounds/player res/sounds/[string tolower [lindex $soundspec 0]].wav & - } } proc UIMakeSoundOn {win chan sound {opts ""}} { - # Send message to Python to play sound. - EchoPlaySound $sound - - #UIDoSoundOn $win "play $sound -replay -channel $chan $opts" + playsound $chan $sound $opts } @@ -963,16 +1021,8 @@ proc UIStartSoundOn {win chan sound {opts ""}} { } -proc UIStopSoundOn {win chan sound {opts ""}} { - UIDoSoundOn $win "stop $sound" -} - - proc UIMakeSound {chan sound {opts ""}} { - # Send message to Python to play sound. - EchoPlaySound $sound - - #UIDoSound "sound play $sound -replay -channel $chan $opts" + playsound $chan $sound $opts } @@ -984,11 +1034,6 @@ proc UIStartSound {chan sound {opts ""}} { } -proc UIStopSound {chan sound {opts ""}} { - UIDoSound "sound stop $sound" -} - - proc SetupSoundServer {win} { AddSoundServer $win } @@ -2043,13 +2088,13 @@ proc DoFileDialog {win Message Path Pattern FileName ActionOk ActionCancel} { wm withdraw $win" bind $win.files.files "" "\ FileSelectDouble $win %W %y $Pattern \" - $ActionOk \[$win.file.file get\] \[$win.path.path get\]\"" + $ActionOk {\[$win.file.file get\]} {\[$win.path.path get\]}\"" bind $win.path.path " ShowFileDialog $win \[$win.path.path get\] $Pattern $win.file.file cursor 0 focus $win.file.file" bind $win.file.file "\ - $ActionOk \[$win.file.file get\] \[$win.path.path get] + $ActionOk \[$win.file.file get\] \[$win.path.path get\] wm withdraw $win" } @@ -2285,18 +2330,18 @@ proc NameComplete {win Type} { proc ShowFileDialog {win Path Pattern} { busy $win { - set Path [lindex [split $Path] 0] + #set Path [lindex [split $Path] 0] if {[$win.files.files size] > 0} { $win.files.files delete 0 end } # read directory - if {[catch "exec ls -F $Path" Result]} { + if {[catch "exec ls -F \"$Path\"" Result]} { set ElementList {} } if {[string match $Result "* not found"]} { set ElementList {} } - set ElementList [lsort $Result] + set ElementList [lsort [split $Result "\n"]] # insert .. if {[string compare $Path "/"]} { @@ -2536,7 +2581,7 @@ proc EditorToolUp {w x y} { case [$w ToolState] in \ 7 { # bulldozer - UIStopSoundOn $w edit 1 + stopdozer } \ 10 { # chalk StopChalk $w @@ -3309,12 +3354,44 @@ proc UpdateScenarioButtonID {win id} { proc UpdateScenarioButton {win data} { + global Messages + set type [lindex $data 0] set id [lindex $data 1] set over [WindowLink $win.$id.over] set enabled [WindowLink $win.$id.enabled] set checked [WindowLink $win.$id.checked] #echo "WIN $win TYPE $type ID $id OVER $over ENABLED $enabled CHECKED $checked" + if {$over} { + if {[lindex ${data} 2] == "DoPickScenario"} { + global ScenarioDescX ScenarioDescY ScenarioDescWidth ScenarioDescHeight ScenarioDescFont + catch {text $win.desc \ + -borderwidth 2 \ + -relief flat \ + -wrap word \ + -state normal \ + -font [Font $win $ScenarioDescFont]} + + $win.desc configure -state normal + $win.desc delete 0.0 end + $win.desc insert end "[lindex $Messages([lindex ${data} 3]) 1]\n\n[lindex $Messages([lindex ${data} 3]) 2]" + $win.desc configure -state disabled + + place $win.desc -x $ScenarioDescX -y $ScenarioDescY -width $ScenarioDescWidth -height $ScenarioDescHeight + } + if {[lindex ${data} 2] == "DoMap"} { + global ScenarioMapFloatX ScenarioMapFloatY + if { $ScenarioMapFloatX != "-1" } { + place $win.canvas.view -x $ScenarioMapFloatX -y $ScenarioMapFloatY + } + } + } else { + catch {destroy $win.desc} + global ScenarioMapFloatX + if { $ScenarioMapFloatX != "-1" } { + catch {place forget $win.canvas.view} + } + } if {$enabled} { if {$checked} { if {$over} { @@ -4917,12 +4994,14 @@ proc oops {} { proc TogglePause {} { - global State + global State Pause if {"$State" != "play" || [sim Speed]} { sim Speed 0 + set Pause 1 } else { sim Speed 3 + set Pause 0 } MakeRunningSound } @@ -5129,7 +5208,7 @@ proc UIDoLoadCity {name path} { if {![string match *.cty $name]} { set name $name.cty } - MakeHistory "DoLoadCity $path/$name" + MakeHistory "DoLoadCity {$path/$name}" } @@ -5224,8 +5303,14 @@ proc DoLeaveGame {head} { proc UILoseGame {} { - UIPickScenarioMode + global Messages UIShowPicture 200 + sim Pause + AskQuestion [Color . #ff0000 #ffffff] [lindex $Messages(200) 1] \ + [lindex $Messages(200) 2] \ + ""\ + ""\ + "{Ok} SelectCity.Yes {UIPickScenarioMode}" }