diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/map/map.t.hpp | 2 | ||||
-rw-r--r-- | src/map/npc-parse.cpp | 30 | ||||
-rw-r--r-- | src/map/npc.cpp | 4 | ||||
-rw-r--r-- | src/map/pc.cpp | 8 | ||||
-rw-r--r-- | src/map/script-fun.cpp | 7 |
5 files changed, 10 insertions, 41 deletions
diff --git a/src/map/map.t.hpp b/src/map/map.t.hpp index 89b9a87..ea7ead5 100644 --- a/src/map/map.t.hpp +++ b/src/map/map.t.hpp @@ -185,8 +185,6 @@ enum class MapCell : uint8_t UNWALKABLE = 0x01, // not in tmwa data _range = 0x04, - // set in code, not imported - NPC_NEAR = 0x80, }; ENUM_BITWISE_OPERATORS(MapCell) } diff --git a/src/map/npc-parse.cpp b/src/map/npc-parse.cpp index edfe4c9..e30225a 100644 --- a/src/map/npc-parse.cpp +++ b/src/map/npc-parse.cpp @@ -166,21 +166,6 @@ bool npc_load_warp(ast::npc::Warp& warp) nd->warp.xs = xs; nd->warp.ys = ys; - for (int i = 0; i < ys; i++) - { - for (int j = 0; j < xs; j++) - { - int x_lo = x - xs / 2; - int y_lo = y - ys / 2; - int xc = x_lo + j; - int yc = y_lo + i; - MapCell t = map_getcell(m, xc, yc); - if (bool(t & MapCell::UNWALKABLE)) - continue; - map_setcell(m, xc, yc, t | MapCell::NPC_NEAR); - } - } - npc_warp++; nd->bl_type = BL::NPC; nd->npc_subtype = NpcSubtype::WARP; @@ -554,21 +539,6 @@ bool npc_load_script_map(ast::script::ScriptBody& body, ast::npc::ScriptMap& scr int xs = script_map.xs.data, ys = script_map.ys.data; { - for (int i = 0; i < ys; i++) - { - for (int j = 0; j < xs; j++) - { - int x_lo = x - xs / 2; - int y_lo = y - ys / 2; - int xc = x_lo + j; - int yc = y_lo + i; - MapCell t = map_getcell(m, xc, yc); - if (bool(t & MapCell::UNWALKABLE)) - continue; - map_setcell(m, xc, yc, t | MapCell::NPC_NEAR); - } - } - nd->scr.xs = xs; nd->scr.ys = ys; nd->scr.event_needs_map = true; diff --git a/src/map/npc.cpp b/src/map/npc.cpp index c55dbbf..b7fb9ca 100644 --- a/src/map/npc.cpp +++ b/src/map/npc.cpp @@ -713,12 +713,12 @@ int npc_touch_areanpc(dumb_ptr<map_session_data> sd, Borrowed<map_local> m, int aname.label = stringish<ScriptLabel>("OnTouch"_s); if (sd->areanpc_id == m->npc[i]->bl_id) - return 1; + return 2; sd->areanpc_id = m->npc[i]->bl_id; if (npc_event(sd, aname, 0) > 0) npc_click(sd, m->npc[i]->bl_id); - break; + return 2; } } return 0; diff --git a/src/map/pc.cpp b/src/map/pc.cpp index 7940812..1440454 100644 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -2457,9 +2457,7 @@ void pc_walk(TimerData *, tick_t tick, BlockId id, unsigned char data) } } - if (bool(map_getcell(sd->bl_m, x, y) & MapCell::NPC_NEAR)) - npc_touch_areanpc(sd, sd->bl_m, x, y); - else + if (npc_touch_areanpc(sd, sd->bl_m, x, y) != 2) sd->areanpc_id = BlockId(); } interval_t i = calc_next_walk_step(sd); @@ -2563,9 +2561,7 @@ int pc_stop_walking(dumb_ptr<map_session_data> sd, int type) void pc_touch_all_relevant_npcs(dumb_ptr<map_session_data> sd) { - if (bool(map_getcell(sd->bl_m, sd->bl_x, sd->bl_y) & MapCell::NPC_NEAR)) - npc_touch_areanpc(sd, sd->bl_m, sd->bl_x, sd->bl_y); - else + if (npc_touch_areanpc(sd, sd->bl_m, sd->bl_x, sd->bl_y) != 2) sd->areanpc_id = BlockId(); } diff --git a/src/map/script-fun.cpp b/src/map/script-fun.cpp index 7e55565..f8c81c4 100644 --- a/src/map/script-fun.cpp +++ b/src/map/script-fun.cpp @@ -894,6 +894,11 @@ void builtin_puppet(ScriptState *st) nd->bl_m = m; nd->bl_x = x; nd->bl_y = y; + if (HARG(5) && HARG(6)) + { + nd->scr.xs = ((conv_num(st, &AARG(5)) * 2) + 1); // do the same equation as in AST + nd->scr.ys = ((conv_num(st, &AARG(6)) * 2) + 1); + } nd->bl_id = npc_get_new_npc_id(); nd->scr.parent = parent_nd->bl_id; nd->dir = DIR::S; @@ -4312,7 +4317,7 @@ BuiltinFunction builtin_functions[] = BUILTIN(isdead, ""_s, 'i'), BUILTIN(aggravate, "Mxyxyi"_s, '\0'), BUILTIN(fakenpcname, "ssi"_s, '\0'), - BUILTIN(puppet, "mxysi"_s, 'i'), + BUILTIN(puppet, "mxysi??"_s, 'i'), BUILTIN(destroy, "?"_s, '\0'), BUILTIN(getx, ""_s, 'i'), BUILTIN(gety, ""_s, 'i'), |