diff options
Diffstat (limited to 'npc')
-rw-r--r-- | npc/maze0/config.txt | 189 |
1 files changed, 177 insertions, 12 deletions
diff --git a/npc/maze0/config.txt b/npc/maze0/config.txt index 07bc3222d..5a0f315ae 100644 --- a/npc/maze0/config.txt +++ b/npc/maze0/config.txt @@ -14,12 +14,6 @@ function script MazeVar { } ///////////////////////////////////////////////////////////////////////////////// -// WarpToMaze(instanceID, x, y) -function script WarpToMaze { - end; -} - -///////////////////////////////////////////////////////////////////////////////// // SetMazeCon(Maze, north, west, east, south) function script SetMazeCon { setd(getarg(0)+"$["+MAZENORTH+"]", getarg(1)); @@ -68,7 +62,7 @@ function script ParseMaze { case MAZEMAPTYPE_NULL: SetMazeCon(.@v$, "WALL", "WALL", "WALL", "WALL"); // It's a fallback - Exception("ERROR IN PARSER, FALLBACK", RB_DEBUGMES|RB_ISFATAL); + Exception("ERROR IN PARSER, FALLBACK", RB_DEBUGMES|RB_IRCBROADCAST); return true; break; @@ -223,10 +217,14 @@ function script ParseMaze { ///////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////// -// GenerateMaze(width, height, instanceID) +// GenerateMaze(width, height) → Returns instance ID function script GenerateMaze { + // Create the Maze instance or die trying + .@inst = instance_create("Maze "+getcharid(0), getcharid(3), IOT_CHAR); + if (.@inst < 0) end; + MAZE_ID=.@inst; + // Save maze configuration - MAZE_ID=getarg(2); MAZE_MX=getarg(0); MAZE_MY=getarg(1); freeloop(true); @@ -385,20 +383,187 @@ function script GenerateMaze { freeloop(false); debugmes "[STATUS] Finished"; + // Attach instance maps + instance_attachmap("maze0", .@inst, false, "mz0@"+getcharid(0)); + instance_attachmap("maze1", .@inst, false, "mz1@"+getcharid(0)); + instance_attachmap("maze2", .@inst, false, "mz2@"+getcharid(0)); + instance_attachmap("maze3", .@inst, false, "mz3@"+getcharid(0)); + instance_attachmap("maze4", .@inst, false, "mz4@"+getcharid(0)); + instance_attachmap("maze5", .@inst, false, "mz5@"+getcharid(0)); + instance_attachmap("maze6", .@inst, false, "mz6@"+getcharid(0)); + instance_attachmap("maze7", .@inst, false, "mz7@"+getcharid(0)); + instance_attachmap("maze8", .@inst, false, "mz8@"+getcharid(0)); + instance_attachmap("maze9", .@inst, false, "mz9@"+getcharid(0)); + instance_attachmap("maze10", .@inst, false, "mz10@"+getcharid(0)); + instance_attachmap("maze11", .@inst, false, "mz11@"+getcharid(0)); + instance_attachmap("maze12", .@inst, false, "mz12@"+getcharid(0)); + instance_attachmap("maze13", .@inst, false, "mz13@"+getcharid(0)); + instance_attachmap("maze14", .@inst, false, "mz14@"+getcharid(0)); + instance_attachmap("maze15", .@inst, false, "mz15@"+getcharid(0)); + // Instance lasts one hour + instance_set_timeout(3600, 3600, .@inst); + instance_init(.@inst); + return .@inst; +} + +///////////////////////////////////////////////////////////////////////////////// +// WarpToMaze(dir) +function script WarpToMaze { + // Look up the destination map + switch (getarg(0)) { + case DIR_NORTH: + .@dst$=getd(MazeVar(MAZE_X, MAZE_Y, "$["+MAZENORTH+"]")); + break; + case DIR_SOUTH: + .@dst$=getd(MazeVar(MAZE_X, MAZE_Y, "$["+MAZESOUTH+"]")); + break; + case DIR_WEST: + .@dst$=getd(MazeVar(MAZE_X, MAZE_Y, "$["+MAZE_WEST+"]")); + break; + case DIR_EAST: + .@dst$=getd(MazeVar(MAZE_X, MAZE_Y, "$["+MAZE_EAST+"]")); + break; + } + // Get MAPID + .@id=getd("MAZE_"+.@dst$+"_ID"); + explode(.@crd$, .@dst$, "_"); + debugmes "%s = (%d,%d)", .@dst$, .@crd$[0], .@crd$[1]; + // Warp you based on MAPID and update your coordinates + MAZE_X=atoi(.@crd$[0]); + MAZE_Y=atoi(.@crd$[1]); + + // Time to generate .@x and .@y + .@x=30; + .@y=30; + switch (.@id) { + // Assumed position + case MAZEMAPTYPE_NULL: + .@x=30; .@y=30; break; + case MAZEMAPTYPE_DEADS: + .@x=29; .@y=38; break; + case MAZEMAPTYPE_DEADW: + .@x=21; .@y=31; break; + case MAZEMAPTYPE_DEADN: + .@x=29; .@y=21; break; + case MAZEMAPTYPE_DEADE: + .@x=38; .@y=31; break; + // We need your direction + // TODO + } + + // We don't need MAZE_ID do we? + warp "mz"+.@id+"@"+getcharid(0), .@x, .@y; + return; +} + +///////////////////////////////////////////////////////////////////////////////// +// InitMaze(maze_x, maze_y) +function script InitMaze { +MAZE_X=getarg(0); + MAZE_Y=getarg(1); + .@id=getd(MazeVar(MAZE_X, MAZE_Y, "_ID")); + warp "mz"+.@id+"@"+getcharid(0), 30, 30; + dispbottom l("Good luck!"); + return; +} + +// Warp NPCs +maze1,29,39,0 script #MZSOUTH NPC_SUMMONING_CIRC,0,0,{ + end; +OnTouch: + WarpToMaze(DIR_SOUTH); + end; +} + +maze2,20,31,0 script #MZWEST NPC_SUMMONING_CIRC,0,0,{ + end; +OnTouch: + WarpToMaze(DIR_WEST); end; } +maze3,29,20,0 script #MZNORTH NPC_SUMMONING_CIRC,0,0,{ + end; +OnTouch: + WarpToMaze(DIR_NORTH); + end; +} -// One warp handler per maze map +maze4,39,31,0 script #MZEAST NPC_SUMMONING_CIRC,0,0,{ + end; +OnTouch: + WarpToMaze(DIR_EAST); + end; +} + +maze5,29,20,0 duplicate(#MZNORTH) #MZ5N NPC_SUMMONING_CIRC,0,0 +maze5,20,31,0 duplicate(#MZWEST) #MZ5W NPC_SUMMONING_CIRC,0,0 + +maze6,29,20,0 duplicate(#MZNORTH) #MZ6N NPC_SUMMONING_CIRC,0,0 +maze6,39,31,0 duplicate(#MZEAST) #MZ6E NPC_SUMMONING_CIRC,0,0 + +maze7,29,39,0 duplicate(#MZSOUTH) #MZ7S NPC_SUMMONING_CIRC,0,0 +maze7,20,31,0 duplicate(#MZWEST) #MZ7W NPC_SUMMONING_CIRC,0,0 + +maze8,29,39,0 duplicate(#MZSOUTH) #MZ8S NPC_SUMMONING_CIRC,0,0 +maze8,39,31,0 duplicate(#MZEAST) #MZ8E NPC_SUMMONING_CIRC,0,0 + +maze9,29,20,0 duplicate(#MZNORTH) #MZ9N NPC_SUMMONING_CIRC,0,0 +maze9,20,31,0 duplicate(#MZWEST) #MZ9W NPC_SUMMONING_CIRC,0,0 +maze9,29,39,0 duplicate(#MZSOUTH) #MZ9S NPC_SUMMONING_CIRC,0,0 + +maze10,29,20,0 duplicate(#MZNORTH) #MZ10N NPC_SUMMONING_CIRC,0,0 +maze10,39,31,0 duplicate(#MZEAST) #MZ10E NPC_SUMMONING_CIRC,0,0 +maze10,29,39,0 duplicate(#MZSOUTH) #MZ10S NPC_SUMMONING_CIRC,0,0 + +maze11,20,31,0 duplicate(#MZWEST) #MZ11W NPC_SUMMONING_CIRC,0,0 +maze11,39,31,0 duplicate(#MZEAST) #MZ11E NPC_SUMMONING_CIRC,0,0 +maze11,29,20,0 duplicate(#MZNORTH) #MZ11N NPC_SUMMONING_CIRC,0,0 + +maze12,20,31,0 duplicate(#MZWEST) #MZ12W NPC_SUMMONING_CIRC,0,0 +maze12,39,31,0 duplicate(#MZEAST) #MZ12E NPC_SUMMONING_CIRC,0,0 +maze12,29,39,0 duplicate(#MZSOUTH) #MZ12S NPC_SUMMONING_CIRC,0,0 + +maze13,29,20,0 duplicate(#MZNORTH) #MZ13N NPC_SUMMONING_CIRC,0,0 +maze13,29,39,0 duplicate(#MZSOUTH) #MZ13S NPC_SUMMONING_CIRC,0,0 + +maze14,20,31,0 duplicate(#MZWEST) #MZ14W NPC_SUMMONING_CIRC,0,0 +maze14,39,31,0 duplicate(#MZEAST) #MZ14E NPC_SUMMONING_CIRC,0,0 + +maze15,29,20,0 duplicate(#MZNORTH) #MZ15N NPC_SUMMONING_CIRC,0,0 +maze15,20,31,0 duplicate(#MZWEST) #MZ15W NPC_SUMMONING_CIRC,0,0 +maze15,29,39,0 duplicate(#MZSOUTH) #MZ15S NPC_SUMMONING_CIRC,0,0 +maze15,39,31,0 duplicate(#MZEAST) #MZ15E NPC_SUMMONING_CIRC,0,0 + +// Testing framework maze0,30,30,0 script #MazeMaster NPC_MONA,{ /* function mazeGen; function parseConnections; */ //GenerateMaze(7, 7, 0); - GenerateMaze(5, 5, 0); + GenerateMaze(5, 5); + InitMaze(0, 0); end; } - +// Mapflags +/* +maze0 mapflag nowarpto +maze1 mapflag nowarpto +maze2 mapflag nowarpto +maze3 mapflag nowarpto +maze4 mapflag nowarpto +maze5 mapflag nowarpto +maze6 mapflag nowarpto +maze7 mapflag nowarpto +maze8 mapflag nowarpto +maze9 mapflag nowarpto +maze10 mapflag nowarpto +maze11 mapflag nowarpto +maze12 mapflag nowarpto +maze13 mapflag nowarpto +maze14 mapflag nowarpto +maze15 mapflag nowarpto +*/ |