Skip to content

Instantly share code, notes, and snippets.

@hcs64
Last active March 17, 2018 06:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save hcs64/f45e9354364a5e9be201a5e2de5115e1 to your computer and use it in GitHub Desktop.
Save hcs64/f45e9354364a5e9be201a5e2de5115e1 to your computer and use it in GitHub Desktop.
Net ported to PuzzleScript
title Net
(
An implementation of Simon Tatham's "Net" [0]
Simon says [1] "I originally saw this in the form of a Flash game called
FreeNet [2], written by Pavils Jurjans; there are several other
implementations under the name NetWalk."
This PuzzleScript port is by Adam Gashlin.
[0] http://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/net.html
[1] http://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/net.html
[2] http://www.jurjans.lv/stuff/net/FreeNet.htm
Missing features:
- Probably impossible
* ensure unique solution (levels are thus harder than usual)
* clicking on stuff!
* clockwise rotation (input limitation)
* locking
* saving random seed
- Maybe Possible:
* barriers
* solving
* checking for cycles (not sure if this is essential)
)
run_rules_on_level_start
key_repeat_interval 0.25
flickscreen 13x11
noundo
========
OBJECTS
========
Space
Black
PreBoard
Transparent
Board
Grey
BorderT
DarkGrey
00000
.....
.....
.....
.....
BorderB
DarkGrey
.....
.....
.....
.....
00000
BorderL
DarkGrey
0....
0....
0....
0....
0....
BorderR
DarkGrey
....0
....0
....0
....0
....0
WrapBorderL
Transparent
WrapBorderR
Transparent
WrapBorderT
Transparent
WrapBorderB
Transparent
BoardFlash
Black
Off
Transparent
On
Transparent
OffBlock
Blue
.....
.000.
.000.
.000.
.....
OnBlock
LightBlue
.....
.000.
.000.
.000.
.....
OriginFlash
LightBlue
.....
.000.
.000.
.000.
.....
Cursor
Red
.....
.....
..0..
.....
.....
ChoiceCursor
Yellow
..0..
..00.
..000
..00.
..0..
WonCursor
Transparent
Seed3
Transparent
Seed2
Transparent
Seed1
Transparent
SeedC
Transparent
GoU
Transparent
GoD
Transparent
GoL
Transparent
GoR
Transparent
OnU
LightBlue
..0..
..0..
..0..
.....
.....
OnD
LightBlue
.....
.....
..0..
..0..
..0..
OnL
LightBlue
.....
.....
000..
.....
.....
OnR
LightBlue
.....
.....
..000
.....
.....
OffU
Black
..0..
..0..
..0..
.....
.....
OffD
Black
.....
.....
..0..
..0..
..0..
OffL
Black
.....
.....
000..
.....
.....
OffR
Black
.....
.....
..000
.....
.....
Origin
Black
.....
.000.
.000.
.000.
.....
WonFlag
Transparent
Rand
Transparent
Rot
Transparent
Rot0
Transparent
Rot90
Transparent
Rot180
Transparent
Rot270
Transparent
No11
Black White
10001
10001
10001
10001
10001
No13
Black White
10111
10001
10111
10001
10111
No5
Black White
01110
01000
01110
00010
01110
No7
Black White
01110
00010
00010
00010
00010
No9
Black White
01110
01010
01110
00010
01110
NoX
Black White
00000
01010
00100
01010
00000
HE
Black White
10101
10101
11101
10101
10101
EL
Black White
11010
00010
11010
00010
11011
LP
Black White
00111
00101
00111
00100
10100
wl
Black White
10001
10101
10101
01010
00000
ra
Black White
01100
01001
01001
01000
00000
ap
Black White
11011
01010
01011
11010
00010
pp
Black White
10000
10000
10000
00000
00000
Help
Transparent
Board5x5
Transparent
Board7x7
Transparent
Board9x9
Transparent
Board11x11
Transparent
Board13x11
Transparent
=======
LEGEND
=======
Background = Space
Choice = Help or Board5x5 or Board7x7 or Board9x9 or Board11x11 or Board13x11
WrapBorder = WrapBorderT or WrapBorderB or WrapBorderL or WrapBorderR
Player = Cursor or ChoiceCursor or WonCursor
Block = OnBlock or OffBlock
Dir = GoU or GoD or GoL or GoR
Seed = Seed1 or Seed2 or Seed3 or SeedC
Filled = OnU or OffU or OnD or OffD or OnL or OffL or OnR or OffR
# = Space
. = PreBoard
~ = BorderT and PreBoard
_ = BorderB and PreBoard
{ = BorderL and PreBoard
} = BorderR and PreBoard
+ = BorderL and BorderT and PreBoard
* = BorderL and BorderB and PreBoard
\ = BorderR and BorderT and PreBoard
/ = BorderR and BorderB and PreBoard
1 = No11
3 = No13
5 = No5
7 = No7
9 = No9
X = NoX
] = ChoiceCursor
0 = Help
A = Board5x5
B = Board7x7
C = Board9x9
D = Board11x11
E = Board13x11
h = HE
l = EL
p = LP
w = wl
r = ra
& = ap
% = pp
=======
SOUNDS
=======
================
COLLISIONLAYERS
================
Background
PreBoard, Board
WrapBorderT, WrapBorderB, BorderT, BorderB
WrapBorderL, WrapBorderR, BorderL, BorderR
BoardFlash
No11, No13, No5, No7, No9, NoX, HE, EL, LP, wl, ra, ap, pp, Help, Board5x5, Board7x7, Board9x9, Board11x11, Board13x11
WonFlag
Rand, Rot0, Rot90, Rot180, Rot270
GoU
GoD
GoL
GoR
Seed3, Seed2, Seed1
SeedC, Rot
OnU, OffU
OnD, OffD
OnL, OffL
OnR, OffR
OnBlock, OffBlock
Origin
OriginFlash
On, Off
Cursor, ChoiceCursor, WonCursor
======
RULES
======
( *** WINNING *** )
( win immediately if we do anything with WonCursor active )
[ moving WonCursor ] -> win
( *** MENU *** )
( init ChoiceCursor )
right [ ChoiceCursor no Choice | Choice ] -> [ | ChoiceCursor Choice ]
( move menu cursor only to a choice )
[ > ChoiceCursor | ... | Choice ] -> [ | ... | ChoiceCursor Choice ]
( switch to wrap mode )
[ action ChoiceCursor Choice | | wl ] [ BorderT ] -> [ action ChoiceCursor Choice | | wl ] [ WrapBorderT ]
[ action ChoiceCursor Choice | | wl ] [ BorderB ] -> [ action ChoiceCursor Choice | | wl ] [ WrapBorderB ]
[ action ChoiceCursor Choice | | wl ] [ BorderL ] -> [ action ChoiceCursor Choice | | wl ] [ WrapBorderL ]
[ action ChoiceCursor Choice | | wl ] [ BorderR ] -> [ action ChoiceCursor Choice | | wl ] [ WrapBorderR ]
( help screen)
[ action ChoiceCursor Help ] -> message Rotate tiles to reassemble the network. Arrows to move selection cursor. Action to rotate selected tile.
( switch to game Cursor on the appropriate board )
down [ action ChoiceCursor Board5x5 ] [ Board5x5 | PreBoard ] -> [ ] [ Cursor Board Board5x5 | PreBoard ]
down [ action ChoiceCursor Board7x7 ] [ Board7x7 | PreBoard ] -> [ ] [ Cursor Board Board7x7 | PreBoard ]
down [ action ChoiceCursor Board9x9 ] [ Board9x9 | PreBoard ] -> [ ] [ Cursor Board Board9x9 | PreBoard ]
down [ action ChoiceCursor Board11x11 ] [ Board11x11 | PreBoard ] -> [ ] [ Cursor Board Board11x11 | PreBoard ]
down [ action ChoiceCursor Board13x11 ] [ Board13x11 | PreBoard ] -> [ ] [ Cursor Board Board13x11 | PreBoard ]
( any remaining ChoiceCursor movement isn't wanted )
[ moving ChoiceCursor ] -> [ stationary ChoiceCursor ]
( *** CURSOR *** )
( wrap cursor in wrap mode )
up [ Board WrapBorderB |...| Board WrapBorderT > Cursor ] -> [ Board WrapBorderB Cursor |...| Board WrapBorderT ]
down [ Board WrapBorderT |...| Board WrapBorderB > Cursor ] -> [ Board WrapBorderT Cursor |...| Board WrapBorderB ]
left [ Board WrapBorderR |...| Board WrapBorderL > Cursor ] -> [ Board WrapBorderR Cursor |...| Board WrapBorderL ]
right [ Board WrapBorderL |...| Board WrapBorderR > Cursor ] -> [ Board WrapBorderL Cursor |...| Board WrapBorderR ]
( normal cursor stays on board (though this could be used in the future for
more options) )
[ > Cursor | no Board ] -> cancel
( *** SETUP BOARD *** )
( init chosen board )
[ Board | PreBoard ] -> [ Board | Board ]
[ Cursor Choice ] -> [ Cursor Seed3 Origin Rand ] checkpoint
[ Board Rand | Board no Rand ] -> [ Board Rand | Board Rand ]
( initial traversal )
( see Net source for Simon's explanation of why this visits all tiles )
startloop
( cash in a connection )
[ Seed3 no SeedC ] -> [ SeedC Seed2 ]
[ Seed2 no SeedC ] -> [ SeedC Seed1 ]
[ Seed1 no SeedC ] -> [ SeedC ]
( at random, visit an adjacent unvisited tile )
random up [ SeedC no GoU | Board no Dir ] -> [ GoU | GoD Seed2 Board ]
+ down [ SeedC no GoD | Board no Dir ] -> [ GoD | GoU Seed2 Board ]
+ left [ SeedC no GoL | Board no Dir ] -> [ GoL | GoR Seed2 Board ]
+ right [ SeedC no GoR | Board no Dir ] -> [ GoR | GoL Seed2 Board ]
+ up [ Board WrapBorderB no Dir |...| SeedC no GoU WrapBorderT ] -> [ Board WrapBorderB GoD Seed2 |...| GoU WrapBorderT ]
+ down [ Board WrapBorderT no Dir |...| SeedC no GoD WrapBorderB ] -> [ Board WrapBorderT GoU Seed2 |...| GoD WrapBorderB ]
+ left [ Board WrapBorderR no Dir |...| SeedC no GoL WrapBorderL ] -> [ Board WrapBorderR GoR Seed2 |...| GoL WrapBorderL ]
+ right [ Board WrapBorderL no Dir |...| SeedC no GoU WrapBorderR ] -> [ Board WrapBorderL GoL Seed2 |...| GoR WrapBorderR ]
endloop
[ Seed ] -> []
( randomized rotation for initial setup )
[ Rand ] -> [ random Rot0 random Rot90 random Rot180 random Rot270 ]
( *** ROTATION *** )
( player-driven rotation )
[ action Cursor ] -> [ Cursor Rot ]
( rotation loop is only needed for the initial setup, in order to
rotate a given tile several times in one turn )
startloop
[ Rot0 ] -> []
[ Rot90 ] -> [ Rot ]
[ Rot180 ] -> [ Rot Rot90 ]
[ Rot270 ] -> [ Rot Rot180 ]
( 90 degree counter-clockwise rotation )
([ Rot GoU GoR GoD GoL ] -> [ GoL GoU GoR GoD ])
[ Rot GoU GoR GoD no GoL ] -> [ GoL GoU GoR no GoD ]
[ Rot GoU GoR no GoD GoL ] -> [ GoL GoU no GoR GoD ]
[ Rot GoU GoR no GoD no GoL ] -> [ GoL GoU no GoR no GoD ]
[ Rot GoU no GoR GoD GoL ] -> [ GoL no GoU GoR GoD ]
[ Rot GoU no GoR GoD no GoL ] -> [ GoL no GoU GoR no GoD ]
[ Rot GoU no GoR no GoD GoL ] -> [ GoL no GoU no GoR GoD ]
[ Rot GoU no GoR no GoD no GoL ] -> [ GoL no GoU no GoR no GoD ]
[ Rot no GoU GoR GoD GoL ] -> [ no GoL GoU GoR GoD ]
[ Rot no GoU GoR GoD no GoL ] -> [ no GoL GoU GoR no GoD ]
[ Rot no GoU GoR no GoD GoL ] -> [ no GoL GoU no GoR GoD ]
[ Rot no GoU GoR no GoD no GoL ] -> [ no GoL GoU no GoR no GoD ]
[ Rot no GoU no GoR GoD GoL ] -> [ no GoL no GoU GoR GoD ]
[ Rot no GoU no GoR GoD no GoL ] -> [ no GoL no GoU GoR no GoD ]
[ Rot no GoU no GoR no GoD GoL ] -> [ no GoL no GoU no GoR GoD ]
([ Rot no GoU no GoR no GoD no GoL ] -> [ no GoL no GoU no GoR no GoD ])
endloop
( *** FLOW *** )
[ Dir ] -> [ Dir Off ]
[ Origin ] -> [ Origin On ]
up [ On GoU | GoD Off ] -> [ On GoU | GoD On ]
+ down [ On GoD | GoU Off ] -> [ On GoD | GoU On ]
+ left [ On GoL | GoR Off ] -> [ On GoL | GoR On ]
+ right [ On GoR | GoL Off ] -> [ On GoR | GoL On ]
+ up [ WrapBorderB GoD Off |...| GoU On WrapBorderT ] -> [ WrapBorderB GoD On |...| GoU On WrapBorderT ]
+ down [ WrapBorderT GoU Off |...| GoD On WrapBorderB ] -> [ WrapBorderT GoU On |...| GoD On WrapBorderB ]
+ left [ WrapBorderR GoR Off |...| GoL On WrapBorderL ] -> [ WrapBorderR GoR On |...| GoL On WrapBorderL ]
+ right [ WrapBorderL GoL Off |...| GoR On WrapBorderR ] -> [ WrapBorderL GoL On |...| GoR On WrapBorderR ]
( *** RENDER *** )
( render network )
[ Filled ] -> []
[ GoU Off ] -> [ GoU Off OffU ]
[ GoD Off ] -> [ GoD Off OffD ]
[ GoL Off ] -> [ GoL Off OffL ]
[ GoR Off ] -> [ GoR Off OffR ]
[ GoU On ] -> [ GoU On OnU ]
[ GoD On ] -> [ GoD On OnD ]
[ GoL On ] -> [ GoL On OnL ]
[ GoR On ] -> [ GoR On OnR ]
( render leaf blocks )
[ Block ] -> []
[ GoU no GoD no GoL no GoR Off ] -> [ GoU OffBlock Off ]
[ no GoU GoD no GoL no GoR Off ] -> [ GoD OffBlock Off ]
[ no GoU no GoD GoL no GoR Off ] -> [ GoL OffBlock Off ]
[ no GoU no GoD no GoL GoR Off ] -> [ GoR OffBlock Off ]
[ GoU no GoD no GoL no GoR On ] -> [ GoU OnBlock On ]
[ no GoU GoD no GoL no GoR On ] -> [ GoD OnBlock On ]
[ no GoU no GoD GoL no GoR On ] -> [ GoL OnBlock On ]
[ no GoU no GoD no GoL GoR On ] -> [ GoR OnBlock On ]
( *** WINNING *** )
late [ Origin ] -> [ Origin WonFlag ]
late [ Off ] [ WonFlag ] -> [ Off ] []
late [ ChoiceCursor ] [ WonFlag ] -> [ ChoiceCursor ] []
late [ WonFlag ] [ Board ] -> [ WonFlag ] [ BoardFlash ]
late [ WonFlag ] [ Origin ] -> [ WonFlag ] [ Origin OriginFlash ]
late [ WonFlag ] [ Cursor ] -> [ WonFlag ] [ WonCursor ]
==============
WINCONDITIONS
==============
=======
LEVELS
=======
]A#5X5#A#wr&%
#############
#B#7X7#B#wr&%
#############
#C#9X9#C#wr&%
#############
#D#1X1#D#wr&%
#############
#E#3X1#E#wr&%
#############
#0#hlp#######
#############(5x5)
#############
#############
####+~~~\####
####{...}####
####{.A.}####
####{...}####
####*___/####
#############
#############
#############
#############(7x7)
#############
###+~~~~~\###
###{.....}###
###{.....}###
###{..B..}###
###{.....}###
###{.....}###
###*_____/###
#############
#############
#############(9x9)
##+~~~~~~~\##
##{.......}##
##{.......}##
##{.......}##
##{...C...}##
##{.......}##
##{.......}##
##{.......}##
##*_______/##
#############
#+~~~~~~~~~\#(11x11)
#{.........}#
#{.........}#
#{.........}#
#{.........}#
#{....D....}#
#{.........}#
#{.........}#
#{.........}#
#{.........}#
#*_________/#
#############(Padding)
#############
#############
#############
#############
#############
#############
#############
#############
#############
#############
+~~~~~~~~~~~\(13x11)
{...........}
{...........}
{...........}
{...........}
{.....E.....}
{...........}
{...........}
{...........}
{...........}
*___________/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment