Magic Refactor + Wizard Grimoire (#22568)

* Brings over changes from the original magic refactor PR

* Adds Master Spellbook, spellbook categories, WizCoin currency, and locale

* Wiz€oin™

* Adds currency whitelist to Spellbook preset, grants contained actions on action added.

* Adds grant contained action and remove provided action.

* adds a way for actions to be upgraded to the store

* Adds Fireball 3 and fixes action upgrade logic so that it checks if the action can level or if the action can upgrade separately

* Fixes upgrade logic in ActionUpgradeSystem to allow for level ups without an actual upgrade. Fixed action upgrade logic in store system as well

* Removes current action entity from the bought entities list and adds new or old action entity

* Removes Current Entity

* Removes old comments, fixes TransferAllActionsWithNewAttached

* Removes TODO

* Removes Product Action Upgrade Event

* reverts changes to immovablerodrule

* Removes stale event reference

* fixes mind action grant logic

* reverts shared gun system change to projectile anomaly system

* forgor to remove the using

* Reverts unintended changes to action container

* Adds refund button to the store

* Refreshes store back to origin.

* Refund with correct currency

* Init refund

* Check for terminating and update interface

* Disables refund button

* Removes preset allow refund

* dont refund if map changed

* adds refunds to stores

* Adds method to check for starting map

* comments, datafields, some requested changes

* turns event into ref event

* Adds datafields

* Switches to entity terminating event

* Changes store entity to be nullable and checks if store is terminating to remove reference.

* Tryadd instead of containskey

* Adds a refund disable method, disables refund on bought ent container changes if not an action

* Removes duplicate refundcomp

* Removes unintended merges

* Removed another unintended change from merge

* removes extra using statement

* readds using statement

* might as well just remove both usings since it won't leave the PR

* Fixes Action upgrades from stores

* Changes to non obsolete method uses

* Shares spawn code between instant and world

* Adds action entity to action event, adds beforecastspellevent, adds spell requirements to magic component

* puts prereq check in spell methods, sets up template code for before cast event

* checks for required wizard clothes

* Networks Magic Comp and Wizard Clothes Comp. Renames MagicSpawnData to MagicInstantSpawnData.

* Removes posdata from projectiles

* Speech > RequiresSpeech

* Fixes ActionOnInteract

* checks for muted

* popup for missing reqs

* Validate click loc for blink spell

* Checks if doors are in range and not obstructed before opening

* Check ents by map coords

* Adds speak event

* Comments spellbooks

* Removes comments

* Unobsoletes smite spell

* Invert if

* Requirements loc

* Fixes spell reqs

* Inverts an if

* Comment updates

* Starts doafter work

* Removes doafter references

* Balances fireball upgrades to be more reasonable

* Enables refund on master spellbooks

* Spells to do

* update spellbook doafter

* knock toggles bolts

* Touch Spell comments

* Comments for pending spells

* more comments

* adds spider polymorph to spellbook

* TODOs for spells

* reorganizes spellbook categories and adds wands

* fixes spacing and adds limited conditions

* commented owner only for future store PR

* reenables owner only for the grimoire

* fixes grimoire sprite

* Adds wizard rod polymorph

* summon ghosts event

* Moves rod form to offensive category

* Adds charge spell and loc for rod polymorph

* Oops forgor the actual chages

* Item Recall comment

* Fixes UI

* removes extra field for wizard rod

* Cleanup

* New Condition (INCOMPLETE)

* Fix linter

* Fix linter (for real)

* fixed some descriptions

* adds regions to magic

* Adds a non-refund wizard grimoire, fixes blink to deselect after teleporting, reduces force wall despawn time to 12 seconds

* removes limited upgrade condition

---------

Co-authored-by: AJCM <AJCM@tutanota.com>
This commit is contained in:
keronshb
2024-05-11 19:06:49 -04:00
committed by GitHub
parent 73c1420648
commit 999d044139
46 changed files with 1262 additions and 510 deletions

View File

@@ -14,3 +14,33 @@
- type: InstantAction
event: !type:PolymorphActionEvent
itemIconStyle: NoItem
- type: entity
id: ActionPolymorphWizardSpider
name: Spider Polymorph
description: Polymorphs you into a Spider.
noSpawn: true
components:
- type: InstantAction
useDelay: 60
event: !type:PolymorphActionEvent
protoId: WizardSpider
itemIconStyle: NoItem
icon:
sprite: Mobs/Animals/spider.rsi
state: tarantula
- type: entity
id: ActionPolymorphWizardRod
name: Rod Form
description: CLANG!
noSpawn: true
components:
- type: InstantAction
useDelay: 60
event: !type:PolymorphActionEvent
protoId: WizardRod
itemIconStyle: NoItem
icon:
sprite: Objects/Fun/immovable_rod.rsi
state: icon

View File

@@ -0,0 +1,140 @@
# Offensive
- type: listing
id: SpellbookFireball
name: spellbook-fireball-name
description: spellbook-fireball-desc
productAction: ActionFireball
productUpgradeId: SpellbookFireballUpgrade
cost:
WizCoin: 2
categories:
- SpellbookOffensive
conditions:
- !type:ListingLimitedStockCondition
stock: 1
- type: listing
id: SpellbookRodForm
name: spellbook-polymorph-rod-name
description: spellbook-polymorph-rod-desc
productAction: ActionPolymorphWizardRod
cost:
WizCoin: 3
categories:
- SpellbookOffensive
conditions:
- !type:ListingLimitedStockCondition
stock: 1
# Defensive
- type: listing
id: SpellbookForceWall
name: spellbook-force-wall-name
description: spellbook-force-wall-desc
productAction: ActionForceWall
cost:
WizCoin: 3
categories:
- SpellbookDefensive
# Utility
- type: listing
id: SpellbookPolymorphSpider
name: spellbook-polymoprh-spider-name
description: spellbook-polymorph-spider-desc
productAction: ActionPolymorphWizardSpider
cost:
WizCoin: 2
categories:
- SpellbookUtility
conditions:
- !type:ListingLimitedStockCondition
stock: 1
- type: listing
id: SpellbookBlink
name: spellbook-blink-name
description: spellbook-blink-desc
productAction: ActionBlink
cost:
WizCoin: 1
categories:
- SpellbookUtility
conditions:
- !type:ListingLimitedStockCondition
stock: 1
- type: listing
id: SpellbookCharge
name: spellbook-charge-name
description: spellbook-charge-desc
productAction: ActionChargeSpell
cost:
WizCoin: 1
categories:
- SpellbookUtility
conditions:
- !type:ListingLimitedStockCondition
stock: 1
# Equipment
- type: listing
id: SpellbookWandDoor
name: spellbook-wand-polymorph-door-name
description: spellbook-wand-polymorph-door-description
productEntity: WeaponWandPolymorphDoor
cost:
WizCoin: 3
categories:
- SpellbookEquipment
conditions:
- !type:ListingLimitedStockCondition
stock: 1
- type: listing
id: SpellbookWandPolymorphCarp
name: spellbook-wand-polymorph-carp-name
description: spellbook-wand-polymorph-carp-description
productEntity: WeaponWandPolymorphCarp
cost:
WizCoin: 3
categories:
- SpellbookEquipment
conditions:
- !type:ListingLimitedStockCondition
stock: 1
# Event
- type: listing
id: SpellbookEventSummonGhosts
name: spellbook-event-summon-ghosts-name
description: spellbook-event-summon-ghosts-description
productAction: ActionSummonGhosts
cost:
WizCoin: 0
categories:
- SpellbookEvents
conditions:
- !type:ListingLimitedStockCondition
stock: 1
# Upgrades
- type: listing
id: SpellbookFireballUpgrade
productUpgradeId: SpellbookFireballUpgrade
name: spellbook-upgrade-fireball-name
description: spellbook-upgrade-fireball-description
icon:
sprite: Objects/Magic/magicactions.rsi
state: fireball
cost:
WizCoin: 2
categories:
- SpellbookOffensive
conditions:
- !type:BuyBeforeCondition
whitelist:
- SpellbookFireball
# manual for now
- !type:ListingLimitedStockCondition
stock: 2

View File

@@ -390,7 +390,7 @@
- Snout
- type: entity
parent: ClothingHeadBase
parent: ClothingHeadHatWizardBase
id: ClothingHeadHatRedwizard
name: red wizard hat
description: Strange-looking red hat-wear that most certainly belongs to a real magic user.
@@ -505,7 +505,7 @@
- type: entity
parent: ClothingHeadBase
parent: ClothingHeadHatWizardBase
id: ClothingHeadHatVioletwizard
name: violet wizard hat
description: "Strange-looking violet hat-wear that most certainly belongs to a real magic user."
@@ -534,6 +534,7 @@
name: witch hat
description: A witch hat.
components:
- type: WizardClothes #Yes this will count
- type: Sprite
sprite: Clothing/Head/Hats/witch.rsi
- type: Clothing
@@ -558,7 +559,14 @@
sprite: Clothing/Head/Hats/wizard_fake.rsi
- type: entity
abstract: true
parent: ClothingHeadBase
id: ClothingHeadHatWizardBase
components:
- type: WizardClothes
- type: entity
parent: ClothingHeadHatWizardBase
id: ClothingHeadHatWizard
name: wizard hat
description: Strange-looking blue hat-wear that most certainly belongs to a powerful magic user.

View File

@@ -166,9 +166,16 @@
- type: Clothing
sprite: Clothing/OuterClothing/Misc/santa.rsi
- type: entity
abstract: true
parent: ClothingOuterBase
id: ClothingOuterWizardBase
components:
- type: WizardClothes
# Is this wizard wearing a fanny pack???
- type: entity
parent: ClothingOuterBase
parent: ClothingOuterWizardBase
id: ClothingOuterWizardViolet
name: violet wizard robes
description: A bizarre gem-encrusted violet robe that radiates magical energies.
@@ -179,7 +186,7 @@
sprite: Clothing/OuterClothing/Misc/violetwizard.rsi
- type: entity
parent: ClothingOuterBase
parent: ClothingOuterWizardBase
id: ClothingOuterWizard
name: wizard robes
description: A bizarre gem-encrusted blue robe that radiates magical energies.
@@ -190,7 +197,7 @@
sprite: Clothing/OuterClothing/Misc/wizard.rsi
- type: entity
parent: ClothingOuterBase
parent: ClothingOuterWizardBase
id: ClothingOuterWizardRed
name: red wizard robes
description: Strange-looking, red, hat-wear that most certainly belongs to a real magic user.

View File

@@ -2345,6 +2345,18 @@
bloodMaxVolume: 150
bloodReagent: Laughter
- type: entity
name: wizard spider
parent: MobGiantSpider
id: MobGiantSpiderWizard
description: This spider looks a little magical
suffix: Wizard
components:
- type: Accentless
removes:
- type: ReplacementAccent
accent: xeno #let this wizard speak
- type: entity
name: possum
parent: SimpleMobBase

View File

@@ -9,7 +9,7 @@
layers:
- state: paper_blood
- state: cover_strong
color: "#645a5a"
color: "#645a5a"
- state: decor_wingette_flat
color: "#4d0303"
- state: icon_pentagramm
@@ -19,13 +19,58 @@
tags:
- Spellbook
# For the Wizard Antag
# Do not add discounts or price inflation
- type: entity
id: WizardsGrimoire
name: wizards grimoire
suffix: Wizard
parent: BaseItem
components:
- type: Sprite
sprite: Objects/Misc/books.rsi
layers:
- state: paper_blood
- state: cover_strong
color: "#645a5a"
- state: decor_wingette_flat
color: "#4d0303"
- state: icon_pentagramm
color: "#f7e19f"
- type: UserInterface
interfaces:
enum.StoreUiKey.Key:
type: StoreBoundUserInterface
- type: ActivatableUI
key: enum.StoreUiKey.Key
- type: Store
refundAllowed: true
ownerOnly: true # get your own tome!
preset: StorePresetSpellbook
balance:
WizCoin: 10 # prices are balanced around this 10 point maximum and how strong the spells are
# Not meant for wizard antag but meant for spawning, so people can't abuse refund if they were given a tome
- type: entity
id: WizardsGrimoireNoRefund
name: wizards grimoire
suffix: Wizard, No Refund
parent: WizardsGrimoire
components:
- type: Store
refundAllowed: false
ownerOnly: true # get your own tome!
preset: StorePresetSpellbook
balance:
WizCoin: 10 # prices are balanced around this 10 point maximum and how strong the spells are
- type: entity
id: SpawnSpellbook
name: spawn spellbook
parent: BaseSpellbook
components:
- type: Spellbook
spells:
spellActions:
ActionSpawnMagicarpSpell: -1
- type: entity
@@ -48,7 +93,7 @@
- state: detail_rivets
color: gold
- type: Spellbook
spells:
spellActions:
ActionForceWall: -1
- type: entity
@@ -69,7 +114,7 @@
- state: detail_rivets
color: gold
- type: Spellbook
spells:
spellActions:
ActionBlink: -1
- type: entity
@@ -92,7 +137,7 @@
color: red
- state: overlay_blood
- type: Spellbook
spells:
spellActions:
ActionSmite: -1
- type: entity
@@ -114,7 +159,7 @@
- state: detail_bookmark
color: "#98c495"
- type: Spellbook
spells:
spellActions:
ActionKnock: -1
- type: entity
@@ -138,7 +183,7 @@
- state: icon_magic_fireball
shader: unshaded
- type: Spellbook
spells:
spellActions:
ActionFireball: -1
- type: entity
@@ -153,7 +198,7 @@
layers:
- state: spell_default
- type: Spellbook
spells:
spellActions:
ActionFlashRune: -1
ActionExplosionRune: -1
ActionIgniteRune: -1

View File

@@ -135,7 +135,7 @@
- type: RCDDeconstructable
cost: 6
delay: 8
fx: EffectRCDDeconstruct8
fx: EffectRCDDeconstruct8
- type: Destructible
thresholds:
- trigger:
@@ -262,7 +262,7 @@
- type: RCDDeconstructable
cost: 6
delay: 8
fx: EffectRCDDeconstruct8
fx: EffectRCDDeconstruct8
- type: Destructible
thresholds:
- trigger:
@@ -298,7 +298,7 @@
- type: RCDDeconstructable
cost: 6
delay: 8
fx: EffectRCDDeconstruct8
fx: EffectRCDDeconstruct8
- type: Destructible
thresholds:
- trigger:
@@ -419,7 +419,7 @@
- type: RCDDeconstructable
cost: 6
delay: 8
fx: EffectRCDDeconstruct8
fx: EffectRCDDeconstruct8
- type: Destructible
thresholds:
- trigger:
@@ -657,7 +657,7 @@
- type: RCDDeconstructable
cost: 6
delay: 8
fx: EffectRCDDeconstruct8
fx: EffectRCDDeconstruct8
- type: Destructible
thresholds:
- trigger:
@@ -693,7 +693,7 @@
- type: RCDDeconstructable
cost: 6
delay: 8
fx: EffectRCDDeconstruct8
fx: EffectRCDDeconstruct8
- type: Destructible
thresholds:
- trigger:
@@ -870,7 +870,7 @@
- type: RCDDeconstructable
cost: 6
delay: 8
fx: EffectRCDDeconstruct8
fx: EffectRCDDeconstruct8
- type: Destructible
thresholds:
- trigger:
@@ -1210,7 +1210,7 @@
name: force wall
components:
- type: TimedDespawn
lifetime: 20
lifetime: 12
- type: Tag
tags:
- Wall
@@ -1250,7 +1250,7 @@
- type: RCDDeconstructable
cost: 6
delay: 8
fx: EffectRCDDeconstruct8
fx: EffectRCDDeconstruct8
- type: Destructible
thresholds:
- trigger:

View File

@@ -0,0 +1,13 @@
- type: entity
id: ActionSummonGhosts
name: Summon Ghosts
description: Makes all current ghosts permanently invisible
noSpawn: true
components:
- type: InstantAction
useDelay: 120
itemIconStyle: BigAction
icon:
sprite: Mobs/Ghosts/ghost_human.rsi
state: icon
event: !type:ToggleGhostVisibilityToAllEvent

View File

@@ -7,6 +7,8 @@
- type: InstantAction
useDelay: 10
itemIconStyle: BigAction
sound: !type:SoundPathSpecifier
path: /Audio/Magic/knock.ogg
icon:
sprite: Objects/Magic/magicactions.rsi
state: knock

View File

@@ -4,10 +4,12 @@
description: Fires an explosive fireball towards the clicked location.
noSpawn: true
components:
- type: Magic
- type: WorldTargetAction
useDelay: 15
itemIconStyle: BigAction
checkCanAccess: false
raiseOnUser: true
range: 60
sound: !type:SoundPathSpecifier
path: /Audio/Magic/fireball.ogg
@@ -16,25 +18,25 @@
state: fireball
event: !type:ProjectileSpellEvent
prototype: ProjectileFireball
posData: !type:TargetCasterPos
speech: action-speech-spell-fireball
- type: ActionUpgrade
effectedLevels:
2: ActionFireballII
3: ActionFireballIII
- type: entity
id: ActionFireballII
parent: ActionFireball
name: Fireball II
description: Fire three explosive fireball towards the clicked location.
description: Fires a fireball, but faster!
noSpawn: true
components:
- type: WorldTargetAction
useDelay: 5
charges: 3
useDelay: 10
renewCharges: true
itemIconStyle: BigAction
checkCanAccess: false
raiseOnUser: true
range: 60
sound: !type:SoundPathSpecifier
path: /Audio/Magic/fireball.ogg
@@ -43,5 +45,27 @@
state: fireball
event: !type:ProjectileSpellEvent
prototype: ProjectileFireball
posData: !type:TargetCasterPos
speech: action-speech-spell-fireball
- type: entity
id: ActionFireballIII
parent: ActionFireball
name: Fireball III
description: The fastest fireball in the west!
noSpawn: true
components:
- type: WorldTargetAction
useDelay: 8
renewCharges: true
itemIconStyle: BigAction
checkCanAccess: false
raiseOnUser: true
range: 60
sound: !type:SoundPathSpecifier
path: /Audio/Magic/fireball.ogg
icon:
sprite: Objects/Magic/magicactions.rsi
state: fireball
event: !type:ProjectileSpellEvent
prototype: ProjectileFireball
speech: action-speech-spell-fireball

View File

@@ -8,9 +8,11 @@
useDelay: 10
range: 16 # default examine-range.
# ^ should probably add better validation that the clicked location is on the users screen somewhere,
sound: !type:SoundPathSpecifier
path: /Audio/Magic/blink.ogg
itemIconStyle: BigAction
checkCanAccess: false
repeat: true
repeat: false
icon:
sprite: Objects/Magic/magicactions.rsi
state: blink

View File

@@ -0,0 +1,15 @@
- type: entity
id: ActionChargeSpell
name: Charge
description: Adds a charge back to your wand
noSpawn: true
components:
- type: InstantAction
useDelay: 30
itemIconStyle: BigAction
icon:
sprite: Objects/Weapons/Guns/Basic/wands.rsi
state: nothing
event: !type:ChargeSpellEvent
charge: 1
speech: DI'RI CEL!

View File

@@ -175,3 +175,25 @@
revertOnDeath: true
revertOnCrit: true
duration: 20
# Polymorphs for Wizards polymorph self spell
- type: polymorph
id: WizardSpider
configuration:
entity: MobGiantSpiderWizard #Not angry so ghosts can't just take over the wizard
transferName: true
inventory: None
revertOnDeath: true
revertOnCrit: true
- type: polymorph
id: WizardRod
configuration:
entity: ImmovableRodWizard #CLANG
transferName: true
transferDamage: false
inventory: None
duration: 1
forced: true
revertOnCrit: false
revertOnDeath: false

View File

@@ -7,6 +7,32 @@
id: Debug2
name: store-category-debug2
#WIZARD
- type: storeCategory
id: SpellbookOffensive
name: store-caregory-spellbook-offensive
priority: 0
- type: storeCategory
id: SpellbookDefensive
name: store-caregory-spellbook-defensive
priority: 1
- type: storeCategory
id: SpellbookUtility
name: store-caregory-spellbook-utility
priority: 2
- type: storeCategory
id: SpellbookEquipment
name: store-caregory-spellbook-equipment
priority: 3
- type: storeCategory
id: SpellbookEvents
name: store-caregory-spellbook-events
priority: 4
#uplink categoires
- type: storeCategory
id: UplinkWeaponry

View File

@@ -1,7 +1,7 @@
- type: currency
id: Telecrystal
displayName: store-currency-display-telecrystal
cash:
cash:
1: Telecrystal1
canWithdraw: true
@@ -10,7 +10,12 @@
displayName: store-currency-display-stolen-essence
canWithdraw: false
- type: currency
id: WizCoin
displayName: store-currency-display-wizcoin
canWithdraw: false
#debug
- type: currency
id: DebugDollar
displayName: store-currency-display-debugdollar
displayName: store-currency-display-debugdollar

View File

@@ -15,3 +15,15 @@
- UplinkPointless
currencyWhitelist:
- Telecrystal
- type: storePreset
id: StorePresetSpellbook
storeName: Spellbook
categories:
- SpellbookOffensive #Fireball, Rod Form
- SpellbookDefensive #Magic Missile, Wall of Force
- SpellbookUtility #Body Swap, Lich, Teleport, Knock, Polymorph
- SpellbookEquipment #Battlemage Robes, Staff of Locker
- SpellbookEvents #Summon Weapons, Summon Ghosts
currencyWhitelist:
- WizCoin