Merge pull request #4883 from pchote/concrete
Add buildable concrete to D2K.
This commit is contained in:
@@ -34,6 +34,7 @@ NEW:
|
||||
Removed the build radius restrictions.
|
||||
Added the BLOXXMAS terrain tiles from the 1.06 patch.
|
||||
Saboteur can now plant C4 on vehicles.
|
||||
Added concrete plates and building weathering.
|
||||
Red Alert:
|
||||
Chinook rotors now counter-rotate.
|
||||
Transports will now open their doors when at shore.
|
||||
|
||||
75
OpenRA.Mods.D2k/DamagedWithoutFoundation.cs
Normal file
75
OpenRA.Mods.D2k/DamagedWithoutFoundation.cs
Normal file
@@ -0,0 +1,75 @@
|
||||
#region Copyright & License Information
|
||||
/*
|
||||
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
|
||||
* This file is part of OpenRA, which is free software. It is made
|
||||
* available to you under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation. For more information,
|
||||
* see COPYING.
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using OpenRA.GameRules;
|
||||
using OpenRA.Mods.RA.Buildings;
|
||||
using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.Cnc
|
||||
{
|
||||
class DamagedWithoutFoundationInfo : ITraitInfo, Requires<HealthInfo>
|
||||
{
|
||||
[WeaponReference]
|
||||
public readonly string Weapon = "weathering";
|
||||
public readonly string[] SafeTerrain = { "Concrete" };
|
||||
public readonly int DamageThreshold = 50;
|
||||
|
||||
public object Create(ActorInitializer init) { return new DamagedWithoutFoundation(init.self, this); }
|
||||
}
|
||||
|
||||
class DamagedWithoutFoundation : ITick, ISync, INotifyAddedToWorld
|
||||
{
|
||||
readonly DamagedWithoutFoundationInfo info;
|
||||
readonly Health health;
|
||||
readonly WeaponInfo weapon;
|
||||
|
||||
[Sync] int damageThreshold = 100;
|
||||
[Sync] int damageTicks;
|
||||
|
||||
public DamagedWithoutFoundation(Actor self, DamagedWithoutFoundationInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
health = self.Trait<Health>();
|
||||
weapon = Rules.Weapons[info.Weapon.ToLowerInvariant()];
|
||||
}
|
||||
|
||||
public void AddedToWorld(Actor self)
|
||||
{
|
||||
var safeTiles = 0;
|
||||
var totalTiles = 0;
|
||||
foreach (var kv in self.OccupiesSpace.OccupiedCells())
|
||||
{
|
||||
totalTiles++;
|
||||
if (info.SafeTerrain.Contains(self.World.GetTerrainType(kv.First)))
|
||||
safeTiles++;
|
||||
}
|
||||
|
||||
damageThreshold = (info.DamageThreshold * health.MaxHP + (100 - info.DamageThreshold) * safeTiles * health.MaxHP / totalTiles) / 100;
|
||||
|
||||
// Actors start with maximum damage applied
|
||||
var delta = health.HP - damageThreshold;
|
||||
if (delta > 0)
|
||||
health.InflictDamage(self, self.World.WorldActor, delta, null, false);
|
||||
}
|
||||
|
||||
public void Tick(Actor self)
|
||||
{
|
||||
if (health.HP <= damageThreshold || --damageTicks > 0)
|
||||
return;
|
||||
|
||||
foreach (var w in weapon.Warheads)
|
||||
health.InflictDamage(self, self.World.WorldActor, w.Damage, w, false);
|
||||
|
||||
damageTicks = weapon.ROF;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -81,6 +81,7 @@
|
||||
<Compile Include="PaletteFromR8.cs" />
|
||||
<Compile Include="D2kResourceLayer.cs" />
|
||||
<Compile Include="FogPaletteFromR8.cs" />
|
||||
<Compile Include="DamagedWithoutFoundation.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<PropertyGroup>
|
||||
|
||||
@@ -23,31 +23,40 @@ namespace OpenRA.Mods.RA.Buildings
|
||||
public object Create(ActorInitializer init) { return new Bib(init.self, this); }
|
||||
}
|
||||
|
||||
public class Bib : IRender
|
||||
public class Bib : IRender, INotifyAddedToWorld
|
||||
{
|
||||
readonly BibInfo info;
|
||||
readonly List<AnimationWithOffset> tiles;
|
||||
List<AnimationWithOffset> tiles;
|
||||
|
||||
public Bib(Actor self, BibInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
public void AddedToWorld(Actor self)
|
||||
{
|
||||
var rs = self.Trait<RenderSprites>();
|
||||
var building = self.Info.Traits.Get<BuildingInfo>();
|
||||
var width = building.Dimensions.X;
|
||||
var bibOffset = building.Dimensions.Y - 1;
|
||||
var centerOffset = FootprintUtils.CenterOffset(building);
|
||||
|
||||
var location = self.Location;
|
||||
tiles = new List<AnimationWithOffset>();
|
||||
for (var i = 0; i < 2*width; i++)
|
||||
{
|
||||
var index = i;
|
||||
var anim = new Animation(rs.GetImage(self));
|
||||
anim.PlayFetchIndex(info.Sequence, () => index);
|
||||
var cellOffset = new CVec(i % width, i / width + bibOffset);
|
||||
|
||||
// Some mods may define terrain-specific bibs
|
||||
var terrain = self.World.GetTerrainType(location + cellOffset);
|
||||
var testSequence = info.Sequence + "-" + terrain;
|
||||
var sequence = anim.HasSequence(testSequence) ? testSequence : info.Sequence;
|
||||
anim.PlayFetchIndex(sequence, () => index);
|
||||
anim.IsDecoration = true;
|
||||
|
||||
// Z-order is one set to the top of the footprint
|
||||
var offset = new CVec(i % width, i / width + bibOffset).ToWVec() - centerOffset;
|
||||
var offset = cellOffset.ToWVec() - centerOffset;
|
||||
tiles.Add(new AnimationWithOffset(anim, () => offset, null, -(offset.Y + centerOffset.Y + 512)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ namespace OpenRA.Mods.RA.Buildings
|
||||
public readonly string Footprint = "x";
|
||||
public readonly int2 Dimensions = new int2(1, 1);
|
||||
public readonly bool RequiresBaseProvider = false;
|
||||
public readonly bool AllowInvalidPlacement = false;
|
||||
|
||||
public readonly string[] BuildSounds = {"placbldg.aud", "build5.aud"};
|
||||
public readonly string[] SellSounds = {"cashturn.aud"};
|
||||
@@ -81,7 +82,7 @@ namespace OpenRA.Mods.RA.Buildings
|
||||
{
|
||||
var pos = new CPos(x, y);
|
||||
var at = bi.GetBuildingAt(pos);
|
||||
if (at == null || !at.HasTrait<GivesBuildableArea>())
|
||||
if (at == null || !at.IsInWorld || !at.HasTrait<GivesBuildableArea>())
|
||||
continue;
|
||||
|
||||
if (at.Owner == p || (allyBuildRadius && at.Owner.Stances[p] == Stance.Ally))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#region Copyright & License Information
|
||||
/*
|
||||
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
|
||||
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
|
||||
* This file is part of OpenRA, which is free software. It is made
|
||||
* available to you under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation. For more information,
|
||||
@@ -14,7 +14,7 @@ namespace OpenRA.Mods.RA.Buildings
|
||||
{
|
||||
public class BuildingInfluenceInfo : ITraitInfo
|
||||
{
|
||||
public object Create( ActorInitializer init ) { return new BuildingInfluence( init.world ); }
|
||||
public object Create(ActorInitializer init) { return new BuildingInfluence(init.world); }
|
||||
}
|
||||
|
||||
public class BuildingInfluence
|
||||
@@ -22,30 +22,40 @@ namespace OpenRA.Mods.RA.Buildings
|
||||
Actor[,] influence;
|
||||
Map map;
|
||||
|
||||
public BuildingInfluence( World world )
|
||||
public BuildingInfluence(World world)
|
||||
{
|
||||
map = world.Map;
|
||||
|
||||
influence = new Actor[map.MapSize.X, map.MapSize.Y];
|
||||
|
||||
world.ActorAdded +=
|
||||
a => { if (a.HasTrait<Building>())
|
||||
ChangeInfluence(a, a.Trait<Building>(), true); };
|
||||
world.ActorRemoved +=
|
||||
a => { if (a.HasTrait<Building>())
|
||||
ChangeInfluence(a, a.Trait<Building>(), false); };
|
||||
}
|
||||
world.ActorAdded += a =>
|
||||
{
|
||||
var b = a.TraitOrDefault<Building>();
|
||||
if (b == null)
|
||||
return;
|
||||
|
||||
void ChangeInfluence( Actor a, Building building, bool isAdd )
|
||||
{
|
||||
foreach( var u in FootprintUtils.Tiles( a.Info.Name, a.Info.Traits.Get<BuildingInfo>(), a.Location ) )
|
||||
if( map.IsInMap( u ) )
|
||||
influence[ u.X, u.Y ] = isAdd ? a : null;
|
||||
foreach (var u in FootprintUtils.Tiles(a.Info.Name, b.Info, a.Location))
|
||||
if (map.IsInMap(u) && influence[u.X, u.Y] == null)
|
||||
influence[u.X, u.Y] = a;
|
||||
};
|
||||
|
||||
world.ActorRemoved += a =>
|
||||
{
|
||||
var b = a.TraitOrDefault<Building>();
|
||||
if (b == null)
|
||||
return;
|
||||
|
||||
foreach (var u in FootprintUtils.Tiles(a.Info.Name, b.Info, a.Location))
|
||||
if (map.IsInMap(u) && influence[u.X, u.Y] == a)
|
||||
influence[u.X, u.Y] = null;
|
||||
};
|
||||
}
|
||||
|
||||
public Actor GetBuildingAt(CPos cell)
|
||||
{
|
||||
if (!map.IsInMap(cell)) return null;
|
||||
if (!map.IsInMap(cell))
|
||||
return null;
|
||||
|
||||
return influence[cell.X, cell.Y];
|
||||
}
|
||||
}
|
||||
|
||||
88
OpenRA.Mods.RA/Buildings/LaysTerrain.cs
Executable file
88
OpenRA.Mods.RA/Buildings/LaysTerrain.cs
Executable file
@@ -0,0 +1,88 @@
|
||||
#region Copyright & License Information
|
||||
/*
|
||||
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
|
||||
* This file is part of OpenRA, which is free software. It is made
|
||||
* available to you under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation. For more information,
|
||||
* see COPYING.
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using OpenRA.FileFormats;
|
||||
using OpenRA.Graphics;
|
||||
using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.RA.Buildings
|
||||
{
|
||||
public class LaysTerrainInfo : ITraitInfo, Requires<BuildingInfo>, Requires<RenderSpritesInfo>
|
||||
{
|
||||
[Desc("The terrain template to place. If the template is PickAny, then" +
|
||||
"the actor footprint will be filled with this tile.")]
|
||||
public readonly ushort Template = 0;
|
||||
|
||||
[Desc("The terrain types that this template will be placed on")]
|
||||
public readonly string[] TerrainTypes = {};
|
||||
|
||||
[Desc("Offset relative to the actor TopLeft. Not used if the template is PickAny")]
|
||||
public readonly CVec Offset = CVec.Zero;
|
||||
|
||||
public object Create(ActorInitializer init) { return new LaysTerrain(init.self, this); }
|
||||
}
|
||||
|
||||
public class LaysTerrain : INotifyAddedToWorld
|
||||
{
|
||||
readonly LaysTerrainInfo info;
|
||||
readonly BuildableTerrainLayer layer;
|
||||
readonly BuildingInfluence bi;
|
||||
readonly TileTemplate template;
|
||||
|
||||
public LaysTerrain(Actor self, LaysTerrainInfo info)
|
||||
{
|
||||
this.info = info;
|
||||
layer = self.World.WorldActor.Trait<BuildableTerrainLayer>();
|
||||
bi = self.World.WorldActor.Trait<BuildingInfluence>();
|
||||
template = self.World.TileSet.Templates[info.Template];
|
||||
}
|
||||
|
||||
public void AddedToWorld(Actor self)
|
||||
{
|
||||
if (template.PickAny)
|
||||
{
|
||||
// Fill the footprint with random variants
|
||||
foreach (var c in FootprintUtils.Tiles(self))
|
||||
{
|
||||
// Only place on allowed terrain types
|
||||
if (!info.TerrainTypes.Contains(self.World.GetTerrainType(c)))
|
||||
continue;
|
||||
|
||||
// Don't place under other buildings or custom terrain
|
||||
if (bi.GetBuildingAt(c) != self || self.World.Map.CustomTerrain[c.X, c.Y] != null)
|
||||
continue;
|
||||
|
||||
var index = template.Tiles.Keys.Random(Game.CosmeticRandom);
|
||||
layer.AddTile(c, new TileReference<ushort, byte>(template.Id, index));
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
var origin = self.Location + info.Offset;
|
||||
foreach (var i in template.Tiles.Keys)
|
||||
{
|
||||
var c = origin + new CVec(i % template.Size.X, i / template.Size.X);
|
||||
|
||||
// Only place on allowed terrain types
|
||||
if (!info.TerrainTypes.Contains(self.World.GetTerrainType(c)))
|
||||
continue;
|
||||
|
||||
// Don't place under other buildings or custom terrain
|
||||
if (bi.GetBuildingAt(c) != self || self.World.Map.CustomTerrain[c.X, c.Y] != null)
|
||||
continue;
|
||||
|
||||
layer.AddTile(c, new TileReference<ushort, byte>(template.Id, i));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -31,6 +31,9 @@ namespace OpenRA.Mods.RA.Buildings
|
||||
|
||||
public static bool CanPlaceBuilding(this World world, string name, BuildingInfo building, CPos topLeft, Actor toIgnore)
|
||||
{
|
||||
if (building.AllowInvalidPlacement)
|
||||
return true;
|
||||
|
||||
var res = world.WorldActor.Trait<ResourceLayer>();
|
||||
return FootprintUtils.Tiles(name, building, topLeft).All(
|
||||
t => world.Map.IsInMap(t.X, t.Y) && res.GetResource(t) == null &&
|
||||
|
||||
@@ -482,6 +482,9 @@
|
||||
<Compile Include="Widgets\Logic\GameTimerLogic.cs" />
|
||||
<Compile Include="Immobile.cs" />
|
||||
<Compile Include="Widgets\Logic\ReplayControlBarLogic.cs" />
|
||||
<Compile Include="World\BuildableTerrainLayer.cs" />
|
||||
<Compile Include="Buildings\LaysTerrain.cs" />
|
||||
<Compile Include="RemoveImmediately.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\OpenRA.FileFormats\OpenRA.FileFormats.csproj">
|
||||
|
||||
@@ -90,11 +90,17 @@ namespace OpenRA.Mods.RA.Orders
|
||||
{
|
||||
if (!initialized)
|
||||
{
|
||||
var rbi = Rules.Info[Building].Traits.Get<RenderBuildingInfo>();
|
||||
var palette = rbi.Palette ?? (Producer.Owner != null ?
|
||||
rbi.PlayerPalette + Producer.Owner.InternalName : null);
|
||||
var rbi = Rules.Info[Building].Traits.GetOrDefault<RenderBuildingInfo>();
|
||||
if (rbi == null)
|
||||
preview = new IRenderable[0];
|
||||
else
|
||||
{
|
||||
var palette = rbi.Palette ?? (Producer.Owner != null ?
|
||||
rbi.PlayerPalette + Producer.Owner.InternalName : null);
|
||||
|
||||
preview = rbi.RenderPreview(Rules.Info[Building], wr.Palette(palette));
|
||||
}
|
||||
|
||||
preview = rbi.RenderPreview(Rules.Info[Building], wr.Palette(palette));
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -49,6 +49,9 @@ namespace OpenRA.Mods.RA
|
||||
if (e.Attacker.Owner == self.Owner)
|
||||
return;
|
||||
|
||||
if (e.Attacker == self.World.WorldActor)
|
||||
return;
|
||||
|
||||
if (e.Attacker.Owner.IsAlliedWith(self.Owner) && e.Damage <= 0)
|
||||
return;
|
||||
|
||||
|
||||
22
OpenRA.Mods.RA/RemoveImmediately.cs
Normal file
22
OpenRA.Mods.RA/RemoveImmediately.cs
Normal file
@@ -0,0 +1,22 @@
|
||||
#region Copyright & License Information
|
||||
/*
|
||||
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
|
||||
* This file is part of OpenRA, which is free software. It is made
|
||||
* available to you under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation. For more information,
|
||||
* see COPYING.
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using OpenRA.FileFormats;
|
||||
using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.RA
|
||||
{
|
||||
public class RemoveImmediatelyInfo : TraitInfo<RemoveImmediately> {}
|
||||
|
||||
public class RemoveImmediately : INotifyAddedToWorld
|
||||
{
|
||||
public void AddedToWorld(Actor self) { self.Destroy(); }
|
||||
}
|
||||
}
|
||||
82
OpenRA.Mods.RA/World/BuildableTerrainLayer.cs
Normal file
82
OpenRA.Mods.RA/World/BuildableTerrainLayer.cs
Normal file
@@ -0,0 +1,82 @@
|
||||
#region Copyright & License Information
|
||||
/*
|
||||
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
|
||||
* This file is part of OpenRA, which is free software. It is made
|
||||
* available to you under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation. For more information,
|
||||
* see COPYING.
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using OpenRA.FileFormats;
|
||||
using OpenRA.Graphics;
|
||||
using OpenRA.Mods.RA.Effects;
|
||||
using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.RA
|
||||
{
|
||||
public class BuildableTerrainLayerInfo : TraitInfo<BuildableTerrainLayer> { }
|
||||
public class BuildableTerrainLayer : IRenderOverlay, IWorldLoaded, ITickRender
|
||||
{
|
||||
Dictionary<CPos, Sprite> tiles;
|
||||
Dictionary<CPos, Sprite> dirty;
|
||||
Theater theater;
|
||||
TileSet tileset;
|
||||
Map map;
|
||||
|
||||
public void WorldLoaded(World w, WorldRenderer wr)
|
||||
{
|
||||
theater = wr.Theater;
|
||||
tileset = w.TileSet;
|
||||
map = w.Map;
|
||||
tiles = new Dictionary<CPos, Sprite>();
|
||||
dirty = new Dictionary<CPos, Sprite>();
|
||||
}
|
||||
|
||||
public void AddTile(CPos cell, TileReference<ushort, byte> tile)
|
||||
{
|
||||
map.CustomTerrain[cell.X, cell.Y] = tileset.GetTerrainType(tile);
|
||||
|
||||
// Terrain tiles define their origin at the topleft
|
||||
var s = theater.TileSprite(tile);
|
||||
dirty[cell] = new Sprite(s.sheet, s.bounds, float2.Zero, s.channel, s.blendMode);
|
||||
}
|
||||
|
||||
public void TickRender(WorldRenderer wr, Actor self)
|
||||
{
|
||||
var remove = new List<CPos>();
|
||||
foreach (var kv in dirty)
|
||||
{
|
||||
if (!self.World.FogObscures(kv.Key))
|
||||
{
|
||||
tiles[kv.Key] = kv.Value;
|
||||
remove.Add(kv.Key);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var r in remove)
|
||||
dirty.Remove(r);
|
||||
}
|
||||
|
||||
public void Render(WorldRenderer wr)
|
||||
{
|
||||
var cliprect = wr.Viewport.CellBounds;
|
||||
var pal = wr.Palette("terrain");
|
||||
|
||||
foreach (var kv in tiles)
|
||||
{
|
||||
if (!cliprect.Contains(kv.Key.X, kv.Key.Y))
|
||||
continue;
|
||||
|
||||
if (wr.world.ShroudObscures(kv.Key))
|
||||
continue;
|
||||
|
||||
new SpriteRenderable(kv.Value, kv.Key.CenterPosition,
|
||||
WVec.Zero, -511, pal, 1f, true).Render(wr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -263,4 +263,4 @@
|
||||
Huntable:
|
||||
LuaScriptEvents:
|
||||
Demolishable:
|
||||
|
||||
DamagedWithoutFoundation:
|
||||
|
||||
@@ -1,3 +1,42 @@
|
||||
^CONCRETE:
|
||||
Building:
|
||||
Adjacent: 4
|
||||
TerrainTypes: Rock
|
||||
BuildSounds: BUILD1.WAV
|
||||
AllowInvalidPlacement: true
|
||||
LaysTerrain:
|
||||
Template: 88
|
||||
TerrainTypes: Rock
|
||||
Tooltip:
|
||||
Name: Concrete
|
||||
Description: Provides a strong foundation that prevents\ndamage from the terrain.
|
||||
RenderSprites:
|
||||
RemoveImmediately:
|
||||
|
||||
CONCRETEA:
|
||||
Inherits: ^CONCRETE
|
||||
Building:
|
||||
Footprint: xx xx
|
||||
Dimensions: 2,2
|
||||
Buildable:
|
||||
Queue: Building
|
||||
BuildPaletteOrder:10
|
||||
Owner: atreides, harkonnen, ordos
|
||||
Valued:
|
||||
Cost: 20
|
||||
|
||||
CONCRETEB:
|
||||
Inherits: ^CONCRETE
|
||||
Building:
|
||||
Footprint: xxx xxx xxx
|
||||
Dimensions: 3,3
|
||||
Buildable:
|
||||
Queue: Building
|
||||
BuildPaletteOrder: 10
|
||||
Owner: atreides, harkonnen, ordos
|
||||
Valued:
|
||||
Cost: 50
|
||||
|
||||
^CONYARD:
|
||||
Inherits: ^Building
|
||||
Building:
|
||||
@@ -5,6 +44,9 @@
|
||||
Footprint: xxx xxx
|
||||
Dimensions: 3,2
|
||||
Adjacent: 4
|
||||
LaysTerrain:
|
||||
TerrainTypes: Rock
|
||||
Template: 88
|
||||
Bib:
|
||||
Buildable:
|
||||
Queue: Building
|
||||
|
||||
@@ -88,6 +88,7 @@ World:
|
||||
Race: ordos
|
||||
DomainIndex:
|
||||
PathfinderDebugOverlay:
|
||||
BuildableTerrainLayer:
|
||||
D2kResourceLayer:
|
||||
ResourceClaimLayer:
|
||||
ResourceType@Spice:
|
||||
|
||||
@@ -1,3 +1,13 @@
|
||||
concretea:
|
||||
icon: DATA
|
||||
Start:4050
|
||||
Offset: -30,-24
|
||||
|
||||
concreteb:
|
||||
icon: DATA
|
||||
Start:4053
|
||||
Offset: -30,-24
|
||||
|
||||
walla:
|
||||
idle: DATA
|
||||
Frames: 2527, 2530, 2528, 2538, 2531, 2532, 2542, 2535, 2529, 2539, 2533, 2534, 2540, 2536, 2537, 2541
|
||||
@@ -254,6 +264,10 @@ conyarda:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4046
|
||||
Offset: -30,-24
|
||||
@@ -388,6 +402,10 @@ starporta:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4092
|
||||
Offset: -30,-24
|
||||
@@ -422,6 +440,10 @@ pwra:
|
||||
Frames: 617, 618, 637, 638
|
||||
Length: 4
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 649, 650, 669, 670
|
||||
Length: 4
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4056
|
||||
Offset: -30,-24
|
||||
@@ -446,6 +468,10 @@ barra:
|
||||
Frames: 617, 618, 637, 638
|
||||
Length: 4
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 649, 650, 669, 670
|
||||
Length: 4
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4059
|
||||
Offset: -30,-24
|
||||
@@ -474,6 +500,10 @@ radara:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4072
|
||||
Offset: -30,-24
|
||||
@@ -505,6 +535,10 @@ refa:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4066
|
||||
Offset: -30,-24
|
||||
@@ -557,6 +591,10 @@ hightecha:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4078
|
||||
Offset: -30,-24
|
||||
@@ -586,6 +624,10 @@ researcha:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4099
|
||||
Offset: -30,-24
|
||||
@@ -615,6 +657,10 @@ researchh:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4100
|
||||
Offset: -30,-24
|
||||
@@ -644,6 +690,10 @@ researcho:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4101
|
||||
Offset: -30,-24
|
||||
@@ -668,6 +718,10 @@ palacea:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4102
|
||||
Offset: -30,-24
|
||||
@@ -713,6 +767,10 @@ lighta:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4081
|
||||
Offset: -30,-24
|
||||
@@ -758,6 +816,10 @@ heavya:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4087
|
||||
Offset: -30,-24
|
||||
@@ -790,6 +852,10 @@ conyardh:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4047
|
||||
Offset: -30,-24
|
||||
@@ -825,6 +891,10 @@ starporth:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4093
|
||||
Offset: -30,-24
|
||||
@@ -859,6 +929,10 @@ pwrh:
|
||||
Frames: 617, 618, 637, 638
|
||||
Length: 4
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 649, 650, 669, 670
|
||||
Length: 4
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4057
|
||||
Offset: -30,-24
|
||||
@@ -883,6 +957,10 @@ barrh:
|
||||
Frames: 617, 618, 637, 638
|
||||
Length: 4
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 649, 650, 669, 670
|
||||
Length: 4
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4060
|
||||
Offset: -30,-24
|
||||
@@ -911,6 +989,10 @@ radarh:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4073
|
||||
Offset: -30,-24
|
||||
@@ -942,6 +1024,10 @@ refh:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4067
|
||||
Offset: -30,-24
|
||||
@@ -994,6 +1080,10 @@ hightechh:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4079
|
||||
Offset: -30,-24
|
||||
@@ -1026,6 +1116,10 @@ palaceh:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4103
|
||||
Offset: -30,-24
|
||||
@@ -1071,6 +1165,10 @@ lighth:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4082
|
||||
Offset: -30,-24
|
||||
@@ -1116,6 +1214,10 @@ heavyh:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4088
|
||||
Offset: -30,-24
|
||||
@@ -1148,6 +1250,10 @@ conyardo:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4048
|
||||
Offset: -30,-24
|
||||
@@ -1183,6 +1289,10 @@ starporto:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4094
|
||||
Offset: -30,-24
|
||||
@@ -1218,6 +1328,10 @@ pwro:
|
||||
Frames: 617, 618, 637, 638
|
||||
Length: 4
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 649, 650, 669, 670
|
||||
Length: 4
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4058
|
||||
Offset: -30,-24
|
||||
@@ -1242,6 +1356,10 @@ barro:
|
||||
Frames: 617, 618, 637, 638
|
||||
Length: 4
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 649, 650, 669, 670
|
||||
Length: 4
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4061
|
||||
Offset: -30,-24
|
||||
@@ -1270,6 +1388,10 @@ radaro:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4074
|
||||
Offset: -30,-24
|
||||
@@ -1301,6 +1423,10 @@ refo:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4068
|
||||
Offset: -30,-24
|
||||
@@ -1353,6 +1479,10 @@ hightecho:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4080
|
||||
Offset: -30,-24
|
||||
@@ -1377,6 +1507,10 @@ palaceo:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4104
|
||||
Offset: -30,-24
|
||||
@@ -1422,6 +1556,10 @@ lighto:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4083
|
||||
Offset: -30,-24
|
||||
@@ -1467,6 +1605,10 @@ heavyo:
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4089
|
||||
Offset: -30,-24
|
||||
@@ -1482,6 +1624,10 @@ palacec: # TODO: unused
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: palacecicon
|
||||
Start: 0
|
||||
make: DATA
|
||||
@@ -1525,6 +1671,10 @@ starportc: # TODO: unused
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA # TODO: blank
|
||||
Start: 4020
|
||||
Offset: -30,-24
|
||||
@@ -1570,6 +1720,10 @@ heavyc: # TODO: unused
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA # TODO: blank
|
||||
Start: 4020
|
||||
Offset: -30,-24
|
||||
@@ -1602,6 +1756,10 @@ conyardc: # TODO: unused
|
||||
Frames: 611, 612, 613, 631, 632, 633
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
bib-Concrete: BLOXBASE
|
||||
Frames: 643, 644, 645, 663, 664, 665
|
||||
Length: 6
|
||||
Offset: -16,-16
|
||||
icon: DATA
|
||||
Start: 4049
|
||||
Offset: -30,-24
|
||||
|
||||
@@ -621,3 +621,7 @@ Grenade:
|
||||
Damage: 60
|
||||
ImpactSound: EXPLLG5.WAV
|
||||
|
||||
Weathering:
|
||||
ROF: 100
|
||||
Warhead:
|
||||
Damage: 5
|
||||
Reference in New Issue
Block a user