Tinkerer's Workshop - OXP tweaking for fun and profit!
Moderators: winston, another_commander
Re: Tinkerer's Workshop - OXP tweaking for fun and profit!
Hello mohawk and welcome aboard,
There's a reason for additional planets to be like they are, but if you want to tweak and test different options here are a couple of tips that might work. Or not. No guarantees. These are 100% untested suggestions PMd to another enthusiastic tinkerer some time ago.
Make planets sun centric:
var planetPosition = directionV.multiply(distance).fromCoordinateSystem("psm");
->
var planetPosition = directionV.multiply(distance).fromCoordinateSystem("spm");
Spread the planets all around the spheres instead of the current umbrella like positioning:
var polar = Math.acos(1.4 * system.scrambledPseudoRandomNumber(galaxyNumber + 5 * (i + 1)) - 1);
->
var polar = Math.acos(2.0 * system.scrambledPseudoRandomNumber(galaxyNumber + 5 * (i + 1)) - 1);
Make sure the main planet is the closest to the sun
var baseOrbit = 5 * baseUnit;
->
var baseOrbit = system.mainPlanet.position.magnitude().fromCoordinateSystem("psm") + 5 * baseUnit;
Have fun .
There's a reason for additional planets to be like they are, but if you want to tweak and test different options here are a couple of tips that might work. Or not. No guarantees. These are 100% untested suggestions PMd to another enthusiastic tinkerer some time ago.
Make planets sun centric:
var planetPosition = directionV.multiply(distance).fromCoordinateSystem("psm");
->
var planetPosition = directionV.multiply(distance).fromCoordinateSystem("spm");
Spread the planets all around the spheres instead of the current umbrella like positioning:
var polar = Math.acos(1.4 * system.scrambledPseudoRandomNumber(galaxyNumber + 5 * (i + 1)) - 1);
->
var polar = Math.acos(2.0 * system.scrambledPseudoRandomNumber(galaxyNumber + 5 * (i + 1)) - 1);
Make sure the main planet is the closest to the sun
var baseOrbit = 5 * baseUnit;
->
var baseOrbit = system.mainPlanet.position.magnitude().fromCoordinateSystem("psm") + 5 * baseUnit;
Have fun .
Re: Tinkerer's Workshop - OXP tweaking for fun and profit!
You are nowBut as I said enough times already I am not a coder
Take it from a pro: you've scratched an itch, modified some code to your liking, tested it and made it work, then published it: you're a coder. Welcome
- Cody
- Sharp Shooter Spam Assassin
- Posts: 16081
- Joined: Sat Jul 04, 2009 9:31 pm
- Location: The Lizard's Claw
- Contact:
Re: Tinkerer's Workshop - OXP tweaking for fun and profit!
Cookies are in the jar - welcome aboard, Commander!
I would advise stilts for the quagmires, and camels for the snowy hills
And any survivors, their debts I will certainly pay. There's always a way!
And any survivors, their debts I will certainly pay. There's always a way!
Re: Tinkerer's Workshop - OXP tweaking for fun and profit!
Thank you all for the worm welcome, and for enhancing my Oolite experience with all those oxps!
I thought that if I let the main planet in it's original position there shouldn't be much of a hassle to ban the rest of the planets in unreachable for the npcs positions (unless there is a way to give them taurus drives. this.ship.maxSpeed is writable from 1.82 version I heard )
anyway thank you for the tips, I will give them a try
by reasons should I think cosmetic, or functional, like npc behaviour?There's a reason for additional planets to be like they are, but if you want to tweak and test different options here are a couple of tips that might work. Or not. No guarantees. These are 100% untested suggestions PMd to another enthusiastic tinkerer some time ago.
I thought that if I let the main planet in it's original position there shouldn't be much of a hassle to ban the rest of the planets in unreachable for the npcs positions (unless there is a way to give them taurus drives. this.ship.maxSpeed is writable from 1.82 version I heard )
anyway thank you for the tips, I will give them a try
Well I guess you are right. Not a decent one, but a coder neverthelessTake it from a pro: you've scratched an itch, modified some code to your liking, tested it and made it work, then published it: you're a coder. Welcome
I love cookies! Thank you!Cookies are in the jar - welcome aboard, Commander!
Re: Tinkerer's Workshop - OXP tweaking for fun and profit!
Mainly cosmetic. Redspear and I spent quite some time testing what looks good and what doesn't. The main culprit is the sun, being too close and quite small. It was poison for immersion to put planets near sun or behind it. The distances were limited so that in an unmodified game the farthest planet should not be more than 10 mins away. Or was if 15... .mohawk wrote:by reasons should I think cosmetic, or functional, like npc behaviour?
NPCs won't normally be visiting additional planets, they occupy the lanes.
Re: Tinkerer's Workshop - OXP tweaking for fun and profit!
And now that I started looking around may Addons folder, I remembered that I have changed the missile spoof to not automatically ECM when normal missiles are fired against me, because some large pirate groups would drive my energy level to the floor with their constant firing. Now all the missiles are treated equally and the flares give me enough time to press "e" when I see fit!
missile-spoof.js
missile-spoof.js
Code: Select all
this.shipAttackedWithMissile = function(missile, whom)
{
if(player.ship.fuel < 0.1 && player.ship.equipmentStatus("EQ_MISSILE_SPOOF") == "EQUIPMENT_OK")
{
if((player.ship.equipmentStatus("EQ_ECM") == "EQUIPMENT_OK"))
{
player.ship.fireECM();
player.consoleMessage("Fuel exausted. Cannot produce flares.",5);
}
}
else if(player.ship.fuel > 0.0 && player.ship.equipmentStatus("EQ_MISSILE_SPOOF") == "EQUIPMENT_OK")
{
player.ship.fuel -= 0.1;
system.legacy_addShipsWithinRadius("spoof_flare_package", 1, "abs", player.ship.position.subtract(player.ship.orientation.vectorUp().multiply(20)), 10);
}
}
this.playerBoughtEquipment = function(equipmentKey)
{
if(equipmentKey == ("EQ_MISSILE_SPOOF_REMOVAL"))
{
player.ship.removeEquipment("EQ_MISSILE_SPOOF");
player.ship.removeEquipment("EQ_MISSILE_SPOOF_REMOVAL");
player.credits += 1000;
}
}
Re: Tinkerer's Workshop - OXP tweaking for fun and profit!
That's good to know! I think that if they are far away enough they won't look that bad. Actually the numbers I posted, make most of them almost not visible, but They "feel" more right to me You know having to fly behind the sun in order to visit a distant planet!Mainly cosmetic. Redspear and I spent quite some time testing what looks good and what doesn't. The main culprit is the sun, being too close and quite small. It was poison for immersion to put planets near sun or behind it. The distances were limited so that in an unmodified game the farthest planet should not be more than 10 mins away. Or was if 15... .
NPCs won't normally be visiting additional planets, they occupy the lanes.
anyway I'll take a look at those formulas and maybe I end up to the same conclusion
Re: Tinkerer's Workshop - OXP tweaking for fun and profit!
In case anyone else is interested.
so after a lot of trial and error (not big news there!) I ended up with the following:
This layout makes the planets orbit the sun and are spread all around, In the same plane and not a sphere which I think is more realistic.
Although I have to agree that it looks strange when the planets are close So I would suggest something like :
baseOrbit = 15 * baseUnit
orrbitDifference = 18 * baseUnit
Now I am satisfied with my system layout. the planets are barely visible, and visiting them feels like quite a journey. (endless without the taurus to sun oxp) The planetary systems are now more specious (wonders if he is getting claustrophobic )
The last thing that I need is reason to visit those planets, like some prices bargain, or a package delivery or something.
So far I think that that the only oxp that would send me to an other planet is the in system taxi.
This did work as expected. The planets are orbiting the sun nowvar planetPosition = directionV.multiply(distance).fromCoordinateSystem("spm");
This did work to spread the planets in a sphere but it kinda looked weird to me. Plus all the planets were in the opposite side of the sun from the main planet.var polar = Math.acos(2.0 * system.scrambledPseudoRandomNumber(galaxyNumber + 5 * (i + 1)) - 1);
so after a lot of trial and error (not big news there!) I ended up with the following:
Code: Select all
var polar = (2.0 * Math.PI * system.scrambledPseudoRandomNumber(galaxyNumber + 5 * (i + 1)) - 1);
Code: Select all
var azimouth = 0;
This layout makes the planets orbit the sun and are spread all around, In the same plane and not a sphere which I think is more realistic.
Although I have to agree that it looks strange when the planets are close So I would suggest something like :
baseOrbit = 15 * baseUnit
orrbitDifference = 18 * baseUnit
Now I am satisfied with my system layout. the planets are barely visible, and visiting them feels like quite a journey. (endless without the taurus to sun oxp) The planetary systems are now more specious (wonders if he is getting claustrophobic )
This actually gave me an error saying system.mainPlanet.position.magnitude().fromCoordinateSystem is not a function or something, and I can not understand what I am doing wrong, But anyway I don't thing this is actually necessary because there is not enough room for a planet to fit between the main planet and the sun with the baseOrbit and orbitDifference values that I use. Not that I would mind because in my mind the closest to sun planet is not usually the one in the habitable zone.var baseOrbit = system.mainPlanet.position.magnitude().fromCoordinateSystem("psm") + 5 * baseUnit;
The last thing that I need is reason to visit those planets, like some prices bargain, or a package delivery or something.
So far I think that that the only oxp that would send me to an other planet is the in system taxi.
Re: Tinkerer's Workshop - OXP tweaking for fun and profit!
Glad you got it working, mohawk.
Now that you mention it, of course it does . Magnitude gives a scalar and that naturally has no fromCoordinateSystem function. I think I meant it to be system.mainPlanet.position.fromCoordinateSystem("psm").magnitude().mohawk wrote:This actually gave me an error saying system.mainPlanet.position.magnitude().fromCoordinateSystem is not a function...var baseOrbit = system.mainPlanet.position.magnitude().fromCoordinateSystem("psm") + 5 * baseUnit;
A bit of a shameless plug, but Stations for Extra Planets oxp puts stations to those far away planets and prices will get wilder the farther they are from the main planet. And you'll love the variety of those stations .mohawk wrote:The last thing that I need is reason to visit those planets, like some prices bargain, or a package delivery or something.
So far I think that that the only oxp that would send me to an other planet is the in system taxi.
Re: Tinkerer's Workshop - OXP tweaking for fun and profit!
Well that's interesting!. I do have Stations for extra planets installed, but I didn't know that there is variation in prices with distanceA bit of a shameless plug, but Stations for Extra Planets oxp puts stations to those far away planets and prices will get wilder the farther they are from the main planet. And you'll love the variety of those stations
This is actually exactly what I was talking about.
Good think you told me about it before I wend on looking for a way to do It myself and end up messing things up in my Addons folder
It looks like you read my mind in advance
(note to self. Check that you need to modify before you fire up vim )
Re: Tinkerer's Workshop - OXP tweaking for fun and profit!
I have an other modification that I used a lot in the past, but I kind of lost all my home brew oxps during a system upgrade and I can't seem to be able to make it work again.
Something I am doing wrong and I can't remember what I did differently before.
I used to bypass the prime/activate equipment with n button restriction (It bothers me more than it should ) by using a mine that sends a script message to the equipment script to activate the equipment
This way I could have 3 - 4 equipment easily activated in my missile array
but It does not work as expected. In Naval energy grid for example:
I made an AI for the mine
NG_switchAI.plist
I added the equipment in equipment.plist
I made a shipdata.plist
and finally I added this in the bottom of the milGrid_script.js
Now everything looks like it works,
the mine pops,
the script message is sent,
the mine is re awarded,
I get a message "energy transferred to shields" but nothing happens.
could someone help locate what I am doing wrong?
p.s the AI and shipdata.plist are copied and modified from Thargoid's Armoury oxp
Something I am doing wrong and I can't remember what I did differently before.
I used to bypass the prime/activate equipment with n button restriction (It bothers me more than it should ) by using a mine that sends a script message to the equipment script to activate the equipment
This way I could have 3 - 4 equipment easily activated in my missile array
but It does not work as expected. In Naval energy grid for example:
I made an AI for the mine
NG_switchAI.plist
Code: Select all
{
"GO_BANG" = {
ENTER = ("pauseAI: 0.2");
EXIT = ();
UPDATE = (becomeExplosion, "sendScriptMessage: activate");
};
GLOBAL = {
ENTER = ("setStateTo: GO_BANG" );
EXIT = ();
UPDATE = ();
};
}
Code: Select all
(
2,
1000,
"Naval Energy Grid Activation Switch",
"EQ_NG_SWITCH_MINE",
"A switch that enables you to prime your Naval Energy Grid using your missile selection button.",
{
"available_to_all" = true;
"available_to_npc" = false;
"requires_equipment" = "EQ_NAVAL_GRID";
"incompatible_with_equipment" = "EQ_NG_SWITCH_MINE";
script = "milGrid_script.js";
}
),
Code: Select all
{
"NG_switch" = {
"ai_type" = "NG_switchAI.plist";
"cargo_type" = "CARGO_NOT_CARGO";
"energy_recharge_rate" = "0.0";
"forward_weapon_type" = "WEAPON_NONE";
"likely_cargo" = 0;
"max_cargo" = 0;
"max_energy" = 1;
"max_flight_pitch" = "0.5";
"max_flight_roll" = "0.5";
"max_flight_speed" = 0;
model = "alloy.dat";
name = "Naval Energy Grid Activation Switch";
roles = "EQ_NG_SWITCH_MINE";
script = "milGrid_script.js";
thrust = "0.0";
};
}
Code: Select all
this.activate = function()
{
player.ship.awardEquipment("EQ_NG_SWITCH_MINE");
this.activated();
}
the mine pops,
the script message is sent,
the mine is re awarded,
I get a message "energy transferred to shields" but nothing happens.
could someone help locate what I am doing wrong?
p.s the AI and shipdata.plist are copied and modified from Thargoid's Armoury oxp
Re: Tinkerer's Workshop - OXP tweaking for fun and profit!
Not an oxz tweak at all but if you'd like to give your cannons a bit more thump in Oolite 1.82.
In the ooliite app. open config, then open equipment, scroll to lasers and adjust (just a little upwards..or you will wreck your game completely) the range and/ or damage level. This in my current experience, humbles the more lethal foes quiet adequately.
In the ooliite app. open config, then open equipment, scroll to lasers and adjust (just a little upwards..or you will wreck your game completely) the range and/ or damage level. This in my current experience, humbles the more lethal foes quiet adequately.
Flying Python Class Cruiser, Chapter & Verse IV
Re: Tinkerer's Workshop - OXP tweaking for fun and profit!
I've had a couple of requests to post my modifications to HOopy Casinos and Your Ad Here that limits their appearance to Corporate systems only, thus making a de facto system OXP out of them in the same mode as Commies, Anarchies, Dictators, etc.
A couple of disclaimers: First, I'm using very very old versions of both OXP's because I'm trying to keep the retro look to my game. I cannot guarantee this modification will work with the current versions. Second, my change to YAH is designed only to populate the billboards at the Witchpoint and Navigation beacon, it does nothing to Constores themselves (personally I've removed them completely, as all I wanted was billboards).
In HOopy Casinos, you will need to edit hoopy_casino.js to change the script:
into:
This is just a simple change that only spawns casinos in high-tech, corporate systems and nowhere else.
Secondly, the version of YAH I'm using populates billboards via the shipdata.plist in the config folder. Newer versions may use a script instead, in which case, you'd need to change that in the same way as HOopy, by setting the system.government type to 7, which is Corporate. If your version of YAH still uses the shipdata.plist, this is a sample for the billboards:
There will be over twenty of these navbeacons that all have to have their systemGovernment _number changed to 7 in the same way.
Sorry if I'm not explaining this very well, but coding isn't my forte and this is very much a tinkering solution. Together this should only spawn casinos and billboards in Corporate systems, adding a little unique local color to those types. I personally call the result Panem et Circenses. There are a few other plugins for YAH, like the moving billboards or asteroid billboards. I am fairly sure this same idea can also limit those to the same system type, and will look into adding those in as well at some point-- just to keep the advertising saturation up for the good citizens of those Corporate systems!
Edit: Thinking about it, I did just download Thargoid's Your Ad Here Mobile and found it quite easy to make the same changes to both the shipdata.plist and script.js. This should add the ship-towed billboards as well!
A couple of disclaimers: First, I'm using very very old versions of both OXP's because I'm trying to keep the retro look to my game. I cannot guarantee this modification will work with the current versions. Second, my change to YAH is designed only to populate the billboards at the Witchpoint and Navigation beacon, it does nothing to Constores themselves (personally I've removed them completely, as all I wanted was billboards).
In HOopy Casinos, you will need to edit hoopy_casino.js to change the script:
Code: Select all
this.tryAddingCasinoship = function () {
if (system.techLevel >= 10 && system.pseudoRandom100 > 55 && system.government != 4 || system.info.description.indexOf('hoopy casinos') > -1) {
// add in high tech level systems, but not in comunist systems. But, always in systems famous for their casinos.
system.addShipsToRoute('casinoship', 1, 0.995); // near station
}
Code: Select all
this.tryAddingCasinoship = function () {
if (system.techLevel >= 11 && system.government == 7) {
// add in high tech level systems, but not in comunist systems. But, always in systems famous for their casinos.
system.addShipsToRoute('casinoship', 1, 0.995); // near station
Secondly, the version of YAH I'm using populates billboards via the shipdata.plist in the config folder. Newer versions may use a script instead, in which case, you'd need to change that in the same way as HOopy, by setting the system.government type to 7, which is Corporate. If your version of YAH still uses the shipdata.plist, this is a sample for the billboards:
Code: Select all
<key>yah_set_A_01-navbeacon</key>
<dict>
<key>conditions</key>
<array>
<string>systemGovernment_number equal 7</string>
</array>
Sorry if I'm not explaining this very well, but coding isn't my forte and this is very much a tinkering solution. Together this should only spawn casinos and billboards in Corporate systems, adding a little unique local color to those types. I personally call the result Panem et Circenses. There are a few other plugins for YAH, like the moving billboards or asteroid billboards. I am fairly sure this same idea can also limit those to the same system type, and will look into adding those in as well at some point-- just to keep the advertising saturation up for the good citizens of those Corporate systems!
Edit: Thinking about it, I did just download Thargoid's Your Ad Here Mobile and found it quite easy to make the same changes to both the shipdata.plist and script.js. This should add the ship-towed billboards as well!
Reports of my death have been greatly underestimated.
- phkb
- Impressively Grand Sub-Admiral
- Posts: 4830
- Joined: Tue Jan 21, 2014 10:37 pm
- Location: Writing more OXPs, because the world needs more OXPs.
Re: Tinkerer's Workshop - OXP tweaking for fun and profit!
If you use the "Dangerous Square" or "Xolonium" fonts, you might have noticed that, occasionally, the columns on the contract screens don't line up. Here are some examples when using "Xolonium":
To fix this, create a new folder in your addons called "ContractsFix.oxp", and a sub folder called "Scripts". Then, copy into it the oolite-contracts-cargo.js, oolite-contracts-passengers.js and oolite.contracts-parcels.js from the \oolite.app\resources\scripts folder.
(Note: if you're happy making these changes each time your main Oolite application is updated, you don't need to worry about the ContractsFix.oxp folder - just update the original files).
Next, make the following changes to each file:
oolite-contracts-cargo.js
Line 500 change fromto
Line 533 change from to
Line 538 change from to
oolite-contracts-parcels.js
Line 522 change fromto
oolite-contracts-passengers.js
Line 492 change fromto
Line 524 change from to
Line 529 change from to
And there you go! Nice, neat columns again.
To fix this, create a new folder in your addons called "ContractsFix.oxp", and a sub folder called "Scripts". Then, copy into it the oolite-contracts-cargo.js, oolite-contracts-passengers.js and oolite.contracts-parcels.js from the \oolite.app\resources\scripts folder.
(Note: if you're happy making these changes each time your main Oolite application is updated, you don't need to worry about the ContractsFix.oxp folder - just update the original files).
Next, make the following changes to each file:
oolite-contracts-cargo.js
Line 500 change from
Code: Select all
var columns = [10,16,21,26];
Code: Select all
var columns = [9,15,21,26];
Code: Select all
priceText = this.$helper._paddingText(priceText, 3.25)+priceText;
Code: Select all
priceText = this.$helper._paddingText(priceText, 3.5)+priceText;
Code: Select all
priceText = this.$helper._paddingText(priceText, 3.25)+priceText;
Code: Select all
priceText = this.$helper._paddingText(priceText, 3.5)+priceText;
Line 522 change from
Code: Select all
priceText = this.$helper._paddingText(priceText, 2.5)+priceText;
Code: Select all
priceText = this.$helper._paddingText(priceText, 3.5)+priceText;
Line 492 change from
Code: Select all
var columns = [12,18,23,28];
Code: Select all
var columns = [12,17.5,23,28];
Code: Select all
priceText = this.$helper._paddingText(priceText, 3)+priceText;
Code: Select all
priceText = this.$helper._paddingText(priceText, 3.5)+priceText;
Code: Select all
priceText = this.$helper._paddingText(priceText, 3)+priceText;
Code: Select all
priceText = this.$helper._paddingText(priceText, 3.5)+priceText;
- phkb
- Impressively Grand Sub-Admiral
- Posts: 4830
- Joined: Tue Jan 21, 2014 10:37 pm
- Location: Writing more OXPs, because the world needs more OXPs.
Re: Tinkerer's Workshop - OXP tweaking for fun and profit!
I think it's kind of odd that a standard missile takes 15 minutes to install, but an ECM hardened mission takes over an hour. Why is that? I mean, it's getting put into the same slot.
If you think this seems odd too, then this little tweak is for you. From Oolite version 1.81 and onwards we can set the installation time of equipment. So, to give ECM missiles the same installation time as a standard missile, all you do is this.
1. Find the "equipment.plist" file in your oolite.app/Resources/Config folder
2. Find the ECM missile entry in the file
3. Add "installation_time = 900;" to the dataset, so it ends up looking like this:
4. Save the file, and restart Oolite while holding the shift key down, and you're done.
If you think this seems odd too, then this little tweak is for you. From Oolite version 1.81 and onwards we can set the installation time of equipment. So, to give ECM missiles the same installation time as a standard missile, all you do is this.
1. Find the "equipment.plist" file in your oolite.app/Resources/Config folder
2. Find the ECM missile entry in the file
3. Add "installation_time = 900;" to the dataset, so it ends up looking like this:
Code: Select all
( /* ecm hardened missile */
9, 3500, "ECM Hardened Missile",
"EQ_HARDENED_MISSILE",
"Faulcon de Lacy HMX5 homing missile - hardened against ECM.",
{
condition_script = "oolite-conditions.js";
available_to_all = true;
"installation_time" = 900;
/* NOTE: for reasons of backwards compatibility, this defaults to true for equipment whose key ends with MISSILE or MINE. */
requires_empty_pylon = true;
/* NOTE: this is always zero for pylon-mounted equipment */
damage_probability = 0;
}
),