Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • amagad/t-engine4
  • HirumaKai/t-engine4
  • Hogulus/t-engine4
  • Inkie/t-engine4
  • Liberty/t-engine4
  • Lokean/t-engine4
  • Mawootad/t-engine4
  • Michelle/t-engine4
  • MrFrog/t-engine4
  • Nagyhal/t-engine4
  • Recaiden/t-engine4
  • RootOfAllThings/t-engine4
  • Sebsebeleb/t-engine4
  • Sheila/t-engine4
  • Shibari/t-engine4
  • Stof/t-engine4
  • Umbral/t-engine4
  • tome/t-engine4
  • 0player/t-engine4
  • BreezyIdiot/t-engine4
  • Bunny/t-engine4
  • Effigy/t-engine4
  • Hachem_Muche/t-engine4
  • razakai/t-engine4
  • Zireael/t-engine4
  • cinornu/t-engine4
  • edge2054/t-engine4
  • gordaxx727/t-engine4
  • grayswandir/t-engine4
  • helminthauge/t-engine4
  • housepet/t-engine4
  • minqmay/t-engine4
  • nsrr/t-engine4
  • orange/t-engine4
  • otowakotori/t-engine4
  • purequestion/t-engine4
  • rexorcorum/t-engine4
  • rgeens/t-engine4
  • sageacrin/t-engine4
  • stuntofthelitter/t-engine4
  • tiger_eye/t-engine4
  • xelivous/t-engine4
  • yutio888/t-engine4
43 results
Show changes
Showing
with 65 additions and 50 deletions
......@@ -93,10 +93,11 @@ function _M:unlockShimmer(o)
local shimmer_name
local unique = nil
-- if o.randart or o.rare then return end
if o.unique and not o.randart then
shimmer_name = o:getName{do_color=true, no_add_name=true, no_image=true, force_id=true}
unique = true
elseif o.__original and not o.__original.randart then
elseif o.__original and not o.__original.randart and not o.__original.rare then
o = o.__original
shimmer_name = o:getName{do_color=true, no_add_name=true, no_image=true, force_id=true}
else
......
......@@ -96,10 +96,11 @@ local function samecolor(c1, c2)
end
function _M:makeTextureBar(text, nfmt, val, max, reg, x, y, r, g, b, bar_col, bar_bgcol)
local oval = val
val = util.bound(val, 0, max)
local cached = self.tex_cache.texture_bars[text]
-- it's a bunch of number comparisons so it's sufficiently fast for jit
local cached_ok = cached and (nfmt == cached.nfmt) and (val == cached.val) and (max == cached.max) and (reg == cached.reg) and
local cached_ok = cached and (nfmt == cached.nfmt) and (oval == cached.val) and (max == cached.max) and (reg == cached.reg) and
(r == cached.r) and (g == cached.g) and (b == cached.b) and samecolor(bar_col, cached.bar_col) and samecolor(bar_bgcol, cached.bar_bgcol)
if not cached_ok then
local items = {}
......@@ -110,14 +111,14 @@ function _M:makeTextureBar(text, nfmt, val, max, reg, x, y, r, g, b, bar_col, ba
core.display.drawQuad(disp_x + self.bars_x, disp_y, self.bars_w * val / max, self.font_h, bar_col.r, bar_col.g, bar_col.b, 255)
end
items[#items+1] = {self.font:draw(text, self.w, r, g, b, true)[1], x=0, y=0}
items[#items+1] = {self.font:draw((nfmt or "%d/%s"):format(val, max and math.round(max) or "--"), self.w, r, g, b, true)[1], x=self.bars_x + 5, y=0}
items[#items+1] = {self.font:draw((nfmt or "%d/%s"):format(oval, max and math.round(max) or "--"), self.w, r, g, b, true)[1], x=self.bars_x + 5, y=0}
if reg and reg ~= 0 then
local reg_txt = string.limit_decimals(reg, 3, "+")
local tex = self.font:draw(reg_txt, self.w, r, g, b, true)[1]
items[#items+1] = {tex, x = self.bars_x + self.bars_w - self.font:size(reg_txt) - 3, y=0}
end
cached = {nfmt=nfmt, val=val, max=max, reg=reg, r=r, g=g, b=b, bar_col=bar_col, bar_bgcol=bar_bgcol, items}
cached = {nfmt=nfmt, val=oval, max=max, reg=reg, r=r, g=g, b=b, bar_col=bar_col, bar_bgcol=bar_bgcol, items}
self.tex_cache.texture_bars[text] = cached
end
local items = cached[1]
......@@ -292,11 +293,7 @@ function _M:display()
self:mouseTooltip(self.TOOLTIP_MAGWILCUN, self:makeTexture(("Mag/Wil/Cun: #00ff00#%3d/%3d/%3d"):format(player:getMag(), player:getWil(), player:getCun()), x, h, 255, 255, 255)) h = h + self.font_h
h = h + self.font_h
if player.life < 0 then
self:mouseTooltip(self.TOOLTIP_LIFE, self:makeTextureBar("#c00000#Life :", nil, player.life, player.max_life, player.life_regen * util.bound((player.healing_factor or 1), 0, 2.5), x, h, 255, 255, 255, colors.DARK_RED, colors.VERY_DARK_RED)) h = h + self.font_h
else
self:mouseTooltip(self.TOOLTIP_LIFE, self:makeTextureBar("#c00000#Life :", nil, player.life, player.max_life, player.life_regen * util.bound((player.healing_factor or 1), 0, 2.5), x, h, 255, 255, 255, colors.DARK_RED, colors.VERY_DARK_RED)) h = h + self.font_h
end
self:mouseTooltip(self.TOOLTIP_LIFE, self:makeTextureBar("#c00000#Life :", nil, player.life, player.max_life, player.life_regen * util.bound((player.healing_factor or 1), 0, 2.5), x, h, 255, 255, 255, colors.DARK_RED, colors.VERY_DARK_RED)) h = h + self.font_h
local shield, max_shield = 0, 0
if player:attr("time_shield") then shield = shield + player.time_shield_absorb max_shield = max_shield + player.time_shield_absorb_max end
......
......@@ -192,7 +192,7 @@ newBirthDescriptor{
["spell/storm"]={false, 0.3, "mage_tempest"},
},
talents = {
[ActorTalents.T_ARCANE_POWER] = 1,
[ActorTalents.T_MANATHRUST] = 1,
[ActorTalents.T_FLAME] = 1,
[ActorTalents.T_LIGHTNING] = 1,
[ActorTalents.T_PHASE_DOOR] = 1,
......
......@@ -117,6 +117,10 @@ newBirthDescriptor{
self.unused_generics = self.unused_generics + 1
if self.level % 5 == 0 then self.unused_talents = self.unused_talents + 1 end
if self.level % 5 == 0 then self.unused_generics = self.unused_generics - 1 end
if self.extra_talent_point_every and self.level % self.extra_talent_point_every == 0 then self.unused_talents = self.unused_talents + 1 end
if self.extra_generic_point_every and self.level % self.extra_generic_point_every == 0 then self.unused_generics = self.unused_generics + 1 end
if self.level == 10 or self.level == 20 or self.level == 36 or self.level == 46 then
self.unused_talents_types = self.unused_talents_types + 1
end
......
......@@ -89,8 +89,10 @@ setDefaultProjector(function(src, x, y, type, dam, state)
return dam
end
local source_talent = src.__projecting_for and src.__projecting_for.project_type and (src.__projecting_for.project_type.talent_id or src.__projecting_for.project_type.talent) and src.getTalentFromId and src:getTalentFromId(src.__projecting_for.project_type.talent or src.__projecting_for.project_type.talent_id)
local terrain = game.level.map(x, y, Map.TERRAIN)
if terrain then terrain:check("damage_project", src, x, y, type, dam) end
if terrain then terrain:check("damage_project", src, x, y, type, dam, source_talent) end
local target = game.level.map(x, y, Map.ACTOR)
if target then
......@@ -485,7 +487,6 @@ setDefaultProjector(function(src, x, y, type, dam, state)
print("[PROJECTOR] final dam after hooks and callbacks", dam)
local source_talent = src.__projecting_for and src.__projecting_for.project_type and (src.__projecting_for.project_type.talent_id or src.__projecting_for.project_type.talent) and src.getTalentFromId and src:getTalentFromId(src.__projecting_for.project_type.talent or src.__projecting_for.project_type.talent_id)
local dead
dead, dam = target:takeHit(dam, src, {damtype=type, source_talent=source_talent, initial_dam=initial_dam})
......@@ -1781,7 +1782,7 @@ newDamageType{
projector = function(src, x, y, type, dam, state)
state = initState(state)
useImplicitCrit(src, state)
if _G.type(dam) == "number" then dam = {dam=dam, dur=3, heal_factor=dam.fail} end
if _G.type(dam) == "number" then dam = {dam=dam, dur=3, fail=50*dam.power/(dam.power+50)} end
DamageType:get(DamageType.NATURE).projector(src, x, y, DamageType.NATURE, dam.dam / dam.dur, state)
local target = game.level.map(x, y, Map.ACTOR)
if target and target:canBe("poison") then
......
......@@ -877,6 +877,11 @@ newEntity{ define_as = "RUNED_SKULL",
encumber = 3,
material_level = 5,
desc = [[Dull red runes are etched all over this blackened skull.]],
color_attributes = {
damage_type = 'FIRE',
alt_damage_type = 'FLAMESHOCK',
particle = 'flame',
},
carrier = {
combat_spellpower = 7,
......@@ -1189,7 +1194,7 @@ newEntity{ base = "BASE_GEM", define_as = "CRYSTAL_HEART",
o.use_no_wear = true
o.use_power = { name = "recover the Crystal Heart (destroys this armour)", power = 1, use = function(self, who, inven, item)
local art_list = mod.class.Object:loadList("/data/general/objects/objects-maj-eyal.lua")
local o = art_list["CRYSTAL_FOCUS"]:clone()
local o = art_list["CRYSTAL_HEART"]:clone()
o:resolve()
o:resolve(nil, true)
o:identify(true)
......
......@@ -836,13 +836,13 @@ newEntity{
on_kill = 1,
desc=function(self, who, special)
local targets = self.combat.projection_targets
return ("Projects up to %d attacks dealing 30%% weapon damage to random targets in range 10 (cannot hit the initial target)"):format(targets or 0)
return ("Projects up to %d attacks dealing 30%% weapon damage to random targets in range 7 (cannot hit the initial target)"):format(targets or 0)
end,
fct=function(combat, who, target)
if who.turn_procs.ego_projection then return end
who.turn_procs.ego_projection = true
local tg = {type="ball", radius=10}
local tg = {type="ball", radius=7}
local grids = who:project(tg, who.x, who.y, function() end)
local tgts = {}
for x, ys in pairs(grids) do for y, _ in pairs(ys) do
......
......@@ -162,7 +162,7 @@ newEntity{ theme={defense=true, physical=true}, name="def", points = 1, rarity =
combat_def_ranged = resolvers.randartmax(3, 9), },
}
newEntity{ theme={defense=true, physical=true}, name="armor", points = 1, rarity = 10, level_range = {1, 50},
wielder = { combat_armor = resolvers.randartmax(3, 9), },
wielder = { combat_armor = resolvers.randartmax(2, 6), },
}
----------------------------------------------------------------
-- Saves
......@@ -513,7 +513,7 @@ newEntity{ theme={defense=true, mental=true}, name="save mental greater", points
}
newEntity{ theme={defense=true, physical=true}, name="armor greater", points = 2, rarity = 10, level_range = {30, 50},
wielder = { combat_armor = resolvers.randartmax(3, 15), },
wielder = { combat_armor = resolvers.randartmax(2, 14), },
}
......@@ -949,7 +949,7 @@ newEntity{ base = "BASE_CLOTH_ARMOR",
on_melee_hit={[DamageType.POISON] = 20, [DamageType.SLIME] = 20},
},
on_wear = function(self, who)
if not game.state.spydre_mantra then
if not game.state.spydre_mantra and who.player then
game.state.spydre_mantra = true
require("engine.ui.Dialog"):simpleLongPopup("Huh?", "As you wear the strange set of robes, you notice something folded into one of its pockets...", 500, function()
game.party:learnLore("shiiak-mantra")
......
game/modules/tome/data/gfx/particles_images/dark_ritual_aura.png

34.1 KiB | W: 0px | H: 0px

game/modules/tome/data/gfx/particles_images/dark_ritual_aura.png

34.3 KiB | W: 0px | H: 0px

game/modules/tome/data/gfx/particles_images/dark_ritual_aura.png
game/modules/tome/data/gfx/particles_images/dark_ritual_aura.png
game/modules/tome/data/gfx/particles_images/dark_ritual_aura.png
game/modules/tome/data/gfx/particles_images/dark_ritual_aura.png
  • 2-up
  • Swipe
  • Onion skin
game/modules/tome/data/gfx/particles_images/doomed_gestures_ALL_tentacles.png

79.9 KiB | W: 0px | H: 0px

game/modules/tome/data/gfx/particles_images/doomed_gestures_ALL_tentacles.png

83.3 KiB | W: 0px | H: 0px

game/modules/tome/data/gfx/particles_images/doomed_gestures_ALL_tentacles.png
game/modules/tome/data/gfx/particles_images/doomed_gestures_ALL_tentacles.png
game/modules/tome/data/gfx/particles_images/doomed_gestures_ALL_tentacles.png
game/modules/tome/data/gfx/particles_images/doomed_gestures_ALL_tentacles.png
  • 2-up
  • Swipe
  • Onion skin
game/modules/tome/data/gfx/particles_images/doomed_gestures_Pa_M_Po_tentacles.png

76.2 KiB | W: 0px | H: 0px

game/modules/tome/data/gfx/particles_images/doomed_gestures_Pa_M_Po_tentacles.png

79.7 KiB | W: 0px | H: 0px

game/modules/tome/data/gfx/particles_images/doomed_gestures_Pa_M_Po_tentacles.png
game/modules/tome/data/gfx/particles_images/doomed_gestures_Pa_M_Po_tentacles.png
game/modules/tome/data/gfx/particles_images/doomed_gestures_Pa_M_Po_tentacles.png
game/modules/tome/data/gfx/particles_images/doomed_gestures_Pa_M_Po_tentacles.png
  • 2-up
  • Swipe
  • Onion skin
game/modules/tome/data/gfx/particles_images/doomed_gestures_Pa_M_tentacles.png

50.8 KiB | W: 0px | H: 0px

game/modules/tome/data/gfx/particles_images/doomed_gestures_Pa_M_tentacles.png

54.2 KiB | W: 0px | H: 0px

game/modules/tome/data/gfx/particles_images/doomed_gestures_Pa_M_tentacles.png
game/modules/tome/data/gfx/particles_images/doomed_gestures_Pa_M_tentacles.png
game/modules/tome/data/gfx/particles_images/doomed_gestures_Pa_M_tentacles.png
game/modules/tome/data/gfx/particles_images/doomed_gestures_Pa_M_tentacles.png
  • 2-up
  • Swipe
  • Onion skin
game/modules/tome/data/gfx/particles_images/doomed_gestures_Pa_tentacles.png

41 KiB | W: 0px | H: 0px

game/modules/tome/data/gfx/particles_images/doomed_gestures_Pa_tentacles.png

41.4 KiB | W: 0px | H: 0px

game/modules/tome/data/gfx/particles_images/doomed_gestures_Pa_tentacles.png
game/modules/tome/data/gfx/particles_images/doomed_gestures_Pa_tentacles.png
game/modules/tome/data/gfx/particles_images/doomed_gestures_Pa_tentacles.png
game/modules/tome/data/gfx/particles_images/doomed_gestures_Pa_tentacles.png
  • 2-up
  • Swipe
  • Onion skin
game/modules/tome/data/gfx/particles_images/shadow_decoy_aura.png

12.3 KiB | W: 0px | H: 0px

game/modules/tome/data/gfx/particles_images/shadow_decoy_aura.png

28.8 KiB | W: 0px | H: 0px

game/modules/tome/data/gfx/particles_images/shadow_decoy_aura.png
game/modules/tome/data/gfx/particles_images/shadow_decoy_aura.png
game/modules/tome/data/gfx/particles_images/shadow_decoy_aura.png
game/modules/tome/data/gfx/particles_images/shadow_decoy_aura.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -50,14 +50,15 @@ vec4 GetColor(const int layerIndex, vec2 texPos)
vec2 GetDistortion(vec2 texPos, int layerIndex, int distortionType, float deformRate)
{
float layerIndexF = float(layerIndex);
if (distortionType == 0) {
float alpha = 0.2 * sin(tick / time_factor * (layerIndex * 0.5 + 1.0) + layerIndex * 100.0) * deformRate;
float alpha = 0.2 * sin(tick / time_factor * (layerIndexF * 0.5 + 1.0) + layerIndexF * 100.0) * deformRate;
mat2 rotation = mat2(cos(alpha), sin(alpha), -sin(alpha), cos(alpha));
return clamp(rotation * (texPos - vec2(0.5)) + vec2(0.5), 0.01, 0.99);
} else if (distortionType == 1) {
float phase = length(texPos - vec2(0.5));
float alpha = 0.2 * sin(-tick / time_factor * (layerIndex * 0.5 + 1.0) + phase * 30.0 + layerIndex * 100.0) * deformRate;
float alpha = 0.2 * sin(-tick / time_factor * (layerIndexF * 0.5 + 1.0) + phase * 30.0 + layerIndexF * 100.0) * deformRate;
mat2 rotation = mat2(cos(alpha), sin(alpha), -sin(alpha), cos(alpha));
return clamp(rotation * (texPos - vec2(0.5)) + vec2(0.5), 0.01, 0.99);
......@@ -83,8 +84,8 @@ void main(void)
int backLayersCount = int(backgroundLayersCount + 0.5);
for(int layerIndex = 0; layerIndex < 4; layerIndex++)
{
if(noup == 1 && layerIndex < backLayersCount) continue;
if(noup == 2 && layerIndex >= backLayersCount) continue;
if(noup == 1.0 && layerIndex < backLayersCount) continue;
if(noup == 2.0 && layerIndex >= backLayersCount) continue;
float deformRate = GetDistortionRange(layerIndex, pos);
vec2 texPos = GetDistortion(pos, layerIndex, distortionType, deformRate);
vec4 layerColor = GetColor(layerIndex, texPos);
......
game/modules/tome/data/gfx/shockbolt/terrain/high_peak_stairs.png

383 KiB

......@@ -74,6 +74,9 @@ newLore{
id = "ardhungol-4",
category = "ardhungol",
name = "scrap of paper",
lore = [[#{italic}#A few tattered scraps of paper lie on the ground, ruined from your fight with the creature carrying it. It's almost completely illegible, but you can piece some of it together to read:#{normal}#
lore = function() return game and game.state and game.state.spydre_mantra and [[#{italic}#A few tattered scraps of paper lie on the ground, ruined from your fight with the creature carrying it. It's almost completely illegible, but you can piece some of it together to read:#{normal}#
"...pheromone signals effective on much Eyalite wildlife ineffective on species 'sun paladin.' at current planetary core cooling rates, passive study would lead to great loss - next step of emigration program should be cleaning of local 'sun paladin' nest and establishment of..."]]
or
[[#{italic}#This pile of tattered paper could theoretically be assembled into something legible, but without more text to draw back on, it'd still be in a language you could never interpret. If only you had more Spydric text to help translate this...#{normal}#]]
end,
}
......@@ -102,18 +102,20 @@ local trigger = function(self, who)
if not tx then
game.logPlayer(who, "#YELLOW#The Portal repels you briefly before becoming quiescent. The other side seems to be blocked.")
else
game.logPlayer(who, "#YELLOW#An overcome intense #LIGHT_BLUE#REPULSIVE FORCES#LAST# as you traverse the Portal.")
game:playSoundNear(who, "talents/distortion")
who:move(tx, ty, true)
end
else
if not tx then
game.logSeen(who, "#YELLOW#The Portal repels %s briefly as %s approaches it.", who.name:capitalize(), who:he_she())
else
who:logCombat(nil, "#YELLOW#The Portal #LIGHT_BLUE#VIOLENTLY DISTORTS#LAST# before #source# emerges from it.")
game:playSoundNear(who, "talents/distortion")
who:move(tx, ty, true)
require("engine.ui.Dialog"):yesnoPopup("Malevolant Portal", "An ominous aura emanates from this portal. Are you sure you want to go through?", function(ret) if ret then
game.logPlayer(who, "#YELLOW#An overcome intense #LIGHT_BLUE#REPULSIVE FORCES#LAST# as you traverse the Portal.")
game:playSoundNear(who, "talents/distortion")
who:move(tx, ty, true)
end end, "Teleport", "Cancel")
end
-- else
-- if not tx then
-- game.logSeen(who, "#YELLOW#The Portal repels %s briefly as %s approaches it.", who.name:capitalize(), who:he_she())
-- else
-- who:logCombat(nil, "#YELLOW#The Portal #LIGHT_BLUE#VIOLENTLY DISTORTS#LAST# before #source# emerges from it.")
-- game:playSoundNear(who, "talents/distortion")
-- who:move(tx, ty, true)
-- end
end
else
game.logPlayer(who, "#YELLOW#Nothing happens when you use the Portal.")
......@@ -150,8 +152,8 @@ TeleportIn = mod.class.Grid.new{
change_level_check = trigger,
get_locations = get_locations,
block_move = function(self, x, y) -- makes Map:updateMap update coordinates
self._locations = self.get_locations()
table.merge(self._locations, {outx=x, outy=y})
self._locations = self.get_locations()
table.merge(self._locations, {outx=x, outy=y})
if self._locations.inx and self._locations.iny and self._locations.outx and self._locations.outy then self.block_move = nil end
return false
end,
......@@ -188,8 +190,7 @@ map_data={startx=2, starty=2},
local portal_room = RoomsLoader:roomParse(portal_def)
-- Set up the satellite room as a way into the vault
onplace = function(room, zone, level, map, placement_data)
local gen = zone:getGenerator("map", level, zone.generator.map)
onplace = function(room, zone, level, map, placement_data, gen)
local rooms = gen.map.room_map.rooms
TeleportIn.change_level = level.level
TeleportOut.change_level = level.level
......
......@@ -20,7 +20,9 @@
defineTile('#', "SLIME_WALL")
defineTile('.', "SLIME_FLOOR")
defineTile('<', "UP_GRUSHNAK")
defineTile('+', "PEAK_DOOR")
defineTile('+', "PEAK_STAIR_FAKE")
defineTile('=', "PEAK_STAIR")
defineTile('!', "FAKE_WALL")
subGenerator{
x = 2, y = 0, w = 241, h = 30,
......@@ -47,16 +49,16 @@ return [[
##########################################################################################################################################################################################################################################################
##########################################################################################################################################################################################################################################################
##########################################################################################################################################################################################################################################################
##########################################################################################################################################################################################################################################################
####################################################################################################################################################################################################################################################.....+
###################################################################################################################################################################################################################################################......+
##.################################################################################################################################################################################################################################################......+
...################################################################################################################################################################################################################################################......+
<..################################################################################################################################################################################################################################################......+
...################################################################################################################################################################################################################################################......+
##.################################################################################################################################################################################################################################################......+
####################################################################################################################################################################################################################################################.....+
##########################################################################################################################################################################################################################################################
######################################################################################################################################################################################################################################################!!!!
####################################################################################################################################################################################################################################################..!!!!
###################################################################################################################################################################################################################################################...!!!!
##.################################################################################################################################################################################################################################################...+++!
...################################################################################################################################################################################################################################################...+++!
<..################################################################################################################################################################################################################################################...+++=
...################################################################################################################################################################################################################################################...!++!
##.################################################################################################################################################################################################################################################...!!!!
####################################################################################################################################################################################################################################################..!!!!
######################################################################################################################################################################################################################################################!!!!
##########################################################################################################################################################################################################################################################
##########################################################################################################################################################################################################################################################
##########################################################################################################################################################################################################################################################
......