Back to Index Page generated: Nov 12, 2024, 11:02:04 PM

Expansion Noshader Griff's alternate ships

Content

Manifest

from Expansion Manager's OXP list from Expansion Manifest
Description This bundle adds alternates of the coreships like clean and scuffed Cobra Mk1 & Mk3, clean Mambas and Fer-de-Lances and a different Viper model. It is based on the original shader models and textures from Griff's coreships and was remade to go along nicely with the default shipset of Oolite v1.80+ and/or for e.g. Computer with lowend graphics hardware. This bundle adds alternates of the coreships like clean and scuffed Cobra Mk1 & Mk3, clean Mambas and Fer-de-Lances and a different Viper model. It is based on the original shader models and textures from Griff's coreships and was remade to go along nicely with the default shipset of Oolite v1.80+ and/or for e.g. Computer with lowend graphics hardware.
Identifier oolite.oxp.amah.noshaders_alternateships oolite.oxp.amah.noshaders_alternateships
Title Noshader Griff's alternate ships Noshader Griff's alternate ships
Category Retextures Retextures
Author Michael -Amah- Doering Michael -Amah- Doering
Version 1.1.1 1.1.1
Tags ships ships
Required Oolite Version
Maximum Oolite Version
Required Expansions
Optional Expansions
Conflict Expansions
Information URL http://aegidian.org/bb/viewtopic.php?t=16898 n/a
Download URL https://wiki.alioth.net/img_auth.php/f/fb/Oolite.oxp.amah.noshaders_alternateships.oxz n/a
License CC-BY-NC-SA 3.0 CC-BY-NC-SA 3.0
File Size n/a
Upload date 1610873519

Documentation

Also read http://wiki.alioth.net/index.php/Noshader%20Griff's%20alternate%20ships

readme/


        

readme/Changelog.txt

v1.0.noshader		converted the original alternate ships for a noshadered ooniverse.
			edited shipyard.plist and shipdata.plist (mld)
v1.1.0.noshader		fixed old style subentities in shipdata.plist to make Oolite v1.81 happy
v1.1.1.noshader		fixed yet another warning Oolite v1.81+ bails out concerning "use strict"

readme/conversion.txt

Based on Instructions by Captain Solo:
(some additional effect map channels used for engine glow)


1) Load "diffuse.png" into GIMP.
2) Decompose to RGB layers. You don't need the greyscale alpha layer.
3) Compose to RGB.
4) Duplicate the background layer so you now have two layers.
5) Change the layer mode of the top layer to overlay.
6) Change the opacity setting to roughly between 70% and 80%.
7) Merge the top layer down. This is your base diffuse texture
8) Load "normal.png" into GIMP
9) Decompose to RGBA
10) Move the alpha channel to the top, select all and copy. 
11) Paste the copied greyscale image as a new image. This is your glow map.
12) Now back to the normal map layers, delete the alpha channel.
13) Compose to RGB
14) Under the colors menu select Desaturate, and choose desaturate by Luminosity.
15) Select all and copy. This is your pseudo relief texture.
16) Go back to your diffuse texture and Paste as new layer.
17) Change the layer mode to Grain Merge, and merge it down to the bottom layer.
*a) Load the "effects" texture
*b) decompose to RGB, remove the alpha layer
    copy the green layer and insert as new layer on the diffuse texture,
    change layer mode to overlay and opacity to 70%
    select invert colors from colors menu.
18) Now go to your greyscale glow map from step 11, select all and copy.
*d) back to the decomposed effects texture from *a)
*e) paste as new layer
*f) set layer mode of all layers to Screen
*g) Under the Image menu choose flatten image
*h) select all and copy.
19) Back to your diffuse texture, right click on the image, select Layer, then Mask and Add Layer Mask
20) Set the layer mask to Black.
21) Cntrl V - paste the glow map on top of the layer mask.
22) Anchor the floating layer to the background image.
23) You will see two representations in the layer dialog. Click on the left one.
24) Export as your new shaderless_diffuse texture.

Finally you will need to edit the shipdata.plist file and change the material section to the following:
materials = 
{ 
"Hull" = 
{ 
diffuse_map = "shaderless_diffuse.png"; 
specular_color = ( 0.2, 0.2, 0.2 ); 
shininess = 5; 
emission_map = { name = "shaderless_diffuse.png"; extract_channel = "a"; }; 
emission_modulate_color = (0.9926, 0.9686, 0.7325); 
}; 
};

Good luck.

readme/readme.txt

Griff's NoShader alternate ships.


An oxp for Oolite that adds Griff's alternative models of some core ships for no shadered Computers.
 
Overview:
Griff's fantastic models and textures for some alternate and extra ships.

In this OXP, only the textures were modified so they render well on GPU's that do not support OpenGL shading language.
The clever procedure how to convert was developed by Captain SOLO.

Requirements:
Tested with Oolite 1.80. No dependencies. 

Installation:

Credits or rather "Standing on shoulders of giants":
* Griff, for his marvelous normalmapped ships -> http://wiki.alioth.net/index.php/Griff_Industries 

* Captain Solo, who invented a clever way to convert them for computers with shaderless GPUs and helped me 
  extensively to explain how it was done for his noshader shipset (now default ships for 1.80)


License:
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License version 3.0.

Michael "Amah" Doering


 

Equipment

This expansion declares no equipment.

Ships

Name
Missile
noshaders_cobra_Mk3_alt_pirate-NPC_scuffed
noshaders_cobra_Mk3_alt_trader-NPC_clean
noshaders_cobra_Mk3_alt_trader-NPC_scuffed
noshaders_cobra_mk1_alt_npc_miner
noshaders_cobra_mk1_alt_npc_miner_scuffed
noshaders_cobra_mk1_alt_tex2_npc
noshaders_cobra_mk1_alt_tex2_npc_scuffed
noshaders_cobra_mk1_alt_tex3_npc
noshaders_cobra_mk1_alt_tex3_npc_scuffed
noshaders_cobra_mk1_alt_tex_npc
noshaders_cobra_mk1_alt_tex_npc_scuffed
noshaders_cobra_mk1_alt_tex_player
noshaders_cobra_mk1_alt_tex_player_scuffed
noshaders_ferdelance2013_NPC
noshaders_ferdelance2013_alt2_NPC
noshaders_ferdelance2013_alt3_NPC
noshaders_ferdelance2013_alt_NPC
noshaders_ferdelance2013_player
noshaders_mamba_clean_NPC
noshaders_mamba_clean_alt-NPC
noshaders_mamba_clean_alt2-NPC
noshaders_mamba_clean_alt3-NPC
noshaders_mamba_clean_escort-NPC
noshaders_mamba_clean_escort_alt-NPC
noshaders_mamba_clean_escort_alt2-NPC
noshaders_mamba_clean_escort_alt3-NPC
noshaders_mamba_clean_escort_alt4-NPC
Mamba
Cobra Mark III
noshaders_normalmapped_alt_cobra_mkIII_Multidecal_PLAYER_scuffed
Cobra Mark III
noshaders_viper_alt

Models

This expansion declares no models.

Scripts

Path
Scripts/noshaders_cobra_III_(alt)_externalMissiles.js
"use strict";
this.name				= "noshaders_cobra_III_(alt)_externalMissiles.js";
this.author				= "Thargoid";
this.copyright			= "Creative Commons: attribution, non-commercial, sharealike.";
this.description		= "Generic external missile launching script";
this.version			= "1.01";

this.shipSpawned = function()
	{ // just to ensure ship is fully loaded with selected missile type and nothing else
	if(this.ship.scriptInfo.missileRole) // missileRole should be defined in shipdata.plist
		{ this.missileRole = this.ship.scriptInfo.missileRole; }
	else
		{ this.missileRole = "EQ_MISSILE"; } // default to standard missile if not
    
    if (this.ship.scriptInfo.initialMissiles)
        {this.initialMissiles = parseInt(this.ship.scriptInfo.initialMissiles);}
    else
        {this.initialMissiles = this.ship.missileCapacity;};
    
	if (this.ship.missiles.length > 0) this.ship.awardEquipment("EQ_MISSILE_REMOVAL"); // remove all spawning missiles and restock with selected ones.
	var addCounter = 0; 
	for(addCounter = 0; addCounter < this.initialMissiles;addCounter++)
		{ this.ship.awardEquipment(this.missileRole); }
	}

this.shipFiredMissile = function(missile, target)
	{
	if(!this.ship.subEntities || this.ship.subEntities.length === 0) {return}; // if we've run out of sub-ents before we run out of missiles
	
	var subCounter = this.ship.subEntities.length - 1; // Set counter to number of sub-ents minus 1 (as entity array goes up from zero)
	for(subCounter = this.ship.subEntities.length - 1;subCounter>=0;subCounter--)
		{
		if(this.ship.subEntities[subCounter].hasRole(missile.primaryRole)) // if the sub-ent is the same as the missile being fired
			{
			missile.position = this.localToGlobal(this.ship.subEntities[subCounter].position); // move the fired missile to the sub-ent position
			missile.orientation = this.ship.subEntities[subCounter].orientation.multiply(this.ship.orientation); // point the missile in the right direction
			missile.desiredSpeed = missile.maxSpeed;
			this.ship.subEntities[subCounter].remove(); // remove the sub-ent version of the missile
			break; // come out of the loop, as we've done our swap
			}
		}
	}

this.localToGlobal = function(position)
	{ // sub-ent position is relative to mother, but for swapping we need the absolute global position
	let orientation = this.ship.orientation;
	return this.ship.position.add(position.rotateBy(orientation));
	}

this.shipTakingDamage = function(amount, fromEntity, damageType)
	{
	if(this.ship.missiles.length === 0 && this.ship.subEntities.length === 0) // if we're all out of missiles and any sub-entities, bail out.
		{ return; }
	
	this.missileSubs = 0;
	var subCounter = this.ship.subEntities.length - 1; // Set counter to number of sub-ents minus 1 (as entity array goes up from zero)
	for(subCounter = this.ship.subEntities.length - 1;subCounter>=0;subCounter--)
		{
		if(this.ship.subEntities[subCounter].hasRole(this.missileRole)) // if the sub-ent is a missile, count it
			{ this.missileSubs++; }
		}
	
	if(this.missileSubs === 0 && this.ship.subEntities.length === 0) // if we're all out of missiles and missile sub-entities, bail out.
		{ return; }
	
	if(this.missileSubs < this.ship.missiles.length) // if we've got more missiles than sub-entity missiles
		{
		this.ship.awardEquipment("EQ_MISSILE_REMOVAL"); // get rid of all missiles
		if(this.missileSubs > 0)
			{
			var missileCounter = 0; 
			for(missileCounter = 0;missileCounter<this.missileSubs;missileCounter++) // restock with the correct number of selected missile
				{ this.ship.awardEquipment(this.missileRole); }
			}
		return;	
		}
		
	if(this.missileSubs > this.ship.missiles.length) // if we've got less missiles than sub-entity missiles
		{
		this.difference = this.missileSubs - this.ship.missiles.length;
		var removeCounter = 0; 
		for(removeCounter = 0;removeCounter<this.difference;removeCounter++) // loop through however many subs we need to remove
				{
				var subCounter = this.ship.subEntities.length - 1; // Set counter to number of sub-ents minus 1 (as entity array goes up from zero)
				for(subCounter = this.ship.subEntities.length - 1;subCounter>=0;subCounter--)
					{
					if(this.ship.subEntities[subCounter].hasRole(this.missileRole)) // if the sub-ent is a missile, remove it
						{ 
						this.ship.subEntities[subCounter].remove(); 
						break;
						}
					}
				}
		return;		
		}	
	}