rendered paste body; PizzaStyle v1.0 by Darkie
; Snake game
alias snake {
window -pozdk0 +tnbL @snake.menu -1 -1 200 150
window -r @snake.menu
set %selected 1
set %menulevel $iif($1,$1,1)
if (%backcolour !isnum) {
set %backcolour 10
set %snakecolour 5
set %textcolour 8
set %applecolour 4
}
if (!%snakelevel) { set %snakelevel 1 }
if (!%highscore) { set %highscore 0 }
updmenu
.timerupdmenu -m 0 100 updmenu
}
alias updmenu {
hfree -w menu*
if (!$window(@Snake.menu)) { .timerupdmenu off | return }
clear -n @snake.menu
drawrect -fn @snake.menu %backcolour 1 0 0 300 200
drawtext -bn @snake.menu %textcolour %backcolour "Comic Sans MS" 22 0 0 Nokia Snake Clone
if (%menulevel == 1) {
hadd -m menu m1 New game
hadd -m menuc m1 snakegame %snakelevel $+ $chr(9) $+ window -c @snake.menu
hadd -m menu m2 Set Level
hadd -m menuc m2 set % $+ menulevel 2
hadd -m menu m3 Highest score
hadd -m menuc m3 set % $+ menulevel 3
hadd -m menu m4 Settings
hadd -m menuc m4 set % $+ menulevel 4
hadd -m menu m5 Quit
hadd -m menuc m5 close -@ @snake.menu
}
if (%menulevel == 2) {
hadd -m menu m1 Level 1
hadd -m menuc m1 set % $+ snakelevel 1 $+ $chr(9) $+ set % $+ menulevel 1
hadd -m menu m2 Level 2
hadd -m menuc m2 set % $+ snakelevel 2 $+ $chr(9) $+ set % $+ menulevel 1
hadd -m menu m3 Level 3
hadd -m menuc m3 set % $+ snakelevel 3 $+ $chr(9) $+ set % $+ menulevel 1
hadd -m menu m4 Level 4
hadd -m menuc m4 set % $+ snakelevel 4 $+ $chr(9) $+ set % $+ menulevel 1
hadd -m menu m5 Level 5
hadd -m menuc m5 set % $+ snakelevel 5 $+ $chr(9) $+ set % $+ menulevel 1
hadd -m menu m6 Level 6
hadd -m menuc m6 set % $+ snakelevel 6 $+ $chr(9) $+ set % $+ menulevel 1
hadd -m menu m7 Level 7
hadd -m menuc m7 set % $+ snakelevel 7 $+ $chr(9) $+ set % $+ menulevel 1
}
if (%menulevel == 3) {
hadd -m menu m1 Highest score:
hadd -m menuc m1 set % $+ menulevel 1
Hadd -m menu m2 - %highscore
hadd -m menuc m2 set % $+ menulevel 1
if (!%highscoreset) {
hadd -m menu m3 Tell The World
hadd -m menuc m3 tellworld $+ $chr(9) $+ set % $+ menulevel 1
hadd -m menu m4 Back to menu
hadd -m menuc m4 set % $+ menulevel 1
}
else {
hadd -m menu m3 Back to menu
hadd -m menuc m3 set % $+ menulevel 1
}
}
if (%menulevel == 4) {
hadd -m menu m1 Colours
hadd -m menuc m1 set % $+ menulevel 5
hadd -m menu m2 Go Thru Walls
hadd -m menuc m2 set % $+ menulevel 6
hadd -m menu m3 Back to Menu
hadd -m menuc m3 set % $+ menulevel 1
}
if (%menulevel == 5) {
window -c @snake.menu
dialog -m snakecol snakecol | return
}
if (%menulevel == 6) {
hadd -m menu m1 On $iif(%thruwalls,[X])
hadd -m menuc m1 set % $+ thruwalls on $+ $chr(9) $+ set % $+ menulevel 4
hadd -m menu m2 Off $iif(!%thruwalls,[X])
hadd -m menuc m2 unset % $+ thruwalls $+ $chr(9) $+ set % $+ menulevel 4
}
if (%selected > $hmatch(menu,m*,0)) { set %selected 1 }
var %i = 1
if (%selected > 3) {
var %i = $calc(%selected - 2)
}
var %u = 0
while ($hget(menu,m $+ %i)) {
if ($calc(%u - %selected) > 2) break
inc %u
drawtext -bn @snake.menu $iif(%selected == %i,%backcolour %textcolour,%textcolour %backcolour) "Comic Sans MS" 16 20 $calc(30 * %u) $hget(menu,m $+ %i)
inc %i
}
drawpic @snake.menu
}
on *:KEYDOWN:@snake.menu:13,38,40: {
if ($keyval == 13) {
var %c = $hget(menuc,m $+ %selected)
while (%c) {
var %x = $gettok(%c,1,9)
var %c = $deltok(%c,1,9)
%x
}
set %selected 1
}
if ($keyval == 38) {
if ($hget(menu,m $+ $calc(%selected - 1))) {
dec %selected
}
}
if ($keyval == 40) {
if ($hget(menu,m $+ $calc(%selected + 1))) {
inc %selected
}
}
}
alias snakegame {
unset %gameover %ishighscore
hfree -w snake
if (!$1) { tokenize 32 1 }
window -pozdk0 +tbnL @snake -1 -1 300 200
if ($1 == 1) { hadd -m snake time 250 }
if ($1 == 2) { hadd -m snake time 225 }
if ($1 == 3) { hadd -m snake time 175 }
if ($1 == 4) { hadd -m snake time 125 }
if ($1 == 5) { hadd -m snake time 100 }
if ($1 == 6) { hadd -m snake time 75 }
if ($1 == 7) { hadd -m snake time 50 }
hadd -m snake snake 3 4:4 4:5 4
hadd -m snake dir right
hadd -m snake score 0
var %x = 3
var %y = 4
while (%x isnum 3-5) { var %x = $rand(1,27) }
while (%y isnum 3-5) { var %y = $rand(1,15) }
hadd -m snake apple %x %y
updsn
.timerupdsn -m 1 $hget(snake,time) updsn
}
alias updsn {
if (!$window(@Snake)) { .timerupdsn off | snake | return }
var %gone = 0
var %g = $hget(snake,snake)
:two
inc %gone
var %c = $gettok(%g,-1,58)
var %x = $gettok(%c,1,32)
var %y = $gettok(%c,2,32)
if ($hget(snake,dir) == left) { var %x = $calc(%x - 1) }
if ($hget(snake,dir) == right) { var %x = $calc(%x + 1) }
if ($hget(snake,dir) == up) { var %y = $calc(%y - 1) }
if ($hget(snake,dir) == down) { var %y = $calc(%y + 1) }
if (%thruwalls) {
if (%x == 29) { var %x = 0 }
elseif (%y == 18) { var %y = 0 }
elseif (%x == -1) { var %x = 29 }
elseif (%y == -1) { var %y = 17 }
}
else {
if (%x == 29) || (%y == 18) || (%x == -1) || (%y == -1) { set %gameover yes }
}
var %g = %g $+ : $+ %x %y
var %g2 = $deltok(%g,-1,58)
var %c = $gettok(%g,-1,58)
if ($istok(%g2,%c,58)) {
set %gameover yes
}
clear -n @snake
drawrect -fn @snake %backcolour 1 0 0 300 200
if (%gameover == yes) {
drawtext -fn @snake %textcolour "Comic Sans MS" 26 20 30 Game Over!
drawtext -fn @snake %textcolour "Comic Sans MS" 16 20 70 Your score was: $hget(snake,score)
if ($hget(snake,score) > %highscore) {
set %ishighscore yes
set %highscore $ifmatch
}
if (%ishighscore) {
drawtext -fn @snake %textcolour "Comic Sans MS" 16 20 95 NEW HIGH SCORE!!!!
unset %highscoreset
}
}
else {
if ($hget(snake,apple) != $gettok(%g,-1,58)) { var %g = $gettok(%g,2-,58) }
else {
if (%gone == 1) {
var %a = $hget(snake,apple)
var %x = $gettok(%a,1,32)
var %y = $gettok(%a,2,32)
hinc -m snake score $calc(%snakelevel * 7)
while ($istok($hget(snake,snake),%x %y,58)) || (%a == %x %y) {
var %x = $rand(2,27) | var %y = $rand(2,15)
}
hadd -m snake apple %x %y
}
}
if ($hget(snake,pause)) || ($active != @Snake) {
drawtext -bfn @snake %backcolour %textcolour "Comic Sans MS" 20 30 30 Paused! Press p to continue.
}
else {
hadd snake snake %g
}
while (%g) {
var %c = $gettok(%g,1,58)
var %g = $deltok(%g,1,58)
var %x = $calc($gettok(%c,1,32) * 10)
var %y = $calc($gettok(%c,2,32) * 10)
drawrect -fn @snake %snakecolour 1 %x %y 10 10
}
var %c = $hget(snake,apple)
var %x = $gettok(%c,1,32)
var %y = $gettok(%c,2,32)
drawrect -fn @snake %applecolour 1 $calc(%x * 10) $calc(%y * 10) 10 10
}
drawpic @snake
var %titlebar = Score: $hget(snake,score) points
if ($titlebar(@snake) == %titlebar) { return }
titlebar @snake %titlebar
.timerupdsn -m 1 $hget(snake,time) updsn
}
on *:KEYDOWN:@snake:*: {
if ($keychar == p) {
if ($hget(snake,pause)) { hdel snake pause }
else { hadd -m snake pause yes }
}
elseif ($keyval == 37) { if ($hget(snake,dir) != right) { hadd -m snake dir left } }
elseif ($keyval == 38) { if ($hget(snake,dir) != down) { hadd -m snake dir up } }
elseif ($keyval == 39) { if ($hget(snake,dir) != left) { hadd -m snake dir right } }
elseif ($keyval == 40) { if ($hget(snake,dir) != up) { hadd -m snake dir down } }
elseif ($keyval == 100) { if ($hget(snake,dir) != right) { hadd -m snake dir left } }
elseif ($keyval == 104) { if ($hget(snake,dir) != down) { hadd -m snake dir up } }
elseif ($keyval == 102) { if ($hget(snake,dir) != left) { hadd -m snake dir right } }
elseif ($keyval == 98) { if ($hget(snake,dir) != up) { hadd -m snake dir down } }
else { return }
updsn
.timerupdsn -m 0 $hget(snake,time) updsn
}
menu status,menubar,channel,nicklist,query {
Nokia Snake Clone
.Play: /snake
.Top 10 Scores: /run http://this-site.kicks-ass.org/~darkie/top10/top10.php?db=snake
.Unload: {
.unload -rs $script
}
}
; Dialog
dialog snakecol {
title "Nokia Snake Clone Colours"
size -1 -1 120 50
option dbu
text "Background Colour", 1, 0 0 60 10
text "Snake Colour", 2, 0 10 60 10
text "'Apple' Colour", 3, 0 20 60 10
text "Text Colour", 4, 0 30 60 10
combo 5, 60 0 60 40, size vsbar drop
combo 6, 60 10 60 40, size vsbar drop
combo 7, 60 20 60 40, size vsbar drop
combo 8, 60 30 60 40, size vsbar drop
button "Save", 9, 20 40 40 10, ok
button "Cancel", 10, 60 40 40 10, cancel
}
on *:DIALOG:snakecol:*:*: {
if ($devent == init) {
didtok snakecol 5,6,7,8 44 00 - White,01 - Black,02 - Blue,03 - Green,04 - Red,05 - Brown,06 - Purple,07 - Orange,08 - Yellow,09 - Light Green,10 - Blue-Green,11 - Cyan,12 - Light Blue,13 - Pink,14 - Dark Grey,15 - Light Grey
did -c snakecol 5 $calc(%backcolour + 1)
did -c snakecol 6 $calc(%snakecolour + 1)
did -c snakecol 7 $calc(%applecolour + 1)
did -c snakecol 8 $calc(%textcolour + 1)
}
if ($devent == sclick) && ($did == 9) {
set %backcolour $left($did(5),2)
set %snakecolour $calc($did(6,1).sel - 1)
set %applecolour $calc($did(7,1).sel - 1)
set %textcolour $calc($did(8,1).sel - 1)
snake
}
if ($devent == sclick) && ($did == 10) { snake 4 }
}
alias tellworld {
set %name $?="Enter your name, or nothing for your nickname"
set %name $iif(%name,$ifmatch,$me)
sockopen tellworld this-site.kicks-ass.org 80
}
on *:SOCKOPEN:tellworld: {
if ($sockerr) { echo 3 -s Unable to access Top 10 server: $sock(tellworld).wsmsg | return }
sockwrite -n tellworld GET /~darkie/top10/top10_add.php?db=snake&name= $+ %name $+ &score= $+ %highscore &level= $+ %snakelevel HTTP/1.0
sockwrite -n tellworld Host: users.quickfox.tk
sockwrite -n tellworld Accept: */*
sockwrite -n tellworld
}
on *:sockread:tellworld: {
if ($sockerr) { echo 3 -s Unable to access Top 10 server: $sock(tellworld).wsmsg | return }
var %h
sockread %h
while ($sockbr) {
tokenize 32 %h
if ($1 isnum) {
if ($1 == 200) {
echo -a Your score has successfully been posted into the list.
set %successful yes
}
else {
echo -a An error occured: $1-
}
}
sockread %h
}
}
on *:sockclose:tellworld: {
if ($sockerr) { echo 3 -s Error occured at Top 10 server: $sock(tellworld).wsmsg | return }
if (%successful) set %highscoreset $true | unset %successful
}
on *:UNLOAD: {
unset %highscore* %menulevel %*colour
echo -a SnakeClone unloaded. Thanks for using my creations =)
}