added .mix file support for game asset browser
This commit is contained in:
@@ -138,7 +138,7 @@ namespace OpenRA.FileFormats
|
||||
static byte[] ReadCompressedData(Stream stream, ImageHeader h)
|
||||
{
|
||||
stream.Position = h.Offset;
|
||||
// Actually, far too big. There's no length field with the correct length though :(
|
||||
// TODO: Actually, far too big. There's no length field with the correct length though :(
|
||||
var compressedLength = (int)(stream.Length - stream.Position);
|
||||
|
||||
var compressedBytes = new byte[ compressedLength ];
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#endregion
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
namespace OpenRA.FileFormats
|
||||
@@ -20,7 +21,8 @@ namespace OpenRA.FileFormats
|
||||
public readonly string[]
|
||||
Mods, Folders, Packages, Rules, ServerTraits,
|
||||
Sequences, Cursors, Chrome, Assemblies, ChromeLayout,
|
||||
Weapons, Voices, Notifications, Music, Movies, TileSets, ChromeMetrics;
|
||||
Weapons, Voices, Notifications, Music, Movies, TileSets,
|
||||
ChromeMetrics, PackageContents;
|
||||
public readonly MiniYaml LoadScreen;
|
||||
public readonly Dictionary<string, Pair<string,int>> Fonts;
|
||||
public readonly int TileSize = 24;
|
||||
@@ -29,7 +31,7 @@ namespace OpenRA.FileFormats
|
||||
{
|
||||
Mods = mods;
|
||||
var yaml = new MiniYaml(null, mods
|
||||
.Select(m => MiniYaml.FromFile("mods/" + m + "/mod.yaml"))
|
||||
.Select(m => MiniYaml.FromFile("mods{0}{1}{0}mod.yaml".F(Path.DirectorySeparatorChar, m)))
|
||||
.Aggregate(MiniYaml.MergeLiberal)).NodesDict;
|
||||
|
||||
// TODO: Use fieldloader
|
||||
@@ -49,6 +51,7 @@ namespace OpenRA.FileFormats
|
||||
Movies = YamlList(yaml, "Movies");
|
||||
TileSets = YamlList(yaml, "TileSets");
|
||||
ChromeMetrics = YamlList(yaml, "ChromeMetrics");
|
||||
PackageContents = YamlList(yaml, "PackageContents");
|
||||
|
||||
LoadScreen = yaml["LoadScreen"];
|
||||
Fonts = yaml["Fonts"].NodesDict.ToDictionary(x => x.Key,
|
||||
|
||||
@@ -25,6 +25,7 @@ namespace OpenRA
|
||||
public static Dictionary<string, MusicInfo> Music;
|
||||
public static Dictionary<string, string> Movies;
|
||||
public static Dictionary<string, TileSet> TileSets;
|
||||
public static Dictionary<string, string> PackageContents;
|
||||
|
||||
public static void LoadRules(Manifest m, Map map)
|
||||
{
|
||||
@@ -35,6 +36,7 @@ namespace OpenRA
|
||||
Notifications = LoadYamlRules(m.Notifications, map.Notifications, (k, _) => new SoundInfo(k.Value));
|
||||
Music = LoadYamlRules(m.Music, new List<MiniYamlNode>(), (k, _) => new MusicInfo(k.Key, k.Value));
|
||||
Movies = LoadYamlRules(m.Movies, new List<MiniYamlNode>(), (k, v) => k.Value.Value);
|
||||
PackageContents = LoadYamlRules(m.PackageContents, new List<MiniYamlNode>(), (k, v) => k.Value.Value);
|
||||
|
||||
TileSets = new Dictionary<string, TileSet>();
|
||||
foreach (var file in m.TileSets)
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using OpenRA.FileFormats;
|
||||
@@ -22,30 +23,27 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
||||
{
|
||||
Widget panel;
|
||||
|
||||
ShpImageWidget spriteImage;
|
||||
TextFieldWidget filenameInput;
|
||||
SliderWidget frameSlider;
|
||||
ButtonWidget playButton;
|
||||
ButtonWidget pauseButton;
|
||||
static ShpImageWidget spriteImage;
|
||||
static TextFieldWidget filenameInput;
|
||||
static SliderWidget frameSlider;
|
||||
static ButtonWidget playButton;
|
||||
static ButtonWidget pauseButton;
|
||||
static ScrollPanelWidget assetList;
|
||||
static ScrollItemWidget template;
|
||||
|
||||
public enum SourceType { Folders, Packages }
|
||||
public static SourceType AssetSource = SourceType.Folders;
|
||||
|
||||
[ObjectCreator.UseCtor]
|
||||
public AssetBrowserLogic(Widget widget, Action onExit, World world)
|
||||
{
|
||||
panel = widget;
|
||||
|
||||
var assetList = panel.Get<ScrollPanelWidget>("ASSET_LIST");
|
||||
var template = panel.Get<ScrollItemWidget>("ASSET_TEMPLATE");
|
||||
|
||||
assetList.RemoveChildren();
|
||||
foreach (var folder in FileSystem.FolderPaths)
|
||||
{
|
||||
if (Directory.Exists(folder))
|
||||
{
|
||||
var shps = Directory.GetFiles(folder, "*.shp");
|
||||
foreach (var shp in shps)
|
||||
AddAsset(assetList, shp, template);
|
||||
}
|
||||
}
|
||||
var sourceDropdown = panel.Get<DropDownButtonWidget>("SOURCE_SELECTOR");
|
||||
sourceDropdown.OnMouseDown = _ => ShowSourceDropdown(sourceDropdown);
|
||||
sourceDropdown.GetText = () => AssetSource == SourceType.Folders ? "Folders"
|
||||
: AssetSource == SourceType.Packages ? "Packages" : "None";
|
||||
sourceDropdown.Disabled = !Rules.PackageContents.Keys.Any();
|
||||
|
||||
spriteImage = panel.Get<ShpImageWidget>("SPRITE");
|
||||
|
||||
@@ -93,10 +91,14 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
||||
LoadAsset(filenameInput.Text);
|
||||
};
|
||||
|
||||
assetList = panel.Get<ScrollPanelWidget>("ASSET_LIST");
|
||||
template = panel.Get<ScrollItemWidget>("ASSET_TEMPLATE");
|
||||
PopulateAssetList();
|
||||
|
||||
panel.Get<ButtonWidget>("CLOSE_BUTTON").OnClick = () => { Ui.CloseWindow(); onExit(); };
|
||||
}
|
||||
|
||||
void AddAsset(ScrollPanelWidget list, string filepath, ScrollItemWidget template)
|
||||
static void AddAsset(ScrollPanelWidget list, string filepath, ScrollItemWidget template)
|
||||
{
|
||||
var sprite = Path.GetFileNameWithoutExtension(filepath);
|
||||
|
||||
@@ -108,7 +110,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
||||
list.AddChild(item);
|
||||
}
|
||||
|
||||
bool LoadAsset(string filename)
|
||||
static bool LoadAsset(string filename)
|
||||
{
|
||||
if (filename == null)
|
||||
return false;
|
||||
@@ -120,5 +122,48 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
||||
frameSlider.Ticks = spriteImage.FrameCount+1;
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool ShowSourceDropdown(DropDownButtonWidget dropdown)
|
||||
{
|
||||
var options = new Dictionary<string, SourceType>()
|
||||
{
|
||||
{ "Folders", SourceType.Folders },
|
||||
{ "Packages", SourceType.Packages },
|
||||
};
|
||||
|
||||
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
|
||||
{
|
||||
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||
() => AssetSource == options[o],
|
||||
() => { AssetSource = options[o]; PopulateAssetList(); });
|
||||
item.Get<LabelWidget>("LABEL").GetText = () => o;
|
||||
return item;
|
||||
};
|
||||
|
||||
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, setupItem);
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void PopulateAssetList()
|
||||
{
|
||||
assetList.RemoveChildren();
|
||||
|
||||
if (AssetSource == SourceType.Folders)
|
||||
{
|
||||
foreach (var folder in FileSystem.FolderPaths)
|
||||
{
|
||||
if (Directory.Exists(folder))
|
||||
{
|
||||
var shps = Directory.GetFiles(folder, "*.shp");
|
||||
foreach (var shp in shps)
|
||||
AddAsset(assetList, shp, template);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (AssetSource == SourceType.Packages)
|
||||
foreach (var hiddenFile in Rules.PackageContents.Keys)
|
||||
AddAsset(assetList, hiddenFile, template);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,8 @@ Packages:
|
||||
~scores2.mix
|
||||
~transit.mix
|
||||
|
||||
PackageContents:
|
||||
|
||||
Rules:
|
||||
mods/cnc/rules/defaults.yaml
|
||||
mods/cnc/rules/system.yaml
|
||||
|
||||
@@ -21,6 +21,8 @@ Packages:
|
||||
~main.mix
|
||||
conquer.mix
|
||||
|
||||
PackageContents:
|
||||
|
||||
Rules:
|
||||
mods/d2k/rules/system.yaml
|
||||
mods/d2k/rules/defaults.yaml
|
||||
|
||||
@@ -83,6 +83,7 @@ Background@ASSETBROWSER_BG:
|
||||
Height:25
|
||||
Text:Change Palette
|
||||
Font:Bold
|
||||
Disabled: yes
|
||||
Button@IMPORT_BUTTON:
|
||||
X:PARENT_RIGHT - 200
|
||||
Y:PARENT_BOTTOM - 270
|
||||
@@ -90,6 +91,7 @@ Background@ASSETBROWSER_BG:
|
||||
Height:25
|
||||
Text:Import from PNG
|
||||
Font:Bold
|
||||
Disabled: yes
|
||||
Button@EXTRACT_BUTTON:
|
||||
X:PARENT_RIGHT - 200
|
||||
Y:PARENT_BOTTOM - 235
|
||||
@@ -97,6 +99,7 @@ Background@ASSETBROWSER_BG:
|
||||
Height:25
|
||||
Text:Extract to Folder
|
||||
Font:Bold
|
||||
Disabled: yes
|
||||
Button@EXPORT_BUTTON:
|
||||
X:PARENT_RIGHT - 200
|
||||
Y:PARENT_BOTTOM - 200
|
||||
@@ -104,6 +107,7 @@ Background@ASSETBROWSER_BG:
|
||||
Height:25
|
||||
Text:Export as PNG
|
||||
Font:Bold
|
||||
Disabled: yes
|
||||
Button@CLOSE_BUTTON:
|
||||
X:PARENT_RIGHT - 200
|
||||
Y:PARENT_BOTTOM - 115
|
||||
|
||||
227
mods/ra/mix/conquer.yaml
Normal file
227
mods/ra/mix/conquer.yaml
Normal file
@@ -0,0 +1,227 @@
|
||||
# conquer.mix filename list for the game asset browser
|
||||
#appear1.aud:
|
||||
#beepy6.aud:
|
||||
#briefing.aud:
|
||||
#clock1.aud:
|
||||
#country1.aud:
|
||||
#country4.aud:
|
||||
#keystrok.aud:
|
||||
#mapwipe2.aud:
|
||||
#mapwipe5.aud:
|
||||
#scold1.aud:
|
||||
#sfx4.aud:
|
||||
#toney10.aud:
|
||||
#toney4.aud:
|
||||
#toney7.aud:
|
||||
#type.fnt:
|
||||
#alibackh.pcx:
|
||||
#sovback.pcx:
|
||||
120mm.shp:
|
||||
1tnk.shp:light tank
|
||||
2tnk.shp:medium tank
|
||||
3tnk.shp:heavy tank
|
||||
4tnk.shp:mammoth tank
|
||||
50cal.shp:
|
||||
afld.shp:
|
||||
afldmake.shp:
|
||||
agun.shp:
|
||||
agunmake.shp:
|
||||
apc.shp:
|
||||
apwr.shp:
|
||||
apwramke.shp:
|
||||
armor.shp:
|
||||
art-exp1.shp:
|
||||
arty.shp:
|
||||
atek.shp:
|
||||
atekmake.shp:
|
||||
atomicdn.shp:
|
||||
atomicup.shp:
|
||||
atomsfx.shp:
|
||||
badr.shp:
|
||||
bar3bhr.shp:
|
||||
bar3blue.shp:
|
||||
bar3red.shp:
|
||||
bar3rhr.shp:
|
||||
barb.shp:
|
||||
barl.shp:
|
||||
barr.shp:
|
||||
barrmake.shp:
|
||||
bio.shp:
|
||||
biomake.shp:
|
||||
bomb.shp:
|
||||
bomblet.shp:
|
||||
brik.shp:
|
||||
brl3.shp:
|
||||
burn-l.shp:
|
||||
burn-m.shp:
|
||||
burn-s.shp:
|
||||
ca.shp:
|
||||
chronbox.shp:
|
||||
countrya.shp:
|
||||
countrye.shp:
|
||||
credsa.shp:
|
||||
credsahr.shp:
|
||||
credsu.shp:
|
||||
credsuhr.shp:
|
||||
cycl.shp:
|
||||
dd.shp:
|
||||
deviator.shp:
|
||||
dog.shp:
|
||||
dogbullt.shp:
|
||||
dollar.shp:
|
||||
dome.shp:
|
||||
domemake.shp:
|
||||
dragon.shp:
|
||||
earth.shp:
|
||||
ebtn-dn.shp:
|
||||
electdog.shp:
|
||||
empulse.shp:
|
||||
fact.shp:
|
||||
factmake.shp:
|
||||
fb1.shp:
|
||||
fb2.shp:
|
||||
fball1.shp:
|
||||
fcom.shp:
|
||||
fenc.shp:
|
||||
fire1.shp:
|
||||
fire2.shp:
|
||||
fire3.shp:
|
||||
fire4.shp:
|
||||
fix.shp:
|
||||
fixmake.shp:
|
||||
flagfly.shp:
|
||||
flak.shp:
|
||||
flmspt.shp:
|
||||
fpls.shp:
|
||||
fpower.shp:
|
||||
frag1.shp:
|
||||
ftnk.shp:
|
||||
ftur.shp:
|
||||
fturmake.shp:
|
||||
gap.shp:
|
||||
gapmake.shp:
|
||||
gpsbox.shp:
|
||||
gun.shp:
|
||||
gunfire.shp:
|
||||
gunmake.shp:
|
||||
h2o_exp1.shp:
|
||||
h2o_exp2.shp:
|
||||
h2o_exp3.shp:
|
||||
harv.shp:
|
||||
heli.shp:
|
||||
hind.shp:
|
||||
hisc1-hr.shp:
|
||||
hisc2-hr.shp:
|
||||
hiscore1.shp:
|
||||
hiscore2.shp:
|
||||
hosp.shp:
|
||||
hospmake.shp:
|
||||
hpad.shp:
|
||||
hpadmake.shp:
|
||||
invulbox.shp:
|
||||
invun.shp:
|
||||
iron.shp:
|
||||
ironmake.shp:
|
||||
jeep.shp:
|
||||
kenn.shp:
|
||||
kennmake.shp:
|
||||
litning.shp:
|
||||
lrotor.shp:
|
||||
lst.shp:
|
||||
mcv.shp:
|
||||
mgg.shp:
|
||||
mgun.shp:
|
||||
mhq.shp:
|
||||
mig.shp:
|
||||
mine.shp:
|
||||
minigun.shp:
|
||||
minp.shp:
|
||||
minpmake.shp:
|
||||
minv.shp:
|
||||
minvmake.shp:
|
||||
miss.shp:
|
||||
missile.shp:
|
||||
missile2.shp:
|
||||
mlrs.shp:
|
||||
mnly.shp:
|
||||
mrj.shp:
|
||||
napalm1.shp:
|
||||
napalm2.shp:
|
||||
napalm3.shp:
|
||||
orca.shp:
|
||||
parabomb.shp:
|
||||
parabox.shp:
|
||||
parach.shp:
|
||||
patriot.shp:
|
||||
pbox.shp:
|
||||
pboxmake.shp:
|
||||
pdox.shp:
|
||||
pdoxmake.shp:
|
||||
piff.shp:
|
||||
piffpiff.shp:
|
||||
powr.shp:
|
||||
powrmake.shp:
|
||||
pt.shp:
|
||||
pumpmake.shp:
|
||||
radarfrm.shp:
|
||||
rapid.shp:
|
||||
rrotor.shp:
|
||||
sam.shp:
|
||||
samfire.shp:
|
||||
sammake.shp:
|
||||
sbag.shp:
|
||||
scrate.shp:
|
||||
select.shp:
|
||||
repair.shp:
|
||||
shadow.shp:
|
||||
silo.shp:
|
||||
silomake.shp:
|
||||
smig.shp:
|
||||
smoke_m.shp:
|
||||
smokey.shp:
|
||||
smokland.shp:
|
||||
sonarbox.shp:
|
||||
speed.shp:
|
||||
spen.shp:
|
||||
spenmake.shp:
|
||||
sputdoor.shp:
|
||||
sputnik.shp:
|
||||
ss.shp:
|
||||
ssam.shp:
|
||||
stealth2.shp:
|
||||
stek.shp:
|
||||
stekmake.shp:
|
||||
stnk.shp:
|
||||
syrd.shp:
|
||||
syrdmake.shp:
|
||||
tent.shp:
|
||||
tentmake.shp:
|
||||
time.shp:
|
||||
timehr.shp:
|
||||
tquake.shp:
|
||||
tran.shp:
|
||||
truk.shp:
|
||||
tsla.shp:
|
||||
tslamake.shp:
|
||||
turr.shp:
|
||||
twinkle1.shp:
|
||||
twinkle2.shp:
|
||||
twinkle3.shp:
|
||||
u2.shp:
|
||||
v19.shp:
|
||||
v2.shp:
|
||||
v2rl.shp:
|
||||
veh-hit1.shp:
|
||||
veh-hit2.shp:
|
||||
wake.shp:
|
||||
wcrate.shp:
|
||||
weap.shp:
|
||||
weap2.shp:
|
||||
weapmake.shp:
|
||||
wood.shp:
|
||||
wwcrate.shp:
|
||||
yak.shp:
|
||||
#trans.icn:
|
||||
#ali-tran.wsa:
|
||||
#mltiplyr.wsa:
|
||||
#sov-tran.wsa:
|
||||
135
mods/ra/mix/hires.yaml
Normal file
135
mods/ra/mix/hires.yaml
Normal file
@@ -0,0 +1,135 @@
|
||||
# hires.mix filename list for the game asset browser
|
||||
1tnkicon.shp:
|
||||
2tnkicon.shp:
|
||||
3tnkicon.shp:
|
||||
4tnkicon.shp:
|
||||
afldicon.shp:
|
||||
agunicon.shp:
|
||||
apcicon.shp:
|
||||
apwricon.shp:
|
||||
artyicon.shp:
|
||||
atekicon.shp:
|
||||
atomicon.shp:
|
||||
badricon.shp:
|
||||
barricon.shp:
|
||||
brikicon.shp:
|
||||
btn-dn.shp:
|
||||
btn-pl.shp:
|
||||
btn-st.shp:
|
||||
btn-up.shp:
|
||||
c1.shp:
|
||||
c2.shp:
|
||||
caicon.shp:
|
||||
camicon.shp:
|
||||
chan.shp:
|
||||
clock.shp:
|
||||
dd-bkgnd.shp:
|
||||
dd-botm.shp:
|
||||
dd-crnr.shp:
|
||||
dd-edge.shp:
|
||||
dd-left.shp:
|
||||
dd-right.shp:
|
||||
dd-top.shp:
|
||||
ddicon.shp:
|
||||
delphi.shp:
|
||||
dogicon.shp:
|
||||
domeicon.shp:
|
||||
domficon.shp:
|
||||
e1.shp:
|
||||
e1icon.shp:
|
||||
e2.shp:
|
||||
e2icon.shp:
|
||||
e3.shp:
|
||||
e3icon.shp:
|
||||
e4.shp:
|
||||
e4icon.shp:
|
||||
e5.shp:
|
||||
e6.shp:
|
||||
e6icon.shp:
|
||||
e7.shp:
|
||||
e7icon.shp:
|
||||
einstein.shp:
|
||||
facficon.shp:
|
||||
facticon.shp:
|
||||
fencicon.shp:
|
||||
fixicon.shp:
|
||||
fturicon.shp:
|
||||
gapicon.shp:
|
||||
gnrl.shp:
|
||||
gpssicon.shp:
|
||||
gunicon.shp:
|
||||
harvicon.shp:
|
||||
hboxicon.shp:
|
||||
heliicon.shp:
|
||||
hindicon.shp:
|
||||
hpadicon.shp:
|
||||
infxicon.shp:
|
||||
ironicon.shp:
|
||||
jeepicon.shp:
|
||||
kennicon.shp:
|
||||
lsticon.shp:
|
||||
map.shp:
|
||||
mcvicon.shp:
|
||||
medi.shp:
|
||||
mediicon.shp:
|
||||
mggicon.shp:
|
||||
migicon.shp:
|
||||
mnlyicon.shp:
|
||||
mrjicon.shp:
|
||||
msloicon.shp:
|
||||
natoradr.shp:
|
||||
nradrfrm.shp:
|
||||
pbmbicon.shp:
|
||||
pboxicon.shp:
|
||||
pdoxicon.shp:
|
||||
pinficon.shp:
|
||||
pips.shp:
|
||||
power.shp:
|
||||
powerbar.shp:
|
||||
powricon.shp:
|
||||
procicon.shp:
|
||||
pticon.shp:
|
||||
pulse.shp:
|
||||
repair.shp:
|
||||
samicon.shp:
|
||||
sbagicon.shp:
|
||||
sell.shp:
|
||||
side1na.shp:
|
||||
side1us.shp:
|
||||
side2na.shp:
|
||||
side2us.shp:
|
||||
side3na.shp:
|
||||
side3us.shp:
|
||||
#sidebar.shp:will crash
|
||||
siloicon.shp:
|
||||
smigicon.shp:
|
||||
sonricon.shp:
|
||||
speficon.shp:
|
||||
spenicon.shp:
|
||||
spy.shp:
|
||||
spyicon.shp:
|
||||
ssicon.shp:
|
||||
stekicon.shp:
|
||||
strip.shp:
|
||||
stripdn.shp:
|
||||
stripna.shp:
|
||||
stripup.shp:
|
||||
stripus.shp:
|
||||
syrdicon.shp:
|
||||
syrficon.shp:
|
||||
tabs.shp:
|
||||
tenticon.shp:
|
||||
thf.shp:
|
||||
thficon.shp:
|
||||
tranicon.shp:
|
||||
trukicon.shp:
|
||||
tslaicon.shp:
|
||||
u2icon.shp:
|
||||
uradrfrm.shp:
|
||||
ussrradr.shp:
|
||||
v2rlicon.shp:
|
||||
warpicon.shp:
|
||||
weaficon.shp:
|
||||
weapicon.shp:
|
||||
yakicon.shp:
|
||||
#mouse.shp:Dune II format
|
||||
@@ -29,6 +29,10 @@ Packages:
|
||||
~movies1.mix
|
||||
~movies2.mix
|
||||
|
||||
PackageContents:
|
||||
mods/ra/mix/conquer.yaml
|
||||
mods/ra/mix/hires.yaml
|
||||
|
||||
Rules:
|
||||
mods/ra/rules/defaults.yaml
|
||||
mods/ra/rules/system.yaml
|
||||
|
||||
Reference in New Issue
Block a user