diff --git a/game/modules/tome/data/general/npcs/orc-rak-shor.lua b/game/modules/tome/data/general/npcs/orc-rak-shor.lua index 7f34508e080083f24871ac1f86049a4c32e83cfb..ba76a7ce6f5f49fb1a67897bb2250e324e477ee1 100644 --- a/game/modules/tome/data/general/npcs/orc-rak-shor.lua +++ b/game/modules/tome/data/general/npcs/orc-rak-shor.lua @@ -91,13 +91,14 @@ newEntity{ base = "BASE_NPC_ORC_RAK_SHOR", [Talents.T_BLOOD_GRASP]=5, [Talents.T_CURSE_OF_VULNERABILITY]=5, }, + resolvers.sustains_at_birth(), } newEntity{ base = "BASE_NPC_ORC_RAK_SHOR", name = "orc corruptor", color=colors.GREY, desc = [[An orc dressed in black robes. He mumbles is a harsh tongue.]], level_range = {27, nil}, exp_worth = 1, - rarity = 1, + rarity = 4, rank = 3, max_life = resolvers.rngavg(160,180), life_rating = 15, resolvers.equip{ diff --git a/game/modules/tome/data/gfx/particles/bone_shield.lua b/game/modules/tome/data/gfx/particles/bone_shield.lua index 341b302cb4c13effcdaf20f6acf850b7ca99e136..1a8b765d1ecd13434e8d8d218fe14ed58b6983ba 100644 --- a/game/modules/tome/data/gfx/particles/bone_shield.lua +++ b/game/modules/tome/data/gfx/particles/bone_shield.lua @@ -19,17 +19,24 @@ local ad = rng.range(0, 360) local a = math.rad(ad) +local dir = math.rad(ad + 90) local r = 18 +local speed = rng.range(33, 99) +local dirv = math.pi * 2 / speed +local vel = math.pi * 2 * r / speed +local first = true return { generator = function() + local dr = rng.range(0, 2) + local da = math.rad(rng.range(0, 360)) return { - life = 20, - size = 4, sizev = 0, sizea = 0, + life = core.particles.ETERNAL, + size = rng.range(3,8), sizev = 0, sizea = 0, - x = r * math.cos(a), xv = 0, xa = 0, - y = r * math.sin(a), yv = 0, ya = 0, - dir = 0, dirv = 0, dira = 0, - vel = 0, velv = 0, vela = 0, + x = r * math.cos(a) + dr * math.cos(da), xv = 0, xa = 0, + y = r * math.sin(a) + dr * math.cos(da), yv = 0, ya = 0, + dir = dir, dirv = dirv, dira = 0, + vel = vel, velv = 0, vela = 0, r = rng.range(220, 255)/255, rv = 0, ra = 0, g = rng.range(220, 255)/255, gv = 0, ga = 0, @@ -38,6 +45,6 @@ return { generator = function() } end, }, function(self) - self.ps:emit(1) + if first then self.ps:emit(10) first = false end end, -1 +10 diff --git a/game/modules/tome/data/zones/rak-shor-pride/npcs.lua b/game/modules/tome/data/zones/rak-shor-pride/npcs.lua index 34dfab3d4ab2df51da5c9cc34beb670e2e426249..6c2bbc57dbaa8570478c97b407caf6cc7157b1bb 100644 --- a/game/modules/tome/data/zones/rak-shor-pride/npcs.lua +++ b/game/modules/tome/data/zones/rak-shor-pride/npcs.lua @@ -20,7 +20,7 @@ load("/data/general/npcs/bone-giant.lua", rarity(0)) load("/data/general/npcs/ghoul.lua", rarity(5)) load("/data/general/npcs/skeleton.lua", rarity(5)) -load("/data/general/npcs/orc.lua", rarity(2)) +load("/data/general/npcs/orc.lua", rarity(3)) load("/data/general/npcs/orc-rak-shor.lua", rarity(0)) load("/data/general/npcs/all.lua", rarity(4, 35)) @@ -38,12 +38,14 @@ newEntity{ base="BASE_NPC_ORC_RAK_SHOR", define_as = "RAK_SHOR", move_others=true, instakill_immune = 1, + disease_immune = 1, + confusion_immune = 1, combat_armor = 10, combat_def = 10, open_door = true, autolevel = "caster", - ai = "dumb_talented_simple", ai_state = { talent_in=2, ai_move="move_astar", }, + ai = "dumb_talented_simple", ai_state = { talent_in=1, ai_move="move_astar", }, body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 }, @@ -61,8 +63,17 @@ newEntity{ base="BASE_NPC_ORC_RAK_SHOR", define_as = "RAK_SHOR", {type="undead", no_subescort=true, number=resolvers.mbonus(4, 4)}, }, + inc_damage = { [DamageType.BLIGHT] = 30 }, + talent_cd_reduction={[Talents.T_SOUL_ROT]=1, [Talents.T_BLOOD_GRASP]=3, }, + resolvers.talents{ [Talents.T_SUMMON]=1, + + [Talents.T_SOUL_ROT]=5, + [Talents.T_BLOOD_GRASP]=5, + [Talents.T_CURSE_OF_VULNERABILITY]=5, + [Talents.T_BONE_SHIELD]=8, + [Talents.T_BLOOD_SPRAY]=5, }, resolvers.sustains_at_birth(), diff --git a/src/particles.c b/src/particles.c index eec823187a07009deef87b76afe9aadb8f97fb0c..72659605b2257fceeca01c640078ad3e1b5b235b 100644 --- a/src/particles.c +++ b/src/particles.c @@ -31,6 +31,8 @@ #define rng(x, y) (x + rand_div(1 + y - x)) +#define PARTICLE_ETERNAL 999999 + static void getinitfield(lua_State *L, const char *key, int *min, int *max) { lua_pushstring(L, key); @@ -322,7 +324,7 @@ static int particles_to_screen(lua_State *L) glEnd(); } - p->life--; + if (p->life != PARTICLE_ETERNAL) p->life--; p->ox = p->x; p->oy = p->y; @@ -382,5 +384,8 @@ int luaopen_particles(lua_State *L) { auxiliar_newclass(L, "core{particles}", particles_reg); luaL_openlib(L, "core.particles", particleslib, 0); + lua_pushstring(L, "ETERNAL"); + lua_pushnumber(L, PARTICLE_ETERNAL); + lua_settable(L, -3); return 1; }