From 5b1c1c9a4f3d165942b26a39a292a8c71d869df1 Mon Sep 17 00:00:00 2001 From: Philipp Sehmisch Date: Tue, 25 Mar 2008 21:37:38 +0000 Subject: Added a Lua library with walk around functions for NPCs. --- data/scripts/npclib.lua | 84 +++++++++++++++++++++++++++++++++++++++++++++++++ data/test.lua | 22 ++++--------- 2 files changed, 90 insertions(+), 16 deletions(-) create mode 100644 data/scripts/npclib.lua (limited to 'data') diff --git a/data/scripts/npclib.lua b/data/scripts/npclib.lua new file mode 100644 index 00000000..c438d144 --- /dev/null +++ b/data/scripts/npclib.lua @@ -0,0 +1,84 @@ +------------------------------------------------------------------------------ +-- Library for commonly used NPC scripts -- +-- -- +-- Any NPC update function or talk function which could be used for NPCs on -- +-- more than one map should be placed here. -- +------------------------------------------------------------------------------ + +module("npclib", package.seeall); + + +-- Update function walkaround_small +-- makes the NPC walk around in a 64x64 pixel square around its start location. +-- Useful for NPCs which are supposed to stay on a specific spot but +-- move a bit from time to time. + +local wasmall_timer = {} +local wasmall_startx = {} +local wasmall_starty = {} + +function walkaround_small(npc) + if not wasmall_timer[npc] then + wasmall_timer[npc] = 1 + wasmall_startx[npc] = tmw.posX(npc) + wasmall_starty[npc] = tmw.posY(npc) + end + + wasmall_timer[npc] = wasmall_timer[npc] + 1 + + if wasmall_timer[npc] == 100 then + wasmall_timer[npc] = math.random(1, 10) + local x = math.random(-32, 32) + wasmall_startx[npc] + local y = math.random(-32, 32) + wasmall_starty[npc] + tmw.being_walk(npc, x, y, 500) + end +end + + +-- Update function walkaround_wide +-- makes the NPC walk around in a 256x256 pixel square around its start +-- location. Useful for NPCs which are supposed to be found near a specific +-- location but not nailed to the floor. + +local wawide_timer = {} +local wawide_startx = {} +local wawide_starty = {} + +function walkaround_wide(npc) + if not wawide_timer[npc] then + wawide_timer[npc] = 1 + wawide_startx[npc] = tmw.posX(npc) + wawide_starty[npc] = tmw.posY(npc) + end + + wawide_timer[npc] = wawide_timer[npc] + 1 + + if wawide_timer[npc] == 50 then + wawide_timer[npc] = math.random(1, 10) + local x = math.random(-128, 128) + wawide_startx[npc] + local y = math.random(-128, 128) + wawide_starty[npc] + tmw.being_walk(npc, x, y, 500) + end +end + + +-- Update function walkaround_map +-- makes the NPC wander around the whole map. Useful when the players are +-- supposed to search a bit for the NPC. + +local wam_timer = {} + +function walkaround_map(npc) + if not wam_timer[npc] then + wam_timer[npc] = 1 + end + + wam_timer[npc] = wam_timer[npc] + 1 + + if wam_timer[npc] == 50 then + wam_timer[npc] = math.random(1, 10) + local x = math.random(-128, 128) + tmw.posX(npc) + local y = math.random(-128, 128) + tmw.posY(npc) + tmw.being_walk(npc, x, y, 500) + end +end \ No newline at end of file diff --git a/data/test.lua b/data/test.lua index 3bc630fb..70c0b66f 100644 --- a/data/test.lua +++ b/data/test.lua @@ -2,10 +2,12 @@ -- Map code -- -------------- +require "data/scripts/npclib" + atinit(function() - create_npc(110, 50 * 32 + 16, 19 * 32 + 16, npc1_talk, nil) - create_npc(108, 51 * 32 + 16, 25 * 32 + 16, npc4_talk, nil) - create_npc(126, 45 * 32 + 16, 25 * 32 + 16, npc5_talk, npc5_update) + create_npc(110, 50 * 32 + 16, 19 * 32 + 16, npc1_talk, npclib.walkaround_small) + create_npc(108, 51 * 32 + 16, 25 * 32 + 16, npc4_talk, npclib.walkaround_wide) + create_npc(126, 45 * 32 + 16, 25 * 32 + 16, npc5_talk, npclib.walkaround_map) create_npc(122, 58 * 32 + 16, 15 * 32 + 16, npc6_talk, nil) end) @@ -72,24 +74,12 @@ function npc5_talk(npc, ch) local x = tmw.posX(npc) local y = tmw.posY(npc) tmw.monster_create(1012, x + 32, y + 32) - tmw.monster_create(1012, x - 32, y + 32) + tmw.monster_create(112, x - 32, y + 32) tmw.monster_create(1012, x + 32, y - 32) tmw.monster_create(1012, x - 32, y - 32) end end -local spidertamer_timer = 0 - -function npc5_update(npc) - spidertamer_timer = spidertamer_timer + 1 - if spidertamer_timer == 50 then - spidertamer_timer = 0 - local x = math.random(-64, 64) + tmw.posX(npc) - local y = math.random(-64, 64) + tmw.posY(npc) - tmw.being_walk(npc, x, y, 500) - end -end - local guard_position = 1 function npc6_talk(npc, ch) -- cgit v1.2.3-70-g09d2