Merge branch 'master' into ed-15-11-2024-magic-signs

This commit is contained in:
Ed
2024-11-18 14:58:16 +03:00
committed by GitHub
299 changed files with 646 additions and 461 deletions

View File

@@ -170,7 +170,7 @@ namespace Content.Client.Construction.UI
if (recipe.Hide)
continue;
if (!recipe.CrystallPunkAllowed) //CrystallPunk clearing recipes
if (!recipe.CrystallPunkAllowed) //CrystallEdge clearing recipes
continue;
if (_playerManager.LocalSession == null

View File

@@ -168,8 +168,8 @@ public sealed partial class GuidebookWindow : FancyWindow, ILinkClickHandler
var parent = forcedRoot == null ? null : AddEntry(forcedRoot.Value, null, addedEntries);
foreach (var entry in GetSortedEntries(roots))
{
if (!entry.CrystallPunkAllowed) continue; //CrystallPunk guidebook filter
if (entry.LocFilter is not null && entry.LocFilter != ContentLocalizationManager.Culture) continue; //CrystallPunk guidebook filter
if (!entry.CrystallPunkAllowed) continue; //CrystallEdge guidebook filter
if (entry.LocFilter is not null && entry.LocFilter != ContentLocalizationManager.Culture) continue; //CrystallEdge guidebook filter
AddEntry(entry.Id, parent, addedEntries);
}

View File

@@ -32,7 +32,7 @@ public sealed class GuidebookSystem : EntitySystem
[Dependency] private readonly RgbLightControllerSystem _rgbLightControllerSystem = default!;
[Dependency] private readonly SharedPointLightSystem _pointLightSystem = default!;
[Dependency] private readonly TagSystem _tags = default!;
[Dependency] private readonly IPrototypeManager _proto = default!; //CrystallPunk guidebook filter
[Dependency] private readonly IPrototypeManager _proto = default!; //CrystallEdge guidebook filter
public event Action<List<ProtoId<GuideEntryPrototype>>,
List<ProtoId<GuideEntryPrototype>>?,
@@ -47,7 +47,7 @@ public sealed class GuidebookSystem : EntitySystem
/// <inheritdoc/>
public override void Initialize()
{
SubscribeLocalEvent<GuideHelpComponent, MapInitEvent>(OnCrystallPunkMapInit); //CrystallPunk guidebook filter
SubscribeLocalEvent<GuideHelpComponent, MapInitEvent>(OnCrystallEdgeMapInit); //CrystallEdge guidebook filter
SubscribeLocalEvent<GuideHelpComponent, GetVerbsEvent<ExamineVerb>>(OnGetVerbs);
SubscribeLocalEvent<GuideHelpComponent, ActivateInWorldEvent>(OnInteract);
@@ -57,12 +57,12 @@ public sealed class GuidebookSystem : EntitySystem
OnGuidebookControlsTestGetAlternateVerbs);
}
//CrystallPunk guidebook filter
private void OnCrystallPunkMapInit(Entity<GuideHelpComponent> ent, ref MapInitEvent args)
//CrystallEdge guidebook filter
private void OnCrystallEdgeMapInit(Entity<GuideHelpComponent> ent, ref MapInitEvent args)
{
foreach (var guide in ent.Comp.Guides)
{
var guideProto = _proto.Index<GuideEntryPrototype>(guide);
var guideProto = _proto.Index(guide);
if (!guideProto.CrystallPunkAllowed) //REMOVE unnecessary guidebook
{
RemComp<GuideHelpComponent>(ent);
@@ -70,7 +70,7 @@ public sealed class GuidebookSystem : EntitySystem
}
}
}
//CrystallPunk guidebook filter end
//CrystallEdge guidebook filter end
/// <summary>
/// Gets a user entity to use for verbs and examinations. If the player has no attached entity, this will use a

View File

@@ -20,7 +20,7 @@ public enum WeaponArcAnimation : byte
None,
Thrust,
Slash,
//CrystallPunk Melee upgrade
//CrystallEdge Melee upgrade
CPSlash,
CPThrust
}

View File

@@ -43,8 +43,8 @@ public sealed partial class MeleeWeaponSystem
return;
}
var length = 1f; //CrystallPunk Melee upgrade
var offset = -1f; //CrystallPunk Melee upgrade
var length = 1f; //CrystallEdgeMelee upgrade
var offset = -1f; //CrystallEdge Melee upgrade
var spriteRotation = Angle.Zero;
if (arcComponent.Animation != WeaponArcAnimation.None
@@ -59,8 +59,8 @@ public sealed partial class MeleeWeaponSystem
if (meleeWeaponComponent.SwingLeft)
angle *= -1;
length = meleeWeaponComponent.CPAnimationLength; //CrystallPunk Melee upgrade
offset = meleeWeaponComponent.CPAnimationOffset; //CrystallPunk Melee upgrade
length = meleeWeaponComponent.CPAnimationLength; //CrystallEdge Melee upgrade
offset = meleeWeaponComponent.CPAnimationOffset; //CrystallEdge Melee upgrade
}
sprite.Rotation = localPos.ToWorldAngle();
var distance = Math.Clamp(localPos.Length() / 2f, 0.2f, 1f);
@@ -92,7 +92,7 @@ public sealed partial class MeleeWeaponSystem
if (arcComponent.Fadeout)
_animation.Play(animationUid, GetFadeAnimation(sprite, 0f, 0.15f), FadeAnimationKey);
break;
//CrystallPunk MeleeUpgrade
//CrystallEdge MeleeUpgrade
case WeaponArcAnimation.CPSlash:
track = EnsureComp<TrackUserComponent>(animationUid);
track.User = user;
@@ -107,7 +107,7 @@ public sealed partial class MeleeWeaponSystem
if (arcComponent.Fadeout)
_animation.Play(animationUid, GetFadeAnimation(sprite, 0f, 0.15f), FadeAnimationKey);
break;
//CrystallPunk MeleeUpgrade end
//CrystallEdge MeleeUpgrade end
}
}
@@ -207,7 +207,7 @@ public sealed partial class MeleeWeaponSystem
/// </summary>
private Animation GetLungeAnimation(Vector2 direction)
{
const float length = 0.2f; // 0.1 original, CrystallPunk update
const float length = 0.2f; // 0.1 original, CrystallEdge update
return new Animation
{
@@ -221,9 +221,9 @@ public sealed partial class MeleeWeaponSystem
InterpolationMode = AnimationInterpolationMode.Linear,
KeyFrames =
{
new AnimationTrackProperty.KeyFrame(Vector2.Zero, 0f), //CrystallPunk MeleeUpgrade
new AnimationTrackProperty.KeyFrame(direction.Normalized() * 0.15f, length*0.4f), //CrystallPunk MeleeUpgrade
new AnimationTrackProperty.KeyFrame(Vector2.Zero, length*0.6f) //CrystallPunk MeleeUpgrade
new AnimationTrackProperty.KeyFrame(Vector2.Zero, 0f), //CrystallEdge MeleeUpgrade
new AnimationTrackProperty.KeyFrame(direction.Normalized() * 0.15f, length*0.4f), //CrystallEdge MeleeUpgrade
new AnimationTrackProperty.KeyFrame(Vector2.Zero, length*0.6f) //CrystallEdge MeleeUpgrade
}
}
}
@@ -253,7 +253,7 @@ public sealed partial class MeleeWeaponSystem
}
}
//CrystallPunk MeleeUpgrade start
//CrystallEdge MeleeUpgrade start
private Animation CPGetSlashAnimation(SpriteComponent sprite, Angle arc, Angle spriteRotation, float length, float offset = -1f)
{
var startRotation = sprite.Rotation + (arc * 0.5f);
@@ -324,6 +324,6 @@ public sealed partial class MeleeWeaponSystem
};
}
//CrystallPunk MeleeUpgrade end
//CrystallEdge MeleeUpgrade end
}

View File

@@ -12,6 +12,7 @@ namespace Content.IntegrationTests.Tests.Access
[TestOf(typeof(AccessReaderComponent))]
public sealed class AccessReaderTest
{
/*
[Test]
public async Task TestProtoTags()
{
@@ -123,6 +124,6 @@ namespace Content.IntegrationTests.Tests.Access
});
await pair.CleanReturnAsync();
}
*/
}
}

View File

@@ -6,7 +6,7 @@ namespace Content.IntegrationTests.Tests.Atmos
[TestFixture]
[TestOf(typeof(AtmosAlarmThreshold))]
public sealed class AlarmThresholdTest
{
{/*
[TestPrototypes]
private const string Prototypes = @"
- type: alarmThreshold
@@ -135,6 +135,6 @@ namespace Content.IntegrationTests.Tests.Atmos
}
});
await pair.CleanReturnAsync();
}
}*/
}
}

View File

@@ -8,7 +8,7 @@ namespace Content.IntegrationTests.Tests.Atmos
[TestFixture]
[TestOf(typeof(Atmospherics))]
public sealed class ConstantsTest
{
{/*
[Test]
public async Task TotalGasesTest()
{
@@ -27,6 +27,6 @@ namespace Content.IntegrationTests.Tests.Atmos
});
});
await pair.CleanReturnAsync();
}
}*/
}
}

View File

@@ -8,7 +8,7 @@ namespace Content.IntegrationTests.Tests.Atmos
[TestFixture]
[TestOf(typeof(GasMixture))]
public sealed class GasMixtureTest
{
{/*
[Test]
public async Task TestMerge()
{
@@ -105,6 +105,6 @@ namespace Content.IntegrationTests.Tests.Atmos
});
await pair.CleanReturnAsync();
}
}*/
}
}

View File

@@ -8,7 +8,7 @@ namespace Content.IntegrationTests.Tests.Atmos;
[TestFixture]
public sealed class GridJoinTest
{
{/*
private const string CanisterProtoId = "AirCanister";
[Test]
@@ -49,5 +49,5 @@ public sealed class GridJoinTest
});
await pair.CleanReturnAsync();
}
}*/
}

View File

@@ -18,7 +18,7 @@ namespace Content.IntegrationTests.Tests;
[TestFixture]
public sealed class CargoTest
{
{/*
private static readonly HashSet<ProtoId<CargoProductPrototype>> Ignored =
[
// This is ignored because it is explicitly intended to be able to sell for more than it costs.
@@ -265,5 +265,5 @@ public sealed class CargoTest
});
await pair.CleanReturnAsync();
}
}*/
}

View File

@@ -18,7 +18,7 @@ namespace Content.IntegrationTests.Tests.Disposal
[TestOf(typeof(DisposalEntryComponent))]
[TestOf(typeof(DisposalUnitComponent))]
public sealed class DisposalUnitTest
{
{/*
[Reflect(false)]
private sealed class DisposalUnitTestSystem : EntitySystem
{
@@ -242,6 +242,6 @@ namespace Content.IntegrationTests.Tests.Disposal
});
await pair.CleanReturnAsync();
}
}*/
}
}

View File

@@ -6,7 +6,7 @@ using Content.Shared.Wires;
namespace Content.IntegrationTests.Tests.EncryptionKeys;
public sealed class RemoveEncryptionKeys : InteractionTest
{
{/*
[Test]
public async Task HeadsetKeys()
{
@@ -108,5 +108,5 @@ public sealed class RemoveEncryptionKeys : InteractionTest
AssertPrototype("TelecomServerFilled");
await InteractUsing(Pry);
AssertPrototype("MachineFrame");
}
}*/
}

View File

@@ -8,7 +8,7 @@ namespace Content.IntegrationTests.Tests.Internals;
[TestFixture]
[TestOf(typeof(InternalsSystem))]
public sealed class AutoInternalsTests
{
{/*
[Test]
public async Task TestInternalsAutoActivateInSpaceForStationSpawn()
{
@@ -81,5 +81,5 @@ public sealed class AutoInternalsTests
components:
- type: Loadout
prototypes: [InternalsDummyGear]
";
";*/
}

View File

@@ -8,7 +8,7 @@ using Robust.Shared.Prototypes;
namespace Content.IntegrationTests.Tests;
public sealed class MachineBoardTest
{
{/*
/// <summary>
/// A list of machine boards that can be ignored by this test.
/// </summary>
@@ -138,5 +138,5 @@ public sealed class MachineBoardTest
});
await pair.CleanReturnAsync();
}
}*/
}

View File

@@ -7,7 +7,7 @@ using Robust.Shared.GameObjects;
namespace Content.IntegrationTests.Tests.Payload;
public sealed class ModularGrenadeTests : InteractionTest
{
{/*
public const string Trigger = "TimerTrigger";
public const string Payload = "ExplosivePayload";
@@ -70,5 +70,5 @@ public sealed class ModularGrenadeTests : InteractionTest
// Grenade has exploded.
await RunTicks(30);
AssertDeleted();
}
}*/
}

View File

@@ -44,15 +44,15 @@ namespace Content.IntegrationTests.Tests
};
private static readonly string[] GameMaps =
{//CrystallPunk Map replacement
{//CrystallEdge Map replacement
"Dev",
"CentComm",
"MeteorArena",
//CrystallPunk maps
//CrystallEdge maps
"Village",
"Island",
//CrystallPunk Map replacement end
//CrystallEdge Map replacement end
};
/// <summary>

View File

@@ -15,7 +15,7 @@ namespace Content.IntegrationTests.Tests.Power
{
[TestFixture]
public sealed class PowerTest
{
{/*
[TestPrototypes]
private const string Prototypes = @"
- type: entity
@@ -1333,7 +1333,7 @@ namespace Content.IntegrationTests.Tests.Power
});
await pair.CleanReturnAsync();
}
}*/
}
}

View File

@@ -9,7 +9,7 @@ namespace Content.IntegrationTests.Tests;
[TestFixture]
public sealed class ResearchTest
{
{/*
[Test]
public async Task DisciplineValidTierPrerequesitesTest()
{
@@ -117,5 +117,5 @@ public sealed class ResearchTest
});
await pair.CleanReturnAsync();
}
}*/
}

View File

@@ -19,7 +19,7 @@ namespace Content.IntegrationTests.Tests
[TestOf(typeof(VendingMachineRestockComponent))]
[TestOf(typeof(VendingMachineSystem))]
public sealed class VendingMachineRestockTest : EntitySystem
{
{/*
[TestPrototypes]
private const string Prototypes = @"
- type: entity
@@ -369,7 +369,7 @@ namespace Content.IntegrationTests.Tests
});
await pair.CleanReturnAsync();
}
}*/
}
}

View File

@@ -84,7 +84,7 @@ namespace Content.Server.Atmos.Components
public ProtoId<AlertPrototype> FireAlert = "Fire";
/// <summary>
/// CrystallPunk fireplace fuel
/// CrystallEdge fireplace fuel
/// </summary>
[DataField]
public float CP14FireplaceFuel = 10f;

View File

@@ -317,10 +317,10 @@ namespace Content.Server.Atmos.EntitySystems
_ignitionSourceSystem.SetIgnited(uid, false);
//CrystallPunk bonfire moment
//CrystallEdge bonfire moment
var ev = new OnFireChangedEvent(flammable.OnFire);
RaiseLocalEvent(uid, ref ev);
//CrystallPunk bonfire moment end
//CrystallEdge bonfire moment end
UpdateAppearance(uid, flammable);
}
@@ -344,10 +344,10 @@ namespace Content.Server.Atmos.EntitySystems
_adminLogger.Add(LogType.Flammable, $"{ToPrettyString(uid):target} set on fire by {ToPrettyString(ignitionSource):actor}");
flammable.OnFire = true;
//CrystallPunk fireplace moment
//CrystallEdge fireplace moment
var ev = new OnFireChangedEvent(flammable.OnFire);
RaiseLocalEvent(uid, ref ev);
//CrystallPunk fireplace moment end
//CrystallEdge fireplace moment end
}
UpdateAppearance(uid, flammable);

View File

@@ -14,7 +14,7 @@ public sealed class AmbientSoundSystem : SharedAmbientSoundSystem
base.Initialize();
SubscribeLocalEvent<AmbientOnPoweredComponent, PowerChangedEvent>(HandlePowerChange);
SubscribeLocalEvent<AmbientOnPoweredComponent, PowerNetBatterySupplyEvent>(HandlePowerSupply);
SubscribeLocalEvent<CP14FlammableAmbientSoundComponent, OnFireChangedEvent>(OnFireChanged); //CrystallPunk bonfire moment
SubscribeLocalEvent<CP14FlammableAmbientSoundComponent, OnFireChangedEvent>(OnFireChanged); //CrystallEdge bonfire moment
}
private void HandlePowerSupply(EntityUid uid, AmbientOnPoweredComponent component, ref PowerNetBatterySupplyEvent args)
@@ -27,10 +27,10 @@ public sealed class AmbientSoundSystem : SharedAmbientSoundSystem
SetAmbience(uid, args.Powered);
}
//CrystallPunk bonfire moment
//CrystallEdge bonfire moment
private void OnFireChanged(Entity<CP14FlammableAmbientSoundComponent> ent, ref OnFireChangedEvent args)
{
SetAmbience(ent, args.OnFire);
}
//CrystallPunk bonfire moment end
//CrystallEdge bonfire moment end
}

View File

@@ -37,14 +37,14 @@ namespace Content.Server.Damage.Systems
{
if (!TerminatingOrDeleted(args.Target))
{
//CrystallPunk Melee upgrade
//CrystallEdge Melee upgrade
var damage = component.Damage;
if (TryComp<CP14SharpenedComponent>(uid, out var sharp))
damage *= sharp.Sharpness;
var dmg = _damageable.TryChangeDamage(args.Target, damage, component.IgnoreResistances, origin: args.Component.Thrower);
//CrystallPunk Melee upgrade end
//CrystallEdge Melee upgrade end
// Log damage only for mobs. Useful for when people throw spears at each other, but also avoids log-spam when explosions send glass shards flying.
if (dmg != null && HasComp<MobStateComponent>(args.Target))

View File

@@ -240,7 +240,7 @@ namespace Content.Server.GameTicking
_chatSystem.DispatchStationAnnouncement(station,
Loc.GetString("latejoin-arrival-announcement-special",
("character", MetaData(mob).EntityName),
("gender", character.Gender), // CrystallPunk-LastnameGender
("gender", character.Gender), // CrystallEdge-LastnameGender
("entity", mob),
("job", CultureInfo.CurrentCulture.TextInfo.ToTitleCase(jobName))),
Loc.GetString("latejoin-arrival-sender"),
@@ -252,7 +252,7 @@ namespace Content.Server.GameTicking
_chatSystem.DispatchStationAnnouncement(station,
Loc.GetString("latejoin-arrival-announcement",
("character", MetaData(mob).EntityName),
("gender", character.Gender), // CrystallPunk-LastnameGender
("gender", character.Gender), // CrystallEdge-LastnameGender
("entity", mob),
("job", CultureInfo.CurrentCulture.TextInfo.ToTitleCase(jobName))),
Loc.GetString("latejoin-arrival-sender"),

View File

@@ -130,7 +130,6 @@ public sealed partial class DungeonSystem
var finalRoomRotation = roomTransform.Rotation();
/*
if (clearExisting)
{
var point1 = Vector2.Transform(-room.Size / 2, roomTransform);
@@ -156,7 +155,6 @@ public sealed partial class DungeonSystem
}
}
}
*/
var roomCenter = (room.Offset + room.Size / 2f) * grid.TileSize;
var tileOffset = -roomCenter + grid.TileSizeHalfVector;
@@ -185,14 +183,14 @@ public sealed partial class DungeonSystem
_tiles.Add((rounded, tileRef.Tile));
//CP14 clearExisting variant
if (clearExisting)
{
var anchored = _maps.GetAnchoredEntities((gridUid, grid), rounded);
foreach (var ent in anchored)
{
QueueDel(ent);
}
}
//if (clearExisting)
//{
// var anchored = _maps.GetAnchoredEntities((gridUid, grid), rounded);
// foreach (var ent in anchored)
// {
// QueueDel(ent);
// }
//}
//CP14 clearExisting variant end
}
}

View File

@@ -39,7 +39,7 @@ public sealed class RandomSpriteSystem: SharedRandomSpriteSystem
component.Selected.EnsureCapacity(groups.Count);
Color? previousColor = component.CP14InheritBaseColor; //CrystallPunk
Color? previousColor = component.CP14InheritBaseColor; //CrystallEdge
foreach (var group in groups)
{

View File

@@ -130,12 +130,12 @@ public sealed class TemperatureSystem : EntitySystem
public void ChangeHeat(EntityUid uid, float heatAmount, bool ignoreHeatResistance = false,
TemperatureComponent? temperature = null)
{
//CrystallPunk may try place on heater and entity, and solutions
//CrystallEdge may try place on heater and entity, and solutions
//if (!Resolve(uid, ref temperature, false))
// return;
if (temperature == null)
return;
//CrystallPunk may try place on heater and entity, and solutions END
//CrystallEdge may try place on heater and entity, and solutions END
if (!ignoreHeatResistance)
{

View File

@@ -55,7 +55,7 @@ public sealed partial class CP14DemiplaneSystem
return msg;
msg.AddMarkupOrThrow(
indexedLocation.Name is not null && _random.Prob(indexedLocation.ExamineProb)
indexedLocation.Name is not null/* && _random.Prob(indexedLocation.ExamineProb)*/
? Loc.GetString("cp14-demiplane-examine-title", ("location", Loc.GetString(indexedLocation.Name)))
: Loc.GetString("cp14-demiplane-examine-title-unknown"));
@@ -65,8 +65,8 @@ public sealed partial class CP14DemiplaneSystem
if (!_proto.TryIndex(modifier, out var indexedModifier))
continue;
if (!_random.Prob(indexedModifier.ExamineProb))
continue;
//if (!_random.Prob(indexedModifier.ExamineProb)) //temp disable
// continue;
if (indexedModifier.Name is null)
continue;

View File

@@ -0,0 +1,10 @@
using Robust.Shared.Audio;
namespace Content.Server._CP14.PersonalSignature;
[RegisterComponent]
public sealed partial class CP14PersonalSignatureComponent : Component
{
[DataField]
public SoundSpecifier? SignSound;
}

View File

@@ -0,0 +1,79 @@
using System.Diagnostics.CodeAnalysis;
using Content.Server.Mind;
using Content.Server.Paper;
using Content.Shared.Hands.Components;
using Content.Shared.Paper;
using Content.Shared.Verbs;
using Robust.Server.Audio;
using Robust.Shared.Audio;
using Robust.Shared.Player;
namespace Content.Server._CP14.PersonalSignature;
public sealed class CP14PersonalSignatureSystem : EntitySystem
{
[Dependency] private readonly AudioSystem _audio = default!;
[Dependency] private readonly MindSystem _mind = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<PaperComponent, GetVerbsEvent<AlternativeVerb>>(OnGetVerb);
}
private void OnGetVerb(Entity<PaperComponent> entity, ref GetVerbsEvent<AlternativeVerb> args)
{
if (!_mind.TryGetMind(args.User, out _, out var mind))
return;
if (mind.CharacterName is null)
return;
if (!CanSign(args.Using, out var signature))
return;
if (HasSign(entity, mind.CharacterName))
return;
args.Verbs.Add(new AlternativeVerb
{
Text = Loc.GetString("cp-sign-verb"),
Act = () =>
{
Sign(entity, mind.CharacterName, signature.SignSound);
},
});
}
private bool CanSign(EntityUid? item, [NotNullWhen(true)] out CP14PersonalSignatureComponent? personalSignature)
{
personalSignature = null;
return item is not null && TryComp(item, out personalSignature);
}
private bool HasSign(Entity<PaperComponent> entity, string sign)
{
foreach (var info in entity.Comp.StampedBy)
{
if (info.StampedName == sign)
return true;
}
return false;
}
private void Sign(Entity<PaperComponent> target, string name, SoundSpecifier? sound)
{
var info = new StampDisplayInfo
{
StampedName = name,
StampedColor = Color.Gray,
};
if (sound is not null)
_audio.PlayEntity(sound, Filter.Pvs(target), target, true);
target.Comp.StampedBy.Add(info);
}
}

View File

@@ -1,5 +1,5 @@
/*
* All right reserved to CrystallPunk.
* All right reserved to CrystallEdge.
*
* BUT this file is sublicensed under MIT License
*

View File

@@ -1,5 +1,5 @@
/*
* All right reserved to CrystallPunk.
* All right reserved to CrystallEdge.
*
* BUT this file is sublicensed under MIT License
*

View File

@@ -206,7 +206,7 @@ namespace Content.Shared.CCVar
/// Prototype to use for map pool.
/// </summary>
public static readonly CVarDef<string>
GameMapPool = CVarDef.Create("game.map_pool", "DefaultMapPool", CVar.SERVERONLY); //CrystallPunk mapPool
GameMapPool = CVarDef.Create("game.map_pool", "DefaultMapPool", CVar.SERVERONLY); //CrystallEdge mapPool
/// <summary>
/// The depth of the queue used to calculate which map is next in rotation.
@@ -1565,7 +1565,7 @@ namespace Content.Shared.CCVar
CVarDef.Create("votekick.ban_duration", 180, CVar.SERVERONLY);
/// <summary>
/// Whether the ghost requirement settings for votekicks should be ignored for the lobby.
/// Whether the ghost requirement settings for votekicks should be ignored for the lobby.
/// </summary>
public static readonly CVarDef<bool> VotekickIgnoreGhostReqInLobby =
CVarDef.Create("votekick.ignore_ghost_req_in_lobby", true, CVar.SERVERONLY);

View File

@@ -78,7 +78,7 @@ public sealed partial class ClothingComponent : Component
public TimeSpan StripDelay = TimeSpan.Zero;
[DataField]
public bool BreakOnMove = true; //CrystallPunk weapon unequipping on move
public bool BreakOnMove = true; //CrystallEdge weapon unequipping on move
}
[Serializable, NetSerializable]

View File

@@ -10,7 +10,7 @@ namespace Content.Shared.Decals
[IdDataField] public string ID { get; } = null!;
[DataField("sprite")] public SpriteSpecifier Sprite { get; private set; } = SpriteSpecifier.Invalid;
[DataField("tags")] public List<string> Tags = new();
[DataField("showMenu")] public bool ShowMenu = false; //CrystallPunk decal filter
[DataField("showMenu")] public bool ShowMenu = false; //CrystallEdge decal filter
/// <summary>
/// If the decal is rotated compared to our eye should we snap it to south.

View File

@@ -47,20 +47,20 @@ namespace Content.Shared.Humanoid
switch (gender)
{
case Gender.Male:
return Loc.GetString(_random.Pick(_prototypeManager.Index<LocalizedDatasetPrototype>(speciesProto.MaleFirstNames).Values)); //CrystallPunk name localization
return Loc.GetString(_random.Pick(_prototypeManager.Index<LocalizedDatasetPrototype>(speciesProto.MaleFirstNames).Values)); //CrystallEdge name localization
case Gender.Female:
return Loc.GetString(_random.Pick(_prototypeManager.Index<LocalizedDatasetPrototype>(speciesProto.FemaleFirstNames).Values)); //CrystallPunk name localization
return Loc.GetString(_random.Pick(_prototypeManager.Index<LocalizedDatasetPrototype>(speciesProto.FemaleFirstNames).Values)); //CrystallEdge name localization
default:
if (_random.Prob(0.5f))
return Loc.GetString(_random.Pick(_prototypeManager.Index<LocalizedDatasetPrototype>(speciesProto.MaleFirstNames).Values)); //CrystallPunk name localization
return Loc.GetString(_random.Pick(_prototypeManager.Index<LocalizedDatasetPrototype>(speciesProto.MaleFirstNames).Values)); //CrystallEdge name localization
else
return Loc.GetString(_random.Pick(_prototypeManager.Index<LocalizedDatasetPrototype>(speciesProto.FemaleFirstNames).Values)); //CrystallPunk name localization
return Loc.GetString(_random.Pick(_prototypeManager.Index<LocalizedDatasetPrototype>(speciesProto.FemaleFirstNames).Values)); //CrystallEdge name localization
}
}
public string GetLastName(SpeciesPrototype speciesProto)
{
return Loc.GetString(_random.Pick(_prototypeManager.Index<LocalizedDatasetPrototype>(speciesProto.LastNames).Values)); //CrystallPunk name localization
return Loc.GetString(_random.Pick(_prototypeManager.Index<LocalizedDatasetPrototype>(speciesProto.LastNames).Values)); //CrystallEdge name localization
}
}
}

View File

@@ -168,7 +168,7 @@ public abstract partial class InventorySystem
target,
itemUid)
{
BreakOnMove = clothing.BreakOnMove, //CrystallPunk weapon unequipping on move
BreakOnMove = clothing.BreakOnMove, //CrystallEdge weapon unequipping on move
NeedHand = true,
};
@@ -434,7 +434,7 @@ public abstract partial class InventorySystem
target,
removedItem.Value)
{
BreakOnMove = clothing.BreakOnMove, //CrystallPunk weapon unequipping on move
BreakOnMove = clothing.BreakOnMove, //CrystallEdge weapon unequipping on move
NeedHand = true,
};

View File

@@ -10,7 +10,7 @@ namespace Content.Shared.Localizations
[Dependency] private readonly ILocalizationManager _loc = default!;
// If you want to change your codebase's language, do it here.
public const string Culture = "ru-RU"; // CrystallPunk-Localization. "ru-RU" or "en-US"
public const string Culture = "ru-RU"; // CrystallEdge-Localization. "ru-RU" or "en-US"
/// <summary>
/// Custom format strings used for parsing and displaying minutes:seconds timespans.

View File

@@ -47,7 +47,7 @@ public sealed class LockSystem : EntitySystem
SubscribeLocalEvent<LockComponent, GotEmaggedEvent>(OnEmagged);
SubscribeLocalEvent<LockComponent, LockDoAfter>(OnDoAfterLock);
SubscribeLocalEvent<LockComponent, UnlockDoAfter>(OnDoAfterUnlock);
SubscribeLocalEvent<LockComponent, BeforeDoorOpenedEvent>(OnBeforeDoorOpened); //CrystallPunk Lock System Adapt
SubscribeLocalEvent<LockComponent, BeforeDoorOpenedEvent>(OnBeforeDoorOpened); //CrystallEdge Lock System Adapt
SubscribeLocalEvent<LockComponent, StorageInteractAttemptEvent>(OnStorageInteractAttempt);
SubscribeLocalEvent<LockedWiresPanelComponent, LockToggleAttemptEvent>(OnLockToggleAttempt);
@@ -68,7 +68,7 @@ public sealed class LockSystem : EntitySystem
if (args.Handled || !args.Complex)
return;
//CrystallPunk LockSystem Adapt - we cant unlock\lock objects via direct hand interaction
//CrystallEdge LockSystem Adapt - we cant unlock\lock objects via direct hand interaction
// Only attempt an unlock by default on Activate
//if (lockComp.Locked && lockComp.UnlockOnClick)
@@ -82,7 +82,7 @@ public sealed class LockSystem : EntitySystem
// args.Handled = true;
//}
//CrystallPunk LockSystem Adapt End
//CrystallEdge LockSystem Adapt End
}
private void OnBeforeDoorOpened(EntityUid uid, LockComponent component, BeforeDoorOpenedEvent args)
{
@@ -275,7 +275,7 @@ public sealed class LockSystem : EntitySystem
private void AddToggleLockVerb(EntityUid uid, LockComponent component, GetVerbsEvent<AlternativeVerb> args)
{
//CrystallPunk Lock System Adapt
//CrystallEdge Lock System Adapt
//if (!args.CanAccess || !args.CanInteract)
// return;
@@ -292,7 +292,7 @@ public sealed class LockSystem : EntitySystem
//};
//args.Verbs.Add(verb);
//CrystallPunk Lock System Adapt End
//CrystallEdge Lock System Adapt End
}
private void OnEmagged(EntityUid uid, LockComponent component, ref GotEmaggedEvent args)

View File

@@ -72,7 +72,7 @@ public sealed partial class MeleeWeaponComponent : Component
/// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
public bool ResistanceBypass = false;
/// <summary>
/// Base damage for this weapon. Can be modified via heavy damage or other means.
/// </summary>
@@ -120,19 +120,19 @@ public sealed partial class MeleeWeaponComponent : Component
public bool SwingLeft;
/// <summary>
/// CrystallPunk Melee upgrade. Allows each attack to take turns being either left or right
/// CrystallEdge Melee upgrade. Allows each attack to take turns being either left or right
/// </summary>
[DataField]
public bool CPSwingBeverage = true;
/// <summary>
/// CrystallPunk Melee upgrade. Modifier of wide attack animation speed
/// CrystallEdge Melee upgrade. Modifier of wide attack animation speed
/// </summary>
[DataField]
public float CPAnimationLength = 0.5f;
/// <summary>
/// CrystallPunk Melee upgrade. how far away from the player the animation should be played.
/// CrystallEdge Melee upgrade. how far away from the player the animation should be played.
/// </summary>
[DataField]
public float CPAnimationOffset = -1f;

View File

@@ -398,10 +398,10 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem
var ev = new AttemptMeleeEvent();
RaiseLocalEvent(weaponUid, ref ev);
//CrystallPunk melee improvment
//CrystallEdge melee improvment
if (weapon.CPSwingBeverage)
weapon.SwingLeft = !weapon.SwingLeft;
//CrystallPunk melee improvment end
//CrystallEdge melee improvment end
if (ev.Cancelled)
{

View File

@@ -6,4 +6,9 @@ namespace Content.Shared._CP14.Wallmount;
[RegisterComponent, Access(typeof(CP14WallmountSystem))]
public sealed partial class CP14WallmountComponent : Component
{
[DataField]
public int AttachAttempts = 3;
[DataField]
public TimeSpan NextAttachTime = TimeSpan.Zero;
}

View File

@@ -1,7 +1,9 @@
using Content.Shared.Tag;
using Robust.Shared.Map;
using Robust.Shared.Map.Components;
using Robust.Shared.Network;
using Robust.Shared.Prototypes;
using Robust.Shared.Timing;
namespace Content.Shared._CP14.Wallmount;
@@ -10,6 +12,8 @@ public sealed class CP14WallmountSystem : EntitySystem
[Dependency] private readonly SharedTransformSystem _transform = default!;
[Dependency] private readonly SharedMapSystem _map = default!;
[Dependency] private readonly TagSystem _tag = default!;
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly INetManager _net = default!;
public static readonly ProtoId<TagPrototype>[] WallTags = {"Wall", "Window"};
@@ -17,18 +21,70 @@ public sealed class CP14WallmountSystem : EntitySystem
{
base.Initialize();
SubscribeLocalEvent<CP14WallmountComponent, MapInitEvent>(OnMapInit);
SubscribeLocalEvent<CP14WallmountedComponent, ComponentShutdown>(OnWallmountShutdown);
SubscribeLocalEvent<CP14WallmountedComponent, AnchorStateChangedEvent>(OnWallmountAnchorChanged);
}
private void OnMapInit(Entity<CP14WallmountComponent> ent, ref MapInitEvent args)
private void OnWallmountAnchorChanged(Entity<CP14WallmountedComponent> ent, ref AnchorStateChangedEvent args)
{
var grid = Transform(ent).GridUid;
if (!args.Anchored)
ClearWallmounts(ent);
}
private void OnWallmountShutdown(Entity<CP14WallmountedComponent> ent, ref ComponentShutdown args)
{
ClearWallmounts(ent);
}
public override void Update(float frameTime)
{
base.Update(frameTime);
var query = EntityQueryEnumerator<CP14WallmountComponent>();
while (query.MoveNext(out var uid, out var wallmount))
{
if (!wallmount.Initialized)
continue;
if (_timing.CurTime < wallmount.NextAttachTime)
continue;
if (wallmount.AttachAttempts <= 0)
{
if (_net.IsServer)
QueueDel(uid);
continue;
}
wallmount.NextAttachTime = _timing.CurTime + TimeSpan.FromSeconds(0.5f);
wallmount.AttachAttempts--;
if (TryAttachWallmount((uid, wallmount)))
{
RemComp<CP14WallmountComponent>(uid);
}
}
}
private void ClearWallmounts(Entity<CP14WallmountedComponent> ent)
{
foreach (var attached in ent.Comp.Attached)
{
QueueDel(attached);
}
ent.Comp.Attached.Clear();
}
private bool TryAttachWallmount(Entity<CP14WallmountComponent> wallmount)
{
var grid = Transform(wallmount).GridUid;
if (grid == null || !TryComp<MapGridComponent>(grid, out var gridComp))
return;
return false;
//Try found a wall in neighbour tile
var offset = Transform(ent).LocalRotation.ToWorldVec();
var targetPos = new EntityCoordinates(grid.Value,Transform(ent).LocalPosition - offset);
var offset = Transform(wallmount).LocalRotation.ToWorldVec().Normalized();
var targetPos = new EntityCoordinates(grid.Value, Transform(wallmount).LocalPosition - offset);
var anchored = _map.GetAnchoredEntities(grid.Value, gridComp, targetPos);
bool hasParent = false;
@@ -37,11 +93,15 @@ public sealed class CP14WallmountSystem : EntitySystem
if (!_tag.HasAnyTag(entt, WallTags))
continue;
_transform.SetParent(ent, entt);
EnsureComp<CP14WallmountedComponent>(entt, out var wallmounted);
if (!wallmounted.Attached.Contains(wallmount))
wallmounted.Attached.Add(wallmount);
hasParent = true;
break;
}
if (!hasParent)
QueueDel(ent);
return hasParent;
}
}

View File

@@ -0,0 +1,11 @@
namespace Content.Shared._CP14.Wallmount;
/// <summary>
/// Stores a list of all entities that are “attached” to this object. Destroying this object will destroy all attached entities
/// </summary>
[RegisterComponent, Access(typeof(CP14WallmountSystem))]
public sealed partial class CP14WallmountedComponent : Component
{
[DataField]
public HashSet<EntityUid> Attached = new();
}

View File

@@ -1,4 +1,4 @@
<p align="center"> <img alt="CrystallPunk" width="880" height="440" src="https://github.com/crystallpunk-14/crystall-punk-14/assets/96445749/d1d1907b-aaa4-4491-83da-342de0ac5244" /></p>
<p align="center"> <img alt="CrystallEdge" width="880" height="440" src="https://github.com/crystallpunk-14/crystall-punk-14/assets/96445749/d1d1907b-aaa4-4491-83da-342de0ac5244" /></p>
## Links
@@ -20,6 +20,6 @@ https://github.com/crystallpunk-14/crystall-punk-14/wiki
The base code for the original Space Station 14 game is licensed under [MIT License](https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT)
All CrystallPunk14 codebase contributions [rights reserved](https://github.com/crystallpunk-14/crystall-punk-14/blob/master/LICENSE.TXT).
All CrystallEdge codebase contributions [rights reserved](https://github.com/crystallpunk-14/crystall-punk-14/blob/master/LICENSE.TXT).
Visual and sound assets have their own license, described in the attribution file next to them.

View File

@@ -10,5 +10,5 @@
- files: ["arcane_winds.ogg"]
license: "CC-BY-SA-3.0"
copyright: "'Arcane Winds' by LINK, created for CrystallPunk14"
source: "https://github.com/crystallpunk-14/crystall-punk-14"
copyright: "'Arcane Winds' by LINK"
source: "https://github.com/crystallpunk-14/crystall-punk-14"

View File

@@ -0,0 +1 @@
cp-sign-verb = Sign

View File

@@ -0,0 +1 @@
cp-sign-verb = Подписать

View File

@@ -17,6 +17,11 @@
- Write
- Pen
- CP14InkwellFittable
- type: CP14PersonalSignature
signSound:
collection: PaperScribbles
params:
variation: 0.1
# TODO: Чернильницу нужно доделать. Перо должно быть видно, пока оно внутри чернильницы. Предмет должен быть через ItemSlots, чтобы перо вставлять забирать можно было кликом. Нужно добавить прикольные звуки вставляния, выставляния. И добавить механ, который будет требовать периодически макать перо в чернильницу.
- type: entity

View File

@@ -2,7 +2,7 @@
crystallPunkAllowed: true
locFilter: "en-US"
id: CP14_EN
name: Welcome to CrystallPunk
name: Welcome to CrystallEdge
text: "/ServerInfo/_CP14/Guidebook_EN/Welcome.xml"
children:
- CP14_EN_Alchemy
@@ -12,8 +12,8 @@
crystallPunkAllowed: true
locFilter: "ru-RU"
id: CP14_RU
name: Добро пожаловать в CrystallPunk
name: Добро пожаловать в CrystallEdge
text: "/ServerInfo/_CP14/Guidebook_RU/Welcome.xml"
children:
- CP14_RU_Alchemy
- CP14_RU_Demiplanes
- CP14_RU_Demiplanes

View File

@@ -286,17 +286,28 @@
minGroupSize: 1
maxGroupSize: 2
#- type: cp14DemiplaneModifier
# id: Ruins
# name: cp14-modifier-ruins
# reward: 0.35
# generationWeight: 2
# layers:
# - !type:OreDunGen
# entity: ##CP14DemiplanRuinsRoomSpawner
# count: 5
# minGroupSize: 1
# maxGroupSize: 1
- type: cp14DemiplaneModifier
id: Ruins
name: cp14-modifier-ruins
id: Loot
reward: 0.35
generationWeight: 2
layers:
- !type:OreDunGen
entity: CP14DemiplanRuinsRoomSpawner
count: 5
entity: CP14SpawnerExpeditionLootCommon
count: 15
minGroupSize: 1
maxGroupSize: 1
maxGroupSize: 3
- type: cp14DemiplaneModifier
id: EnemyXeno

View File

@@ -1,17 +1,17 @@
- type: Tag
id: CP14DemiplanEnterRoom
- type: entity
id: CP14DemiplanEnterRoomMarker
categories: [ ForkFiltered ]
parent: BaseRoomMarker
name: Demiplan enter room marker
components:
- type: RoomFill
clearExisting: true
roomWhitelist:
tags:
- CP14DemiplanEnterRoom
#- type: entity
# id: CP14DemiplanEnterRoomMarker
# categories: [ ForkFiltered ]
# parent: BaseRoomMarker
# name: Demiplan enter room marker
# components:
# - type: RoomFill
# clearExisting: true
# roomWhitelist:
# tags:
# - CP14DemiplanEnterRoom
# 7x7
- type: dungeonRoom
@@ -48,4 +48,4 @@
ignoreTile: FloorShuttlePurple
offset: 24,0
tags:
- CP14DemiplanEnterRoom
- CP14DemiplanEnterRoom

View File

@@ -1,17 +1,17 @@
- type: Tag
id: CP14DemiplanRuins
- type: entity
id: CP14DemiplanRuinsRoomSpawner
categories: [ ForkFiltered ]
parent: BaseRoomMarker
name: Demiplan ruins room spawner
components:
- type: RoomFill
clearExisting: true
roomWhitelist:
tags:
- CP14DemiplanRuins
#- type: entity
# id: CP14DemiplanRuinsRoomSpawner
# categories: [ ForkFiltered ]
# parent: BaseRoomMarker
# name: Demiplan ruins room spawner
# components:
# - type: RoomFill
# clearExisting: true
# roomWhitelist:
# tags:
# - CP14DemiplanRuins
# 7x7
- type: dungeonRoom

View File

@@ -2,10 +2,10 @@
id: DemiplaneConnections
layers:
- !type:OreDunGen
entity: CP14DemiplanEnterRoomMarker
entity: CP14DemiplaneEntryPointMarker
count: 1
minGroupSize: 1
maxGroupSize: 1
minGroupSize: 4
maxGroupSize: 4
- !type:OreDunGen
entity: CP14DemiplanePassway
count: 2

View File

@@ -1,12 +1,12 @@
<Document>
# Welcome to the pre-alpha version of CrystallPunk!
# Welcome to the pre-alpha version of CrystallEdge!
This guide is designed to help you understand how all the mechanics in the game work.
Be prepared for a lot of text - CP14 is a very large game with a lot of deep mechanics. We hope you will find these guides interesting.
## What is CrystallPunk?
CrystallPunk is an offshoot of the Space Station 14 game... Eeee, I don't think there's much to write about at this point. We'll fill that in later.
## What is CrystallEdge?
CrystallEdge is an fork of the Space Station 14 game... Eeee, I don't think there's much to write about at this point. We'll fill that in later.
## Where to start?
No idea, good luck. (This block needs to be rewritten too)
</Document>
</Document>

View File

@@ -1,12 +1,12 @@
<Document>
# Добро пожаловать в пре-альфа версию игры CrystallPunk!
# Добро пожаловать в пре-альфа версию игры CrystallEdge!
Данное руководство создано, чтобы помочь вам разобраться в работе всех существующих в игре механик.
Будьте готовы, что здесь будет очень много текста - ведь CP14 очень большая игра с большим количеством глубоких механик. Мы надеемся, что вам будет интересно читать эти руководства.
Будьте готовы, что здесь будет очень много текста - ведь это очень большая игра с большим количеством глубоких механик. Мы надеемся, что вам будет интересно читать эти руководства.
## Что такое CrystallPunk?
CrystallPunk - ответвление от игры Space Station 14... Иии, я пока считаю что тут не о чем писать. Мы заполним этот блок позже.
## Что такое CrystallEdge?
CrystallEdge - ответвление от игры Space Station 14... Иии, я пока считаю что тут не о чем писать. Мы заполним этот блок позже.
## С чего начать?
Без понятия, удачи. (Этот блок тоже нужно переписать)
</Document>
</Document>

View File

@@ -1,19 +1,19 @@
<Document>
# Правила сервера
Вы находитесь на тестовом сервере CrystallPunk. Если вы попали сюда, значит вы в белом списке.
Этот сервер предназначен в первую очередь для приоткрытого тестирования наработок. Билд находится в крайне ранней стадии разработки, и на текущий момент не является полноценно играбельным.
Вы находитесь на тестовом сервере CrystallEdge. Если вы попали сюда, значит вы в белом списке.
Этот сервер предназначен в первую очередь для приоткрытого тестирования наработок. Билд находится в крайне ранней стадии разработки, и на текущий момент не является полноценно играбельным.
Некоторые ключевые механики еще могут быть не реализованы, или работать не правильно.
Это означает, что здесь нет требований с ролевому отыгрышу, и вы можете спокойно общаться внутри игры OOC терминами. Тем не менее, отыгрыш никогда не является чем то лишним, и если вам нравится - на здоровье.
## Основные правила
- Не будьте мудаками.
- Не мешайте другим игрокам тестировать механики, если они вас об этом просят.
- Сексуальный контент, ERP запрещены.
- Обо всех найденных багах сообщайте в дискорд или гитхаб.
- Обо всех найденных багах сообщайте в дискорд или гитхаб.
Удачи!
</Document>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "Created by jaraten (Discord/Github) for CrystallPunk14",
"copyright": "Created by jaraten (Discord/Github)",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "CrystallPunk14, by Pato Grone(discord)",
"copyright": "Created by Pato Grone(discord)",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by Prazat",
"copyright": "Created by Prazat",
"size": {
"x": 32,
"y": 32
@@ -23,4 +23,4 @@
"directions": 4
}
]
}
}

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by Prazat",
"copyright": "Created by Prazat",
"size": {
"x": 32,
"y": 32
@@ -23,4 +23,4 @@
"directions": 4
}
]
}
}

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by Prazat",
"copyright": "Created by Prazat",
"size": {
"x": 32,
"y": 32
@@ -23,4 +23,4 @@
"directions": 4
}
]
}
}

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by Prazat",
"copyright": "Created by Prazat",
"size": {
"x": 32,
"y": 32
@@ -23,4 +23,4 @@
"directions": 4
}
]
}
}

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "CrystallPunk14, by hazzloebizhe",
"copyright": "Created by hazzloebizhe",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by TheShuEd",
"copyright": "Created by TheShuEd",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by TheShuEd",
"copyright": "Created by TheShuEd",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by TheShuEd",
"copyright": "Created by TheShuEd",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by TheShuEd",
"copyright": "Created by TheShuEd",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by Prazat",
"copyright": "Created by Prazat",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by TheShuEd",
"copyright": "Created by TheShuEd",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by KBAS5",
"copyright": "Created by KBAS5",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by KBAS5",
"copyright": "Created by KBAS5",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by TheShuEd",
"copyright": "Created by TheShuEd",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by TheShuEd",
"copyright": "Created by TheShuEd",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by KBAS5",
"copyright": "Created by KBAS5",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by Prazat",
"copyright": "Created by Prazat",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by Prazat, recolored by TheShuEd",
"copyright": "Created by Prazat, recolored by TheShuEd",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by Prazat, recolored by TheShuEd",
"copyright": "Created by Prazat, recolored by TheShuEd",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by TheShuEd",
"copyright": "Created by TheShuEd",
"size": {
"x": 48,
"y": 48

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by TheShuEd",
"copyright": "Created by TheShuEd",
"size": {
"x": 48,
"y": 48

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by Jaraten",
"copyright": "Created by Jaraten",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by Prazat, recolored by TheShuEd",
"copyright": "Created by Prazat, recolored by TheShuEd",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by Prazat",
"copyright": "Created by Prazat",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by Prazat",
"copyright": "Created by Prazat",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by Prazat",
"copyright": "Created by Prazat",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by Prazat",
"copyright": "Created by Prazat",
"size": {
"x": 48,
"y": 48

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by Prazat",
"copyright": "Created by Prazat",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by Prazat",
"copyright": "Created by Prazat",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by Prazat",
"copyright": "Created by Prazat",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by KBAS5, edited by TheShuEd",
"copyright": "Created by KBAS5, edited by TheShuEd",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by TheShuEd",
"copyright": "Created by TheShuEd",
"size": {
"x": 48,
"y": 48

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by TheShuEd",
"copyright": "Created by TheShuEd",
"size": {
"x": 48,
"y": 48

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by Prazat",
"copyright": "Created by Prazat",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by TheShuEd",
"copyright": "Created by TheShuEd",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by Prazat",
"copyright": "Created by Prazat",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by TheShuEd",
"copyright": "Created by TheShuEd",
"size": {
"x": 32,
"y": 32

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CLA",
"copyright": "CrystallPunk14, by Prazat",
"copyright": "Created by Prazat",
"size": {
"x": 32,
"y": 32

Some files were not shown because too many files have changed in this diff Show More