X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/micropolis/blobdiff_plain/6a5fa4e03967ab980cdc7ef96a42400bc29b4414..1f4aeab6ff1a6d74140387d699f9839360c95156:/res/micropolis.tcl

diff --git a/res/micropolis.tcl b/res/micropolis.tcl
index b1379c1..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"
-system "xset +fp $FontPath >&/dev/null"
+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
 
 
 ########################################################################
@@ -484,7 +552,7 @@ Either clean up your act or open a gas mask concession at city hall.} \
 {{view {PanView $v [sim PolMaxX] [sim PolMaxY]}}}
 
 Message 11 #ff4f4f {CRIME ALERT!} \
-{Crime in your city is our of hand.  Angry mobs are looting and vandalizing the central city.  The president will send in the national guard soon if you cannot control the problem.} \
+{Crime in your city is out of hand.  Angry mobs are looting and vandalizing the central city.  The president will send in the national guard soon if you cannot control the problem.} \
 {{view {PanView $v [sim CrimeMaxX] [sim CrimeMaxY]}}}
 
 Message 12 #ff4f4f {TRAFFIC WARNING!} \
@@ -937,19 +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]
-  }
 }
 
 
 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
 }
 
 
@@ -961,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
 }
 
 
@@ -982,11 +1034,6 @@ proc UIStartSound {chan sound {opts ""}} {
 }
 
 
-proc UIStopSound {chan sound {opts ""}} {
-  UIDoSound "sound stop $sound"
-}
-
-
 proc SetupSoundServer {win} {
   AddSoundServer $win
 }
@@ -2041,13 +2088,13 @@ proc DoFileDialog {win Message Path Pattern FileName ActionOk ActionCancel} {
       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"
 }
 
@@ -2283,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 "/"]} {
@@ -2534,7 +2581,7 @@ proc EditorToolUp {w x y} {
 
   case [$w ToolState] in \
     7 { # bulldozer
-     UIStopSoundOn $w edit 1
+      stopdozer
     } \
     10 { # chalk
       StopChalk $w
@@ -3099,8 +3146,10 @@ proc ShowSplashOf {head} {
 
 
 proc WithdrawSplashOf {head} {
-  set win WindowLink $head.splash]
-  wm withdraw $win
+  set win [WindowLink $head.splash]
+  if {$win != {}} {
+    wm withdraw $win
+  }
 }
 
 
@@ -3150,8 +3199,10 @@ proc ShowScenarioOf {head} {
 
 
 proc WithdrawScenarioOf {head} {
-  set win WindowLink $head.scenario]
-  wm withdraw $win
+  set win [WindowLink $head.scenario]
+  if {$win != {}} {
+    wm withdraw $win
+  }
 }
 
 
@@ -3303,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} {
@@ -3542,6 +3625,10 @@ proc DoPickScenario {win param} {
   UILoadScenario $param
 }
 
+proc DeleteScenarioWindow {win} {
+  UIQuit $win
+}
+
 
 ########################################################################
 # Undo/Redo Facility
@@ -4907,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
 }
@@ -5119,7 +5208,7 @@ proc UIDoLoadCity {name path} {
   if {![string match *.cty $name]} {
     set name $name.cty
   }
-  MakeHistory "DoLoadCity $path/$name"
+  MakeHistory "DoLoadCity {$path/$name}"
 }
 
 
@@ -5214,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}"
 }