1--------------------------------------------------------------------------------
2--------------------------------------------------------------------------------
3--
4--  file:    resources.lua
5--  brief:   resources.tdf lua parser
6--  author:  Craig Lawrence, Dave Rodgers
7--
8--  Copyright (C) 2007.
9--  Licensed under the terms of the GNU GPL, v2 or later.
10--
11--------------------------------------------------------------------------------
12--------------------------------------------------------------------------------
13
14local TDF = VFS.Include('gamedata/parse_tdf.lua')
15
16local resources, err = TDF.Parse('gamedata/resources.tdf')
17
18--------------------------------------------------------------------------------
19
20
21if (resources == nil) then
22   -- load the defaults
23	resources = {
24		graphics = {
25			caustics = {
26				'caustics/caustic00.jpg',
27				'caustics/caustic01.jpg',
28				'caustics/caustic02.jpg',
29				'caustics/caustic03.jpg',
30				'caustics/caustic04.jpg',
31				'caustics/caustic05.jpg',
32				'caustics/caustic06.jpg',
33				'caustics/caustic07.jpg',
34				'caustics/caustic08.jpg',
35				'caustics/caustic09.jpg',
36				'caustics/caustic10.jpg',
37				'caustics/caustic11.jpg',
38				'caustics/caustic12.jpg',
39				'caustics/caustic13.jpg',
40				'caustics/caustic14.jpg',
41				'caustics/caustic15.jpg',
42				'caustics/caustic16.jpg',
43				'caustics/caustic17.jpg',
44				'caustics/caustic18.jpg',
45				'caustics/caustic19.jpg',
46				'caustics/caustic20.jpg',
47				'caustics/caustic21.jpg',
48				'caustics/caustic22.jpg',
49				'caustics/caustic23.jpg',
50				'caustics/caustic24.jpg',
51				'caustics/caustic25.jpg',
52				'caustics/caustic26.jpg',
53				'caustics/caustic27.jpg',
54				'caustics/caustic28.jpg',
55				'caustics/caustic29.jpg',
56				'caustics/caustic30.jpg',
57				'caustics/caustic31.jpg',
58			},
59			smoke = {
60				'smoke/smoke00.tga',
61				'smoke/smoke01.tga',
62				'smoke/smoke02.tga',
63				'smoke/smoke03.tga',
64				'smoke/smoke04.tga',
65				'smoke/smoke05.tga',
66				'smoke/smoke06.tga',
67				'smoke/smoke07.tga',
68				'smoke/smoke08.tga',
69				'smoke/smoke09.tga',
70				'smoke/smoke10.tga',
71				'smoke/smoke11.tga',
72			},
73			scars = {
74				'scars/scar1.bmp',
75				'scars/scar2.bmp',
76				'scars/scar3.bmp',
77				'scars/scar4.bmp',
78			},
79			trees = {
80				bark		=	'Bark.bmp',
81				leaf		=	'bleaf.bmp',
82				gran1		=	'gran.bmp',
83				gran2		=	'gran2.bmp',
84				birch1	=	'birch1.bmp',
85				birch2	=	'birch2.bmp',
86				birch3	=	'birch3.bmp',
87			},
88			maps = {
89				detailtex	=	'detailtex2.bmp',
90				watertex	=	'ocean.jpg',
91			},
92			groundfx = {
93				groundflash	=	'groundflash.tga',
94				groundring	=	'groundring.tga',
95				seismic			=	'circles.tga',
96			},
97			projectiletextures = {
98				circularthingy	=	'circularthingy.tga',
99				laserend				=	'laserend.tga',
100				laserfalloff		=	'laserfalloff.tga',
101				randdots				=	'randdots.tga',
102				smoketrail			=	'smoketrail.tga',
103				wake						=	'wake.tga',
104				flare						=	'flare.tga',
105				explo						=	'explo.tga',
106				explofade				=	'explofade.tga',
107				heatcloud				=	'explo.tga',
108				flame						=	'flame.tga',
109				muzzleside			=	'muzzleside.tga',
110				muzzlefront			=	'muzzlefront.tga',
111				largebeam				=	'largelaserfalloff.tga',
112			},
113		}
114	}
115
116else
117	resources = resources.resources
118
119	local function MakeArray(t, prefix)
120		if (type(t) ~= 'table') then
121			return nil
122		end
123
124		local sorted = {}
125		for k,v in pairs(t) do
126			if ((type(k) == 'string') and (type(v) == 'string')) then
127				local s, e, p, num = k:find('(%D*)(%d*)')
128				num = tonumber(num)
129				if ((p == prefix) and num) then
130					table.insert(sorted, { num, v })
131				end
132			end
133		end
134		table.sort(sorted, function(a, b)
135			if (a[1] < b[1]) then return true  end
136			if (b[1] < a[1]) then return false end
137			return (a[2] < b[2])
138		end)
139
140		local newTable = {}
141		for _,numVal in ipairs(sorted) do
142			table.insert(newTable, numVal[2])
143		end
144		return newTable
145	end
146
147	local gfx = resources.graphics
148	gfx.smoke    = MakeArray(gfx.smoke,    'smoke')
149	gfx.scars    = MakeArray(gfx.scars,    'scar')
150	gfx.caustics = MakeArray(gfx.caustics, 'caustic')
151end
152
153--------------------------------------------------------------------------------
154
155return resources
156
157--------------------------------------------------------------------------------
158--------------------------------------------------------------------------------
159