Sokoban — File Browser
Sokobanv1.2 / Sokobanv1.2 / Sokoban.mrc
Sokoban.mrc — 40.73 KB — Download this file
;-------------------------------- -------------- - -----------------------
; Sokoban 1.2 by praetorian
; praetorian@mircscripts.org
; http://praetorian.mircscripts.org
;---------------- --- - - -
; Sokoban is a simple puzzle game created in Japan in 1980 and copyrighted by Thinking Rabbit, INC. in 1982.
;
; The objective of the game is to move all of the squares (cardboard boxes) into the "slots" (shaded/grayed boxes)
; until all of the boxes have been placed on a square.
;
; See README.txt for installation instructions and general information about this addon.
on 1:load:{
if ($version < 5.8) { echo $color(info) -ae * Sokoban requires mIRC 5.8 or higher to function. You can try to use it anyway, but it probably isn't going to work. }
else {
echo $color(info) -ae * Sokoban 1.2 by praetorian loaded.
echo $color(info) -ae * To play, click on "Play Sokoban" in the menubar or status window popup, or type /sokoban.
}
}
dialog sokoabout {
title "Sokoban - About"
size -1 -1 150 30
option dbu
icon $scriptdirimages\box.ico
text "Sokoban v1.2 by praetorian", 1, 20 2 127 8
button "Button", 3, 0 0 0 0, ok
icon 5, 1 5 15 15, $scriptdirImages\box.ico, 0, noborder
text "Email: ", 6, 20 10 16 8
link "praetorian@mircscripts.org", 7, 36 10 112 9
text "Homepage:", 8, 20 18 27 8
link "http://www.detox.xs3.com", 9, 50 18 98 8
text "", 11, 2 28 146 8,
text "", 12, 2 36 146 8,
text "", 13, 2 44 146 8,
text "", 14, 2 52 146 8,
text "", 15, 2 60 146 8,
text "", 16, 2 68 146 8,
text "", 17, 2 76 146 8,
text "", 18, 2 84 146 8,
text "", 19, 2 92 146 8,
text "", 20, 2 100 146 8,
text "", 21, 2 108 146 8,
text "", 22, 2 116 146 8,
text "", 23, 2 124 146 8,
text "", 24, 2 132 146 8,
text "", 25, 2 140 146 8,
}
dialog sokoerror {
title Sokoban - Error
option dbu
size -1 -1 80 26
icon $scriptdirimages\box.ico
text "No such level.",1,2 2 76 8,center
button "Ok",2,25 12 30 10,ok,result
}
dialog sokoseriesend {
title Sokoban - Error
option dbu
size -1 -1 100 34
icon $scriptdirimages\box.ico
text "There are no more levels in this series.",1,2 2 96 8,center
text "",2,2 10 96 8,center
button "&Yes",3,20 20 30 10,ok,result
button "&No",4,50 20 30 10,cancel
}
dialog sokogoto {
title Sokoban - Go to level
option dbu
size -1 -1 80 30
icon $scriptdirimages\box.ico
text "Go to level..",1,2 4 32 8,
combo 2,34 2 44 100,drop,edit,right,result
button "&Ok",3,10 16 30 10,ok
button "&Cancel",4,40 16 30 10,cancel
}
alias sokoban {
window -ak0pdhf @Sokoban -1 -1 440 372
window @sokoban iconfile $scriptdirimages\box.ico
drawpic -clsn @sokoban 0 0 440 352 $+(",$scriptdirimages\dark.bmp,")
if ($hget(sokoban)) { hfree sokoban }
hmake sokoban 100
if ($hget(sokolevel)) { hfree sokolevel }
hmake sokolevel 100
drawrect -nfr @sokoban $rgb(face) 1 0 352 440 20
drawline -nr @sokoban $rgb(3dlight) 1 0 352 440 352
drawline -nr @sokoban $rgb(hilight) 1 0 353 440 353
drawline -nr @sokoban $rgb(shadow) 1 57 356 0 356 0 372
drawline -nr @sokoban $rgb(3dlight) 1 1 371 57 371 57 356
drawline -nr @sokoban $rgb(3dlight) 1 439 356 439 371 320 371 | drawline -nr @sokoban $rgb(shadow) 1 320 371 320 356 440 356
drawline -nr @sokoban $rgb(3dlight) 1 316 356 316 371 196 371 | drawline -nr @sokoban $rgb(shadow) 1 197 371 197 356 317 356 | drawline -nr @sokoban $rgb(shadow) 1 193 356 61 356 61 372 | drawline -nr @sokoban $rgb(3dlight) 1 62 371 193 371 193 356 | hadd sokoban series 1 | hadd sokoban time 0 | .timer 1 0 sokoload 1-1 | hadd sokoban edit off
sokovercheck
}
alias -l sokosave {
hadd sokolevel pusher $hget(sokoban,pusher)
hadd sokolevel grid $hget(sokoban,grid)
hadd sokolevel level $hget(sokoban,series) $+ - $+ $hget(sokoban,level)
hadd sokolevel moves $hget(sokoban,moves)
hadd sokolevel pushes $hget(sokoban,pushes)
hadd sokolevel time $hget(sokoban,time)
var %i = 1,%g = $hget(sokoban,grid)
while ($hmatch(sokolevel,*,%i)) {
var %t = $ifmatch,%tg = $calc($gettok(%t,1,46) + 1) $+ . $+ $calc($gettok(%t,2,46) + 1)
if ($hget(sokolevel,%t) == $!scriptdirimages\pusher.bmp) {
hadd sokolevel $hmatch(sokolevel,*,%i) $!scriptdirimages\light.bmp
}
if ($istok(%g,%t,33)) && ($hget(sokolevel,%tg) != $!scriptdirimages\grid.bmp) {
hadd sokolevel %tg $iif($hget(sokolevel,%tg) == $!scriptdirimages\light.bmp,$!scriptdirimages\grid.bmp,$instok($hget(sokolevel,%tg),$!scriptdirimages\grid.bmp,1,33))
}
inc %i
}
var %pt = $instok($calc($gettok($hget(sokoban,pusher),1,32) + 1),$calc($gettok($hget(sokoban,pusher),2,32) + 1),2,46)
var %tt = $calc($gettok(%pt,1,46) - 1) $+ . $+ $calc($gettok(%pt,2,46) - 1),%ift = $istok(%g,%tt,33)
hadd sokolevel %pt $iif(%ift,$!scriptdirimages\grid.bmp $+ ! $+ $!scriptdirimages\pusher.bmp,$!scriptdirimages\pusher.bmp)
hsave -o sokolevel $+(",$1-,$iif($right($1-,4) != .sav,.sav),")
}
alias sokoload {
var %l = $iif($exists($scriptdirlevels\ $+ $gettok($1,1,45) $+ .info),y)
if (%l != y) { hadd sokoban type nt | hadd sokoban nt $1 }
else { hadd sokoban type reg }
if (!$1) { return }
if (!$exists($scriptdirlevels\ $+ $1 $+ .sok)) { var %e = $dialog(sokoerror,sokoerror,@sokoban) | return }
hfree sokolevel
hmake sokolevel 100
hdel sokoban grid
hadd sokoban time 0
hload sokolevel $+(",$scriptdirlevels\ $+ $1 $+ .sok,")
hadd sokoban series $gettok($1,1,45) | hadd sokoban level $gettok($1,2,45)
sokotxt Level Level $gettok($1,2,45)
if (%l == y) {
titlebar @sokoban - $read($scriptdirlevels\ $+ $gettok($1,1,45) $+ .info,1) - Level $gettok($1,2,45) of $findfile($scriptdirlevels\,$gettok($1,1,45) $+ *-*.sok,0)
}
else { titlebar @sokoban - $1 $+ .sok }
hdel sokoban pushes
hdel sokoban pusher
hdel sokoban moves
var %r = $readini(mirc.ini,sokoban,$hget(sokoban,series) $+ - $+ $hget(sokoban,level))
var %t = $gettok(%r,1,33)
sokotxt pushes 0 Pushes (Best: $iif(%t,%t,N\A) $+ )
var %t = $gettok(%r,2,33)
sokotxt moves 0 Moves (Best: $iif(%t,%t,N\A) $+ )
var %t = $gettok($readini(mirc.ini,sokoban,$hget(sokoban,series) $+ - $+ $hget(sokoban,level)),3,33)
sokotxt time $sokohms($hget(sokoban,time)) (Best: $iif(%t,$sokohms(%t),N\A) $+ )
.timercount -o 0 1 sokotime
drawpic -csl @sokoban 0 0 440 352 $+(",$scriptdirimages\dark.bmp,")
drawdot @sokoban
sokodrawlevel
}
alias -l sokodrawlevel {
var %i = 1,%g = 1
drawpic -sl @sokoban 0 0 440 352 $+(",$scriptdirimages\dark.bmp,")
while ($hmatch(sokolevel,*,%i)) {
var %p = $ifmatch
if ($gettok($hget(sokolevel,%p),1,33) == $!scriptdirimages\pusher.bmp) || ($gettok($hget(sokolevel,%p),1,33) == $!scriptdirimages\box.bmp) {
drawpic -tnr @sokoban $rgb(252,2,252) $sokogrid($calc($gettok(%p,1,46) - 1),$calc($gettok(%p,2,46) - 1)).draw $+(",$scriptdirimages\light.bmp,")
}
drawpic -ctr @sokoban $rgb(252,2,252) $sokogrid($calc($gettok(%p,1,46) - 1),$calc($gettok(%p,2,46) - 1)).draw $+(",$eval($gettok($hget(sokolevel,%p),1,33),2),")
if ($gettok($hget(sokolevel,%p),1,33) == $!scriptdirimages\pusher.bmp) {
hadd sokoban pusher $calc($gettok(%p,1,46) - 1) $calc($gettok(%p,2,46) - 1)
}
if ($gettok($hget(sokolevel,%p),1,33) == $!scriptdirimages\grid.bmp) {
var %t = $instok($calc($gettok(%p,1,46) - 1),$calc($gettok(%p,2,46) - 1),2,46)
hadd sokoban grid $addtok($hget(sokoban,grid),%t,33)
if ($gettok($hget(sokolevel,%p),2,33) == $!scriptdirimages\pusher.bmp) {
hadd sokoban pusher $calc($gettok(%p,1,46) - 1) $calc($gettok(%p,2,46) - 1)
}
if ($gettok($hget(sokolevel,%p),2,33)) {
drawpic -ctr @sokoban $rgb(252,2,252) $sokogrid($calc($gettok(%p,1,46) - 1),$calc($gettok(%p,2,46) - 1)).draw $+(",$eval($gettok($hget(sokolevel,%p),2,33),2),")
}
if ($gettok($hget(sokolevel,%p),2,33) == $!scriptdirimages\box.bmp) {
hadd sokolevel %p $!scriptdirimages\box.bmp
}
}
inc %i
}
if ($hget(sokoundo)) { hfree sokoundo }
}
alias -l sokomove {
if ($hget(sokoban,edit) = on) { return }
var %grid = $hget(sokoban,grid)
if ($hget(sokolevel,$instok($calc($3 + 1),$calc($4 + 1),2,46)) == $!scriptdirimages\border.bmp) { return } \
if ($hget(sokolevel,$instok($calc($3 + 1),$calc($4 + 1),2,46)) == $!scriptdirimages\box.bmp) {
if ($hget(sokolevel,$instok($calc($3 - ($1 - $3) + 1),$calc($4 - ($2 - $4) + 1),2,46)) == $!scriptdirimages\box.bmp) || ($hget(sokolevel,$instok($calc($3 - ($1 - $3) + 1),$calc($4 - ($2 - $4) + 1),2,46)) == $!scriptdirimages\border.bmp) { return }
var %t = $instok($3,$4,2,46)
drawpic -ctnr @sokoban $rgb(252,2,252) $sokogrid($calc($3 - ($1 - $3)),$calc($4 - ($2 - $4))).draw $+(",$scriptdirimages\box.bmp,")
if ($istok(%grid,%t,33)) { drawpic -ctnr @sokoban $rgb(252,2,252) $sokogrid($3,$4).draw $+(",$scriptdirimages\grid.bmp,") }
else { drawpic -ctnr @sokoban $rgb(252,2,252) $sokogrid($3,$4).draw $+(",$scriptdirimages\light.bmp,") }
hadd sokolevel $instok($calc($3 + 1),$calc($4 + 1),2,46) $!scriptdirimages\light.bmp
hadd sokolevel $instok($calc($3 - ($1 - $3) + 1),$calc($4 - ($2 - $4) + 1),2,46) $!scriptdirimages\box.bmp
var %ub = $instok($calc($3 + 1),$calc($4 + 1),2,46),%nb = $instok($calc($3 - ($1 - $3) + 1),$calc($4 - ($2 - $4) + 1),2,46)
hadd sokoban pushes $calc($hget(sokoban,pushes) + 1)
var %incd = 1
var %pt = $gettok($readini(mirc.ini,sokoban,$hget(sokoban,series) $+ - $+ $hget(sokoban,level)),1,33)
sokotxt pushes $hget(sokoban,pushes) Pushes (Best $iif(%pt,%pt,N\A) $+ )
if ($istok(%grid,$instok($calc($3 - ($1 - $3) - 0),$calc($4 - ($2 - $4) - 0),2,46),33)) && ($sokoboxes(torf)) {
var %mt = $gettok($readini(mirc.ini,sokoban,$hget(sokoban,level)),2,33),%r = $readini(mirc.ini,sokoban,$hget(sokoban,level))
if (%pt > $hget(sokoban,pushes)) || (!%pt) { var %pf = $hget(sokoban,pushes) }
else { var %pf = %pt }
if (%mt > $hget(sokoban,moves)) || (!%mt) { var %mf = $hget(sokoban,moves) }
else { var %mf = %mt }
var %st = $readini(mirc.ini,sokoban,$hget(sokoban,series) $+ - $+ $hget(sokoban,level))
if ($gettok(%st,3,33) > $hget(sokoban,time)) || (!$gettok(%st,3,33)) { var %tf = $hget(sokoban,time) }
else { var %tf = $gettok($readini(mirc.ini,sokoban,$hget(sokoban,series) $+ - $+ $hget(sokoban,level)),3,33) }
writeini mirc.ini sokoban $hget(sokoban,series) $+ - $+ $hget(sokoban,level) $instok($instok(%pf,%mf,2,33),%tf,3,33)
.timer -m 1 10 sokobeat
}
}
var %t = $instok($1,$2,2,46) | if ($istok(%grid,%t,33)) { drawpic -ctnr @sokoban $rgb(252,2,252) $sokogrid($calc($1),$calc($2)).draw $+(",$scriptdirimages\grid.bmp,") } | else { drawpic -ctnr @sokoban $rgb(252,2,252) $sokogrid($calc($1),$calc($2)).draw $+(",$scriptdirimages\light.bmp,") } | drawpic -ctnr @sokoban $rgb(252,2,252) $sokogrid($3,$4).draw $+(",$scriptdirimages\pusher.bmp,") | hadd sokoban pusher $3 $4 | if (!%incd) { hadd sokoban moves $calc($hget(sokoban,moves) + 1) | var %mt = $gettok($readini(mirc.ini,sokoban,$hget(sokoban,series) $+ - $+ $hget(sokoban,level)),2,33) | sokotxt moves $hget(sokoban,moves) Moves (Best: $iif(%mt,%mt,N\A) $+ ) } | sokoundos $1 $2 %ub %nb
drawdot @sokoban
}
alias -l sokoundo {
if (!$hget(sokoundo)) || (!$hmatch(sokoundo,*,0)) { return } | var %t = $gettok($hget(sokoundo,$hmatch(sokoundo,*,0)),1,33),%b = $gettok($hget(sokoundo,$hmatch(sokoundo,*,0)),3,33),%lb = $gettok($hget(sokoundo,$hmatch(sokoundo,*,0)),2,33),%tm = $hget(sokoban,pusher),%tmm = $gettok(%tm,1,32) $+ . $+ $gettok(%tm,2,32)
drawpic -tnr @sokoban $rgb(252,2,252) $sokogrid($gettok(%t,1,46),$gettok(%t,2,46)).draw $+(",$scriptdirimages\pusher.bmp,") | if ($istok($hget(sokoban,grid),%tmm,33)) { drawpic -tnr @sokoban $rgb(252,2,252) $sokogrid($gettok(%tm,1,32),$gettok(%tm,2,32)).draw $+(",$scriptdirimages\grid.bmp,") } | else { drawpic -tnr @sokoban $rgb(252,2,252) $sokogrid($gettok(%tm,1,32),$gettok(%tm,2,32)).draw $+(",$scriptdirimages\light.bmp,") } | hadd sokoban pusher $gettok(%t,1,46) $gettok(%t,2,46) | hdel sokoundo $hmatch(sokoundo,*,0)
if ($hget(sokolevel,%b)) { var %tb = $instok($calc($gettok(%b,1,46) - 1),$calc($gettok(%b,2,46) - 1),2,46) | drawpic -tnr @sokoban $rgb(252,2,252) $sokogrid($calc($gettok(%lb,1,46) - 1),$calc($gettok(%lb,2,46) - 1)).draw $+(",$scriptdirimages\box.bmp,") | if ($istok($hget(sokoban,grid),%tb,33)) { drawpic -tnr @sokoban $rgb(252,2,252) $sokogrid($calc($gettok(%b,1,46) - 1),$calc($gettok(%b,2,46) - 1)).draw $+(",$scriptdirimages\grid.bmp,") } | else { drawpic -tnr @sokoban $rgb(252,2,252) $sokogrid($calc($gettok(%b,1,46) - 1),$calc($gettok(%b,2,46) - 1)).draw $+(",$scriptdirimages\light.bmp,") } | hadd sokolevel %lb $!scriptdirimages\box.bmp | hadd sokolevel %b $!scriptdirimages\light.bmp } | drawdot @sokoban
}
alias -l sokogrid { if ($prop == mouse) { return $calc($int($calc($1 / 22)) + 1) $calc($int($calc($2 / 22)) + 1) } | if ($prop == window) { return $calc($int($calc($1 / 22)) * 22) $calc($int($calc($2 / 22)) * 22) } | if ($prop == draw) { return $calc($1 * 22) $calc($2 * 22) } }
alias -l sokonext { if ($1) { if ($sokoext($calc($hget(sokoban,series) + 1) $+ -1)) { return $true } | else { return $false } } | else { hadd sokoban series $calc($hget(sokoban,series) + 1) | hadd sokoban level 1 | sokoload $hget(sokoban,series) $+ - $+ $hget(sokoban,level) } }
alias -l sokoprev { if ($1) { if ($sokoext($calc($hget(sokoban,series) - 1) $+ -1)) { return $true } | else { return $false } } | else { hadd sokoban series $calc($hget(sokoban,series) - 1) | hadd sokoban level 1 | sokoload $hget(sokoban,series) $+ - $+ $hget(sokoban,level) } }
alias -l sokoloadsave {
hfree sokolevel
hmake sokolevel 100
hload sokolevel $+(",$1-,")
hadd sokoban moves $hget(sokolevel,moves)
hadd sokoban pushes $hget(sokolevel,pushes)
hadd sokoban grid $hget(sokolevel,grid)
hadd sokoban level $gettok($hget(sokolevel,level),2,$asc(-))
hadd sokoban pusher $hget(sokolevel,pusher)
hadd sokoban time $hget(sokolevel,time)
hadd sokoban series $gettok($hget(sokolevel,level),1,$asc(-))
hdel sokolevel moves
hdel sokolevel pushes
hdel sokolevel grid
hdel sokolevel level
hdel sokolevel pusher
hdel sokolevel time
var %s = $hget(sokoban,series)
var %sn = $read($+(",$scriptdirlevels\,%s,.info,"),1)
titlebar @sokoban - %sn - Level $hget(sokoban,level) of $findfile($scriptdirlevels\,$hget(sokoban,series) $+ *-*.sok,0)
drawpic -csl @sokoban 0 0 440 352 $+(",$scriptdirimages\dark.bmp,")
var %t = $readini(mirc.ini,sokoban,$hget(sokoban,level))
sokotxt pushes $hget(sokoban,pushes) Pushes (Best: $iif($gettok(%t,1,33),$ifmatch,N\A) $+ )
sokotxt moves $hget(sokoban,moves) Moves (Best: $iif($gettok(%t,2,33),$ifmatch,N\A) $+ )
sokodrawlevel
}
alias -l sokotxt { if ($1 == level) { drawrect -nfr @sokoban $rgb(face) 1 1 357 56 14 | drawtext -nr @sokoban $rgb(text) "arial" -8 $calc((56 / 2) - ($width($2-,arial,-8) / 2)) 357 $2- } | if ($1 == pushes) { drawrect -nfr @sokoban $rgb(face) 1 322 357 117 14 | drawtext -nr @sokoban $rgb(text) "arial" -8 $calc((117 / 2) - ($width($2-,arial,-8) / 2) + 322) 357 $2- } | if ($1 == moves) { drawrect -nfr @sokoban $rgb(face) 1 199 357 117 14 | drawtext -nr @sokoban $rgb(text) "arial" -8 $calc((117 / 2) - ($width($2-,arial,-8) / 2) + 199) 357 $2- } | if ($1 == time) { drawrect -nfr @sokoban $rgb(face) 1 62 357 130 14 | drawtext -nr @sokoban $rgb(text) "arial" -8 $calc((132 / 2) - ($width($2-,arial,-8) / 2) + 62) 357 $2- } }
alias -l sokotime { hadd sokoban time $calc($hget(sokoban,time) + 1) | var %t = $gettok($readini(mirc.ini,sokoban,$hget(sokoban,series) $+ - $+ $hget(sokoban,level)),3,33) | sokotxt time $sokohms($hget(sokoban,time)) (Best: $iif(%t,$sokohms(%t),N\A) $+ ) | drawdot @sokoban }
alias -l sokoext { if ($exists($scriptdirlevels\ $+ $1 $+ .sok)) { return $true } | else return $false }
alias -l sokobeat { if ($hget(sokoban,type) == nt) { return } | if ($sokoext($hget(sokoban,series) $+ - $+ $calc($hget(sokoban,level) + 1))) { sokoload $sokoup } | elseif ($sokoext($calc($hget(sokoban,series) + 1) $+ -1)) { var %e = $dialog(sokoseriesend,sokoseriesend) | if (%e) { sokoload $calc($hget(sokoban,series) + 1) $+ -1 } } | else { var %e = $dialog(sokoend,sokoseriesend) | if (%e) { sokoload 1-1 } } }
alias -l sokoundos { if (!$hget(sokoundo)) { hmake sokoundo 200 } | hadd sokoundo $calc($hmatch(sokoundo,*,0) + 1) $instok($1,$2,2,46) $+ $iif($3,!) $+ $iif($3,$3) $+ $iif($4,!) $+ $iif($4,$4) }
alias -l sokoup {
var %f = $hget(sokoban,series) $+ - $+ $calc($hget(sokoban,level) + 1)
if ($sokoext(%f)) {
hadd sokoban level $calc($hget(sokoban,level) + 1)
return %f
}
else { return }
}
alias -l sokodown {
var %f = $hget(sokoban,series) $+ - $+ $calc($hget(sokoban,level) - 1)
if (%f == 1-0) || ($gettok(%f,2,45) == 0) { return }
if ($sokoext(%f)) {
hadd sokoban level $calc($hget(sokoban,level) - 1)
return %f
}
else { return }
}
alias -l sokopos { return $hget(sokoban,pusher) }
alias -l sokoboxes { var %i = 1,%f | while ($gettok($hget(sokoban,grid),%i,33)) { tokenize 46 $ifmatch | var %t = $calc($1 + 1) $+ . $+ $calc($2 + 1) | if ($hget(sokolevel,%t) == $!scriptdirimages\box.bmp) || ($gettok($hget(sokolevel,%t),2,33) == $!scriptdirimages\box.bmp) { inc %f } | inc %i } | if (%f == $numtok($hget(sokoban,grid),33)) { return $true } | else { return $false } }
alias -l sokohms { if ($1 == $null) return 00:00:00 | if ($1 == 0) return 00:00:00 | var %s = $calc($1 % 60) | var %h = $int($calc($1 / 60)) | var %m = $calc(%h % 60) | var %h = $int($calc(%h / 60)) | if (%h < 10) var %h = 0 $+ %h | if (%m < 10) var %m = 0 $+ %m | if (%s < 10) var %s = 0 $+ %s | return %h $+ : $+ %m $+ : $+ %s }
on 1:dialog:sokoabout:init:0:{ var %i = 1,%id = 11 | while ($exists($scriptdirlevels\ $+ %i $+ .info)) { did -ra sokoabout %id $read($scriptdirlevels\ $+ %i $+ .info,1) levels by $read($scriptdirlevels\ $+ %i $+ .info,2) | inc %i | inc %id } | dialog -s sokoabout $dialog(sokoabout).x $dialog(sokoabout).y $dialog(sokoabout).w $calc(%i * 16 + 44) | dialog -r sokoabout }
on 1:dialog:sokoabout:sclick:7:{ run mailto:praetorian@detox.xs3.com }
on 1:dialog:sokoabout:sclick:9:{ run http://www.detox.xs3.com }
on 1:dialog:sokoseriesend:init:0:{ did -a $dname 2 Go to the next series? }
on 1:dialog:sokoend:init:0:{ did -a $dname 2 Restart from the beginning? }
on 1:dialog:sokogoto:init:0:{ var %i = 1 | while ($exists($scriptdirlevels\ $+ $hget(sokoban,series) $+ - $+ %i $+ .sok)) { did -a sokogoto 2 %i | inc %i } | did -c sokogoto 2 $hget(sokoban,level) }
on 1:keydown:@sokoban:*:{
if ($keyval == 13) { sokosave $$file="Save game" $scriptdirsaves\*.sav }
if ($keyval == 16) { sokoloadsave $$file="Choose game" $scriptdirsaves\*.sav }
if ($keyval == 17) { sokoload $nopath($remove($$file="Load level.." $scriptdirlevels\*.sok,.sok)) }
if ($keyval == 38) { tokenize 32 $sokopos | sokomove $1 $2 $1 $calc($2 - 1) | return }
if ($keyval == 40) { tokenize 32 $sokopos | sokomove $1 $2 $1 $calc($2 + 1) | return }
if ($keyval == 37) { tokenize 32 $sokopos | sokomove $1 $2 $calc($1 - 1) $2 | return }
if ($keyval == 39) { tokenize 32 $sokopos | sokomove $1 $2 $calc($1 + 1) $2 | return }
if ($keyval == 36) && (!$keyrpt) {
if ($hget(sokoban,type) == nt) { sokoload $hget(sokoban,nt) | return }
sokoload $hget(sokoban,series) $+ - $+ $hget(sokoban,level)
}
if ($keyval == 33) && (!$keyrpt) { sokoload $sokoup }
if ($keyval == 34) && (!$keyrpt) { sokoload $sokodown }
if ($keyval == 8) { sokoundo }
if ($keyval == 46) && ($sokoprev(k)) { sokoprev }
if ($keyval == 45) && ($sokonext(k)) { sokonext }
if ($keyval == 35) { var %l = $dialog(sokogoto,sokogoto,@sokoban)
if (%l) { sokoload $hget(sokoban,series) $+ - $+ %l }
}
}
on 1:close:@sokoban:{ .timercount off | hfree sokolevel | if ($hget(sokoverinfo)) { hfree sokoverinfo } | hfree sokoban }
menu @sokoban {
mouse:{ if (!$hget(sokoban,draw)) { return } | if ($mouse.key & 1) && ($hget(sokoban,edit) == on) && ($mouse.y < 350) { drawpic -tr @sokoban $rgb(252,2,252) $sokogrid($mouse.x,$mouse.y).window $+(",$hget(sokoban,draw),") | var %t = $hget(sokolevel,$instok($gettok($sokogrid($mouse.x,$mouse.y).mouse,1,32),$gettok($sokogrid($mouse.x,$mouse.y).mouse,2,32),2,46)) | if (%t) && (%t == $scriptdirimages\grid.bmp) && ($istok($scriptdirimages\pusher.bmp $+ ! $+ $scriptdirimages\box.bmp,$hget(sokoban,draw),33)) { hadd sokolevel $instok($gettok($sokogrid($mouse.x,$mouse.y).mouse,1,32),$gettok($sokogrid($mouse.x,$mouse.y).mouse,2,32),2,46) $scriptdirimages\grid.bmp $+ ! $+ $hget(sokoban,draw) } | else { hadd sokolevel $instok($gettok($sokogrid($mouse.x,$mouse.y).mouse,1,32),$gettok($sokogrid($mouse.x,$mouse.y).mouse,2,32),2,46) $hget(sokoban,draw) } } }
sclick:{ if (!$hget(sokoban,draw)) { return } | if ($mouse.key & 1) && ($hget(sokoban,edit) == on) && ($mouse.y < 350) { drawpic -tr @sokoban $rgb(252,2,252) $sokogrid($mouse.x,$mouse.y).window $+(",$hget(sokoban,draw),") | var %t = $hget(sokolevel,$instok($gettok($sokogrid($mouse.x,$mouse.y).mouse,1,32),$gettok($sokogrid($mouse.x,$mouse.y).mouse,2,32),2,46)) | if (%t) && (%t == $scriptdirimages\grid.bmp) && ($istok($scriptdirimages\pusher.bmp $+ ! $+ $scriptdirimages\box.bmp,$hget(sokoban,draw),33)) { hadd sokolevel $instok($gettok($sokogrid($mouse.x,$mouse.y).mouse,1,32),$gettok($sokogrid($mouse.x,$mouse.y).mouse,2,32),2,46) $scriptdirimages\grid.bmp $+ ! $+ $hget(sokoban,draw) } | else { hadd sokolevel $instok($gettok($sokogrid($mouse.x,$mouse.y).mouse,1,32),$gettok($sokogrid($mouse.x,$mouse.y).mouse,2,32),2,46) $hget(sokoban,draw) } } }
$iif($hget(sokoban,edit) == off,Undo (Backspace)):sokoundo
-
$iif($hget(sokoban,edit) == off,Restart level (Home)):if ($hget(sokoban,type) == nt) { sokoload $hget(sokoban,nt) | return } | sokoload $hget(sokoban,series) $+ - $+ $hget(sokoban,level)
$iif($hget(sokoban,edit) == off,$iif(!$sokoext($hget(sokoban,series) $+ - $+ $calc($hget(sokoban,level) + 1)),$style(2)) Next level (Page up)):sokoload $sokoup
$iif($hget(sokoban,edit) == off,$iif(!$sokoext($hget(sokoban,series) $+ - $+ $calc($hget(sokoban,level) - 1)),$style(2)) Previous level (Page down)):sokoload $sokodown
$iif($hget(sokoban,edit) == off,$iif($hget(sokoban,type) == nt,$style(2)) Go to level.. (End)):var %l = $dialog(sokogoto,sokogoto,@sokoban) | if (%l) { sokoload $hget(sokoban,series) $+ - $+ %l }
$iif($hget(sokoban,edit) == off,Load level.. (Ctrl)):sokoload $nopath($remove($$file="Load level.." $scriptdirlevels\*.sok,.sok))
-
$iif($hget(sokoban,edit) == off,$iif(!$sokonext(p),$style(2)) Next series (Insert)):sokonext
$iif($hget(sokoban,edit) == off,$iif(!$sokoprev(p),$style(2)) Previous series (Delete)):sokoprev
$iif($hget(sokoban,edit) == off,Download more levels):sokocheck
-
$iif($hget(sokoban,edit) == off,Save game (Enter)):sokosave $$file="Save game" $scriptdirsaves\*.sav
$iif($hget(sokoban,edit) == off,Load game (Shift)):sokoloadsave $$file="Choose game" $scriptdirsaves\*.sav
-
$iif($hget(sokoban,edit) == on,Exit edit mode,Switch to edit mode):if ($hget(sokoban,edit) == on) { .timer 1 0 sokoload 1-1 | hadd sokoban edit off | if ($dialog(sokoedit)) { dialog -x sokoedit } | if ($hget(sokoban,filename)) { hdel sokoban filename } | return } | hadd sokoban edit on | .timercount off | sokotxt level Level N\A | sokotxt moves 0 Moves (Best: N\A) | sokotxt pushes 0 Pushes (Best: N\A) | sokotxt time 00:00:00 (Best: N\A) | titlebar @sokoban - Editing level - $hget(sokoban,series) $+ - $+ $hget(sokoban,level) $+ .sok | drawdot @sokoban | sokoedit
-
$iif($hget(sokoban,edit) == off,About):dialog -mar sokoabout sokoabout
}
menu status,menubar {
Play Sokoban:sokoban
}
;------------------------------------------------------------------------------------------------------------------
; level updating dialogs and routines
;------------------------------------------------------------------------------------------------------------------
alias -l sokocheck { sockclose sokoban | if (!$dialog(sokocheck)) { dialog -ma sokocheck sokocheck } | sockopen sokoban www.interl.net 80 | sockmark sokoban http://www.interl.net/~jpdillin/mirc_stuff/sokoban/sokoban_levels.txt | did -ra sokocheck 1 Connecting.. | .timersokotimeout 1 60 sokotimeout }
alias -l sokotimeout { sockclose sokoban | did -ra sokocheck 1 Connection timed out. }
alias -l sokostartdl { if ($exists($scriptdirlevels\ $+ $1 $+ .info)) { %sokocur = $1 | var %e = $dialog(sokodupdl,sokodupdl,@sokoban) | if (!%e) { return } } | sokodl $1 }
alias -l sokodl { sockclose sokodl | sockopen sokodl www.interl.net 80 | sockmark sokodl http://www.interl.net/~jpdillin/mirc_stuff/sokoban/ $+ $1 $+ .cab | if (!$dialog(sokodl)) dialog -am sokodl sokodl | if ($exists($scriptdirlevels\ $+ $1 $+ .cab)) { .remove $scriptdirlevels\ $+ $1 $+ .cab } | .timersokotimeout 1 60 sokotimeoutdl }
alias -l sokotimeoutdl { sockclose sokodl | if ($dialog(sokodl)) { did -ra sokodl 1 Connection timed out.. } }
alias -l sokoinstall { if ($os == 95) || ($os == 98) { run -n command.com /c extract $1 /e /l $scriptdirlevels\ } | else { run -n command.com /c expand $1 -F:* $scriptdirlevels\ } | .timer -m 1 1500 did -ra sokodl 1 Finished. | .timer -m 1 2000 did -era sokodl 3 Close | .timer 1 3 dialog -x sokodl }
dialog sokocheck {
title Sokoban - Download more levels
size -1 -1 134 89
option dbu
icon $scriptdirimages\box.ico
edit "",1,2 64 130 10,read
list 2,2 2 130 70,disable
button "Download selected levels",3,2 76 70 10,disable
button "Refresh",4,72 76 30 10
button "Cancel",5,102 76 30 10,cancel
}
dialog sokodupdl {
title Sokoban - Error
option dbu
size -1 -1 130 34
icon $scriptdirimages\box.ico
text "",1,2 2 126 8,center
text "Do you want to overwrite them?",2,2 10 126 8,center
button "&Yes",3,35 20 30 10,ok,result
button "&No",4,65 20 30 10,cancel
}
dialog sokodl {
title Sokoban - Downloading..
option dbu
size -1 -1 120 34
icon $scriptdirimages\box.ico
button "ok",100,0 0 0 0,ok
text "",1,2 10 116 8,center
text "",2,2 2 116 8,center
button "Cancel",3,45 20 30 10,cancel
}
on 1:dialog:sokodupdl:init:0:{ did -ra sokodupdl 1 $read($scriptdirlevels\ $+ %sokocur $+ .info,1) levels are already installed. }
on 1:dialog:sokocheck:sclick:2:{ did -b sokocheck 3 }
on 1:dialog:sokocheck:sclick:5:{ if ($sock(sokoban)) { sockclose sokoban } | .timersokotimeout off }
on 1:dialog:sokocheck:sclick:4:{ did -rb sokocheck 2 | did -b sokocheck 3 | sokocheck 1 | did -ra sokocheck 5 Cancel }
on 1:dialog:sokocheck:sclick:3:{ sokostartdl $did(sokocheck,2,1).sel }
on 1:dialog:sokodl:init:0:{ did -ra sokodl 1 Connecting.. | var %t = $gettok($gettok($sock(sokodl).mark,5,47),1-,46) | did -ra sokodl 2 $gettok($did(sokocheck,2,%t),1,40) }
on 1:dialog:sokodl:sclick:3:{ sockclose sokodl | unset %sokoheader }
on 1:sockopen:sokoban:{
if ($sockerr) { did -ra sokocheck 1 Error.. $sock($sockname).wsmsg }
else {
.timersokotimeout off
did -ra sokocheck 1 Connected, waiting for data..
sockwrite -n sokoban GET $sock($sockname).mark HTTP/1.1
sockwrite -n sokoban Accept: */*
sockwrite -n sokoban Accept-Encoding: deflate
sockwrite -n sokoban User-Agent: mIRC $version
sockwrite -n sokoban connection: close
sockwrite -n sokoban Host: $host
sockwrite -n sokoban $crlf
.timersokotimeout 1 30 sokotimeout
%sokoread = $false
}
}
on 1:sockclose:sokoban:{ }
on 1:sockread:sokoban:{
if ($sockerr) {
did -ra sokocheck 1 Error.. $sock($sockname).wsmsg
}
.timersokotimeout off
:read
var %tmp
sockread %tmp
tokenize 32 %tmp
if ($1 == levels) { %sokoread = ok | did -ra sokocheck 1 Receiving data.. | return }
if ($1 == /levels) { unset %sokoread | did -ra sokocheck 1 Finished. | did -e sokocheck 2 | did -ra sokocheck 5 Close | sockclose sokoban | return }
if ($1) && (%sokoread) { did -a sokocheck 2 $gettok($1-,2,61) ( $+ $gettok($1-,4,61) levels) }
if ($sockbr) goto read
}
on 1:sockopen:sokodl:{ if ($sockerr) { did -ra sokodl 1 Error.. $sock($sockname).wsmsg } | else { .timersokotimeout off | did -ra sokodl 1 Connected, waiting for data.. | sockwrite -n sokodl GET $sock($sockname).mark HTTP/1.1 | sockwrite -n sokodl Accept: */* | sockwrite -n sokodl Accept-Encoding: deflate | sockwrite -n sokodl User-Agent: mIRC $version | sockwrite -n sokodl Host: $host | sockwrite -n sokodl $lf | .timersokotimeout 1 25 sokotimeoutdl | %sokoheader = ok } }
on 1:sockread:sokodl:{
if (!$dialog(sokodl)) { sockclose $sockname | return }
if ($sockerr) { did -ra sokodl 1 Error.. $sock($sockname).wsmsg }
.timersokotimeout off
:read
if (%sokoheader) { var %tmp | sockread %tmp | tokenize 32 %tmp | if ($1-) { if ($1 == Content-Length:) { %sokosize = $2- } | if ($sockbr) { goto read } }
else { unset %sokoheader | %sokogot = $sock($sockname).rcvd } }
else { sockread 4096 &bvar | bwrite $scriptdirlevels\ $+ $gettok($sock($sockname).mark,3,47) -1 -1 &bvar | did -ra sokodl 1 Downloading.. $lower($bytes($calc($sock($sockname).rcvd - %sokogot),k).suf) of $lower($bytes(%sokosize,k).suf) ( $+ $round($calc((($sock($sockname).rcvd - %sokogot) / %sokosize) * 100),0) $+ $chr(37) $+ ) | if ($calc($sock($sockname).rcvd - %sokogot) == %sokosize) { unset %sokosize | unset %sokogot | unset %sokoheader | unset %sokocur | .timer -m 1 1000 did -ra sokodl 1 Installing.. | did -b sokodl 3 | .timer -m 1 2000 sokoinstall $scriptdirlevels\ $+ $gettok($sock($sockname).mark,3,47) | sockclose $sockname } | if ($sockbr) { goto read } }
}
;------------------------------------------------------------------------------------------------------------------
; level editor dialogs and routines
;------------------------------------------------------------------------------------------------------------------
dialog sokoedit {
title Sokoban - Level editor
option dbu
size $calc($window(@sokoban).dx + ($window(@sokoban).w - 213)) $calc($window(@sokoban).dy + ($window(@sokoban).h - $window(@sokoban).dh)) 100 11
icon $scriptdirimages\box.ico
button "ok",100,0 0 0 0,ok
button "cancel",101,0 0 0 0,cancel
icon 1,0 -1 12 12,$scriptdirimages\new-dialog.bmp,noborder
icon 2,10 -1 12 12,$scriptdirimages\open-dialog.bmp,noborder
icon 3,20 -1 12 12,$scriptdirimages\save-dialog.bmp,noborder
icon 4,34 -1 6 12,$scriptdirimages\spcr.bmp,noborder
icon 5,36 -1 12 12,$scriptdirimages\tpusher-dialog.bmp,noborder
icon 6,46 -1 12 12,$scriptdirimages\tbox-dialog.bmp,noborder
icon 7,56 -1 12 12,$scriptdirimages\tgrid-dialog.bmp,noborder
icon 8,66 -1 12 12,$scriptdirimages\tlight-dialog.bmp,noborder
icon 9,76 -1 12 12,$scriptdirimages\tborder-dialog.bmp,noborder
icon 10,86 -1 12 12,$scriptdirimages\tdark-dialog.bmp,noborder
icon 11,36 -1 12 12,$scriptdirimages\tpusher-dialog-pressed.bmp,noborder,hide
icon 12,46 -1 12 12,$scriptdirimages\tbox-dialog-pressed.bmp,noborder,hide
icon 13,56 -1 12 12,$scriptdirimages\tgrid-dialog-pressed.bmp,noborder,hide
icon 14,66 -1 12 12,$scriptdirimages\tlight-dialog-pressed.bmp,noborder,hide
icon 15,76 -1 12 12,$scriptdirimages\tborder-dialog-pressed.bmp,noborder,hide
icon 16,86 -1 12 12,$scriptdirimages\tdark-dialog-pressed.bmp,noborder,hide
}
dialog sokosavec {
title Sokoban - Level editor
option dbu
size -1 -1 80 26
icon $scriptdirimages\box.ico
text "",1,2 2 76 8,center
button "Ok",2,25 12 30 10,ok,result
}
dialog sokocomperr {
title Sokoban - Error
option dbu
size -1 -1 100 42
icon $scriptdirimages\box.ico
text "Error compiling level:",1,2 2 96 8,center
text "",2,2 10 96 8,center
text "",3,2 18 96 8,center
button "Ok",4,35 28 30 10,ok,result
}
dialog sokosaveex {
title Sokoban - Error
option dbu
size -1 -1 100 34
icon $scriptdirimages\box.ico
text "",1,2 2 96 8,center
text "Do you want to overwrite it?",2,2 10 96 8,center
button "&Yes",3,20 20 30 10,ok,result
button "&No",4,50 20 30 10,cancel
}
dialog sokoloaderr {
title Sokoban - Error
option dbu
size -1 -1 80 26
icon $scriptdirimages\box.ico
text "",1,2 2 76 8,center
button "Ok",2,25 12 30 10,ok,result
}
alias -l sokosaveedit {
:start
var %fn = $$file="Save level as.." $scriptdirlevels\*.sok
if ($gettok($nopath(%fn),0,46) < 2) { var %fn = %fn $+ .sok }
if ($nofile(%fn) != $scriptdirlevels\) {
hadd sokoban errormsg Invalid directory.
var %e = $dialog(sokoloaderr,sokoloaderr,@sokoban)
return
}
if ($gettok($nopath(%fn),-1,46) != sok) {
hadd sokoban errormsg Invalid file extention.
var %e = $dialog(sokoloaderr,sokoloaderr,@sokoban)
return
}
if ($exists(%fn)) {
hadd sokoban errormsg The file ' $+ $nopath(%fn) $+ ' already exists.
var %e = $dialog(sokosaveex,sokosaveex,@sokoban)
if (!%e) { goto start }
}
if ($sokocompile == $true) {
hsave -o sokolevel $+(",%fn,")
.timer 1 0 sokofix %fn
titlebar @sokoban - Editing level - $nopath(%fn)
hadd sokoban filename $nopath(%fn)
hadd sokoban errormsg Level successfully saved.
dialog -am sokosavec sokosavec }
if ($sokocompile != $true) {
hadd sokoban errormsg $ifmatch
dialog -am sokocomperr sokocomperr
return
}
}
alias -l sokodeselall { var %i = 5 | while (%i < 11) { if ($did(sokoedit,$calc(%i + 6)).visible) { did -h sokoedit $calc(%i + 6) | did -v sokoedit %i } | inc %i } }
alias -l sokomakespcr {
window -ak0ph +d @sokospcr -1 -1 6 20
drawfill -r @sokospcr $rgb(face) $rgb(face) 0 0 6 20
drawline -r @sokospcr $rgb(shadow) 1 0 1 0 18
drawline -r @sokospcr $rgb(3dlight) 1 1 1 1 19
drawdot -r @sokospcr $rgb(3dlight) 1 0 18
drawsave @sokospcr $+(",$scriptdirimages\spcr.bmp,")
window -c @sokospcr
}
alias -l sokomakebtn {
window -ak0ph +d @sokobtn -1 -1 20 20
drawfill -r @sokobtn $rgb(face) $rgb(face) 0 0 20 20
drawpic -tr @sokobtn $rgb(255,0,255) 0 0 $+(",$scriptdirimages\ $+ $1,")
var %fn = -dialog.bmp
if ($2 == pressed) {
drawline -r @sokobtn $rgb(shadow) 1 20 0 0 0 0 20
drawline -r @sokobtn $rgb(3dlight) 1 19 1 19 19 1 19
var %fn = -dialog-pressed.bmp
}
drawsave @sokobtn $+(",$scriptdirimages\ $+ $gettok($1,1,46) $+ %fn,")
window -c @sokobtn
}
alias -l sokoedit { sokomakespcr | sokomakebtn new.bmp | sokomakebtn open.bmp | sokomakebtn save.bmp | sokomakebtn tpusher.bmp | sokomakebtn tpusher.bmp pressed | sokomakebtn tbox.bmp | sokomakebtn tbox.bmp pressed | sokomakebtn tgrid.bmp | sokomakebtn tgrid.bmp pressed | sokomakebtn tlight.bmp | sokomakebtn tlight.bmp pressed | sokomakebtn tborder.bmp | sokomakebtn tborder.bmp pressed | sokomakebtn tdark.bmp | sokomakebtn tdark.bmp pressed | dialog -ma sokoedit sokoedit }
alias -l sokoloadedit {
hfree sokolevel
hmake sokolevel 100
hload sokolevel $+(",$scriptdirlevels\ $+ $1,")
titlebar @sokoban - Editing level - $1
sokodrawlevel
}
alias -l sokocompile { var %i = 1,%p,%b,%g | while ($hmatch(sokolevel,*,%i)) { var %t = $hget(sokolevel,$ifmatch) | if (pusher isin %t) { inc %p } | if (grid isin %t) { inc %g } | if (box isin %t) { inc %b } | inc %i } | if (%p > 1) { return More than one pusher. } | if (%g > %b) { return Not enough boxes. !( $+ %b boxes, %g grid squares). } | if (%g < %b) { return Not enough grid squares. !( $+ %g grid squares, %b boxes). } | else { return $true } }
alias -l sokofix {
if (!$hget(temp)) { hmake temp 100 }
if ($hget(temp)) { hfree temp | hmake temp 100 }
hload temp $+(",$1-,")
var %i = 1
while ($hmatch(temp,*,%i)) {
var %t = $ifmatch
hadd temp %t $replace($hget(temp,%t),$scriptdir,$!scriptdir)
inc %i
}
hsave -o temp $+(",$1-,")
}
on 1:dialog:sokoedit:init:0:{ did -vh sokoedit 8,14 | hadd sokoban draw $scriptdirimages\light.bmp }
on 1:dialog:sokoedit:sclick:1:{ hfree sokolevel | hmake sokolevel 100 | .timercount off | sokotxt level Level N\A | sokotxt moves 0 Moves (Best: N\A) | sokotxt pushes 0 Pushes (Best: N\A) | sokotxt time 00:00:00 (Best: N\A) | drawpic -sl @sokoban 0 0 440 352 $+(",$scriptdirimages\dark.bmp,") | titlebar @sokoban - Editing level - Untitled.sok | drawdot @sokoban }
on 1:dialog:sokoedit:sclick:2:{ var %t = $$file="Select level" $mircdirsokoban\levels\*.sok | if ($gettok(%t,-1,46) != sok) { hadd sokoban errormsg Invalid filename. | dialog -ma sokoloaderr sokoloaderr | return } | if ($nofile(%t) != $scriptdirlevels\) { hadd sokoban errormsg Invalid directory. | dialog -ma sokoloaderr sokoloaderr | return } | drawpic -sl @sokoban 0 0 440 352 $+(",$scriptdirimages\dark.bmp,") | .timer 1 0 sokoloadedit $nopath(%t) }
on 1:dialog:sokoedit:sclick:3:{ sokosaveedit }
on 1:dialog:sokoedit:sclick:5:{ if (pusher isin $hget(sokoban,draw)) { return } | sokodeselall | did -vh sokoedit 5,11 | hadd sokoban draw $scriptdirimages\pusher.bmp }
on 1:dialog:sokoedit:sclick:6:{ if (box isin $hget(sokoban,draw)) { return } | sokodeselall | did -vh sokoedit 6,12 | hadd sokoban draw $scriptdirimages\box.bmp }
on 1:dialog:sokoedit:sclick:7:{ if (grid isin $hget(sokoban,draw)) { return } | sokodeselall | did -vh sokoedit 7,13 | hadd sokoban draw $scriptdirimages\grid.bmp }
on 1:dialog:sokoedit:sclick:8:{ if (light isin $hget(sokoban,draw)) { return } | sokodeselall | did -vh sokoedit 8,14 | hadd sokoban draw $scriptdirimages\light.bmp }
on 1:dialog:sokoedit:sclick:9:{ if (border isin $hget(sokoban,draw)) { return } | sokodeselall | did -vh sokoedit 9,15 | hadd sokoban draw $scriptdirimages\border.bmp }
on 1:dialog:sokoedit:sclick:10:{ if (dark isin $hget(sokoban,draw)) { return } | sokodeselall | did -vh sokoedit 10,16 | hadd sokoban draw $scriptdirimages\dark.bmp }
on 1:dialog:sokoedit:*:101:{ .timer 1 0 sokoload 1-1 | hadd sokoban edit off | if ($hget(sokoban,filename)) { hdel sokoban filename } }
on 1:dialog:sokosavec:init:0:{ did -ra sokosavec 1 $hget(sokoban,errormsg) }
on 1:dialog:sokocomperr:sclick:4:{ hadd sokoban errormsg Level was not saved. | .timer 1 0 dialog -am sokosavec sokosavec }
on 1:dialog:sokocomperr:init:0:{ did -ra sokocomperr 2 $gettok($hget(sokoban,errormsg),1,33) | if ($gettok($hget(sokoban,errormsg),2,33)) { did -ra sokocomperr 3 $ifmatch } }
on 1:dialog:sokosaveex:init:0:{ did -ra sokosaveex 1 $hget(sokoban,errormsg) }
on 1:dialog:sokoloaderr:init:0:{ did -ra sokoloaderr 1 $hget(sokoban,errormsg) }
;------------------------------------------------------------------------------------------------------------------
; script updating dialogs and routines
;------------------------------------------------------------------------------------------------------------------
alias sokoversion return 1.1
alias sokovercheck {
if ($sock(sokovercheck)) { sockclose sokovercheck }
sockopen sokovercheck www.interl.net 80
}
on 1:sockopen:sokovercheck:{
if ($sockerr) { return }
sockwrite -n sokovercheck GET http://www.interl.net/~jpdillin/mirc_stuff/sokoban/sokoban.txt HTTP/1.0
sockwrite -n sokovercheck Accept: */*
sockwrite -n sokovercheck Accept-Encoding: deflate
sockwrite -n sokovercheck User-Agent: mIRC $version
sockwrite -n sokovercheck Connection: close
sockwrite -n sokovercheck Host: $host
sockwrite -n sokovercheck $crlf
}
on 1:sockread:sokovercheck:{
if ($sockerr) { return }
:read
var %tmp
sockread %tmp
tokenize 32 %tmp
if ($1 == version:) {
if ($2 > $sokoversion) {
if ($hget(sokoverinfo)) { hfree sokoverinfo }
hmake sokoverinfo 5
hadd sokoverinfo version $2
hadd sokoverinfo line 1
}
else { sockclose sokovercheck | return }
}
if ($1 = -) && ($hget(sokoverinfo)) {
hadd sokoverinfo $addtok(line,$hget(sokoverinfo,line),46) $1-
hinc sokoverinfo line
}
if ($1 = EOF) { sockclose sokovercheck | sokonewversion | return }
if ($sockbr) { goto read }
}
alias -l sokonewversion {
if ($dialog(sokonewversion,sokonewversion,@sokoban)) { sokodlnewversion }
else { return }
}
dialog sokonewversion {
title "Sokoban - New version available"
size -1 -1 150 103
option dbu
icon $scriptdirimages\box.ico,0
text "Your version:",1,2 2 73 8,center
text "New version:",2,73 2 74 8,center
text "Would you like to download the new version now?",3,2 80 146 8,center
box "New features and bugfixes",4,2 12 146 66
button "Yes",5,43 90 30 10,result ok
button "No",6,76 90 30 10,cancel
text "", 7,4 20 140 8
text "", 8,4 28 140 8
text "", 9,4 36 140 8
text "", 10,4 44 140 8
text "", 11,4 52 140 8
text "", 12,4 60 140 8
text "", 13,4 68 140 8
}
on 1:dialog:sokonewversion:init:0:{
did -ra sokonewversion 2 New version: $hget(sokoverinfo,version)
did -ra sokonewversion 1 Your version: $sokoversion
var %i = 1
while ($hmatch(sokoverinfo,$+(line.,%i),1)) {
did -a sokonewversion $calc(%i + 6) $hget(sokoverinfo,$ifmatch) $lf
inc %i
}
}
on 1:dialog:sokonewversion:sclick:5:{ dialog -x sokonewversion | run http://www.interl.net/~jpdillin/mirc_stuff/sokoban/sokoban.zip }