set DemandInd 0
set Priority 2
set Time 3
+set Pause 0
set AutoGoto 1
set AutoBudget 1
set Disasters 1
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 ""
# 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 "" }
{ 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 }
# 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
########################################################################
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
}
}
-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
}
}
-proc UIStopSound {chan sound {opts ""}} {
- UIDoSound "sound stop $sound"
-}
-
-
proc SetupSoundServer {win} {
AddSoundServer $win
}
wm withdraw $win"
bind $win.files.files "<Double-Button-1>" "\
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 <Return> "
ShowFileDialog $win \[$win.path.path get\] $Pattern
$win.file.file cursor 0
focus $win.file.file"
bind $win.file.file <Return> "\
- $ActionOk \[$win.file.file get\] \[$win.path.path get]
+ $ActionOk \[$win.file.file get\] \[$win.path.path get\]
wm withdraw $win"
}
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 "/"]} {
case [$w ToolState] in \
7 { # bulldozer
- UIStopSoundOn $w edit 1
+ stopdozer
} \
10 { # chalk
StopChalk $w
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} {
UILoadScenario $param
}
+proc DeleteScenarioWindow {win} {
+ UIQuit $win
+}
+
########################################################################
# Undo/Redo Facility
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
}
if {![string match *.cty $name]} {
set name $name.cty
}
- MakeHistory "DoLoadCity $path/$name"
+ MakeHistory "DoLoadCity {$path/$name}"
}
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}"
}