Replacing Constores with Griff Trade outposts@Griff and Doc

Discussion and information relevant to creating special missions, new ships, skins etc.

Moderators: winston, another_commander

User avatar
DaddyHoggy
Intergalactic Spam Assassin
Intergalactic Spam Assassin
Posts: 8515
Joined: Tue Dec 05, 2006 9:43 pm
Location: Newbury, UK
Contact:

Post by DaddyHoggy »

I suspect the log file will indicate that it's having problems loading sets A to D (new ones) then since the very small Your_Ad_here.oxp just sets up the display of the billboards AND the stations - the stations themselves are in the individual sets. That's why yours for set F says Tescoo Constore but is actually textured as a Pi-42 - Doc forgot to change the skin to match the description.
Selezen wrote:
Apparently I was having a DaddyHoggy moment.
Oolite Life is now revealed here
User avatar
Ark
---- E L I T E ----
---- E L I T E ----
Posts: 664
Joined: Sun Dec 09, 2007 8:22 am
Location: Athens Greece

Post by Ark »

DaddyHoggy wrote:
then since the very small Your_Ad_here.oxp just sets up the display of the billboards AND the stations
Just for the record
In the new Your_Ad_Here.oxp (basic package oxp) you can find all the common elements (textures, models, shaders ect) and generally everything that is not unique for every set, apart from the scripts. I did that on purpose for reducing the size of the oxp in MBs

Everything that is unique for every set is inside the set oxps(the billboard ads, adring ect of the station for example that are unique for every station and the buoy billbord textures).

So without the basic package oxp the set oxps are not functional nor the main package oxp itself if it is alone. If you want to have a functional installation you need the basic package oxp (Your_Ad_Here.oxp) and at least one set (Your_Ad_Here_set_A.oxp for example). The more sets you have the more the variety of the buoy billboards, asteroid billboards, stations ect.

I suspect that oolite does not include the new stations in the universe because either Pangloss is using the old basic package - not the one in the wip_3 or because there is deference in the way mac oolite verifies the oxps during the cache refresh. In both cases the log will definitely show us the source of the problem.

Moreover the problem of the specific glowad in the Tescoo station exist in all stations that have a glowad set made by pangloss (do not worry is only that specific glowad not all of them) but from what i can understand it is not pangloss fault. Hello!! Griff :twisted: it seems that pangloss made in all its glowad sets that specific glowad smaller that it has to be

Also:

http://img231.imageshack.us/img231/8783/roof3wt9.png

Mamma mia!!!!!!!!

But if you look more closely you can see that there is a line on the top of the robot that ruins somehow the neon roof billboard felling. I am right? or maybe i am a hypochondriac

Moderator: Linkified giant image to unbreakulate forum.
User avatar
DaddyHoggy
Intergalactic Spam Assassin
Intergalactic Spam Assassin
Posts: 8515
Joined: Tue Dec 05, 2006 9:43 pm
Location: Newbury, UK
Contact:

Post by DaddyHoggy »

@Ark, the line is an odd one - that's clearly at the top of the texture - perhaps its fractionally not transparent (since Griff originally had it with a black background) and the shader is picking this up? Guessing - this shader thing still seems like a bit of a black art to me!

I guess if you PM wackyman465 the oxp link he can test it on a mac - and of course we still need to see the log file.
Selezen wrote:
Apparently I was having a DaddyHoggy moment.
Oolite Life is now revealed here
User avatar
wackyman465
---- E L I T E ----
---- E L I T E ----
Posts: 831
Joined: Thu Nov 06, 2008 10:15 pm
Location: Currently hunting you down in an Imperial Courier

Post by wackyman465 »

Then again, the current version of YAH crashes Oolite at start-up, so maybe I shouldn't test it...
I shot him back first. That is to say, I read his mind and fired before he would have fired on me. No, sir, he wasn't a fugitive.
User avatar
DaddyHoggy
Intergalactic Spam Assassin
Intergalactic Spam Assassin
Posts: 8515
Joined: Tue Dec 05, 2006 9:43 pm
Location: Newbury, UK
Contact:

Post by DaddyHoggy »

The clamour of Mac users willing to test this WIP is somewhat underwhelming... :?
Selezen wrote:
Apparently I was having a DaddyHoggy moment.
Oolite Life is now revealed here
User avatar
DaddyHoggy
Intergalactic Spam Assassin
Intergalactic Spam Assassin
Posts: 8515
Joined: Tue Dec 05, 2006 9:43 pm
Location: Newbury, UK
Contact:

Post by DaddyHoggy »

@Ark - simple shaders - 28fps on my system (can't see on picture as I carefully timed it so that it was on a green background :oops: )

Issues with simple shaders - appearance - shiny bits now appear to be VERY shiny - I can live with that BUT - adring kind of "flops" around the perimeter of the station - i.e. different sections do not move at exactly the same time - it's as if each piece flops onto the next one which in turn flops onto the next one - repeat ad infinitum. Although they're all still going around the adring too - it's a very strange effect that does not show up (!!!) on the still (no kidding!)

I can live with 21fps for a better looking station and effects.

Note: changing to FULL or OFF in-game doesn't actually seem to make any difference - is this expected behaviour of the game (i.e. if I park outside the station, pause, F2, shaders -> OFF I do not get the static drinking spaceman. If I pause, F2, shaders-> full, my frame rate does not drop because it would appear that I'm still in simple mode because I still have shiny specular and flopping adring).

Anyway, here is the station with simple shaders on my underpowered system (specifically the FX5900XT - although and XP2800+ is hardly a shining example of modern processing power). Original image was 1024x768, reduced to 800x600 here for convenience.

Image

It's funny the Star Identifier looks better than I thought it would - it does look like it's flashing - which is cool.
Selezen wrote:
Apparently I was having a DaddyHoggy moment.
Oolite Life is now revealed here
User avatar
wackyman465
---- E L I T E ----
---- E L I T E ----
Posts: 831
Joined: Thu Nov 06, 2008 10:15 pm
Location: Currently hunting you down in an Imperial Courier

Post by wackyman465 »

Underwhelming?

Good word.
I shot him back first. That is to say, I read his mind and fired before he would have fired on me. No, sir, he wasn't a fugitive.
User avatar
Pangloss
---- E L I T E ----
---- E L I T E ----
Posts: 303
Joined: Wed Dec 13, 2006 5:57 pm
Location: Scranton, PA (via Stevenage, Herts)

Post by Pangloss »

By the way, how does the new version of the chicken look on the roof? Jaggy-free, I hope.

...and how do I find the Oolite log? If someone tells me, I'll post it!
"All is for the best in this best of all possible worlds..."
Dr.Pangloss, Voltaire's 'Candide'.

Image
User avatar
Pangloss
---- E L I T E ----
---- E L I T E ----
Posts: 303
Joined: Wed Dec 13, 2006 5:57 pm
Location: Scranton, PA (via Stevenage, Herts)

Post by Pangloss »

Scrap that. Here's the Latest log...
[log.header]: Opening log for Oolite version 1.72.1 (x86-32 test release) under Mac OS X Version 10.4.11 (Build 8S2167) at 2009-01-30 10:52:41 -0500.
Machine type: iMac5,1, 1024 MiB memory, 2 x x86 (Core 2/Merom) @ 2000 MHz.
Note that the contents of the log file can be adjusted by editing logcontrol.plist.

[rendering.opengl.version]: OpenGL renderer version: 2.0.0 ("2.0 ATI-1.4.56")
Vendor: ATI Technologies Inc.
Renderer: ATI Radeon X1600 OpenGL Engine
[rendering.opengl.extensions]: OpenGL extensions (95):
GL_ARB_transpose_matrix GL_ARB_vertex_program GL_ARB_vertex_blend GL_ARB_window_pos GL_ARB_shader_objects GL_ARB_vertex_shader GL_EXT_multi_draw_arrays GL_EXT_clip_volume_hint GL_EXT_rescale_normal GL_EXT_draw_range_elements GL_EXT_fog_coord GL_EXT_gpu_program_parameters GL_APPLE_client_storage GL_APPLE_specular_vector GL_APPLE_transform_hint GL_APPLE_packed_pixels GL_APPLE_fence GL_APPLE_vertex_array_object GL_APPLE_vertex_program_evaluators GL_APPLE_element_array GL_APPLE_flush_render GL_NV_texgen_reflection GL_NV_light_max_exponent GL_IBM_rasterpos_clip GL_SGIS_generate_mipmap GL_ARB_shading_language_100 GL_ARB_imaging GL_ARB_point_parameters GL_ARB_texture_env_crossbar GL_ARB_texture_border_clamp GL_ARB_multitexture GL_ARB_texture_env_add GL_ARB_texture_cube_map GL_ARB_texture_env_dot3 GL_ARB_multisample GL_ARB_texture_env_combine GL_ARB_texture_compression GL_ARB_texture_mirrored_repeat GL_ARB_shadow GL_ARB_depth_texture GL_ARB_shadow_ambient GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_occlusion_query GL_ARB_point_sprite GL_ARB_texture_non_power_of_two GL_ARB_vertex_buffer_object GL_ARB_pixel_buffer_object GL_ARB_draw_buffers GL_ARB_shader_texture_lod GL_EXT_compiled_vertex_array GL_EXT_framebuffer_object GL_EXT_texture_rectangle GL_ARB_texture_rectangle GL_EXT_texture_env_add GL_EXT_blend_color GL_EXT_blend_minmax GL_EXT_blend_subtract GL_EXT_texture_lod_bias GL_EXT_abgr GL_EXT_bgra GL_EXT_stencil_wrap GL_EXT_texture_filter_anisotropic GL_EXT_separate_specular_color GL_EXT_secondary_color GL_EXT_blend_func_separate GL_EXT_shadow_funcs GL_EXT_stencil_two_side GL_EXT_texture_compression_s3tc GL_EXT_texture_compression_dxt1 GL_EXT_blend_equation_separate GL_EXT_texture_mirror_clamp GL_EXT_packed_depth_stencil GL_APPLE_flush_buffer_range GL_APPLE_ycbcr_422 GL_APPLE_vertex_array_range GL_APPLE_texture_range GL_APPLE_float_pixels GL_ATI_texture_float GL_ARB_texture_float GL_APPLE_pixel_buffer GL_NV_blend_square GL_NV_fog_distance GL_ATI_texture_mirror_once GL_ATI_text_fragment_shader GL_ATI_blend_equation_separate GL_ATI_blend_weighted_minmax GL_ATI_texture_env_combine3 GL_ATI_separate_stencil GL_ATI_texture_compression_3dc GL_SGIS_texture_edge_clamp GL_SGIS_texture_lod GL_SGI_color_matrix
[searchPaths.dumpAll]: ---> OXP search paths:
(
"/Applications/Oolite/Oolite.app/Contents/Resources",
"/Applications/Oolite/AddOns",
"/Users/Shawn/.Oolite/AddOns",
"/Users/Shawn/Library/Application Support/Oolite/AddOns",
"/Applications/Oolite/AddOns/YOUR_AD_HERE.oxp",
"/Applications/Oolite/AddOns/YOUR_AD_HERE_set_A.oxp",
"/Applications/Oolite/AddOns/YOUR_AD_HERE_set_B.oxp",
"/Applications/Oolite/AddOns/YOUR_AD_HERE_set_C.oxp",
"/Applications/Oolite/AddOns/YOUR_AD_HERE_set_D.oxp",
"/Applications/Oolite/AddOns/YOUR_AD_HERE_set_F.oxp"
)
[dataCache.upToDate]: Data cache is up to date.
[script.load.world.listAll]: Loaded 6 world scripts: "oolite-cloaking-device" 1.72.1, "oolite-constrictor-hunt" 1.72.1, "oolite-nova" 1.72.1, "oolite-thargoid-plans" 1.72.1, "oolite-trumbles" 1.72.1, "Pi-Forty-Two Con stores"
[dataCache.willWrite]: About to write data cache.
[dataCache.write.success]: Wrote data cache.
[snapshot]: >>>>> Snapshot 1220 x 797 file path chosen = /Applications/Oolite/oolite-079.png

Closing log at 2009-01-30 10:54:11 -0500.
"All is for the best in this best of all possible worlds..."
Dr.Pangloss, Voltaire's 'Candide'.

Image
User avatar
Ark
---- E L I T E ----
---- E L I T E ----
Posts: 664
Joined: Sun Dec 09, 2007 8:22 am
Location: Athens Greece

Post by Ark »

Pangloss wrote:
Scrap that. Here's the Latest log...
[log.header]: Opening log for Oolite version 1.72.1 (x86-32 test release) under Mac OS X Version 10.4.11 (Build 8S2167) at 2009-01-30 10:52:41 -0500.
Machine type: iMac5,1, 1024 MiB memory, 2 x x86 (Core 2/Merom) @ 2000 MHz.
Note that the contents of the log file can be adjusted by editing logcontrol.plist.

[rendering.opengl.version]: OpenGL renderer version: 2.0.0 ("2.0 ATI-1.4.56")
Vendor: ATI Technologies Inc.
Renderer: ATI Radeon X1600 OpenGL Engine
[rendering.opengl.extensions]: OpenGL extensions (95):
GL_ARB_transpose_matrix GL_ARB_vertex_program GL_ARB_vertex_blend GL_ARB_window_pos GL_ARB_shader_objects GL_ARB_vertex_shader GL_EXT_multi_draw_arrays GL_EXT_clip_volume_hint GL_EXT_rescale_normal GL_EXT_draw_range_elements GL_EXT_fog_coord GL_EXT_gpu_program_parameters GL_APPLE_client_storage GL_APPLE_specular_vector GL_APPLE_transform_hint GL_APPLE_packed_pixels GL_APPLE_fence GL_APPLE_vertex_array_object GL_APPLE_vertex_program_evaluators GL_APPLE_element_array GL_APPLE_flush_render GL_NV_texgen_reflection GL_NV_light_max_exponent GL_IBM_rasterpos_clip GL_SGIS_generate_mipmap GL_ARB_shading_language_100 GL_ARB_imaging GL_ARB_point_parameters GL_ARB_texture_env_crossbar GL_ARB_texture_border_clamp GL_ARB_multitexture GL_ARB_texture_env_add GL_ARB_texture_cube_map GL_ARB_texture_env_dot3 GL_ARB_multisample GL_ARB_texture_env_combine GL_ARB_texture_compression GL_ARB_texture_mirrored_repeat GL_ARB_shadow GL_ARB_depth_texture GL_ARB_shadow_ambient GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_occlusion_query GL_ARB_point_sprite GL_ARB_texture_non_power_of_two GL_ARB_vertex_buffer_object GL_ARB_pixel_buffer_object GL_ARB_draw_buffers GL_ARB_shader_texture_lod GL_EXT_compiled_vertex_array GL_EXT_framebuffer_object GL_EXT_texture_rectangle GL_ARB_texture_rectangle GL_EXT_texture_env_add GL_EXT_blend_color GL_EXT_blend_minmax GL_EXT_blend_subtract GL_EXT_texture_lod_bias GL_EXT_abgr GL_EXT_bgra GL_EXT_stencil_wrap GL_EXT_texture_filter_anisotropic GL_EXT_separate_specular_color GL_EXT_secondary_color GL_EXT_blend_func_separate GL_EXT_shadow_funcs GL_EXT_stencil_two_side GL_EXT_texture_compression_s3tc GL_EXT_texture_compression_dxt1 GL_EXT_blend_equation_separate GL_EXT_texture_mirror_clamp GL_EXT_packed_depth_stencil GL_APPLE_flush_buffer_range GL_APPLE_ycbcr_422 GL_APPLE_vertex_array_range GL_APPLE_texture_range GL_APPLE_float_pixels GL_ATI_texture_float GL_ARB_texture_float GL_APPLE_pixel_buffer GL_NV_blend_square GL_NV_fog_distance GL_ATI_texture_mirror_once GL_ATI_text_fragment_shader GL_ATI_blend_equation_separate GL_ATI_blend_weighted_minmax GL_ATI_texture_env_combine3 GL_ATI_separate_stencil GL_ATI_texture_compression_3dc GL_SGIS_texture_edge_clamp GL_SGIS_texture_lod GL_SGI_color_matrix
[searchPaths.dumpAll]: ---> OXP search paths:
(
"/Applications/Oolite/Oolite.app/Contents/Resources",
"/Applications/Oolite/AddOns",
"/Users/Shawn/.Oolite/AddOns",
"/Users/Shawn/Library/Application Support/Oolite/AddOns",
"/Applications/Oolite/AddOns/YOUR_AD_HERE.oxp",
"/Applications/Oolite/AddOns/YOUR_AD_HERE_set_A.oxp",
"/Applications/Oolite/AddOns/YOUR_AD_HERE_set_B.oxp",
"/Applications/Oolite/AddOns/YOUR_AD_HERE_set_C.oxp",
"/Applications/Oolite/AddOns/YOUR_AD_HERE_set_D.oxp",
"/Applications/Oolite/AddOns/YOUR_AD_HERE_set_F.oxp"
)
[dataCache.upToDate]: Data cache is up to date.
[script.load.world.listAll]: Loaded 6 world scripts: "oolite-cloaking-device" 1.72.1, "oolite-constrictor-hunt" 1.72.1, "oolite-nova" 1.72.1, "oolite-thargoid-plans" 1.72.1, "oolite-trumbles" 1.72.1, "Pi-Forty-Two Con stores"
[dataCache.willWrite]: About to write data cache.
[dataCache.write.success]: Wrote data cache.
[snapshot]: >>>>> Snapshot 1220 x 797 file path chosen = /Applications/Oolite/oolite-079.png

Closing log at 2009-01-30 10:54:11 -0500.
The log is clear becouse oolite verifies the oxps only during a Cache update. Please Pangloss start oolite by pressing shift, exit and post the log again.
For the record by pressing the shift you force oolite to performe a cache update.
Finally pangloss I am afraid that the new version of dancing chicken has the same problem :cry:

@DaddyHoggy:About the simple shader mode you mention i do not know what to say. Most of the times i play oolite in simble mode due to the lighting problems in shipwards but do not forget that we have a deferent port of oolite.Now that you mentioned it linux oolite didn't have shaders until recently so in a way you do not test only the wip but also shaders in oolite linux. Pesonally i do not believe that there is a better oxp for testing shaders. Also about the performance If you have system redux uninstall it temporarily and give it a try. In my system high nebula effects used to cause low performance in previous versions of oolite. Also systems redux do some triks with the illumination of the system.As for the switching from off to simple or full shaders mode you are right. The changes do not apply immediately. You have to exit and reenter oolite or performed o hyperspace jump.

@Moderators, Administrators: Sorry about the huge image. I play oolite in 1680 x1050 and even my desktop has the same resolution. So from my point of view everything was normal :cry: . Next time i will resize the image
User avatar
Tivva
---- E L I T E ----
---- E L I T E ----
Posts: 279
Joined: Wed Sep 03, 2008 5:32 pm
Location: Right behind you in a cloaked Thargoid Warship prototype

Post by Tivva »

Pangloss wrote:
Also i need the log (but i have no idea where you can find it on a Mac)
Finder~Places~Library\Logs\oolite\latest.log
User avatar
Tivva
---- E L I T E ----
---- E L I T E ----
Posts: 279
Joined: Wed Sep 03, 2008 5:32 pm
Location: Right behind you in a cloaked Thargoid Warship prototype

Post by Tivva »

DaddyHoggy wrote:
The clamour of Mac users willing to test this WIP is somewhat underwhelming... :?
i've just pm'd Ark

Where do I find the WIP for testing?

Not read this thread for a few days.....sorry
Tivva
User avatar
Tivva
---- E L I T E ----
---- E L I T E ----
Posts: 279
Joined: Wed Sep 03, 2008 5:32 pm
Location: Right behind you in a cloaked Thargoid Warship prototype

Post by Tivva »

Tivva wrote:
DaddyHoggy wrote:
The clamour of Mac users willing to test this WIP is somewhat underwhelming... :?
i've just pm'd Ark

Where do I find the WIP for testing?

Not read this thread for a few days.....sorry
Tivva
Ark you have mail
Hope it helps
User avatar
Tivva
---- E L I T E ----
---- E L I T E ----
Posts: 279
Joined: Wed Sep 03, 2008 5:32 pm
Location: Right behind you in a cloaked Thargoid Warship prototype

Post by Tivva »

Ark
You have new mail
Chris
User avatar
Ark
---- E L I T E ----
---- E L I T E ----
Posts: 664
Joined: Sun Dec 09, 2007 8:22 am
Location: Athens Greece

Post by Ark »

At least and thanks to Tivva we have a log that show us the problem:

Code: Select all

[dataCache.rebuild.explicitFlush]: Cache explicitly flushed with shift key. Rebuilding from scratch. 
[shipData.load.begin]: Loading ship data... 
[plist.parse.foundation.failed]: Failed to parse /Users/chris/Library/Application Support/Oolite/AddOns/YOUR_AD_HERE_set_A.oxp/Config/shipdata.plist as a property list using Foundation. Retrying using homebrew parser. WARNING: the homebrew parser is deprecated and will be removed in a future version of Oolite. 
XML parser error: 
Unexpected character { at line 1 
Old-style plist parser error: 
Missing ';' on line 155 

[plist.homebrew.parseError]: Property list isn't in XML format, homebrew parser can't help you. 
[plist.parse.foundation.failed]: Failed to parse /Users/chris/Library/Application Support/Oolite/AddOns/YOUR_AD_HERE_set_B.oxp/Config/shipdata.plist as a property list using Foundation. Retrying using homebrew parser. WARNING: the homebrew parser is deprecated and will be removed in a future version of Oolite. 
XML parser error: 
Unexpected character { at line 1 
Old-style plist parser error: 
Missing ';' on line 155 

[plist.homebrew.parseError]: Property list isn't in XML format, homebrew parser can't help you. 
[plist.parse.foundation.failed]: Failed to parse /Users/chris/Library/Application Support/Oolite/AddOns/YOUR_AD_HERE_set_C.oxp/Config/shipdata.plist as a property list using Foundation. Retrying using homebrew parser. WARNING: the homebrew parser is deprecated and will be removed in a future version of Oolite. 
XML parser error: 
Unexpected character { at line 1 
Old-style plist parser error: 
Missing ';' on line 155 

[plist.homebrew.parseError]: Property list isn't in XML format, homebrew parser can't help you. 
[plist.parse.foundation.failed]: Failed to parse /Users/chris/Library/Application Support/Oolite/AddOns/YOUR_AD_HERE_set_D.oxp/Config/shipdata.plist as a property list using Foundation. Retrying using homebrew parser. WARNING: the homebrew parser is deprecated and will be removed in a future version of Oolite. 
XML parser error: 
Unexpected character { at line 1 
Old-style plist parser error: 
Missing ';' on line 155 

[plist.homebrew.parseError]: Property list isn't in XML format, homebrew parser can't help you. 
[script.load.world.listAll]: Loaded 6 world scripts: "oolite-cloaking-device" 1.72.2, "oolite-constrictor-hunt" 1.72.2, "oolite-nova" 1.72.2, "oolite-thargoid-plans" 1.72.2, "oolite-trumbles" 1.72.2, "Pi-Forty-Two Con stores" 
[dataCache.willWrite]: About to write data cache. 
[dataCache.write.success]: Wrote data cache. 
[Pi-Forty-Two Con stores]: Adding constore with player launching from station 
[script.addShips.failed]: SCRIPT ERROR in <anonymous actions> ***** CANNOT addShipsAt: 'constore 1 pwu 0.000000 0.000000 1.050000' (should be addShipsAt: role number coordinate_system x y z) 

Closing log at 2009-01-31 12:04:08 +0000.
but since the Unexpected character { at line 1 is not unexpected at all and we had no similar problems in windows or unix i suspect that the edititor i am using (windows notpad) somehow manages to pass a hidden character or something and although windows and unix are immune macs can not recognize the shipdata.plist in all the sets.
My recommentation is to copy a shipdata.plist file from another oxp to YOUR_AD_HERE_set_A.oxp\config, delete all the contex and copy & paste the following:

Code: Select all

{
"yah_set_A_griff_station_bbsurround_1x1" = 
	{
	model = "yah_griff_station_bbsurround_1x1.dat"; 
	roles = "yah_set_A_constore_subent";	

	shaders = 
		{ 
            "yah_griff_station_top.png" = 
			{ 
                vertex_shader = "ahruman-generic.vertex"; 
                fragment_shader = "yah_griff_station_hull.fragment"; 
                textures = ("yah_griff_station_top.png");
			}; 
		}; 
	};	
	
"yah_set_A_griff_station_bbsurround_1x2" = 
	{
	model = "yah_griff_station_bbsurround_1x2.dat"; 
	roles = "yah_set_A_constore_subent";	

	shaders = 
		{ 
            "yah_griff_station_top.png" = 
			{ 
                vertex_shader = "ahruman-generic.vertex"; 
                fragment_shader = "yah_griff_station_hull.fragment"; 
                textures = ("yah_griff_station_top.png");
			}; 
		}; 
	};	   

"reference_yah_set_A_griff_station_bb_1x1_screen" = 
	{
	ai_type = "nullAI.plist";
	model = "yah_griff_station_bbsurround_1x1_screen.dat"; 
	roles = "yah_set_A_constore_subent";
	};

"reference_yah_set_A_griff_station_bb_1x2_screen" = 
	{
	ai_type = "nullAI.plist";
	model = "yah_griff_station_bbsurround_1x2_screen.dat"; 
	roles = "yah_set_A_constore_subent";
	};	
	
"yah_set_A_small_ad" = 
	{
	like_ship = "reference_yah_set_A_griff_station_bb_1x1_screen";
	shaders = 
    	{ 
        "yah_griff_no_shader_screen.png" = 
        	{ 
            vertex_shader = "yah_griff_station_animated_w_rollbars.vertex"; 
            fragment_shader = "yah_griff_station_animated_w_rollbars.fragment"; 
            
			textures = ({name = "yah_set_A_ad_small_2frames.png"; repeat_t = "yes";});
            	uniforms = 
            	{ 
				FrameCount = { type = "float"; value = 2.0; };
				TimePerFrame = { type = "float"; value = 2.0; };				
                		uTime = "timeElapsedSinceSpawn"; 
            	}; 
        	}; 
	};	
	};

"yah_set_A_firm_ad" = 
	{
	like_ship = "reference_yah_set_A_griff_station_bb_1x2_screen";
	shaders = 
    	{ 
        "yah_griff_no_shader_screen.png" = 
        { 
            vertex_shader = "yah_griff_station_animated.vertex"; 
            fragment_shader = "yah_griff_station_animated_billboard.fragment"; 
            
			textures = ({name = "yah_set_A_firmad_2frames.png"; repeat_t = "yes";});			
            	uniforms = 
            { 
				FrameCount = { type = "float"; value = 2.0; };
				TimePerFrame = { type = "float"; value = 1.0; };				
                		uTime = "timeElapsedSinceSpawn"; 
            }; 
        }; 
	};	
	};	

"yah_set_A_large_ad" = 
	{
	like_ship = "reference_yah_set_A_griff_station_bb_1x2_screen";
	shaders = 
    	{ 
        "yah_griff_no_shader_screen.png" = 
        { 
            vertex_shader = "yah_griff_station_animated_w_rollbars.vertex"; 
            fragment_shader = "yah_griff_station_animated_w_rollbars.fragment"; 
            
			textures = ({name = "yah_set_A_ad_large_2frames.png"; repeat_t = "yes";});			
            	uniforms = 
            	{ 
				FrameCount = { type = "float"; value = 2.0; };
				TimePerFrame = { type = "float"; value = 0.4; };				
                		uTime = "timeElapsedSinceSpawn"; 
            	}; 
        }; 
	};	
	};		

"yah_set_A_griff_station_roof_billboard" = 
	{
	ai_type = "nullAI.plist";
	model = "yah_set_A_griff_station_roof_billboard.dat"; 
	roles = "yah_set_A_constore_subent";
	shaders = 
    	{ 
        "yah_set_A_griff_station_no_shader_roof_billboard.png" = 
        { 
            vertex_shader = "yah_griff_station_animated.vertex"; 
            fragment_shader = "yah_griff_station_animated_billboard.fragment"; 
            
            textures = ("yah_set_A_griff_station_roof_billboard.png"); 
            uniforms = 
            	{ 
				FrameCount = { type = "float"; value = 8.0; };
				TimePerFrame = { type = "float"; value = 0.4; };				
                		uTime = "timeElapsedSinceSpawn"; 
            	}; 
        }; 
	};	
	};	

/* That's it for the adds! here's the rest of the info to piece the rest of the station together */	

"yah_set_A_griff_station_top" = 
	{
	model = "yah_griff_station_top.dat"; 
	roles = "yah_set_A_constore_subent";
	smooth = "false";	
	shaders = 
		{ 
            "yah_griff_station_top.png" = 
			{ 
                vertex_shader = "ahruman-generic.vertex"; 
                fragment_shader = "yah_griff_station_top_section.fragment"; 
                textures = ("yah_griff_station_top.png", "yah_griff_station_paint_mask.png");
		    uniforms = 
				{ 
				uTime = "universalTime";
				hull_heat_level = "hullHeatLevel";	 				
				MainhullColor = { type = vector; value = "1.0 0.4 0.0"; };
				DecalColor = { type = vector; value = "0.0588 0.6784 0.0"; };
				}	
			}; 
		}; 
	};	
	
"yah_set_A_griff_station_subents" = 
	{
	model = "yah_griff_station_subents.dat"; 
	roles = "yah_set_A_constore_subent";	
	shaders = 
		{ 
            "yah_griff_station_subents.png" = 
			{ 
                vertex_shader = "ahruman-generic.vertex"; 
                fragment_shader = "yah_griff_station_hull.fragment"; 
                textures = ("yah_griff_station_subents.png");
			}; 
		}; 
	};		
	
"yah_set_A_griff_station_antenna" = 
	{
	model = "yah_griff_station_antenna.dat"; 
	roles = "yah_set_A_constore_subent";	
	shaders = 
		{ 
            "yah_griff_station_antenna.png" = 
			{ 
                vertex_shader = "ahruman-generic.vertex"; 
                fragment_shader = "yah_griff_station_antenna.fragment"; 
                textures = ("yah_griff_station_antenna.png", "yah_griff_station_antenna_effects.png");
		    uniforms = 
            		{ 
                		uTime = "timeElapsedSinceSpawn";
				uReciprocalFrequency = { type = "float"; value = 1.0; };
            		}; 	
			}; 
		}; 
	};	

"yah_set_A_griff_station_baydoor_flashers" = 
	{
	ai_type = "nullAI.plist";
	model = "yah_griff_station_baydoor_flashers.dat"; 
	roles = "yah_set_A_constore_subent";
	shaders = 
    	{ 
        "yah_griff_no_shader_baydoor_flashers.png" = 
        { 
            vertex_shader = "yah_griff_station_animated.vertex"; 
            fragment_shader = "yah_griff_station_flashers.fragment"; 
            textures = ("yah_griff_station_baydoor_flashers.png"); 
            uniforms = 
            		{ 
				FrameCount = { type = "float"; value = 4.0; };
				TimePerFrame = { type = "float"; value = 0.8; };				
                		uTime = "timeElapsedSinceSpawn"; 
            		}; 
        }; 
	};	
	};		
	
"yah_set_A_griff_station_glowads" = 
	{
	model = "yah_set_A_griff_station_glowads.dat"; 
	roles = "yah_set_A_constore_subent";
	shaders = 
		{ 
            "yah_set_A_griff_station_glow_ads.png" = 
			{ 
                vertex_shader = "ahruman-generic.vertex"; 
                fragment_shader = "yah_griff_station_hull.fragment"; 
                textures = ("yah_set_A_griff_station_glow_ads.png");
			}; 
		}; 
	};	
	
"yah_set_A_griff_station_adring" = 
	{
	ai_type = "nullAI.plist";
	model = "yah_set_A_griff_station_adring.dat"; 
	roles = "yah_set_A_constore_subent";
	smooth = "true";
	shaders = 
    	{ 
        "yah_set_A_griff_station_adring.png" = 
        { 
            vertex_shader = "yah_griff_station_adring.vertex"; 
            fragment_shader = "yah_griff_station_adring.fragment"; 
            textures = ({name = "yah_set_A_griff_station_adring.png"; repeat_s = "yes";});
            uniforms = 
            { 
                uTime = "timeElapsedSinceSpawn"; 
            }; 
        }; 
	};	
	};	
	
"yah_set_A_griff_station_adring_sides" = 
	{
	model = "yah_griff_station_adring_sides.dat"; 
	roles = "yah_set_A_constore_subent";	
	shaders = 
		{ 
            "yah_griff_station_subents.png" = 
			{ 
                vertex_shader = "ahruman-generic.vertex"; 
                fragment_shader = "yah_griff_station_hull.fragment"; 
                textures = ("yah_griff_station_subents.png");
			}; 
		}; 
	};	

"yah_set_A_griff_station_dockingbay" = 
	{
	ai_type = "dumbAI.plist";
	model = "yah_griff_coriolis_dockingbay.dat"; 
	roles = "yah_set_A_constore_docking-slit";
	shaders = 
		{ 
            "yah_griff_coriolis_docking_bay.png" = 
			{ 
                vertex_shader = "yah_griff_coriolis_dockingbay.vertex"; 
                fragment_shader = "yah_griff_coriolis_dockingbay.fragment"; 
                textures = ("yah_griff_coriolis_docking_bay.png"); 
			}; 
		}; 
	};
	
"yah_set_A_constore" = 
	{
	ai_type = "yah_constoreAI.plist";
	beacon = "Con-store";
	script = "yah_constore_facing.js";
	bounty = 0;
	cargo_type = "CARGO_NOT_CARGO";
	defense_ship_role = pi42security;
	energy_recharge_rate = 8;
	equipment_price_factor = 1.5;
	equivalent_tech_level = 0;
	forward_weapon_type = "WEAPON_NONE";
	frangible = 0;
	has_ecm = yes;
	has_escape_pod = no;
	has_scoop = no;
	max_defense_ships = 8;
	max_energy = 12000;
	max_flight_pitch = 8;
	max_flight_roll = 8;
	max_flight_speed = 0;
	missiles = 0;	
	model = "yah_griff_station_bottom.dat"; 
	name = "Pi-42 Con Store";
	port_radius = 500;
	roles = "constore pi47 station(0.0000001)";	
	scanClass = "CLASS_STATION";
	rotating = yes;
	smooth = "false";
	thrust = 100;
	subentities = (
			"yah_set_A_griff_station_top                0 0 0         1 0 0 0",
			"yah_set_A_griff_station_subents            0 0 0         1 0 0 0",
			"yah_set_A_griff_station_antenna            0 0 0         1 0 0 0",
			"yah_set_A_griff_station_baydoor_flashers   0 0 0         1 0 0 0",
			"yah_set_A_griff_station_glowads            0 0 0         1 0 0 0",
			"yah_set_A_griff_station_adring             0 0 0         1 0 0 0",
			"yah_set_A_griff_station_adring_sides       0 0 0         1 0 0 0",
			"yah_set_A_griff_station_roof_billboard     0 0 0         1 0 0 0",
			"yah_set_A_griff_station_dockingbay         0 0 1128.55   1 0 0 0",	

    /*	There are 3 'mounts' for animated ads on the station, these are listed below:-
        	First in list = 1x1 dimension ad board, 2nd & 3rd = 1x2 dimension ad boards 
    */
   
			"yah_set_A_griff_station_bbsurround_1x1 -202.0812 212.202 181.7206 0.3987 0 0 0.917",
			"yah_set_A_griff_station_bbsurround_1x2  221.3929 -177.1714 -233.5789 0.8987 0 0 -0.43837",
			"yah_set_A_griff_station_bbsurround_1x2  221.3929 -177.1714  263.2954 0.8987 0 0 -0.43837",

			"yah_set_A_small_ad  	-202.0812 212.202 181.7206 0.3987 0 0 0.917",
			"yah_set_A_firm_ad	221.3929 -177.1714 -233.5789 0.8987 0 0 -0.43837",
			"yah_set_A_large_ad      221.3929 -177.1714  263.2954 0.8987 0 0 -0.43837",
				);	   
	shaders = 
		{ 
            "yah_griff_station_bottom.png" = 
			{ 
                vertex_shader = "ahruman-generic.vertex"; 
                fragment_shader = "yah_griff_station_bottom_section.fragment"; 
                textures = ("yah_griff_station_bottom.png", "yah_griff_station_paint_mask.png");
		    uniforms = 
				{ 
				uTime = "universalTime";
				hull_heat_level = "hullHeatLevel";	 				
				MainhullColor = { type = vector; value = "1.0 0.4 0.0"; };
				DecalColor = { type = vector; value = "0.0588 0.6784 0.0"; };
				}
			}; 
		}; 
	};

"yah_set_A_sidewinder_defender" =
	{
	aft_eject_position = "0.0 7.5 -18.0";
	ai_type = "PoliceInterceptAI.plist";
	bounty = 0;
	cargo_type = "CARGO_NOT_CARGO";
	energy_recharge_rate = 2.5;
	exhaust = ("0.0 0.0 -17.0 8.0 6.0 12.0");
	forward_weapon_type = "WEAPON_MILITARY_LASER";
	likely_cargo = 0;
	max_cargo = 0;
	max_energy = 250;
	max_flight_pitch = 1.6;
	max_flight_roll = 2.8;
	max_flight_speed = 370;
	missile_launch_position = "0.0 -3.0 6.0";
	missiles = 1;
	model = "yah_set_A_sidewinder_defender.dat";
	name = "Sidewinder Pi-42 Security";
	roles = "pi42security";
	thrust = 37;
	weapon_position_aft = "0.0 -6.5 -17.5";
	weapon_position_forward = "0.0 -4.5 17.5";
	weapon_position_port = "-24.25 0.0 0.0";
	weapon_position_starboard = "24.25 0.0 0.0";
	};

"yah_set_A_01-navbeacon" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);			 
	ai_type = "buoyAI.plist";
	beacon = "N0100 Navigation Buoy";
	bounty = 0;
	cargo_type = "CARGO_NOT_CARGO";
	energy_recharge_rate = 2;
	forward_weapon_type = "WEAPON_NONE";
	likely_cargo = 0;
	max_cargo = 0;
	max_energy = 750;
	max_flight_pitch = 2;
	max_flight_roll = 2;
	max_flight_speed = 0;
	missiles = 0;
	model = "yah_set_A_01-navbeacon.dat"; 
	name = "Navigation Buoy";	
	roles = "buoy(1.0)";
	subentities = (
			"*FLASHER* 0 135 33.5 60 0 0 75",
			"*FLASHER* 0 -135 33.5 60 0 0 75",
			"*FLASHER* 0 135 -33.5 60 0 0 75",
			"*FLASHER* 0 -135 -33.5 60 0 0 75",

			"*FLASHER* 250 135 33.5 60 0 0 75",
			"*FLASHER* 250 -135 33.5 60 0 0 75",
			"*FLASHER* 250 135 -33.5 60 0 0 75",
			"*FLASHER* 250 -135 -33.5 60 0 0 75",

			"*FLASHER* -250 135 33.5 60 0 0 75",
			"*FLASHER* -250 -135 33.5 60 0 0 75",
			"*FLASHER* -250 135 -33.5 60 0 0 75",
			"*FLASHER* -250 -135 -33.5 60 0 0 75",
				);
	thrust = 100;
	unpiloted = yes;
	weapon_energy = 0;
	weapon_offset_x = 0;
	};

"yah_set_A_02-navbeacon" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);
	like_ship = "yah_set_A_01-navbeacon";
	model = "yah_set_A_02-navbeacon.dat";
	roles = "buoy(1.0)";
	};

"yah_set_A_03-navbeacon" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);
	like_ship = "yah_set_A_01-navbeacon";
	model = "yah_set_A_03-navbeacon.dat";
	roles = "buoy(1.0)";
	};

"yah_set_A_04-navbeacon" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);
	like_ship = "yah_set_A_01-navbeacon";
	model = "yah_set_A_04-navbeacon.dat";
	roles = "buoy(1.0)";
	};

"yah_set_A_05-navbeacon" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);
	like_ship = "yah_set_A_01-navbeacon";
	model = "yah_set_A_05-navbeacon.dat";
	roles = "buoy(1.0)";
	};

"yah_set_A_06-navbeacon" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);
	like_ship = "yah_set_A_01-navbeacon";
	model = "yah_set_A_06-navbeacon.dat";
	roles = "buoy(1.0)";
	};

"yah_set_A_07-navbeacon" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);
	like_ship = "yah_set_A_01-navbeacon";
	model = "yah_set_A_07-navbeacon.dat";
	roles = "buoy(1.0)";
	};

"yah_set_A_08-navbeacon" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);
	like_ship = "yah_set_A_01-navbeacon";
	model = "yah_set_A_08-navbeacon.dat";
	roles = "buoy(1.0)";
	};

"yah_set_A_09-navbeacon" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);
	like_ship = "yah_set_A_01-navbeacon";
	model = "yah_set_A_09-navbeacon.dat";
	roles = "buoy(1.0)";
	};

"yah_set_A_10-navbeacon" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);
	like_ship = "yah_set_A_01-navbeacon";
	model = "yah_set_A_10-navbeacon.dat";
	roles = "buoy(1.0)";
	};

"yah_set_A_11-wpbuoy" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);			 
	ai_type = "buoyAI.plist";
	beacon = "W0100 Navigation Buoy (Witchpoint)";
	bounty = 0;
	cargo_type = "CARGO_NOT_CARGO";
	energy_recharge_rate = 2;
	forward_weapon_type = "WEAPON_NONE";
	likely_cargo = 0;
	max_cargo = 0;
	max_energy = 750;
	max_flight_pitch = 2;
	max_flight_roll = 2;
	max_flight_speed = 0;
	missiles = 0;
	model = "yah_set_A_11-wpbuoy.dat"; 
	name = "Witchpoint Beacon";	
	roles = "buoy-witchpoint(1.0)";
	subentities = (
			"*FLASHER* 0 270 67 60 0 0 150",
			"*FLASHER* 0 -270 67 60 0 0 150",
			"*FLASHER* 0 270 -67 60 0 0 150",
			"*FLASHER* 0 -270 -67 60 0 0 150",

			"*FLASHER* 500 270 67 60 0 0 150",
			"*FLASHER* 500 -270 67 60 0 0 150",
			"*FLASHER* 500 270 -67 60 0 0 150",
			"*FLASHER* 500 -270 -67 60 0 0 150",

			"*FLASHER* -500 270 67 60 0 0 150",
			"*FLASHER* -500 -270 67 60 0 0 150",
			"*FLASHER* -500 270 -67 60 0 0 150",
			"*FLASHER* -500 -270 -67 60 0 0 150",
				);
	thrust = 100;
	unpiloted = yes;
	weapon_energy = 0;
	weapon_offset_x = 0;
	};

"yah_set_A_12-wpbuoy" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);
	like_ship = "yah_set_A_11-wpbuoy";
	model = "yah_set_A_12-wpbuoy.dat";
	roles = "buoy-witchpoint(1.0)";
	};

"yah_set_A_13-wpbuoy" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);
	like_ship = "yah_set_A_11-wpbuoy";
	model = "yah_set_A_13-wpbuoy.dat";
	roles = "buoy-witchpoint(1.0)";
	};

"yah_set_A_14-wpbuoy" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);
	like_ship = "yah_set_A_11-wpbuoy";
	model = "yah_set_A_14-wpbuoy.dat";
	roles = "buoy-witchpoint(1.0)";
	};

"yah_set_A_15-wpbuoy" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);
	like_ship = "yah_set_A_11-wpbuoy";
	model = "yah_set_A_15-wpbuoy.dat";
	roles = "buoy-witchpoint(1.0)";
	};

"yah_set_A_16-wpbuoy" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);
	like_ship = "yah_set_A_11-wpbuoy";
	model = "yah_set_A_16-wpbuoy.dat";
	roles = "buoy-witchpoint(1.0)";
	};

"yah_set_A_17-wpbuoy" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);
	like_ship = "yah_set_A_11-wpbuoy";
	model = "yah_set_A_17-wpbuoy.dat";
	roles = "buoy-witchpoint(1.0)";
	};

"yah_set_A_18-wpbuoy" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);
	like_ship = "yah_set_A_11-wpbuoy";
	model = "yah_set_A_18-wpbuoy.dat";
	roles = "buoy-witchpoint(1.0)";
	};

"yah_set_A_19-wpbuoy" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);
	like_ship = "yah_set_A_11-wpbuoy";
	model = "yah_set_A_19-wpbuoy.dat";
	roles = "buoy-witchpoint(1.0)";
	};

"yah_set_A_20-wpbuoy" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);
	like_ship = "yah_set_A_11-wpbuoy";
	model = "yah_set_A_20-wpbuoy.dat";
	roles = "buoy-witchpoint(1.0)";
	};

"yah_set_A_21-wpbuoy" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);
	like_ship = "yah_set_A_11-wpbuoy";
	model = "yah_set_A_21-wpbuoy.dat";
	roles = "buoy-witchpoint(1.0)";
	};

"yah_set_A_22-wpbuoy" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);
	like_ship = "yah_set_A_11-wpbuoy";
	model = "yah_set_A_22-wpbuoy.dat";
	roles = "buoy-witchpoint(1.0)";
	};

"yah_set_A_23-wpbuoy" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);
	like_ship = "yah_set_A_11-wpbuoy";
	model = "yah_set_A_23-wpbuoy.dat";
	roles = "buoy-witchpoint(1.0)";
	};

"yah_set_A_24-wpbuoy" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);
	like_ship = "yah_set_A_11-wpbuoy";
	model = "yah_set_A_24-wpbuoy.dat";
	roles = "buoy-witchpoint(1.0)";
	};

"yah_set_A_25-wpbuoy" = 
	{
	conditions =	(
				"systemGovernment_number greaterthan 4"
				);
	like_ship = "yah_set_A_11-wpbuoy";
	model = "yah_set_A_25-wpbuoy.dat";
	roles = "buoy-witchpoint(1.0)";
	};

"yah_set_A_asteroid-billboard" =
	{
	conditions =	(
				"systemGovernment_number equal 7"
				);
	ai_type = "dumbAI.plist";
	bounty = 0;
	cargo_type = "CARGO_NOT_CARGO";
	energy_recharge_rate = 1.2;
	max_energy = 80;
	thrust = 0;
	model = "yah_asteroid-billboard.dat";
	name = "Asteroid Billboard";
	roles = "asteroid-billboard asteroid(0.1)";
	scanClass = "CLASS_ROCK";
	script = "yah_asteroid-billboard-setup.js";
	max_flight_pitch = 0.5;
	max_flight_roll = 0.5;
	max_flight_speed = 0;
	likely_cargo = 0;
	max_cargo = 0;
	no_boulders = yes;
	materials =
		{
		"screen-content" =
			{
			diffuse_map = "yah_ahruman-billboard-face-dead.png";
			shininess = 5;
			specular = (0.1, 0.1, 0.1);
			};
		"screen-surround" =
			{
			diffuse_map = "yah_ahruman-billboard-face-dead.png";
			shininess = 5;
			specular = (0.1, 0.1, 0.1);
			vertex_shader = "yah_ahruman-billboard.vertex";
			fragment_shader = "yah_ahruman-billboard-surround.fragment";
			};
		"display-bezel" =
			{
			/*	Most of the display bezel uses the lower-right pixel of
				the bezel texture as a solid colour, because 1. solid
				colour materials don’t mix well with shader materials in
				1.69.1 and earlier, and 2. it’s hard to match solid
				colours and texture colours in this modern era of β€œhelfulβ€
Last edited by Ark on Sat Jan 31, 2009 1:38 pm, edited 1 time in total.
Post Reply