Join us at the Oolite Anniversary Party -- London, 7th July 2024, 1pm
More details in this thread.

3 small things !!!

An area for discussing new ideas and additions to Oolite.

Moderators: winston, another_commander

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

3 small things !!!

Post by Ark »

I have always found 3 small details in oolite very annoying

1. The operation of clocking device. To be more specific the fact that when you are cloaked you can fire at enemy ships but you are not awarded with a kill. This is somehow strange and causes a lot of problems (see at random hits foe example)
I think it would be better if you are cloaked to be unable to shoot with your main weapon, missiles etc (like a klingon bird of bray for the fans of star trek :wink: ).

2.The fact that you get a bounty and a kill for destroying disabled thargoid robot fighters. This is more like a cheat. The main purpose for disabled robot fighters in the original elite (PC version) was to scoop them as alien artifacts but now nobody does it for the simple reason that they worth more dead than alive. And finally

3.When you destroy a subentity you get a kill. Sometimes when I fight a dark wheel cobra I end up with 4-5 kills.

From what I know the last one is fixed in 1.71 (thanks Ahruman!!!!!! :D )
So I am wondering if it is also possible for the first two “small details” to be fixed (under the condition that they do not demand a lot of work).
I know that there is an argument for the disabled thargoid fighters in the forum but I really do not know the opinion of the community the operation of the cloaking device.
another_commander
Quite Grand Sub-Admiral
Quite Grand Sub-Admiral
Posts: 6571
Joined: Wed Feb 28, 2007 7:54 am

Post by another_commander »

I think I have to agree that the cloaking device could function a bit differently. What I really don't like about it is that you can switch it on and slowly kill a ship without it reacting the slightest. I would normally expect it to start a frantic, desperate attempt to get away from whatever it is causing it to lose energy. I find it quite a good idea to disable laser fire when the device is active, or at least cause the laser to overheat at a very high rate. Alternatively, the cloak could be auto-disabled the moment lasers start firing or a missile is launched.
User avatar
TGHC
---- E L I T E ----
---- E L I T E ----
Posts: 2157
Joined: Mon Jan 31, 2005 4:16 pm
Location: Berkshire, UK

Post by TGHC »

I also agree, In classic Elite, you would also see other ships deploying a cloak, which does not seem to happen now, and the othet issue is that when deployed, the cloaking device only gave you intermittent invisibility, and used to drain your energy banks, now ships with extra energy banks and a naval energy unit can recharge faster than the enrgy is depleted, so you can go into complete invisibility mode, sneak up to a pirate and then blast them to submission, remove the cloak and gain a kill. Not cricket old boy!
The Grey Haired Commander has spoken!
OK so I'm a PC user - "you know whats scary? Out of billions of sperm I was the fastest"
User avatar
JensAyton
Grand Admiral Emeritus
Grand Admiral Emeritus
Posts: 6657
Joined: Sat Apr 02, 2005 2:43 pm
Location: Sweden
Contact:

Post by JensAyton »

I’m in favour of disabling the cloak when weapons fire (simple, elegant solution). I see the point on the tharglets, but they used to be treated like cargo pods (1/10th score, no kill) until people complained about that. :-)
User avatar
Eric Walch
Slightly Grand Rear Admiral
Slightly Grand Rear Admiral
Posts: 5536
Joined: Sat Jun 16, 2007 3:48 pm
Location: Netherlands

Post by Eric Walch »

TGHC wrote:
I also agree, In classic Elite, you would also see other ships deploying a cloak, which does not seem to happen now
That's up to scripters to give a ship a cloak. e.g in UPS some target ships have cloaking devices. But they are not really useful. Ships leave them on until their energy is almost drained. When you were able to get an glimpse in which direction they fled, you just need to follow them until they de-cloak because of low energy. In this low energy situation a few laser-shots are enough to kill him.

The ships scripts do not work well in 1.70, but in 1.71 I'll will try to give them a little more brain by letting them random change course when fleeing cloaked.
Ahruman wrote:
I’m in favour of disabling the cloak when weapons fire (simple, elegant solution).
I would also vote for this. It also makes the most sense as shooting will give your position away in my feeling. It will not change much though as the player could constantly switch it back on manually. (reactivating after a shot should also have some seconds second delay before it does activate)
User avatar
TGHC
---- E L I T E ----
---- E L I T E ----
Posts: 2157
Joined: Mon Jan 31, 2005 4:16 pm
Location: Berkshire, UK

Post by TGHC »

Ahruman wrote:
I see the point on the tharglets, but they used to be treated like cargo pods (1/10th score, no kill) until people complained about that. :-)
As an alien item they are worth a lot more than the 50Cr for a kill, providing you know where to offload them, but I do agree that they should not count as a kill unless they are firing at you of course.
The Grey Haired Commander has spoken!
OK so I'm a PC user - "you know whats scary? Out of billions of sperm I was the fastest"
User avatar
Hoopy
---- E L I T E ----
---- E L I T E ----
Posts: 438
Joined: Wed Oct 03, 2007 8:54 pm
Location: Durham, England

Post by Hoopy »

the cloak should disable laser fire for sure. I think the AI needs a better reaction to cloaking as well. A frantic search or running away perhaps.

I've accidently killed things when cloaked and then not got the kill because i forgot to decloak...

And Eric is right, more enemies should have cloaking devices :)
User avatar
Eric Walch
Slightly Grand Rear Admiral
Slightly Grand Rear Admiral
Posts: 5536
Joined: Sat Jun 16, 2007 3:48 pm
Location: Netherlands

Post by Eric Walch »

Hoopy wrote:
I think the AI needs a better reaction to cloaking as well. A frantic search or running away perhaps.
Until 1.69 a script can not see if a ship was cloacked. It could be added with a new message.

On line 1358 of the shipEntity.m file it does a shipAI reactToMessage:@"TARGET_LOST" in the update event. One of the reasons of a lost target is that it cloaks. I think this is the point to explicitly also send a new shipAI reactToMessage:@"TARGET_CLOACKED" message. With this a script could react on cloaking. Or was it already on the large list with new eventhandlers for ships.
-----

On second thought. When giving a ship his own script, the "TARGET_LOST" message could start a scrip function were cloaking is checked. This script than could change the AI-STATE to FLEE. So it is already possible to check cloaking and start a flee.
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 »

Eric Walch wrote:
(reactivating after a shot should also have some seconds second delay before it does activate)
Yes this is more elegant. If it is also not less simple in the implementation i second that (I do not want the dev team to be distracted from its main goal with my ideas) :wink:

Otherwise a simple deactivation of the cloak when firing weapons would be nice.
User avatar
JensAyton
Grand Admiral Emeritus
Grand Admiral Emeritus
Posts: 6657
Joined: Sat Apr 02, 2005 2:43 pm
Location: Sweden
Contact:

Post by JensAyton »

Eric Walch wrote:
Until 1.69 a script can not see if a ship was cloacked. It could be added with a new message.

On line 1358 of the shipEntity.m file it does a shipAI reactToMessage:@"TARGET_LOST" in the update event. One of the reasons of a lost target is that it cloaks. I think this is the point to explicitly also send a new shipAI reactToMessage:@"TARGET_CLOACKED" message. With this a script could react on cloaking. Or was it already on the large list with new eventhandlers for ships.
Added as shipTargetCloaked() and TARGET_CLOAKED (which will be immediately followed by shipLostTarget() and TARGET_LOST).
User avatar
Eric Walch
Slightly Grand Rear Admiral
Slightly Grand Rear Admiral
Posts: 5536
Joined: Sat Jun 16, 2007 3:48 pm
Location: Netherlands

Post by Eric Walch »

Nice option. Maybe the pirateAI should already be altered in this way. When an pirate has a target that cloaks it probably is the player. Reacting with just a flee would give the player an easy way to sent the pirates away. So set the AI in a state were it waits for a few seconds. When it gets another attack in that time, perform a flee. He has no chance against a cloaked player. But when not attacked, go further in the lurk state. The player has to de-cloak soon.

Just an idea. I don't know if it will work, but someone with the latest trunk version could test it.

Code: Select all

    "ATTACK_SHIP" = {
        ATTACKED = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP"); 
        "ENERGY_LOW" = ("setStateTo: FLEE"); 
        "TARGET_CLOAKED" = ("setStateTo: TARGET_CLOAKED"); 
        ENTER = (performAttack); 
        EXIT = (); 
        "INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE"); 
        "TARGET_DESTROYED" = ("setStateTo: COLLECT_LOOT"); 
        "TARGET_LOST" = ("setStateTo: COLLECT_LOOT"); 
		"ENTER WORMHOLE" = ("setStateTo: ENTER_WORMHOLE");
        UPDATE = (); 
    }; 
    "TARGET_CLOAKED" = {
        ATTACKED = (setTargetToPrimaryAggressor, "setStateTo: FLEE"); 
        "ENERGY_LOW" = ("setStateTo: FLEE"); 
        ENTER = ("pauseAI: 5.0"); 
        EXIT = (); 
        "INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE"); 
		"ENTER WORMHOLE" = ("setStateTo: ENTER_WORMHOLE");
        UPDATE = ("setStateTo: LURK"); 
    }; 
User avatar
JensAyton
Grand Admiral Emeritus
Grand Admiral Emeritus
Posts: 6657
Joined: Sat Apr 02, 2005 2:43 pm
Location: Sweden
Contact:

Post by JensAyton »

Eric, this currently doesn’t work as expected because ATTACKED is never sent if the aggressor is cloaked. I’m going to add an experimental new message ATTACKED_BY_CLOAKED/shipBeingAttackedByCloaked() to handle this. The message will be sent at an early point in takeEnergyDamage:from:becauseOf: and won’t do the various bits of special-case handling for police and so forth.
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 »

Eric Walch wrote:
Ahruman wrote:
I’m in favour of disabling the cloak when weapons fire (simple, elegant solution).
I would also vote for this. It also makes the most sense as shooting will give your position away in my feeling. It will not change much though as the player could constantly switch it back on manually. (reactivating after a shot should also have some seconds second delay before it does activate)
I think I have a better proposal for the operation of the cloaking device.
Although disabling the clocking device when firing is somehow a solution, it is not the perfect one.
This way you can sneak behind an enemy ship – decloack – fire and finally get your kill. Not so fair. I totally agree with Eric that what we need is a small delay between decloaking and firing, so your opponent can have a fighting chance.
What about when you decloack your weapon also be overheated so you have to wait before firing (The delay Eric said implemented with a simple - clear solution)
User avatar
LittleBear
---- E L I T E ----
---- E L I T E ----
Posts: 2868
Joined: Tue Apr 04, 2006 7:02 pm
Location: On a survey mission for GalCop. Ship: Cobra Corvette: Hidden Dragon Rated: Deadly.

Post by LittleBear »

On the Random Hits point, On V1.1 of Random Hits you (should) still be credited for the kill if you do it cloaked, but you should get a message along the randomised lines of "You have eliminated [name], but the Bounty Hunters Guild fines you [fine] Credits for being a cowardly custard." The fine will take a big bite of your fee. Also you do not improve your reputation by making hits cloaked.
OXPS : The Assassins Guild, Asteroid Storm, The Bank of the Black Monks, Random Hits, The Galactic Almanac, Renegade Pirates can be downloaded from the Elite Wiki here.
User avatar
Eric Walch
Slightly Grand Rear Admiral
Slightly Grand Rear Admiral
Posts: 5536
Joined: Sat Jun 16, 2007 3:48 pm
Location: Netherlands

Post by Eric Walch »

Ahruman,

Just to let you know that your added messages for Cloaking in 1.71 work well. On my computer I now altered the pirateAI.plist in the next way.:

In all states that have an "ATTACKED" messages I added also a message:

Code: Select all

"ATTACKED_BY_CLOAKED" = ("setStateTo: FLEE_FOR_CLOAKED"); 
This way the pirates are no more sitting ducks when attacked by a cloaked player but they flee. Not the normal flee, but still keeping scanning so when the player de-cloakes the pirate can immediately proceed attack against a player that drained his own energy banks by cloaking.

Code: Select all

    "FLEE_FOR_CLOAKED" = {
        ENTER = ("setDesiredRangeTo: 25600", performFlee); 
        "DESIRED_RANGE_ACHIEVED" = (performIdle, "setStateTo: LURK"); 
        "INCOMING_MISSILE" = (fightOrFleeMissile); 
        "REACHED_SAFETY" = ("setSpeedTo: 0.0", performIdle, "pauseAI: 10.0"); 
        "TARGET_FOUND" = (setTargetToFoundTarget, checkGroupOddsVersusTarget); 
        "ODDS_GOOD" = (groupAttackTarget); 
        "ODDS_LEVEL" = (groupAttackTarget); 
        "GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setStateTo: ATTACK_SHIP"); 
		"ENTER WORMHOLE" = ("setStateTo: ENTER_WORMHOLE");
        UPDATE = (scanForRandomMerchantmen, "pauseAI: 5.0"); 
        EXIT = (); 
    }; 
In the "ATTACK" state I added the line

Code: Select all

  "TARGET_CLOAKED" = ("setStateTo: LURK"); 
This way the pirate is not defaulting to collect loot, but immediately turns to the scanning mode for faster reaction on de-cloacking of the player.

I will add it to the ups_pirates in the next version of UPS. After some better testing it could be used as the default "pirateAI.plist".

When others want to test it: create a folder with name "AIs" in the "AddOns" folder. Put a copy of the original "pirateAI.plist" in this folder. As last, replace the current content with the one listed below. Oolite will now default to the changed copy.

Code: Select all

{
    "ATTACK_SHIP" = {
        ATTACKED = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP"); 
       "ATTACKED_BY_CLOAKED" = ("setStateTo: FLEE_FOR_CLOAKED"); 
        "ENERGY_LOW" = ("setStateTo: FLEE"); 
        "TARGET_CLOAKED" = ("setStateTo: LURK"); 
        ENTER = (performAttack); 
        EXIT = (); 
        "INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE"); 
        "TARGET_DESTROYED" = ("setStateTo: COLLECT_LOOT"); 
        "TARGET_LOST" = ("setStateTo: COLLECT_LOOT"); 
		"ENTER WORMHOLE" = ("setStateTo: ENTER_WORMHOLE");
        UPDATE = (); 
    }; 
    "COLLECT_LOOT" = {
        ATTACKED = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP"); 
       "ATTACKED_BY_CLOAKED" = ("setStateTo: FLEE_FOR_CLOAKED"); 
        ENTER = ("setSpeedTo: 0.0", performIdle); 
        EXIT = (); 
        "HOLD_FULL" = ("setStateTo: EXIT_SYSTEM"); 
        "GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setStateTo: ATTACK_SHIP"); 
        "INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE"); 
        "TARGET_FOUND" = (setTargetToFoundTarget, "setStateTo: LOOT"); 
        "NOTHING_FOUND" = ("setStateTo: CONSIDER_DOCKING"); 
		"ENTER WORMHOLE" = ("setStateTo: ENTER_WORMHOLE");
        UPDATE = (scanForLoot, "pauseAI: 5.0"); 
    }; 
    "EXIT_SYSTEM" = {
		ENTER = ();
		EXIT = ();
		UPDATE = (performHyperSpaceExit);
		"WITCHSPACE OKAY" = (wormholeEscorts, wormholeGroup);
		"WITCHSPACE BLOCKED" = (setTargetToFoundTarget, setDestinationWithinTarget, "setDesiredRangeTo: 10000.0", performFlyToRangeFromDestination);
		"WITCHSPACE UNAVAILABLE" = ("setStateTo: DOCK_WITH_STATION");
	}; 
    FLEE = {
        ENTER = ("setDesiredRangeTo: 25600", performFlee); 
        "ENERGY_FULL" = (performIdle, "setStateTo: LURK"); 
        "TARGET_LOST" = (performIdle, "setStateTo: LURK"); 
        "DESIRED_RANGE_ACHIEVED" = (performIdle, "setStateTo: LURK"); 
        "INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE"); 
        "REACHED_SAFETY" = ("setSpeedTo: 0.0", performIdle, "pauseAI: 10.0"); 
        ATTACKED = (setTargetToPrimaryAggressor, "setStateTo: FLEE"); 
        UPDATE = (); 
        EXIT = (); 
    }; 
    "FLEE_FOR_CLOAKED" = {
        ENTER = ("setDesiredRangeTo: 25600", performFlee); 
        "DESIRED_RANGE_ACHIEVED" = (performIdle, "setStateTo: LURK"); 
        "INCOMING_MISSILE" = (fightOrFleeMissile); 
        "REACHED_SAFETY" = ("setSpeedTo: 0.0", performIdle, "pauseAI: 10.0"); 
        "TARGET_FOUND" = (setTargetToFoundTarget, checkGroupOddsVersusTarget); 
        "ODDS_GOOD" = (groupAttackTarget); 
        "ODDS_LEVEL" = (groupAttackTarget); 
        "GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setStateTo: ATTACK_SHIP"); 
		"ENTER WORMHOLE" = ("setStateTo: ENTER_WORMHOLE");
        UPDATE = (scanForRandomMerchantmen, "pauseAI: 5.0"); 
        EXIT = (); 
    }; 
    GLOBAL = {ENTER = ("setStateTo: TRAVEL_TO_LURK_AREA"); EXIT = (); UPDATE = (); }; 
    LOOT = {
        ATTACKED = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP"); 
       "ATTACKED_BY_CLOAKED" = ("setStateTo: FLEE_FOR_CLOAKED"); 
        "CARGO_SCOOPED" = (checkForFullHold, "setStateTo: COLLECT_LOOT"); 
        ENTER = (performCollect); 
        EXIT = (); 
        "GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setStateTo: ATTACK_SHIP"); 
        "HOLD_FULL" = ("setStateTo: CONSIDER_DOCKING"); 
        "INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE"); 
        "TARGET_LOST" = ("setStateTo: COLLECT_LOOT"); 
		"ENTER WORMHOLE" = ("setStateTo: ENTER_WORMHOLE");
        UPDATE = (); 
    }; 
    LURK = {
        ENTER = ("setSpeedTo: 0.0", performIdle); 
        ATTACKED = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP"); 
       "ATTACKED_BY_CLOAKED" = ("setStateTo: FLEE_FOR_CLOAKED"); 
        EXIT = (); 
        "INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE"); 
        "NOTHING_FOUND" = ("setStateTo: COLLECT_LOOT"); 
        "TARGET_FOUND" = (setTargetToFoundTarget, checkGroupOddsVersusTarget); 
        "ODDS_GOOD" = (groupAttackTarget); 
        "ODDS_LEVEL" = (groupAttackTarget); 
        "GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setStateTo: ATTACK_SHIP"); 
		"ENTER WORMHOLE" = ("setStateTo: ENTER_WORMHOLE");
        UPDATE = (scanForRandomMerchantmen, "pauseAI: 5.0"); 
    }; 
    "TRAVEL_TO_LURK_AREA" = {
        ATTACKED = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP"); 
       "ATTACKED_BY_CLOAKED" = ("setStateTo: FLEE_FOR_CLOAKED"); 
        "DESIRED_RANGE_ACHIEVED" = ("setStateTo: LURK"); 
        ENTER = (
            setDestinationToCurrentLocation, 
            "setDesiredRangeTo: 1500.0", 
            performFlyToRangeFromDestination
        ); 
        EXIT = (); 
        "GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setStateTo: ATTACK_SHIP"); 
        "INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE"); 
		"ENTER WORMHOLE" = ("setStateTo: ENTER_WORMHOLE");
		"EXITED WITCHSPACE" = ("switchAITo: enteringPirateAI.plist");
        UPDATE = (); 
    }; 
    "CONSIDER_DOCKING" = {
        ATTACKED = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP"); 
       "ATTACKED_BY_CLOAKED" = ("setStateTo: FLEE_FOR_CLOAKED"); 
		ENTER = (checkForMotherStation);
		"NOTHING_FOUND" = ("setStateTo: LURK");
		"STATION_FOUND" = ("setAITo: dockingAI.plist");
		EXIT = ();
        "INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE"); 
		UPDATE = ();
	}; 
    "DOCK_WITH_STATION" = {
        ATTACKED = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP"); 
       "ATTACKED_BY_CLOAKED" = ("setStateTo: FLEE_FOR_CLOAKED"); 
		ENTER = (checkForMotherStation);
		"NOTHING_FOUND" = ("setAITo: route1traderAI.plist");
		"STATION_FOUND" = ("setAITo: dockingAI.plist");
		EXIT = ();
        "INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE"); 
		UPDATE = ();
	}; 
    "ENTER_WORMHOLE" = {
		ENTER = (setDestinationToTarget, "setDesiredRangeTo: 1.0", "setSpeedFactorTo: 1.0", performFlyToRangeFromDestination);
		"PLAYER WITCHSPACE" = (enterTargetWormhole);
        UPDATE = (); 
		EXIT = ();
    }; 
}
Post Reply