X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/micropolis/blobdiff_plain/e555720e8e5157017ff6ae6e68a550a84b9a22db..1f4aeab6ff1a6d74140387d699f9839360c95156:/res/micropolis.tcl?ds=inline

diff --git a/res/micropolis.tcl b/res/micropolis.tcl
index 773ceb3..8c4c36a 100644
--- a/res/micropolis.tcl
+++ b/res/micropolis.tcl
@@ -174,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 ""
@@ -204,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 "" }
@@ -225,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 }
 
@@ -413,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
 
 
 ########################################################################
@@ -938,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
 }
 
 
@@ -964,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
 }
 
 
@@ -985,11 +1034,6 @@ proc UIStartSound {chan sound {opts ""}} {
 }
 
 
-proc UIStopSound {chan sound {opts ""}} {
-  UIDoSound "sound stop $sound"
-}
-
-
 proc SetupSoundServer {win} {
   AddSoundServer $win
 }
@@ -2044,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"
 }
 
@@ -2286,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 "/"]} {
@@ -2537,7 +2581,7 @@ proc EditorToolUp {w x y} {
 
   case [$w ToolState] in \
     7 { # bulldozer
-     UIStopSoundOn $w edit 1
+      stopdozer
     } \
     10 { # chalk
       StopChalk $w
@@ -3310,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} {
@@ -5132,7 +5208,7 @@ proc UIDoLoadCity {name path} {
   if {![string match *.cty $name]} {
     set name $name.cty
   }
-  MakeHistory "DoLoadCity $path/$name"
+  MakeHistory "DoLoadCity {$path/$name}"
 }
 
 
@@ -5227,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}"
 }