Commit a897cc542b8389c350d3ad43b4dfb49a96d55c01

Authored by DarkGod
1 parent 07d9fec0

Prodigies window is wider if it has room enough

  1 +{
  2 + "25": {
  3 + "id": 25,
  4 + "name": "chat",
  5 + "data": {
  6 + "chatid": "chat4",
  7 + "chat": "#YELLOW#YOU ARE A CURIOUS ONE.",
  8 + "answer1": "[...]"
  9 + },
  10 + "class": "chat",
  11 + "html": "chat1",
  12 + "typenode": true,
  13 + "inputs": {
  14 + "input_1": {
  15 + "connections": [
  16 + {
  17 + "node": "32",
  18 + "input": "output_1"
  19 + }
  20 + ]
  21 + }
  22 + },
  23 + "outputs": {
  24 + "output_1": {
  25 + "connections": [
  26 + {
  27 + "node": "32",
  28 + "output": "input_1"
  29 + }
  30 + ]
  31 + }
  32 + },
  33 + "pos_x": 1564,
  34 + "pos_y": 207
  35 + },
  36 + "27": {
  37 + "id": 27,
  38 + "name": "chat",
  39 + "data": {
  40 + "chatid": "chat6",
  41 + "chat": "#YELLOW#YOU HAVE MADE THE RIGHT CHOICE. TOGETHER, WE SHALL BRING ABOUT THE DESTRUCTION OF OUR ENEMIES.",
  42 + "answer1": "#GOLD#[you are now an Avatar of a Distant Sun]"
  43 + },
  44 + "class": "chat",
  45 + "html": "chat1",
  46 + "typenode": true,
  47 + "inputs": {
  48 + "input_1": {
  49 + "connections": [
  50 + {
  51 + "node": "29",
  52 + "input": "output_1"
  53 + },
  54 + {
  55 + "node": "36",
  56 + "input": "output_1"
  57 + }
  58 + ]
  59 + }
  60 + },
  61 + "outputs": {
  62 + "output_1": {
  63 + "connections": [
  64 + {
  65 + "node": "39",
  66 + "output": "input_1"
  67 + }
  68 + ]
  69 + }
  70 + },
  71 + "pos_x": 2507,
  72 + "pos_y": -110
  73 + },
  74 + "29": {
  75 + "id": 29,
  76 + "name": "chat",
  77 + "data": {
  78 + "chatid": "welcome",
  79 + "chat": "<<<You feel you the gentle warmth of your Distant Sun patron. It speaks directly to your mind!>>>\n#YELLOW#I AM HERE. DO YOU DESIRE TO SMITE EVIL, DESTROY THE DARKNESS AND SCOUR THE EARTH? I SHALL AID YOU IN THIS QUEST. TOGETHER, WE WILL BE UNSTOPPABLE. ALL DARKNESS SHALL BE CONSUMED BY OUR LIGHT.\n#LAST#",
  80 + "answer1": "Yes, give me your power!",
  81 + "answer2": "Who... Who are you?"
  82 + },
  83 + "class": "chat",
  84 + "html": "chat2",
  85 + "typenode": true,
  86 + "inputs": {
  87 + "input_1": {
  88 + "connections": []
  89 + }
  90 + },
  91 + "outputs": {
  92 + "output_1": {
  93 + "connections": [
  94 + {
  95 + "node": "27",
  96 + "output": "input_1"
  97 + }
  98 + ]
  99 + },
  100 + "output_2": {
  101 + "connections": [
  102 + {
  103 + "node": "32",
  104 + "output": "input_1"
  105 + }
  106 + ]
  107 + }
  108 + },
  109 + "pos_x": 92,
  110 + "pos_y": 131
  111 + },
  112 + "32": {
  113 + "id": 32,
  114 + "name": "chat",
  115 + "data": {
  116 + "chatid": "chat7",
  117 + "chat": "#YELLOW#I AM YOUR FRIEND. IT IS GOOD TO HAVE FRIENDS, ISN'T IT?",
  118 + "answer1": "But how are you speaking to me?",
  119 + "answer2": "You still haven't told me who or what you are.",
  120 + "answer3": "But what are you getting out of this?",
  121 + "answer4": "That doesn't tell me anything."
  122 + },
  123 + "class": "chat",
  124 + "html": "chat4",
  125 + "typenode": true,
  126 + "inputs": {
  127 + "input_1": {
  128 + "connections": [
  129 + {
  130 + "node": "29",
  131 + "input": "output_2"
  132 + },
  133 + {
  134 + "node": "25",
  135 + "input": "output_1"
  136 + },
  137 + {
  138 + "node": "33",
  139 + "input": "output_1"
  140 + },
  141 + {
  142 + "node": "34",
  143 + "input": "output_1"
  144 + }
  145 + ]
  146 + }
  147 + },
  148 + "outputs": {
  149 + "output_1": {
  150 + "connections": [
  151 + {
  152 + "node": "25",
  153 + "output": "input_1"
  154 + }
  155 + ]
  156 + },
  157 + "output_2": {
  158 + "connections": [
  159 + {
  160 + "node": "33",
  161 + "output": "input_1"
  162 + }
  163 + ]
  164 + },
  165 + "output_3": {
  166 + "connections": [
  167 + {
  168 + "node": "34",
  169 + "output": "input_1"
  170 + }
  171 + ]
  172 + },
  173 + "output_4": {
  174 + "connections": [
  175 + {
  176 + "node": "36",
  177 + "output": "input_1"
  178 + }
  179 + ]
  180 + }
  181 + },
  182 + "pos_x": 721,
  183 + "pos_y": 330
  184 + },
  185 + "33": {
  186 + "id": 33,
  187 + "name": "chat",
  188 + "data": {
  189 + "chatid": "chat8",
  190 + "chat": "#YELLOW#YOU NEED NOT CONCERN YOURSELF WITH SUCH THINGS. I KNOW YOU CRAVE POWER. I KNOW THE WEIGHT OF THE WORLD IS ON YOUR SHOULDERS. SO, ACCEPT MY BOONS. ALLOW ME TO HELP YOU.\n",
  191 + "answer1": "[...]"
  192 + },
  193 + "class": "chat",
  194 + "html": "chat1",
  195 + "typenode": true,
  196 + "inputs": {
  197 + "input_1": {
  198 + "connections": [
  199 + {
  200 + "node": "32",
  201 + "input": "output_2"
  202 + }
  203 + ]
  204 + }
  205 + },
  206 + "outputs": {
  207 + "output_1": {
  208 + "connections": [
  209 + {
  210 + "node": "32",
  211 + "output": "input_1"
  212 + }
  213 + ]
  214 + }
  215 + },
  216 + "pos_x": 1558,
  217 + "pos_y": 415
  218 + },
  219 + "34": {
  220 + "id": 34,
  221 + "name": "chat",
  222 + "data": {
  223 + "chatid": "chat9",
  224 + "chat": "#YELLOW#I AM GETTING PLENTY OUT OF THIS.",
  225 + "answer1": "[...]"
  226 + },
  227 + "class": "chat",
  228 + "html": "chat1",
  229 + "typenode": true,
  230 + "inputs": {
  231 + "input_1": {
  232 + "connections": [
  233 + {
  234 + "node": "32",
  235 + "input": "output_3"
  236 + }
  237 + ]
  238 + }
  239 + },
  240 + "outputs": {
  241 + "output_1": {
  242 + "connections": [
  243 + {
  244 + "node": "32",
  245 + "output": "input_1"
  246 + }
  247 + ]
  248 + }
  249 + },
  250 + "pos_x": 1559,
  251 + "pos_y": 776
  252 + },
  253 + "36": {
  254 + "id": 36,
  255 + "name": "chat",
  256 + "data": {
  257 + "chatid": "chat10",
  258 + "chat": "#YELLOW#I TIRE OF YOUR NAGGING QUESTIONS. TALK, TALK, TALK. YOU HAVE A SIMPLE CHOICE BEFORE YOU. WILL YOU BECOME POWERFUL? OR WILL YOU BE WEAK AND ALONE?",
  259 + "answer1": "Yes, give me your power!",
  260 + "answer2": "I don't trust you. Please go away."
  261 + },
  262 + "class": "chat",
  263 + "html": "chat2",
  264 + "typenode": true,
  265 + "inputs": {
  266 + "input_1": {
  267 + "connections": [
  268 + {
  269 + "node": "32",
  270 + "input": "output_4"
  271 + }
  272 + ]
  273 + }
  274 + },
  275 + "outputs": {
  276 + "output_1": {
  277 + "connections": [
  278 + {
  279 + "node": "27",
  280 + "output": "input_1"
  281 + }
  282 + ]
  283 + },
  284 + "output_2": {
  285 + "connections": [
  286 + {
  287 + "node": "37",
  288 + "output": "input_1"
  289 + }
  290 + ]
  291 + }
  292 + },
  293 + "pos_x": 1557,
  294 + "pos_y": 1046
  295 + },
  296 + "37": {
  297 + "id": 37,
  298 + "name": "chat",
  299 + "data": {
  300 + "chatid": "chat11",
  301 + "chat": "#YELLOW#SO BE IT. I SHALL FIND SOMEONE MORE WORTHY OF MY BLESSINGS.",
  302 + "answer1": "#GRAY#[prodigy point refunded]"
  303 + },
  304 + "class": "chat",
  305 + "html": "chat1",
  306 + "typenode": true,
  307 + "inputs": {
  308 + "input_1": {
  309 + "connections": [
  310 + {
  311 + "node": "36",
  312 + "input": "output_2"
  313 + }
  314 + ]
  315 + }
  316 + },
  317 + "outputs": {
  318 + "output_1": {
  319 + "connections": [
  320 + {
  321 + "node": "40",
  322 + "output": "input_1"
  323 + }
  324 + ]
  325 + }
  326 + },
  327 + "pos_x": 2017,
  328 + "pos_y": 1316
  329 + },
  330 + "39": {
  331 + "id": 39,
  332 + "name": "lua-code",
  333 + "data": {
  334 + "code": "player:callTalent(player.T_AVATAR_OF_A_DISTANT_SUN, \"becomeAvatar\")"
  335 + },
  336 + "class": "lua-code",
  337 + "html": "lua-code",
  338 + "typenode": true,
  339 + "inputs": {
  340 + "input_1": {
  341 + "connections": [
  342 + {
  343 + "node": "27",
  344 + "input": "output_1"
  345 + }
  346 + ]
  347 + }
  348 + },
  349 + "outputs": {
  350 + "output_1": {
  351 + "connections": []
  352 + }
  353 + },
  354 + "pos_x": 2859.4285714285716,
  355 + "pos_y": -43.42857142857143
  356 + },
  357 + "40": {
  358 + "id": 40,
  359 + "name": "lua-code",
  360 + "data": {
  361 + "code": "player:unlearnTalent(player.T_AVATAR_OF_A_DISTANT_SUN)\nplayer.unused_prodigies = player.unused_prodigies + 1\nplayer:attr(\"pissed_of_distant_sun\", 1)"
  362 + },
  363 + "class": "lua-code",
  364 + "html": "lua-code",
  365 + "typenode": true,
  366 + "inputs": {
  367 + "input_1": {
  368 + "connections": [
  369 + {
  370 + "node": "37",
  371 + "input": "output_1"
  372 + }
  373 + ]
  374 + }
  375 + },
  376 + "outputs": {
  377 + "output_1": {
  378 + "connections": []
  379 + }
  380 + },
  381 + "pos_x": 2424,
  382 + "pos_y": 1318.5714285714287
  383 + }
  384 +}
\ No newline at end of file
... ...
... ... @@ -71,7 +71,7 @@ newChat{ id="distant-sun-unsure",
71 71 player:hasQuest("high-peak"):win("distant-sun")
72 72 end},
73 73 {_t"#LIGHT_GREEN#[In a last incredible display of willpower you fight the Distant Sun for a few seconds, letting you project your thoughts to Aeryn.]#WHITE# High Lady! Kill me #{bold}#NOW#{normal}#",
74   - cond=function(npc, player) return not void_portal_open(nil, player) and aeryn_alive(npc, player) and player:getWil() >= 55 end, jump="distant-sun-stab"
  74 + cond=function(npc, player) return not void_portal_open(nil, player) and aeryn_alive(npc, player) and player:getWil() >= 55 end, switch_npc=aeryn_alive(), jump="distant-sun-stab"
75 75 },
76 76 {_t"#LIGHT_GREEN#[In a last incredible display of willpower you fight the Distant Sun for a few seconds, unsure how to stop it.]#WHITE##{bold}#NO!#{normal}#",
77 77 switch_npc=shertul, cond=function(npc, player) return not void_portal_open(nil, player) and not aeryn_alive(npc, player) and player:getWil() >= 55 end, jump="distant-sun-shertul"
... ... @@ -163,7 +163,7 @@ You will do as asked, for the good of all Yeeks! The Way is always right.
163 163 player:hasQuest("high-peak"):win("yeek-sacrifice")
164 164 end},
165 165 {_t"#LIGHT_GREEN#[In a last incredible display of willpower you fight the Way for a few seconds, letting you project your thoughts to Aeryn.]#WHITE# High Lady! Kill me #{bold}#NOW#{normal}#",
166   - cond=function(npc, player) return not void_portal_open(nil, player) and aeryn_alive(npc, player) and player:getWil() >= 55 end, jump="yeek-stab"
  166 + cond=function(npc, player) return not void_portal_open(nil, player) and aeryn_alive(npc, player) and player:getWil() >= 55 end, switch_npc=aeryn_alive(), jump="yeek-stab"
167 167 },
168 168 }
169 169 }
... ... @@ -198,7 +198,7 @@ newChat{ id="welcome",
198 198 But the portal to the Void is already open. It must be closed before the Creator can come through or all will have been in vain!
199 199 After searching the remains of the Sorcerers you find a note explaining that the portal can only be closed with a sentient being's sacrifice.]],
200 200 answers = {
201   - {_t"Aeryn, I am sorry but one of us needs to be sacrificed for the world to go on. #LIGHT_GREEN#[sacrifice Aeryn for the sake of the world]", jump="aeryn-sacrifice", cond=aeryn_alive},
  201 + {_t"Aeryn, I am sorry but one of us needs to be sacrificed for the world to go on. #LIGHT_GREEN#[sacrifice Aeryn for the sake of the world]", jump="aeryn-sacrifice", switch_npc=aeryn_alive(), cond=aeryn_alive},
202 202 {_t"I will close it. #LIGHT_GREEN#[sacrifice yourself for the sake of the world]", action=function(npc, player)
203 203 player.no_resurrect = true
204 204 player:die(player, {special_death_msg=("sacrificing %s for the sake of the world"):tformat(string.his_her_self(player))})
... ... @@ -230,7 +230,7 @@ newChat{ id="welcome",
230 230 You have won the game!
231 231 Both Maj'Eyal and the Far East are safe from the dark schemes of the Sorcerers and their God.]],
232 232 answers = {
233   - {_t"Aeryn, are you well?", jump="aeryn-ok", cond=aeryn_alive},
  233 + {_t"Aeryn, are you well?", jump="aeryn-ok", switch_npc=aeryn_alive(), cond=aeryn_alive},
234 234 {_t"[leave]", action=function(npc, player) player:hasQuest("high-peak"):win("full") end},
235 235 }
236 236 }
... ...
... ... @@ -120,6 +120,7 @@ spells_req_high5 = {
120 120 }
121 121
122 122 function thaumaturgyCheck(self)
  123 + if self:attr("archmage_widebeam_always") then return true end
123 124 if not self:attr("archmage_widebeam") then return false end
124 125 local inven = self:getInven("BODY")
125 126 if not inven then return true end
... ...
... ... @@ -283,13 +283,14 @@ uberTalent{
283 283 require = {
284 284 birth_descriptors={{"subclass", "Sun Paladin"}},
285 285 special={desc=_t"Unlocked the evolution", fct=function(self) return profile.mod.allow_build.paladin_avatar end},
  286 + special2={desc=_t"Found a distant patron", fct=function(self) return not self:attr("pissed_of_distant_sun") end},
286 287 stat = {mag=25},
287 288 talent = {"T_SUN_VENGEANCE", "T_WEAPON_OF_LIGHT", "T_SEARING_SIGHT", "T_JUDGEMENT"},
288 289 },
289 290 is_class_evolution = "Sun Paladin",
290 291 cant_steal = true,
291 292 mode = "passive",
292   - on_learn = function(self, t)
  293 + becomeAvatar = function(self, t)
293 294 self.descriptor.class_evolution = _t"Avatar of a Distant Sun"
294 295
295 296 self:attr("sun_paladin_avatar", 1)
... ... @@ -299,6 +300,12 @@ uberTalent{
299 300 self:addTemporaryValue("all_damage_convert_percent", 50)
300 301 self:learnTalent(self.T_GRAVITIC_EFFULGENCE, true)
301 302 end,
  303 + on_learn = function(self, t, kind)
  304 + if not game.party:hasMember(self) then return end
  305 + local Chat = require "engine.Chat"
  306 + local chat = Chat.new("avatar-distant-sun", {name=_t"Distant Sun", image="talents/avatar_of_a_distant_sun.png"}, self)
  307 + chat:invoke()
  308 + end,
302 309 info = function(self, t)
303 310 return ([[During your studies of celestial forces you came in contact with an entity far beyond Eyal: the living incarnation of a Star!
304 311 By allying yourself with it you can gain its power!
... ... @@ -309,6 +316,7 @@ uberTalent{
309 316 - #GOLD#Gravitic Effulgence#LAST#: whenever your Weapon of Light hits the damage is now a radius 2 sphere and all foes in range 5 are drawn to it. (You can toggle this effect)
310 317 - The damage and chance to trigger of #GOLD#Searing Sight#LAST# is doubled
311 318 - Whenever #GOLD#Sun's Vengeance#LAST# triggers the remaining cooldown of Judgement is reduced by 6.
  319 + - If you also know #GOLD#Irresistible Sun#LAST#, it will set the fire and light resistances of those affected to 0%%
312 320
313 321 #{italic}##GOLD#Will you bind yourself to the Distant Sun?#{normal}#
314 322 ]]):tformat()
... ...
... ... @@ -2810,7 +2810,7 @@ newEffect{
2810 2810
2811 2811 if self:reactionToward(target) < 0 then
2812 2812 local dam = eff.dam * (1 + (5 - core.fov.distance(self.x, self.y, target.x, target.y)) / 8)
2813   - target:setEffect(target.EFF_WEIGHT_OF_THE_SUN, 2, {reduce = 30}) -- Quickly wears off when outside of AoE
  2813 + target:setEffect(target.EFF_WEIGHT_OF_THE_SUN, 2, {reduce = 30, resists = self:attr("sun_paladin_avatar")}) -- Quickly wears off when outside of AoE
2814 2814 DamageType:get(DamageType.FIRE).projector(self, target.x, target.y, DamageType.FIRE, dam/3)
2815 2815 DamageType:get(DamageType.LIGHT).projector(self, target.x, target.y, DamageType.LIGHT, dam/3)
2816 2816 DamageType:get(DamageType.PHYSICAL).projector(self, target.x, target.y, DamageType.PHYSICAL, dam/3)
... ... @@ -2824,7 +2824,7 @@ newEffect{
2824 2824 newEffect{
2825 2825 name = "WEIGHT_OF_THE_SUN", image = "talents/irresistible_sun.png",
2826 2826 desc = _t"Weight of the Sun",
2827   - long_desc = function(self, eff) return ("The target is struggling against immense gravity, all damage it does is reduced by %d%%."):tformat(eff.reduce) end,
  2827 + long_desc = function(self, eff) return ("The target is struggling against immense gravity, all damage it does is reduced by %d%%.%s"):tformat(eff.reduce, eff.resists and _t" Due to facing an Avatar of a Distant Sun, fire and light resistances are reduced to 0%." or "") end,
2828 2828 type = "magical",
2829 2829 subtype = { sun=true,},
2830 2830 status = "detrimental",
... ... @@ -2833,6 +2833,10 @@ newEffect{
2833 2833 on_lose = function(self, err) return _t"#Target# can move freely once more.", _t"-Weight of the Sun" end,
2834 2834 activate = function(self, eff)
2835 2835 self:effectTemporaryValue(eff, "numbed", eff.reduce)
  2836 + if eff.resists then
  2837 + game.log("plop")
  2838 + self:effectTemporaryValue(eff, "resists", {[DamageType.LIGHT]=-self:combatGetResist(DamageType.LIGHT), [DamageType.FIRE]=-self:combatGetResist(DamageType.FIRE)})
  2839 + end
2836 2840 end,
2837 2841 }
2838 2842
... ...
... ... @@ -400,12 +400,16 @@ newEntity{ base = "BASE_NPC_SHERTUL", define_as = "CALDIZAR_AOADS",
400 400
401 401 invulnerable = 1,
402 402 archmage_widebeam = 1,
  403 + archmage_widebeam_always = 1,
403 404
404 405 resists = {all = 70},
405 406 inc_damage = {all=10000},
406 407
407 408 ai = "tactical", ai_state = { talent_in=1, ai_move="move_astar", },
408 409
  410 + talent_cd_reduction = {
  411 + [Talents.T_ELEMENTAL_ARRAY_BURST] = 1000,
  412 + },
409 413 resolvers.talents{
410 414 [Talents.T_ELEMENTAL_ARRAY_BURST]=100,
411 415 }
... ...
... ... @@ -104,9 +104,11 @@ newEntity{ define_as = "CELIA",
104 104 game.player:setQuestStatus("lichform", engine.Quest.COMPLETED, "heart")
105 105
106 106 local o = game.zone:makeEntityByName(game.level, "object", "CELIA_HEART")
107   - o:identify(true)
108   - if p:addObject(p.INVEN_INVEN, o) then
109   - game.logPlayer(p, "You receive: %s.", o:getName{do_color=true})
  107 + if o then
  108 + o:identify(true)
  109 + if p:addObject(p.INVEN_INVEN, o) then
  110 + game.logPlayer(p, "You receive: %s.", o:getName{do_color=true})
  111 + end
110 112 end
111 113
112 114 local Dialog = require("engine.ui.Dialog")
... ...
... ... @@ -41,7 +41,7 @@ function _M:init(actor, levelup_end_prodigies)
41 41 self.actor_dup = actor:clone()
42 42 self.actor_dup.uid = actor.uid -- Yes ...
43 43
44   - Dialog.init(self, ("Prodigies: %s"):tformat(actor:getName()), 800, game.h * 0.9)
  44 + Dialog.init(self, ("Prodigies: %s"):tformat(actor:getName()), math.min(math.max(game.w * 0.8, 800), 1200, game.w), game.h * 0.9)
45 45
46 46 self:generateList()
47 47
... ...