Back to Index |
Page generated: Jan 7, 2025, 2:02:46 AM |
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
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;
}
} |