* - add: Some tweaks and localization.

* - add: Teleport spell.

* - tweak: Tweak wizard hardsuit.

* - add: Turn off shield on cast.

* - add: New wizard clothes & update wizard shuttle,

* - remove: Remove old clothes from shuttle.

* - fix: No teleporting to centcomm.
This commit is contained in:
Aviu00
2024-06-09 16:26:27 +00:00
committed by GitHub
parent daa881b51b
commit 0c34a1fd9b
42 changed files with 1042 additions and 629 deletions

View File

@@ -0,0 +1,39 @@
using System.Linq;
using Content.Client._White.Cult.UI.TeleportRunesList;
using Content.Client.Eui;
using Content.Shared._White.Wizard.Teleport;
using Content.Shared.Eui;
using JetBrains.Annotations;
namespace Content.Client._White.Wizard.TeleportSpell;
[UsedImplicitly]
public sealed class TeleportSpellEui : BaseEui
{
private readonly TeleportRunesListWindow _window = new();
public override void Opened()
{
_window.OpenCentered();
_window.ItemSelected +=
(index, _) => SendMessage(new TeleportSpellTargetLocationSelected {LocationUid = index});
_window.OnClose += () => SendMessage(new CloseEuiMessage());
base.Opened();
}
public override void Closed()
{
base.Closed();
_window.Close();
}
public override void HandleState(EuiStateBase state)
{
if (state is not TeleportSpellEuiState cast)
return;
_window.Clear();
_window.PopulateList(cast.Locations.Keys.ToList(), cast.Locations.Values.ToList());
}
}

View File

@@ -3,10 +3,12 @@ using Content.Server.DeviceLinking.Systems;
using Content.Server.Power.Components;
using Content.Server.Power.EntitySystems;
using Content.Server.PowerCell;
using Content.Shared._White.Events;
using Content.Shared.Actions;
using Content.Shared.Damage;
using Content.Shared.Examine;
using Content.Shared.Interaction;
using Content.Shared.Inventory;
using Content.Shared.Popups;
using Content.Shared.PowerCell;
using Content.Shared.PowerCell.Components;
@@ -53,10 +55,19 @@ public sealed partial class EnergyDomeSystem : EntitySystem
SubscribeLocalEvent<EnergyDomeGeneratorComponent, ComponentRemove>(OnComponentRemove);
SubscribeLocalEvent<EnergyDomeGeneratorComponent, InventoryRelayedEvent<EnergyDomeClothesTurnOffEvent>>(
OnClothesTurnOff);
//Dome events
SubscribeLocalEvent<EnergyDomeComponent, DamageChangedEvent>(OnDomeDamaged);
}
private void OnClothesTurnOff(Entity<EnergyDomeGeneratorComponent> ent,
ref InventoryRelayedEvent<EnergyDomeClothesTurnOffEvent> args)
{
TurnOff(ent, false);
}
private void OnInit(Entity<EnergyDomeGeneratorComponent> generator, ref MapInitEvent args)
{
if (generator.Comp.CanDeviceNetworkUse)
@@ -179,12 +190,11 @@ public sealed partial class EnergyDomeSystem : EntitySystem
if (HasComp<PowerCellDrawComponent>(generatorUid))
{
_powerCell.TryGetBatteryFromSlot(generatorUid, out var cell);
if (cell != null)
if (_powerCell.TryGetBatteryFromSlot(generatorUid, out var cell, out var batteryComp))
{
_battery.UseCharge(generatorUid, energyLeak);
_battery.UseCharge(cell.Value, energyLeak, batteryComp);
if (cell.CurrentCharge == 0)
if (batteryComp.CurrentCharge == 0)
TurnOff((generatorUid, generatorComp), true);
}
}
@@ -298,7 +308,7 @@ public sealed partial class EnergyDomeSystem : EntitySystem
return;
generator.Comp.Enabled = false;
QueueDel(generator.Comp.SpawnedDome);
Del(generator.Comp.SpawnedDome);
_powerCell.SetPowerCellDrawEnabled(generator, false);
if (TryComp<BatterySelfRechargerComponent>(generator, out var recharger))
@@ -325,4 +335,4 @@ public sealed partial class EnergyDomeSystem : EntitySystem
? container.Owner
: entity;
}
}
}

View File

@@ -3,17 +3,21 @@ using System.Numerics;
using Content.Server._White.IncorporealSystem;
using Content.Server._White.Wizard.Magic.Amaterasu;
using Content.Server._White.Wizard.Magic.Other;
using Content.Server._White.Wizard.Teleport;
using Content.Server.Abilities.Mime;
using Content.Server.Administration.Commands;
using Content.Server.Atmos.Components;
using Content.Server.Atmos.EntitySystems;
using Content.Server.Chat.Systems;
using Content.Server.Emp;
using Content.Server.EUI;
using Content.Server.Lightning;
using Content.Server.Magic;
using Content.Server.Singularity.EntitySystems;
using Content.Server.Standing;
using Content.Server.Weapons.Ranged.Systems;
using Content.Shared._White.BetrayalDagger;
using Content.Shared._White.Events;
using Content.Shared._White.Wizard;
using Content.Shared._White.Wizard.Magic;
using Content.Shared.Actions;
@@ -36,6 +40,7 @@ using Content.Shared.Throwing;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Map;
using Robust.Shared.Physics.Components;
using Robust.Shared.Player;
using Robust.Shared.Random;
namespace Content.Server._White.Wizard.Magic;
@@ -64,6 +69,8 @@ public sealed class WizardSpellsSystem : EntitySystem
[Dependency] private readonly EmpSystem _empSystem = default!;
[Dependency] private readonly SharedActionsSystem _actions = default!;
[Dependency] private readonly StandingStateSystem _standing = default!;
[Dependency] private readonly TelefragSystem _telefrag = default!;
[Dependency] private readonly EuiManager _euiManager = default!;
#endregion
@@ -71,6 +78,7 @@ public sealed class WizardSpellsSystem : EntitySystem
{
base.Initialize();
SubscribeLocalEvent<TeleportSpellEvent>(OnTeleportSpell);
SubscribeLocalEvent<InstantRecallSpellEvent>(OnInstantRecallSpell);
SubscribeLocalEvent<MimeTouchSpellEvent>(OnMimeTouchSpell);
SubscribeLocalEvent<BananaTouchSpellEvent>(OnBananaTouchSpell);
@@ -87,6 +95,26 @@ public sealed class WizardSpellsSystem : EntitySystem
SubscribeLocalEvent<MagicComponent, BeforeCastSpellEvent>(OnBeforeCastSpell);
}
#region Teleport
private void OnTeleportSpell(TeleportSpellEvent msg)
{
if (!CanCast(msg))
return;
if (!TryComp(msg.Performer, out ActorComponent? actor))
return;
var eui = new TeleportSpellEui(msg.Performer);
_euiManager.OpenEui(eui, actor.PlayerSession);
eui.StateDirty();
msg.Handled = true;
Speak(msg);
}
#endregion
#region Instant Recall
private void OnInstantRecallSpell(InstantRecallSpellEvent msg)
@@ -289,6 +317,7 @@ public sealed class WizardSpellsSystem : EntitySystem
if (!foundTeleportPos)
return;
_telefrag.Telefrag(coords, msg.Performer);
_transformSystem.SetCoordinates(msg.Performer, coords);
_transformSystem.AttachToGridOrMap(msg.Performer);
@@ -404,6 +433,8 @@ public sealed class WizardSpellsSystem : EntitySystem
private void CardsSpellDefault(CardsSpellEvent msg)
{
TurnOffShield(msg.Performer);
var xform = Transform(msg.Performer);
for (var i = 0; i < 10; i++)
@@ -428,6 +459,8 @@ public sealed class WizardSpellsSystem : EntitySystem
private void CardsSpellCharge(CardsSpellEvent msg)
{
TurnOffShield(msg.Performer);
var xform = Transform(msg.Performer);
var count = 10 + 10 * msg.ChargeLevel;
@@ -466,6 +499,7 @@ public sealed class WizardSpellsSystem : EntitySystem
Del(msg.TargetUid);
var item = Spawn(msg.Prototype);
_handsSystem.TryPickupAnyHand(msg.Performer, item);
TurnOffShield(msg.Performer);
return true;
}
@@ -504,6 +538,8 @@ public sealed class WizardSpellsSystem : EntitySystem
private void FireballSpellDefault(FireballSpellEvent msg)
{
TurnOffShield(msg.Performer);
var xform = Transform(msg.Performer);
foreach (var pos in _magicSystem.GetSpawnPositions(xform, msg.Pos))
@@ -662,12 +698,14 @@ public sealed class WizardSpellsSystem : EntitySystem
private void ArcSpellCharge(ArcSpellEvent msg)
{
_lightning.ShootRandomLightnings(msg.Performer, 2f * msg.ChargeLevel, msg.ChargeLevel * 2, "WizardLightning", 1,
_lightning.ShootRandomLightnings(msg.Performer, 1.5f * msg.ChargeLevel, msg.ChargeLevel * 2, "WizardLightning", 2,
caster: msg.Performer);
}
private void ArcSpellAlt(ArcSpellEvent msg)
{
TurnOffShield(msg.Performer);
var xform = Transform(msg.Performer);
foreach (var pos in _magicSystem.GetSpawnPositions(xform, msg.Pos))
@@ -693,6 +731,11 @@ public sealed class WizardSpellsSystem : EntitySystem
#region Helpers
private void TurnOffShield(EntityUid uid)
{
RaiseLocalEvent(uid, new EnergyDomeClothesTurnOffEvent());
}
private bool CanCast(BaseActionEvent msg)
{
return !msg.Handled && CheckRequirements(msg.Action, msg.Performer) &&

View File

@@ -0,0 +1,6 @@
namespace Content.Server._White.Wizard.Teleport;
[RegisterComponent]
public sealed partial class SpawnTeleportLocationComponent : Component
{
}

View File

@@ -0,0 +1,8 @@
namespace Content.Server._White.Wizard.Teleport;
[RegisterComponent]
public sealed partial class TeleportLocationComponent : Component
{
[ViewVariables(VVAccess.ReadWrite)]
public string Location = string.Empty;
}

View File

@@ -0,0 +1,29 @@
using Content.Server.Pinpointer;
using Content.Server.Warps;
namespace Content.Server._White.Wizard.Teleport;
public sealed class TeleportLocationSystem : EntitySystem
{
[Dependency] private readonly SharedTransformSystem _transformSystem = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<SpawnTeleportLocationComponent, MapInitEvent>(OnMapInit,
after: new[] {typeof(NavMapSystem)});
}
private void OnMapInit(Entity<SpawnTeleportLocationComponent> ent, ref MapInitEvent args)
{
if (!TryComp(ent, out WarpPointComponent? warpPoint) || warpPoint.Location == null)
return;
var newEnt = Spawn(null, Transform(ent).Coordinates);
var xForm = EnsureComp<TransformComponent>(newEnt);
_transformSystem.AttachToGridOrMap(newEnt, xForm);
var location = EnsureComp<TeleportLocationComponent>(newEnt);
location.Location = warpPoint.Location;
}
}

View File

@@ -0,0 +1,102 @@
using System.Linq;
using Content.Server.EUI;
using Content.Server.Popups;
using Content.Server.Station.Systems;
using Content.Shared._White.Wizard.Teleport;
using Content.Shared.Eui;
using Robust.Shared.Timing;
using TeleportSpellEuiState = Content.Shared._White.Wizard.Teleport.TeleportSpellEuiState;
namespace Content.Server._White.Wizard.Teleport;
public sealed class TeleportSpellEui : BaseEui
{
[Dependency] private readonly EntityManager _entityManager = default!;
private readonly SharedTransformSystem _transformSystem;
private readonly StationSystem _station;
private readonly PopupSystem _popupSystem;
private readonly EntityUid _performer;
private bool _used;
public TeleportSpellEui(EntityUid performer)
{
IoCManager.InjectDependencies(this);
_transformSystem = _entityManager.System<SharedTransformSystem>();
_station = _entityManager.System<StationSystem>();
_popupSystem = _entityManager.System<PopupSystem>();
_performer = performer;
Timer.Spawn(TimeSpan.FromSeconds(10), Close);
}
public override EuiStateBase GetNewState()
{
var locationQuery = _entityManager.EntityQueryEnumerator<TeleportLocationComponent, TransformComponent>();
var state = new TeleportSpellEuiState();
while (locationQuery.MoveNext(out var locationUid, out var locationComponent, out var transformComponent))
{
var station = _station.GetOwningStation(locationUid, transformComponent);
if (_entityManager.EntityQuery<WizardRuleComponent>(true)
.Any(wizardRule => wizardRule.TargetStation == station))
{
state.Locations.Add((int) locationUid, locationComponent.Location);
}
}
return state;
}
public override void HandleMessage(EuiMessageBase msg)
{
base.HandleMessage(msg);
if (_used)
{
return;
}
if (msg is not TeleportSpellTargetLocationSelected cast)
{
return;
}
var transform = _entityManager.GetComponent<TransformComponent>(_performer);
var oldCoords = transform.Coordinates;
TransformComponent? locationTransform = null;
var teleportLocationQuery = _entityManager
.EntityQueryEnumerator<TeleportLocationComponent, TransformComponent>();
while (teleportLocationQuery.MoveNext(out var locationUid, out _, out var transformComponent))
{
if (locationUid == new EntityUid(cast.LocationUid))
{
locationTransform = transformComponent;
}
}
if (locationTransform is null)
{
_popupSystem.PopupEntity("Can't teleport", _performer, _performer);
DoStateUpdate();
return;
}
_used = true;
var coords = locationTransform.Coordinates;
_transformSystem.SetCoordinates(_performer, coords);
_transformSystem.AttachToGridOrMap(_performer, transform);
_entityManager.SpawnEntity("AdminInstantEffectSmoke10", oldCoords);
_entityManager.SpawnEntity("AdminInstantEffectSmoke10", coords);
Close();
}
}

View File

@@ -14,6 +14,7 @@ public sealed partial class WizardRuleComponent : Component
{
public readonly List<EntityUid> WizardMinds = new();
[ViewVariables(VVAccess.ReadWrite)]
public EntityUid? TargetStation;
[DataField("minPlayers")]

View File

@@ -1,3 +1,4 @@
using Content.Shared._White.Events;
using Content.Shared._White.StaminaProtection;
using Content.Shared.Changeling;
using Content.Shared.Chemistry;
@@ -32,6 +33,7 @@ public partial class InventorySystem
SubscribeLocalEvent<InventoryComponent, StaminaDamageModifyEvent>(RelayInventoryEvent); // WD
SubscribeLocalEvent<InventoryComponent, ChemRegenModifyEvent>(RelayInventoryEvent); // WD
SubscribeLocalEvent<InventoryComponent, ChangelingRefundEvent>(RelayInventoryEvent); // WD
SubscribeLocalEvent<InventoryComponent, EnergyDomeClothesTurnOffEvent>(RelayInventoryEvent); // WD
SubscribeLocalEvent<InventoryComponent, GetDefaultRadioChannelEvent>(RelayInventoryEvent);
// by-ref events

View File

@@ -0,0 +1,8 @@
using Content.Shared.Inventory;
namespace Content.Shared._White.Events;
public sealed class EnergyDomeClothesTurnOffEvent : EntityEventArgs, IInventoryRelayEvent
{
public SlotFlags TargetSlots => SlotFlags.OUTERCLOTHING;
}

View File

@@ -38,7 +38,8 @@ public abstract class SharedScrollSystem : EntitySystem
if (args.Handled)
return;
var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, component.LearnTime, new ScrollDoAfterEvent(), uid, target: uid)
var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, component.LearnTime, new ScrollDoAfterEvent(),
uid, target: uid)
{
BreakOnMove = true,
BreakOnDamage = true,
@@ -50,7 +51,9 @@ public abstract class SharedScrollSystem : EntitySystem
_audioSystem.PlayPvs(component.UseSound, args.User);
}
_popupSystem.PopupClient($"You start learning about {component.LearnPopup}.", args.User, args.User, PopupType.Medium);
_popupSystem.PopupClient(
Loc.GetString("scroll-component-start", ("subject", Loc.GetString(component.LearnPopup))), args.User,
args.User, PopupType.Medium);
_doAfterSystem.TryStartDoAfter(doAfterEventArgs);
@@ -69,7 +72,9 @@ public abstract class SharedScrollSystem : EntitySystem
_audioSystem.PlayEntity(component.AfterUseSound, args.User, args.User);
}
_popupSystem.PopupClient($"You learned much about {component.LearnPopup}. The scroll is slowly burning in your hands.", args.User, args.User, PopupType.Medium);
_popupSystem.PopupClient(
Loc.GetString("scroll-component-end", ("subject", Loc.GetString(component.LearnPopup))), args.User,
args.User, PopupType.Medium);
BurnScroll(uid);
@@ -80,7 +85,7 @@ public abstract class SharedScrollSystem : EntitySystem
#region Helpers
protected virtual void BurnScroll(EntityUid uid) {}
protected virtual void BurnScroll(EntityUid uid) { }
#endregion
}

View File

@@ -0,0 +1,16 @@
using Content.Shared.Eui;
using Robust.Shared.Serialization;
namespace Content.Shared._White.Wizard.Teleport;
[Serializable, NetSerializable]
public sealed class TeleportSpellEuiState : EuiStateBase
{
public Dictionary<int, string> Locations = new();
}
[Serializable, NetSerializable]
public sealed class TeleportSpellTargetLocationSelected : EuiMessageBase
{
public int LocationUid;
}

View File

@@ -172,4 +172,10 @@ public sealed partial class InstantRecallSpellEvent : InstantActionEvent, ISpeak
public string? Speech { get; private set; }
}
public sealed partial class TeleportSpellEvent : InstantActionEvent, ISpeakSpell
{
[DataField("speech")]
public string? Speech { get; private set; }
}
#endregion

View File

@@ -0,0 +1,48 @@
scroll-component-start = Вы начинаете изучать { $subject }.
scroll-component-end = Вы изучили { $subject }. Свиток медленно сгорает в ваших руках.
scroll-component-fireball = огненный шар
scroll-component-forcewall = силовую стену
scroll-component-knock = тук-тук
scroll-component-lightning = молнию
scroll-component-force = силу
scroll-component-cards = карты
scroll-component-blink = прыжок
scroll-component-jaunt = потустороннее путешествие
scroll-component-emp = ЭМИ
scroll-component-cluwne = проклятье
scroll-component-clown = бананы
scroll-component-silence = тишину
scroll-component-recall = призыв
scroll-component-teleport = телепортацию
ent-BaseScroll = магический свиток
.desc = Этот древний пергамент, ставший реликвией в арканных преданиях, хранит в себе бесчисленные мистические заклятия и забытые заклинания.
ent-ScrollFireball = свиток огненного шара
.desc = { ent-BaseScroll.desc }
ent-ScrollForcewall = свиток силовой стены
.desc = { ent-BaseScroll.desc }
ent-ScrollKnock = свиток стука
.desc = { ent-BaseScroll.desc }
ent-ScrollArc = свиток молнии
.desc = { ent-BaseScroll.desc }
ent-ScrollForce = свиток силы
.desc = { ent-BaseScroll.desc }
ent-ScrollCards = свиток карт
.desc = { ent-BaseScroll.desc }
ent-ScrollBlink = свиток прыжка
.desc = { ent-BaseScroll.desc }
ent-ScrollEtherealJaunt = свиток потустороннего путешествия
.desc = { ent-BaseScroll.desc }
ent-ScrollEmp = свиток ЭМИ
.desc = { ent-BaseScroll.desc }
ent-ScrollCluwneCurse = свиток проклятия клувна
.desc = { ent-BaseScroll.desc }
ent-ScrollBananaTouch = свиток бананового касания
.desc = { ent-BaseScroll.desc }
ent-ScrollMimeTouch = свиток касания мима
.desc = { ent-BaseScroll.desc }
ent-ScrollInstantRecall = свиток мгновенного призыва
.desc = { ent-BaseScroll.desc }
ent-ScrollTeleport = свиток телепортации
.desc = { ent-BaseScroll.desc }

View File

@@ -11,9 +11,12 @@ roles-antag-wizard-objective = Устройте хаос на станции
wizard-round-end-agent-name = космический волшебник
wizard-welcome = Вы - космический волшебник. Федерация Космических Волшебников отправила вас на станцию {$station}, дабы посеять хаос. Не разочаруйте их.
wizard-welcome = Вы - космический волшебник. Федерация Космических Волшебников отправила вас на станцию {$station}, дабы посеять хаос. Вы можете попасть на станцию с помощью гиперпрыжка или с помощью магии телепортации.
wizard-no-more-threat-announcement-shuttle-call = Судя по данным наших датчиков дальнего действия, магическая угроза была устранена. Эвакуационный шаттл скоро прибудет. Время прибытия: {$time} {$units}. Вы можете отозвать его, чтобы продлить смену.
wizard-no-more-threat-announcement = Судя по данным наших датчиков дальнего действия, магическая угроза была устранена. Шаттл уже вызван.
magic-component-missing-req = Недостающие требования! Вам необходимо надеть мантию и шляпу!
ent-WizardSurviveObjective = Переживете смену, устроив как можно больше хаоса.
.desc = Федерация Космических Волшебников отправила вас на станцию Nanotrasen, чтобы навести там смуту. Не разочаруйте их.

File diff suppressed because it is too large Load Diff

View File

@@ -671,10 +671,10 @@
coefficients:
Blunt: 0.6
Slash: 0.6
Piercing: 0.4
Heat: 0.25
Piercing: 0.6
Heat: 0.6
Radiation: 0.25
Caustic: 0.75
Caustic: 0.25
- type: ToggleableClothing
clothingPrototype: ClothingHeadHelmetHardsuitWizard
- type: ContainerContainer
@@ -693,11 +693,11 @@
- PowerCell
- PowerCellSmall
- type: EnergyDomeGenerator
damageEnergyDraw: 3
damageEnergyDraw: 5
domePrototype: EnergyDomeSmallPink
- type: ClothingSpeedModifier
walkModifier: 1
sprintModifier: 1
walkModifier: 0.9
sprintModifier: 0.9
- type: PowerCellDraw
drawRate: 8
useRate: 0

View File

@@ -4,6 +4,7 @@
name: warp point
components:
- type: WarpPoint
- type: SpawnTeleportLocation
- type: Sprite
state: pink

View File

@@ -25,6 +25,8 @@
defaultText: station-beacon-general
color: "#D4D4D496"
- type: WarpPoint
- type: SpawnTeleportLocation
- type: GiftIgnore
- type: ActivatableUI
key: enum.NavMapBeaconUiKey.Key
singleUser: true

View File

@@ -31,7 +31,7 @@
- type: VariableUseDelay
useDelay: 6
altUseDelay: 12
chargeUseDelay: 40
chargeUseDelay: 30
- type: entity
id: ActionForceSpell
@@ -62,7 +62,7 @@
- type: VariableUseDelay
useDelay: 6
altUseDelay: 2
chargeUseDelay: 20
chargeUseDelay: 30
- type: entity
id: ActionFireballSpell
@@ -93,7 +93,7 @@
- type: VariableUseDelay
useDelay: 5
altUseDelay: 10
chargeUseDelay: 40
chargeUseDelay: 30
- type: entity
id: ActionCardSpell
@@ -126,7 +126,7 @@
- type: VariableUseDelay
useDelay: 4
altUseDelay: 1
chargeUseDelay: 40
chargeUseDelay: 30
- type: entity
id: ActionForcewallSpell
@@ -160,7 +160,7 @@
- type: VariableUseDelay
useDelay: 10
altUseDelay: 20
chargeUseDelay: 60
chargeUseDelay: 50
- type: entity
id: ActionBlinkSpell
@@ -272,3 +272,20 @@
sprite: Objects/Magic/magicactions.rsi
state: summons
event: !type:InstantRecallSpellEvent
- type: entity
id: ActionTeleportSpell
name: Teleport
noSpawn: true
components:
- type: Magic
requiresClothes: true
- type: InstantAction
checkCanInteract: false
useDelay: 60
itemIconStyle: BigAction
icon:
sprite: Objects/Magic/magicactions.rsi
state: teleport
event: !type:TeleportSpellEvent
speech: "SCYAR FIDE!"

View File

@@ -33,3 +33,33 @@
id: ClothingOuterRealWizardViolet
components:
- type: WizardClothes
- type: entity
parent: ClothingHeadHatWizard
id: ClothingHeadHatRealWizardFancy
components:
- type: WizardClothes
- type: Sprite
sprite: White/Clothing/Head/wizhat.rsi
- type: Clothing
sprite: White/Clothing/Head/wizhat.rsi
- type: entity
parent: ClothingHeadHatWizard
id: ClothingHeadHatRealWizardFancyAlt
components:
- type: WizardClothes
- type: Sprite
sprite: White/Clothing/Head/wizhat-alt.rsi
- type: Clothing
sprite: White/Clothing/Head/wizhat-alt.rsi
- type: entity
parent: ClothingOuterWizard
id: ClothingOuterRealWizardFancy
components:
- type: WizardClothes
- type: Sprite
sprite: White/Clothing/OuterClothing/robe.rsi
- type: Clothing
sprite: White/Clothing/OuterClothing/robe.rsi

View File

@@ -24,7 +24,7 @@
components:
- type: Scroll
actionId: ActionFireballSpell
learnPopup: fireball
learnPopup: scroll-component-fireball
- type: entity
id: ScrollForcewall
@@ -33,7 +33,7 @@
components:
- type: Scroll
actionId: ActionForcewallSpell
learnPopup: forcewall
learnPopup: scroll-component-forcewall
- type: entity
id: ScrollKnock
@@ -42,7 +42,7 @@
components:
- type: Scroll
actionId: ActionKnock
learnPopup: knock-knock
learnPopup: scroll-component-knock
- type: entity
id: ScrollArc
@@ -51,7 +51,7 @@
components:
- type: Scroll
actionId: ActionElectricArcSpell
learnPopup: lightning
learnPopup: scroll-component-lightning
- type: entity
id: ScrollForce
@@ -60,7 +60,7 @@
components:
- type: Scroll
actionId: ActionForceSpell
learnPopup: force
learnPopup: scroll-component-force
- type: entity
id: ScrollCards
@@ -69,7 +69,7 @@
components:
- type: Scroll
actionId: ActionCardSpell
learnPopup: cards
learnPopup: scroll-component-cards
- type: entity
id: ScrollBlink
@@ -78,7 +78,7 @@
components:
- type: Scroll
actionId: ActionBlinkSpell
learnPopup: blink
learnPopup: scroll-component-blink
- type: entity
id: ScrollEtherealJaunt
@@ -87,7 +87,7 @@
components:
- type: Scroll
actionId: ActionEtherealJauntSpell
learnPopup: jaunt
learnPopup: scroll-component-jaunt
- type: entity
id: ScrollEmp
@@ -96,7 +96,7 @@
components:
- type: Scroll
actionId: ActionEmpSpell
learnPopup: emp
learnPopup: scroll-component-emp
- type: entity
id: ScrollCluwneCurse
@@ -105,7 +105,7 @@
components:
- type: Scroll
actionId: ActionCluwneCurseSpell
learnPopup: curse
learnPopup: scroll-component-cluwne
- type: entity
id: ScrollBananaTouch
@@ -114,7 +114,7 @@
components:
- type: Scroll
actionId: ActionBananaTouchSpell
learnPopup: banana
learnPopup: scroll-component-clown
- type: entity
id: ScrollMimeTouch
@@ -123,7 +123,7 @@
components:
- type: Scroll
actionId: ActionMimeTouchSpell
learnPopup: silence
learnPopup: scroll-component-silence
- type: entity
id: ScrollInstantRecall
@@ -132,4 +132,13 @@
components:
- type: Scroll
actionId: ActionInstantRecallSpell
learnPopup: recall
learnPopup: scroll-component-recall
- type: entity
id: ScrollTeleport
parent: BaseScroll
name: "Teleport scroll"
components:
- type: Scroll
actionId: ActionTeleportSpell
learnPopup: scroll-component-teleport

View File

@@ -39,8 +39,8 @@
equipment:
jumpsuit: ClothingUniformJumpsuitColorDarkBlue
back: ClothingBackpackFilled
head: ClothingHeadHatRealWizardBlue
outerClothing: ClothingOuterRealWizardBlue
head: ClothingHeadHatRealWizardFancy
outerClothing: ClothingOuterRealWizardFancy
shoes: ClothingShoesWizard
innerClothingSkirt: ClothingUniformJumpskirtColorDarkBlue
satchel: ClothingBackpackSatchelFilled

View File

@@ -51,6 +51,9 @@
},
{
"name": "summons"
},
{
"name": "teleport"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 775 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 533 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 809 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 846 B

View File

@@ -0,0 +1,27 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "White Dream",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-HELMET",
"directions": 4
},
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 881 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 506 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 643 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 795 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 792 B

View File

@@ -0,0 +1,27 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "White Dream",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-HELMET",
"directions": 4
},
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 880 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,31 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "White Dream",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-OUTERCLOTHING",
"directions": 4
},
{
"name": "equipped-OUTERCLOTHING-body-slim",
"directions": 4
},
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
}
]
}