diff --git a/config/fxdata/magic.cfg b/config/fxdata/magic.cfg index e19db22286..27517458d1 100644 --- a/config/fxdata/magic.cfg +++ b/config/fxdata/magic.cfg @@ -1,5 +1,4 @@ -; KeeperFX Magic Configuration file -; file version 0.80 +; KeeperFX Magic Configuration file version 1.0 [common] ; Spells are casted by creatures at their position. They can affect the caster or surrounding @@ -10,7 +9,7 @@ SpellsCount = 30 ShotsCount = 33 ; Powers are spells which have several levels of strengths and can be casted not only ; by a creature, but also by a keeper -PowerCount = 23 +PowerCount = 24 ; Specials are rare boxes a player can find, which provide reward of one time use SpecialsCount = 10 @@ -79,6 +78,7 @@ SymbolSprites = 410 410 Name = SPELL_REBOUND CastAtThing = 0 ShotModel = NOSHOT +SpellPower = POWER_REBOUND SpellFlags = 8 Duration = 250 SelfCasted = 1 926 @@ -1542,7 +1542,7 @@ PointerSprites = 120 PanelTabIndex = 9 SoundSamples = 837 SoundPlayed = 927 -Power = 0 5 6 7 8 9 10 11 12 +Power = 0 5 6 7 8 9 10 11 12 Cost = 1000 1200 1400 1600 1800 2000 2200 2400 2600 Duration = 100 Castability = ALL_GROUND REVEALED_TEMP @@ -1561,7 +1561,7 @@ PointerSprites = 104 PanelTabIndex = 10 SoundSamples = 829 SoundPlayed = 37 -Power = 80 120 160 210 280 360 480 680 950 +Power = 80 120 160 210 280 360 480 680 950 Cost = 300 400 500 600 700 800 900 1000 1200 Duration = 16 Castability = ALL_GROUND OWNED_CRTRS ALLIED_CRTRS CUSTODY_CRTRS BOUND_CRTRS @@ -1580,8 +1580,8 @@ PointerSprites = 0 PanelTabIndex = 8 SoundSamples = 830 SoundPlayed = 58 -Power = 0 0 0 0 0 0 0 0 0 -Cost =1000 0 0 0 0 0 0 0 0 +Power = 0 0 0 0 0 0 0 0 0 +Cost = 1000 0 0 0 0 0 0 0 0 Duration = 0 Castability = ANYWHERE UNREVEALED Artifact = SPELLBOOK_HLDAUD @@ -1621,7 +1621,7 @@ SoundSamples = 838 ; 938 is an alternative power speed sound SoundPlayed = 38 Power = 300 400 500 600 700 800 900 1000 1100 -Cost = 100 200 300 400 500 600 700 800 900 +Cost = 100 200 300 400 500 600 700 800 900 Duration = 0 Castability = ALL_GROUND OWNED_CRTRS ALLIED_CRTRS CUSTODY_CRTRS BOUND_CRTRS Artifact = SPELLBOOK_SPDC @@ -1640,7 +1640,7 @@ PanelTabIndex = 12 SoundSamples = 825 SoundPlayed = 153 Power = 300 400 500 600 700 800 900 1000 1100 -Cost = 100 200 300 400 500 600 700 800 900 +Cost = 100 200 300 400 500 600 700 800 900 Duration = 0 Castability = ALL_GROUND OWNED_CRTRS BOUND_CRTRS Artifact = SPELLBOOK_PROT @@ -1659,7 +1659,7 @@ PanelTabIndex = 7 SoundSamples = 832 SoundPlayed = 154 Power = 300 400 500 600 700 800 900 1000 1100 -Cost = 100 200 300 400 500 600 700 800 900 +Cost = 100 200 300 400 500 600 700 800 900 Duration = 0 Castability = ALL_GROUND OWNED_CRTRS BOUND_CRTRS Artifact = SPELLBOOK_CONCL @@ -1715,8 +1715,8 @@ PointerSprites = 72 PanelTabIndex = 16 SoundSamples = 839 SoundPlayed = 73 -Power = 0 1 2 3 4 5 6 7 8 -Cost =10000 12000 14000 16000 18000 20000 22000 24000 26000 +Power = 0 1 2 3 4 5 6 7 8 +Cost = 10000 12000 14000 16000 18000 20000 22000 24000 26000 Duration = 0 Castability = ALL_TALL CLAIMABLE Artifact = SPELLBOOK_DWAL @@ -1734,7 +1734,7 @@ PointerSprites = 182 PanelTabIndex = 17 SoundSamples = 0 SoundPlayed = 0 -Power = 40 60 80 100 120 140 160 180 200 +Power = 40 60 80 100 120 140 160 180 200 Cost = 2000 2100 2200 2300 2400 2500 2600 2700 2800 Cooldown = 30 Castability = ALL_GROUND OWNED_CRTRS BOUND_CRTRS ONLY_DIGGERS NEEDS_DELAY @@ -1839,6 +1839,27 @@ PlayerState = PLAYER_STATE_NONE ParentPower = POWER_HAND Functions = do_not_expand +[power23] +Name = POWER_REBOUND +NameTextID = 1053 +TooltipTextID = 230 +SymbolSprites = 556 412 +PointerSprites = 16 +PanelTabIndex = 28 +SoundSamples = 0 +SoundPlayed = 926 +; Because Rebound is now linked to the creature spell all the levels share the same power by defaut, with 'general_expand' you have to change these values however you like. +Power = 250 250 250 250 250 250 250 250 250 +Cost = 100 200 300 400 500 600 700 800 900 +Duration = 0 +Castability = ALL_GROUND OWNED_CRTRS BOUND_CRTRS +Artifact = SPELLBOOK_RBND +Properties = +PlayerState = PLAYER_STATE_REBOUND +ParentPower = NOPOWER +; To have this power chargeable like other replace 'do_not_expand' with 'general_expand'. +Functions = do_not_expand + [special0] ; Internal name of the dungeon special, used in script and config files Name = NOSPECIAL @@ -1910,4 +1931,4 @@ Name = SPECIAL_CUSTOM Artifact = SPECBOX_CUSTOM TooltipTextID = 1005 SpeechPlayed = 0 -ActivationEffect = EFFECT_SPANGLE_MULTICOLOURED \ No newline at end of file +ActivationEffect = EFFECT_SPANGLE_MULTICOLOURED diff --git a/config/fxdata/objects.cfg b/config/fxdata/objects.cfg index 6902039e9d..6f5f36ac6d 100644 --- a/config/fxdata/objects.cfg +++ b/config/fxdata/objects.cfg @@ -3730,7 +3730,7 @@ LightUnaffected = 0 LightIntensity = 0 LightRadius = 0 LightIsDynamic = 0 -RandomiseStartframe = 1 +RandomStartFrame = 1 DrawClass = 2 Persistence = 2 Immobile = 0 @@ -3752,9 +3752,32 @@ LightUnaffected = 0 LightIntensity = 0 LightRadius = 0 LightIsDynamic = 0 -RandomiseStartframe = 1 +RandomStartFrame = 1 DrawClass = 2 TransparencyFlags = 3 Persistence = 2 Immobile = 0 -Properties = DESTROYED_ON_ROOM_CLAIM DESTROYED_ON_ROOM_PLACE \ No newline at end of file +Properties = DESTROYED_ON_ROOM_CLAIM DESTROYED_ON_ROOM_PLACE + +[object163] +Name = SPELLBOOK_RBND +Genre = SPELLBOOK +AnimationID = 777 +AnimationSpeed = 256 +Size_XY = 0 +Size_Z = 0 +MaximumSize = 300 +DestroyOnLava = 1 +DestroyOnLiquid = 0 +Health = 0 +FallAcceleration = 10 +LightUnaffected = 0 +MapIcon = -1 +LightIntensity = 62 +LightRadius = 4 +LightIsDynamic = 0 +RandomStartFrame = 0 +DrawClass = 2 +Persistence = 1 +Immobile = 1 +Properties = CHOWNED_ON_ROOM_CLAIM diff --git a/config/fxdata/rules.cfg b/config/fxdata/rules.cfg index 6e7fe7e41f..268b13b79c 100644 --- a/config/fxdata/rules.cfg +++ b/config/fxdata/rules.cfg @@ -200,6 +200,7 @@ Research = ROOM SCAVENGER 27500 Research = MAGIC POWER_CHICKEN 20000 Research = MAGIC POWER_DISEASE 20000 Research = MAGIC POWER_TIME_BOMB 25000 +Research = MAGIC POWER_REBOUND 12000 Research = MAGIC POWER_ARMAGEDDON 100000 Research = MAGIC POWER_DESTROY_WALLS 750000 diff --git a/lang/gtext_chi.po b/lang/gtext_chi.po index dfa0a80b61..0fcdfed400 100644 --- a/lang/gtext_chi.po +++ b/lang/gtext_chi.po @@ -6548,4 +6548,34 @@ msgstr "基岩:未声明的岩石地板。你不能声明它或在上面建造 #: guitext:1052 msgctxt "Slab description" msgid "Dense Gold Seam: Holds a lot of wealth for your Imps to extract. " -msgstr "密集的金属矿层:为你的小鬼提供丰富的财富。" \ No newline at end of file +msgstr "密集的金属矿层:为你的小鬼提供丰富的财富。" + +#: guitext:1053 +msgctxt "Keeper spell name" +msgid "Rebound" +msgstr "反弹术" + +#: guitext:1054 +msgctxt "Keeper spell name" +msgid "Freeze" +msgstr "冰冻术" + +#: guitext:1055 +msgctxt "Keeper spell name" +msgid "Slow" +msgstr "缓慢术" + +#: guitext:1056 +msgctxt "Keeper spell name" +msgid "Flight" +msgstr "飞行术" + +#: guitext:1057 +msgctxt "Keeper spell name" +msgid "Illumination" +msgstr "照明术" + +#: guitext:1058 +msgctxt "Keeper spell name" +msgid "Sight" +msgstr "邪眼术" diff --git a/lang/gtext_cht.po b/lang/gtext_cht.po index cdeb0f7c22..00d5cb0688 100644 --- a/lang/gtext_cht.po +++ b/lang/gtext_cht.po @@ -6650,4 +6650,34 @@ msgstr "基岩:未声明的岩石地板。你不能声明它或在上面建造 #: guitext:1052 msgctxt "Slab description" msgid "Dense Gold Seam: Holds a lot of wealth for your Imps to extract. " -msgstr "密集的金属矿层:为你的小鬼提供丰富的财富。" \ No newline at end of file +msgstr "密集的金属矿层:为你的小鬼提供丰富的财富。" + +#: guitext:1053 +msgctxt "Keeper spell name" +msgid "Rebound" +msgstr "反弹术" + +#: guitext:1054 +msgctxt "Keeper spell name" +msgid "Freeze" +msgstr "冻结术" + +#: guitext:1055 +msgctxt "Keeper spell name" +msgid "Slow" +msgstr "缓慢术" + +#: guitext:1056 +msgctxt "Keeper spell name" +msgid "Flight" +msgstr "飞行术" + +#: guitext:1057 +msgctxt "Keeper spell name" +msgid "Illumination" +msgstr "照明术" + +#: guitext:1058 +msgctxt "Keeper spell name" +msgid "Sight" +msgstr "恶魔之眼" diff --git a/lang/gtext_cze.po b/lang/gtext_cze.po index 8d95cbb273..42ddc41fe1 100644 --- a/lang/gtext_cze.po +++ b/lang/gtext_cze.po @@ -6902,4 +6902,34 @@ msgstr "Základní skála: Neupravená kamenitá podlaha. Nemůžete ji zabrat a #: guitext:1052 msgctxt "Slab description" msgid "Dense Gold Seam: Holds a lot of wealth for your Imps to extract. " -msgstr "Hustý zlatý základ: Obsahuje mnoho bohatství, které mohou tví Skřeti těžit." \ No newline at end of file +msgstr "Hustý zlatý základ: Obsahuje mnoho bohatství, které mohou tví Skřeti těžit." + +#: guitext:1053 +msgctxt "Keeper spell name" +msgid "Rebound" +msgstr "Odražení" + +#: guitext:1054 +msgctxt "Keeper spell name" +msgid "Freeze" +msgstr "Zmražení" + +#: guitext:1055 +msgctxt "Keeper spell name" +msgid "Slow" +msgstr "Zpomaleni" + +#: guitext:1056 +msgctxt "Keeper spell name" +msgid "Flight" +msgstr "Letani" + +#: guitext:1057 +msgctxt "Keeper spell name" +msgid "Illumination" +msgstr "Svetelkovani" + +#: guitext:1058 +msgctxt "Keeper spell name" +msgid "Sight" +msgstr "Pohled" diff --git a/lang/gtext_dut.po b/lang/gtext_dut.po index de3ade6367..2f7388ee97 100644 --- a/lang/gtext_dut.po +++ b/lang/gtext_dut.po @@ -6919,4 +6919,34 @@ msgstr "Grondgesteente: Ongeclaimde rotsvloer. Je kunt het niet opeisen of erop #: guitext:1052 msgctxt "Slab description" msgid "Dense Gold Seam: Holds a lot of wealth for your Imps to extract. " -msgstr "Dichte Goudader: Bevat veel rijkdom voor je Dondersteentjes om te delven." \ No newline at end of file +msgstr "Dichte Goudader: Bevat veel rijkdom voor je Dondersteentjes om te delven." + +#: guitext:1053 +msgctxt "Keeper spell name" +msgid "Rebound" +msgstr "Terugkaatsen" + +#: guitext:1054 +msgctxt "Keeper spell name" +msgid "Freeze" +msgstr "Bevriezen" + +#: guitext:1055 +msgctxt "Keeper spell name" +msgid "Slow" +msgstr "Vertragen" + +#: guitext:1056 +msgctxt "Keeper spell name" +msgid "Flight" +msgstr "Vliegen" + +#: guitext:1057 +msgctxt "Keeper spell name" +msgid "Illumination" +msgstr "Verlichting" + +#: guitext:1058 +msgctxt "Keeper spell name" +msgid "Sight" +msgstr "Duivelsoog" diff --git a/lang/gtext_eng.pot b/lang/gtext_eng.pot index 1ca6b93a23..419e284c60 100644 --- a/lang/gtext_eng.pot +++ b/lang/gtext_eng.pot @@ -6098,4 +6098,34 @@ msgstr "" #: guitext:1052 msgctxt "Slab description" msgid "Dense Gold Seam: Holds a lot of wealth for your Imps to extract. " -msgstr "" \ No newline at end of file +msgstr "" + +#: guitext:1053 +msgctxt "Keeper spell name" +msgid "Rebound" +msgstr "" + +#: guitext:1054 +msgctxt "Keeper spell name" +msgid "Freeze" +msgstr "" + +#: guitext:1055 +msgctxt "Keeper spell name" +msgid "Slow" +msgstr "" + +#: guitext:1056 +msgctxt "Keeper spell name" +msgid "Flight" +msgstr "" + +#: guitext:1057 +msgctxt "Keeper spell name" +msgid "Illumination" +msgstr "" + +#: guitext:1058 +msgctxt "Keeper spell name" +msgid "Sight" +msgstr "" diff --git a/lang/gtext_fre.po b/lang/gtext_fre.po index c055f9ab79..b961392174 100644 --- a/lang/gtext_fre.po +++ b/lang/gtext_fre.po @@ -2143,7 +2143,7 @@ msgid "" "Freeze: Changes the target creature to ice. It is then in suspended animation " "and can be shattered with a well-aimed blow." msgstr "" -"Glaciateur : Change la cible en glace. Son animation est suspendue et elle " +"Gel : Change la cible en glace. Son animation est suspendue et elle " "peut être éclatée avec un coup bien effectué [26.8]" #: guitext:228 @@ -2184,7 +2184,7 @@ msgid "" "Sight: Allows the creature to temporarily increase its awareness and notice " "the invisible." msgstr "" -"Oeil : Permet à la créature d'augmenter temporairement sa conscience et de " +"Vision : Permet à la créature d'augmenter temporairement sa conscience et de " "remarquer l'invisible." #: guitext:233 @@ -2221,7 +2221,7 @@ msgid "" "Speed: Speeds up the creature so that it can perform fighting and working " "tasks really quickly." msgstr "" -"Accélération : Accélère la créature afin qu'elle puisse effectuer des tâches " +"Hâte : Accélère la créature afin qu'elle puisse effectuer des tâches " "de combat et de travail très rapidement.[26.20]" #: guitext:237 @@ -2280,7 +2280,7 @@ msgid "" "Flight: Causes the creature to take off from the ground and attack creatures " "from the air or cross lava unharmed." msgstr "" -"Vol : Fait décoller la créature du sol et attaque les créatures depuis les " +"Lévitation : Fait décoller la créature du sol et attaque les créatures depuis les " "airs.[26.7]" #: guitext:244 @@ -2293,7 +2293,7 @@ msgctxt "Creature spell" msgid "" "Slow: Slows down the target creature, making it attacks and movement delayed." msgstr "" -"Ralentisseur : Ralentit la créature cible, ce qui ralentit ses attaques et " +"Lenteur : Ralentit la créature cible, ce qui ralentit ses attaques et " "ses mouvements." #: guitext:246 @@ -4615,7 +4615,7 @@ msgstr "Obéissance" #: guitext:637 msgctxt "Keeper spell name" msgid "Speed Monster" -msgstr "Accélérateur de monstre" +msgstr "Hâte" #: guitext:638 msgctxt "Keeper spell name" @@ -7153,3 +7153,33 @@ msgstr "Rocher de base : Sol rocheux non réclamé. Vous ne pouvez pas le revend msgctxt "Slab description" msgid "Dense Gold Seam: Holds a lot of wealth for your Imps to extract. " msgstr "Veine d'or dense : Contient beaucoup de richesses que vos Lutins peuvent extraire." + +#: guitext:1053 +msgctxt "Keeper spell name" +msgid "Rebound" +msgstr "Rebond" + +#: guitext:1054 +msgctxt "Keeper spell name" +msgid "Freeze" +msgstr "Gel" + +#: guitext:1055 +msgctxt "Keeper spell name" +msgid "Slow" +msgstr "Lenteur" + +#: guitext:1056 +msgctxt "Keeper spell name" +msgid "Flight" +msgstr "Lévitation" + +#: guitext:1057 +msgctxt "Keeper spell name" +msgid "Illumination" +msgstr "Illumination" + +#: guitext:1058 +msgctxt "Keeper spell name" +msgid "Sight" +msgstr "Vision" diff --git a/lang/gtext_ger.po b/lang/gtext_ger.po index 30ca231e6e..cd6cf20639 100644 --- a/lang/gtext_ger.po +++ b/lang/gtext_ger.po @@ -7166,3 +7166,33 @@ msgstr "Felsboden: Unbeanspruchter Felsenboden. Du kannst ihn nicht beanspruchen msgctxt "Slab description" msgid "Dense Gold Seam: Holds a lot of wealth for your Imps to extract. " msgstr "Dichte Goldader: Enthält viel Reichtum, den deine Imps abbauen können." + +#: guitext:1053 +msgctxt "Keeper spell name" +msgid "Rebound" +msgstr "Abprall" + +#: guitext:1054 +msgctxt "Keeper spell name" +msgid "Freeze" +msgstr "Einfrieren" + +#: guitext:1055 +msgctxt "Keeper spell name" +msgid "Slow" +msgstr "Bremsen" + +#: guitext:1056 +msgctxt "Keeper spell name" +msgid "Flight" +msgstr "Flug" + +#: guitext:1057 +msgctxt "Keeper spell name" +msgid "Illumination" +msgstr "Beleuchtung" + +#: guitext:1058 +msgctxt "Keeper spell name" +msgid "Sight" +msgstr "Sicht" diff --git a/lang/gtext_ita.po b/lang/gtext_ita.po index 299626bce4..21ffb9d726 100644 --- a/lang/gtext_ita.po +++ b/lang/gtext_ita.po @@ -7009,3 +7009,33 @@ msgstr "Roccia madre: Pavimento roccioso non reclamato. Non puoi reclamarlo o co msgctxt "Slab description" msgid "Dense Gold Seam: Holds a lot of wealth for your Imps to extract. " msgstr "Vena d'oro densa: Contiene molta ricchezza che i tuoi Folletti possono estrarre." + +#: guitext:1053 +msgctxt "Keeper spell name" +msgid "Rebound" +msgstr "Rimbalzo" + +#: guitext:1054 +msgctxt "Keeper spell name" +msgid "Freeze" +msgstr "Congelamento" + +#: guitext:1055 +msgctxt "Keeper spell name" +msgid "Slow" +msgstr "Rallentamento" + +#: guitext:1056 +msgctxt "Keeper spell name" +msgid "Flight" +msgstr "Volo" + +#: guitext:1057 +msgctxt "Keeper spell name" +msgid "Illumination" +msgstr "Illuminazione" + +#: guitext:1058 +msgctxt "Keeper spell name" +msgid "Sight" +msgstr "Vista" diff --git a/lang/gtext_jpn.po b/lang/gtext_jpn.po index 37d90a76f1..ba691f6583 100644 --- a/lang/gtext_jpn.po +++ b/lang/gtext_jpn.po @@ -6801,3 +6801,33 @@ msgstr "基盤岩: 誰の所有でもない岩石の地面。それを占領 msgctxt "Slab description" msgid "Dense Gold Seam: Holds a lot of wealth for your Imps to extract. " msgstr "濃い金鉱: 手下インプが採掘する莫大な富。" + +#: guitext:1053 +msgctxt "Keeper spell name" +msgid "Rebound" +msgstr "反射" + +#: guitext:1054 +msgctxt "Keeper spell name" +msgid "Freeze" +msgstr "凍結" + +#: guitext:1055 +msgctxt "Keeper spell name" +msgid "Slow" +msgstr "減速" + +#: guitext:1056 +msgctxt "Keeper spell name" +msgid "Flight" +msgstr "飛行" + +#: guitext:1057 +msgctxt "Keeper spell name" +msgid "Illumination" +msgstr "照明" + +#: guitext:1058 +msgctxt "Keeper spell name" +msgid "Sight" +msgstr "照準" diff --git a/lang/gtext_kor.po b/lang/gtext_kor.po index 6a805335ed..8da85d9e88 100644 --- a/lang/gtext_kor.po +++ b/lang/gtext_kor.po @@ -6943,3 +6943,33 @@ msgstr "기반암: 청구되지 않은 암반 바닥. 이를 청구하거나 위 msgctxt "Slab description" msgid "Dense Gold Seam: Holds a lot of wealth for your Imps to extract. " msgstr "높은 금맥: 당신의 임프가 추출할 수 있는 많은 부를 보유하고 있습니다." + +#: guitext:1053 +msgctxt "Keeper spell name" +msgid "Rebound" +msgstr "반사" + +#: guitext:1054 +msgctxt "Keeper spell name" +msgid "Freeze" +msgstr "동결" + +#: guitext:1055 +msgctxt "Keeper spell name" +msgid "Slow" +msgstr "느려림" + +#: guitext:1056 +msgctxt "Keeper spell name" +msgid "Flight" +msgstr "비행" + +#: guitext:1057 +msgctxt "Keeper spell name" +msgid "Illumination" +msgstr "조명" + +#: guitext:1058 +msgctxt "Keeper spell name" +msgid "Sight" +msgstr "시각" diff --git a/lang/gtext_pol.po b/lang/gtext_pol.po index 4a9a262d9c..31d71173e8 100644 --- a/lang/gtext_pol.po +++ b/lang/gtext_pol.po @@ -7020,3 +7020,33 @@ msgstr "Skała podstawowa: Niepomocne podłoże skalne. Nie możesz go oznaczyć msgctxt "Slab description" msgid "Dense Gold Seam: Holds a lot of wealth for your Imps to extract. " msgstr "Gęste żyłki złota: Zawiera dużo bogactwa do wydobycia przez twoje Chochliki." + +#: guitext:1053 +msgctxt "Keeper spell name" +msgid "Rebound" +msgstr "Odbicie" + +#: guitext:1054 +msgctxt "Keeper spell name" +msgid "Freeze" +msgstr "Zamrażacz" + +#: guitext:1055 +msgctxt "Keeper spell name" +msgid "Slow" +msgstr "Spowolnienie" + +#: guitext:1056 +msgctxt "Keeper spell name" +msgid "Flight" +msgstr "Lot" + +#: guitext:1057 +msgctxt "Keeper spell name" +msgid "Illumination" +msgstr "Oświecenie" + +#: guitext:1058 +msgctxt "Keeper spell name" +msgid "Sight" +msgstr "Jasnowidzenie" diff --git a/lang/gtext_rus.po b/lang/gtext_rus.po index df612a9bb4..247d47ee51 100644 --- a/lang/gtext_rus.po +++ b/lang/gtext_rus.po @@ -7088,3 +7088,33 @@ msgstr "Основная порода: Не принадлежащий вам к msgctxt "Slab description" msgid "Dense Gold Seam: Holds a lot of wealth for your Imps to extract. " msgstr "Плотная золотая жила: Содержит много богатства для добычи ваших бесов." + +#: guitext:1053 +msgctxt "Keeper spell name" +msgid "Rebound" +msgstr "Отражение" + +#: guitext:1054 +msgctxt "Keeper spell name" +msgid "Freeze" +msgstr "Заморозка" + +#: guitext:1055 +msgctxt "Keeper spell name" +msgid "Slow" +msgstr "Замедление" + +#: guitext:1056 +msgctxt "Keeper spell name" +msgid "Flight" +msgstr "Полет" + +#: guitext:1057 +msgctxt "Keeper spell name" +msgid "Illumination" +msgstr "Освещение" + +#: guitext:1058 +msgctxt "Keeper spell name" +msgid "Sight" +msgstr "Видение" diff --git a/lang/gtext_spa.po b/lang/gtext_spa.po index f3cb2fbc39..a66cb5dc90 100644 --- a/lang/gtext_spa.po +++ b/lang/gtext_spa.po @@ -6074,3 +6074,33 @@ msgstr "Roca madre: Suelo de roca no reclamado. No puedes reclamarlo ni construi msgctxt "Slab description" msgid "Dense Gold Seam: Holds a lot of wealth for your Imps to extract. " msgstr "Veta de oro densa: Contiene mucha riqueza para que tus Duendes la extraigan." + +#: guitext:1053 +msgctxt "Keeper spell name" +msgid "Rebound" +msgstr "Rebote" + +#: guitext:1054 +msgctxt "Keeper spell name" +msgid "Freeze" +msgstr "Congelar" + +#: guitext:1055 +msgctxt "Keeper spell name" +msgid "Slow" +msgstr "Lentitud" + +#: guitext:1056 +msgctxt "Keeper spell name" +msgid "Flight" +msgstr "Vuelo" + +#: guitext:1057 +msgctxt "Keeper spell name" +msgid "Illumination" +msgstr "Iluminación" + +#: guitext:1058 +msgctxt "Keeper spell name" +msgid "Sight" +msgstr "Visión" diff --git a/lang/gtext_swe.po b/lang/gtext_swe.po index 6eecdbd63c..c8fd7dffee 100644 --- a/lang/gtext_swe.po +++ b/lang/gtext_swe.po @@ -6923,3 +6923,33 @@ msgstr "Grundberg: Oöverklagad stenig mark. Du kan inte kräva den eller bygga msgctxt "Slab description" msgid "Dense Gold Seam: Holds a lot of wealth for your Imps to extract. " msgstr "Tät guldåder: Innehåller mycket rikedom för dina Smådjävlar att utvinna." + +#: guitext:1053 +msgctxt "Keeper spell name" +msgid "Rebound" +msgstr "Retur" + +#: guitext:1054 +msgctxt "Keeper spell name" +msgid "Freeze" +msgstr "Frys" + +#: guitext:1055 +msgctxt "Keeper spell name" +msgid "Slow" +msgstr "Långsam" + +#: guitext:1056 +msgctxt "Keeper spell name" +msgid "Flight" +msgstr "Sväva" + +#: guitext:1057 +msgctxt "Keeper spell name" +msgid "Illumination" +msgstr "Belysning" + +#: guitext:1058 +msgctxt "Keeper spell name" +msgid "Sight" +msgstr "Syn" diff --git a/src/config_magic.h b/src/config_magic.h index 6791e01b24..f75e1b0008 100644 --- a/src/config_magic.h +++ b/src/config_magic.h @@ -115,6 +115,7 @@ enum PowerKinds { PwrK_PICKUPCRTR, // 20 PwrK_PICKUPGOLD, PwrK_PICKUPFOOD, + PwrK_REBOUND, // 23 }; /** Contains properties of a shot model, to be stored in ShotConfigStats. diff --git a/src/config_players.c b/src/config_players.c index 30e2391b90..439b7651c5 100644 --- a/src/config_players.c +++ b/src/config_players.c @@ -80,6 +80,7 @@ const struct NamedCommand player_state_commands[] = { {"PLAYER_STATE_MAKEHAPPY", PSt_MkHappy}, {"PLAYER_STATE_MAKEANGRY", PSt_MkAngry}, {"PLAYER_STATE_PLACETERRAIN", PSt_PlaceTerrain}, + {"PLAYER_STATE_REBOUND", PSt_Rebound}, {NULL, 0}, }; /******************************************************************************/ diff --git a/src/engine_redraw.c b/src/engine_redraw.c index 335c89661c..a59f3ae16c 100644 --- a/src/engine_redraw.c +++ b/src/engine_redraw.c @@ -981,6 +981,7 @@ void process_dungeon_top_pointer_graphic(struct PlayerInfo *player) case PSt_FreeCtrlPassngr: case PSt_FreeCtrlDirect: case PSt_TimeBomb: + case PSt_Rebound: draw_spell_cursor(player->work_state, 0, game.mouse_light_pos.x.stl.num, game.mouse_light_pos.y.stl.num); break; case PSt_CreatrQuery: diff --git a/src/frontend.cpp b/src/frontend.cpp index e69574b5d1..48269a3958 100644 --- a/src/frontend.cpp +++ b/src/frontend.cpp @@ -1030,6 +1030,7 @@ long player_state_to_packet(long work_state, PowerKind pwkind, TbBool already_in case PSt_TurnChicken: case PSt_DestroyWalls: case PSt_TimeBomb: + case PSt_Rebound: return PckA_SetPlyrState; case PSt_None: switch (pwkind) diff --git a/src/lvl_script_value.c b/src/lvl_script_value.c index 134a82ca63..a1e27e26c1 100644 --- a/src/lvl_script_value.c +++ b/src/lvl_script_value.c @@ -174,6 +174,8 @@ TbResult script_use_power_on_creature(PlayerNumber plyr_idx, long crmodel, long return magic_use_power_speed(caster, thing, 0, 0, splevel, spell_flags); case PwrK_PROTECT: return magic_use_power_armour(caster, thing, 0, 0, splevel, spell_flags); + case PwrK_REBOUND: + return magic_use_power_rebound(caster, thing, 0, 0, splevel, spell_flags); case PwrK_CONCEAL: return magic_use_power_conceal(caster, thing, 0, 0, splevel, spell_flags); case PwrK_DISEASE: diff --git a/src/magic.c b/src/magic.c index 5ad1cb42ad..4a90fa1daf 100644 --- a/src/magic.c +++ b/src/magic.c @@ -1337,6 +1337,30 @@ TbResult magic_use_power_armour(PlayerNumber plyr_idx, struct Thing *thing, MapS return Lb_SUCCESS; } +TbResult magic_use_power_rebound(PlayerNumber plyr_idx, struct Thing *thing, MapSubtlCoord stl_x, MapSubtlCoord stl_y, long splevel, unsigned long mod_flags) +{ + if (!thing_is_creature(thing)) { + ERRORLOG("Tried to apply spell to invalid creature."); + return Lb_FAIL; + } + // If this spell is already casted at that creature, do nothing + if (thing_affected_by_spell(thing, SplK_Rebound)) { + return Lb_OK; + } + if ((mod_flags & PwMod_CastForFree) == 0) + { + // If we can't afford the spell, fail + if (!pay_for_spell(plyr_idx, PwrK_REBOUND, splevel)) { + return Lb_FAIL; + } + } + struct PowerConfigStats *powerst; + powerst = get_power_model_stats(PwrK_REBOUND); + thing_play_sample(thing, powerst->select_sound_idx, NORMAL_PITCH, 0, 3, 0, 2, FULL_LOUDNESS); + apply_spell_effect_to_thing(thing, SplK_Rebound, splevel); + return Lb_SUCCESS; +} + TbResult magic_use_power_speed(PlayerNumber plyr_idx, struct Thing *thing, MapSubtlCoord stl_x, MapSubtlCoord stl_y, long splevel, unsigned long mod_flags) { if (!thing_is_creature(thing)) { @@ -2053,6 +2077,9 @@ TbResult magic_use_power_on_thing(PlayerNumber plyr_idx, PowerKind pwkind, case PwrK_PROTECT: ret = magic_use_power_armour(plyr_idx, thing, stl_x, stl_y, splevel, allow_flags); break; + case PwrK_REBOUND: + ret = magic_use_power_rebound(plyr_idx, thing, stl_x, stl_y, splevel, allow_flags); + break; case PwrK_CONCEAL: ret = magic_use_power_conceal(plyr_idx, thing, stl_x, stl_y, splevel, allow_flags); break; diff --git a/src/magic.h b/src/magic.h index 05d00dc62e..d05e847e08 100644 --- a/src/magic.h +++ b/src/magic.h @@ -71,6 +71,7 @@ TbResult magic_use_power_imp(PlayerNumber plyr_idx, MapSubtlCoord stl_x, MapSubt TbResult magic_use_power_heal(PlayerNumber plyr_idx, struct Thing *thing, MapSubtlCoord stl_x, MapSubtlCoord stl_y, long splevel, unsigned long mod_flags); TbResult magic_use_power_conceal(PlayerNumber plyr_idx, struct Thing *thing, MapSubtlCoord stl_x, MapSubtlCoord stl_y, long splevel, unsigned long mod_flags); TbResult magic_use_power_armour(PlayerNumber plyr_idx, struct Thing *thing, MapSubtlCoord stl_x, MapSubtlCoord stl_y, long splevel, unsigned long mod_flags); +TbResult magic_use_power_rebound(PlayerNumber plyr_idx, struct Thing *thing, MapSubtlCoord stl_x, MapSubtlCoord stl_y, long splevel, unsigned long mod_flags); TbResult magic_use_power_speed(PlayerNumber plyr_idx, struct Thing *thing, MapSubtlCoord stl_x, MapSubtlCoord stl_y, long splevel, unsigned long mod_flags); TbResult magic_use_power_lightning(PlayerNumber plyr_idx, MapSubtlCoord stl_x, MapSubtlCoord stl_y, long splevel, unsigned long mod_flags); TbResult magic_use_power_time_bomb(PlayerNumber plyr_idx, struct Thing *thing, long splevel, unsigned long mod_flags); diff --git a/src/packets.c b/src/packets.c index ca3082cdbe..ce6ab95bee 100644 --- a/src/packets.c +++ b/src/packets.c @@ -198,6 +198,9 @@ TbBool process_dungeon_control_packet_spell_overcharge(long plyr_idx) case PSt_TimeBomb: update_power_overcharge(player, PwrK_TIMEBOMB); break; + case PSt_Rebound: + update_power_overcharge(player, PwrK_REBOUND); + break; default: player->cast_expand_level++; break; diff --git a/src/packets_input.c b/src/packets_input.c index abbc2a87a2..713413a216 100644 --- a/src/packets_input.c +++ b/src/packets_input.c @@ -904,6 +904,23 @@ TbBool process_dungeon_control_packet_clicks(long plyr_idx) unset_packet_control(pckt, PCtr_LBtnRelease); } break; + case PSt_Rebound: + influence_own_creatures = true; + pwkind = player_state_to_power_kind[player->work_state]; + thing = get_creature_near_to_be_keeper_power_target(x, y, pwkind, plyr_idx); + if (thing_is_invalid(thing)) + { + player->thing_under_hand = 0; + break; + } + player->thing_under_hand = thing->index; + if ((pckt->control_flags & PCtr_LBtnRelease) != 0) + { + i = get_power_overcharge_level(player); + magic_use_available_power_on_thing(plyr_idx, pwkind, i, stl_x, stl_y, thing, PwMod_Default); + unset_packet_control(pckt, PCtr_LBtnRelease); + } + break; case PSt_Sell: process_dungeon_control_packet_sell_operation(plyr_idx); break; diff --git a/src/player_compevents.c b/src/player_compevents.c index ba41c8c026..0e0b633d5f 100644 --- a/src/player_compevents.c +++ b/src/player_compevents.c @@ -369,7 +369,7 @@ long computer_event_check_fighters(struct Computer2 *comp, struct ComputerEvent if (comp->dungeon->fights_num <= 0) { return 4; } - if (!(computer_able_to_use_power(comp, PwrK_SPEEDCRTR, cevent->param1, 1) || computer_able_to_use_power(comp, PwrK_PROTECT, cevent->param1, 1))) { + if (!(computer_able_to_use_power(comp, PwrK_SPEEDCRTR, cevent->param1, 1) || computer_able_to_use_power(comp, PwrK_PROTECT, cevent->param1, 1) || computer_able_to_use_power(comp, PwrK_REBOUND, cevent->param1, 1))) { return 4; } struct Thing* fightng = computer_get_creature_in_fight(comp, PwrK_SPEEDCRTR); @@ -378,7 +378,11 @@ long computer_event_check_fighters(struct Computer2 *comp, struct ComputerEvent fightng = computer_get_creature_in_fight(comp, PwrK_PROTECT); if (thing_is_invalid(fightng)) { - return 4; + fightng = computer_get_creature_in_fight(comp, PwrK_REBOUND); + if (thing_is_invalid(fightng)) + { + return 4; + } } } if (!create_task_magic_speed_up(comp, fightng, cevent->param1)) { diff --git a/src/player_comptask.c b/src/player_comptask.c index 410acd82ac..778d39415b 100644 --- a/src/player_comptask.c +++ b/src/player_comptask.c @@ -380,6 +380,9 @@ TbResult game_action(PlayerNumber plyr_idx, unsigned short gaction, unsigned sho case GA_UsePwrArmour: thing = thing_get(param1); return magic_use_available_power_on_thing(plyr_idx, PwrK_PROTECT, alevel, stl_x, stl_y, thing, PwMod_Default); + case GA_UsePwrRebound: + thing = thing_get(param1); + return magic_use_available_power_on_thing(plyr_idx, PwrK_REBOUND, alevel, stl_x, stl_y, thing, PwMod_Default); case GA_UsePwrConceal: thing = thing_get(param1); return magic_use_available_power_on_thing(plyr_idx, PwrK_CONCEAL, alevel, stl_x, stl_y, thing, PwMod_Default); @@ -3102,6 +3105,13 @@ long task_magic_speed_up(struct Computer2 *comp, struct ComputerTask *ctask) k = 1; } } + else if (computer_able_to_use_power(comp, PwrK_REBOUND, ctask->attack_magic.splevel, 1) && !thing_affected_by_spell(creatng, PwrK_REBOUND)) + { + if (try_game_action(comp, dungeon->owner, GA_UsePwrRebound, ctask->attack_magic.splevel, 0, 0, ctask->attack_magic.target_thing_idx, 0) > Lb_OK) + { + k = 1; + } + } if (k != 1) { remove_task(comp, ctask); diff --git a/src/player_computer.h b/src/player_computer.h index 932ff27ac8..997bf54b5d 100644 --- a/src/player_computer.h +++ b/src/player_computer.h @@ -120,6 +120,7 @@ enum GameActionTypes { GA_UsePwrLightning, GA_UsePwrSpeedUp, GA_UsePwrArmour, + GA_UsePwrRebound, GA_UsePwrConceal, GA_UsePwrHoldAudnc, GA_UsePwrDisease, diff --git a/src/player_states.c b/src/player_states.c index 3e29479f6d..f1208d5025 100644 --- a/src/player_states.c +++ b/src/player_states.c @@ -69,6 +69,22 @@ PowerKind const player_state_to_power_kind[PLAYER_STATES_COUNT] = { PwrK_CHICKEN, // PSt_FreeTurnChicken PwrK_POSSESS, // PSt_FreeCtrlPassngr PwrK_POSSESS, // PSt_FreeCtrlDirect + PwrK_None, // PSt_StealRoom + PwrK_None, // PSt_DestroyRoom + PwrK_None, // PSt_KillCreatr + PwrK_None, // PSt_ConvertCreatr + PwrK_None, // PSt_StealSlab + PwrK_None, // PSt_LevelCreatureUp + PwrK_None, // PSt_LevelCreatureDown + PwrK_None, // PSt_KillPlayer + PwrK_None, // PSt_HeartHealth + PwrK_None, // PSt_QueryAll + PwrK_None, // PSt_MkHappy + PwrK_None, // PSt_MkAngry + PwrK_None, // PSt_PlaceTerrain + PwrK_None, // PSt_DestroyThing + PwrK_None, // PSt_CreatrInfoAll + PwrK_REBOUND, // PSt_Rebound }; /******************************************************************************/ diff --git a/src/player_states.h b/src/player_states.h index fb39169f8a..3a67db0974 100644 --- a/src/player_states.h +++ b/src/player_states.h @@ -58,31 +58,32 @@ enum PlayerStates { PSt_Heal, PSt_Sell, PSt_CreateDigger, - PSt_DestroyWalls, + PSt_DestroyWalls, // 25 PSt_CastDisease, PSt_TurnChicken, PSt_MkGoldPot, // 28 PSt_TimeBomb, - PSt_FreeDestroyWalls, + PSt_FreeDestroyWalls, // 30 PSt_FreeCastDisease, PSt_FreeTurnChicken, PSt_FreeCtrlPassngr, PSt_FreeCtrlDirect, - PSt_StealRoom, + PSt_StealRoom, // 35 PSt_DestroyRoom, PSt_KillCreatr, PSt_ConvertCreatr, PSt_StealSlab, - PSt_LevelCreatureUp, + PSt_LevelCreatureUp, // 40 PSt_LevelCreatureDown, PSt_KillPlayer, PSt_HeartHealth, PSt_QueryAll, - PSt_MkHappy, + PSt_MkHappy, // 45 PSt_MkAngry, PSt_PlaceTerrain, PSt_DestroyThing, PSt_CreatrInfoAll, + PSt_Rebound, // 50 PSt_ListEnd };