Page 5 of 5
Re: The Assassins Guild Rebooted - Version 2.5 (Updated 20/03/26 - Now on the Expansion Manager)
Posted: Wed Apr 01, 2026 11:12 am
by LittleBear
Oh dear! I'd shamelessly copied the method from Commies and Dictators which replace police, wingmen, interceptors and miners with the dictators / commie versions with condition scripts restricting them to the respective government variable and giving them a role weighting of 999999. I'm pretty sure from flying around that stations do still launch normal police ships (and normal police ships are on patrol in the spacelanes) with dictators, commies and assassins installed.
At a certain phase of the OXZ (when the AI of Griff Research Ltd's new drone goes bananas) pirates at certain systems are replaced with Malfunctioning BattleBots with the same method (but a check for the escape mission variable as well as system and galaxy ID), all pirates at the Triad controlled system of Esreates are replaced with Ramon's Triad Wasps and pirates at Eszausve are replaced with rebel ships during the civil war but I've been assailed by normal pirates being launched by a pirate cove outside those systems. Similarly, traders at Quandixe are replaced with Mafia Anacondas ferrying drugs around and miners at Ataneris are replaced with Bugs. However, I've seen stations launching normal traders and miners elsewhere. Could this be specific to shuttles? Would you mind giving it a test with police and traders?
Re: The Assassins Guild Rebooted - Version 2.5 (Updated 20/03/26 - Now on the Expansion Manager)
Posted: Thu Apr 02, 2026 1:02 am
by phkb
LittleBear wrote: ↑Wed Apr 01, 2026 11:12 am
Would you mind giving it a test with police and traders?
Sure. Some mixed results:
Starting a new game in Tionisla (Easy start):
- system.mainStation.launchPirateShip() returns null
- system.mainStation.launchShuttle() returns null
- system.mainStation.launchPolice() returns [] (empty array, basically same as null)
- system.mainStation.launchPatrol() returns null
- system.mainStation.launchShipWithRole("hunter") returns null
- system.mainStation.launchShipWithRole("shuttle") returns null
- system.mainStation.launchShipWithRole("interceptor") returns null
- system.mainStation.launchShipWithRole("wingman") returns null
However:
- system.mainStation.launchScavenger() returns a ship
- system.mainStation.launchShipWithRole("scavenger") returns a ship
- system.mainStation.launchShipWithRole("pirate") returns a ship
- system.mainStation.launchShipWithRole("trader") returns a ship
- system.mainStation.launchShipWithRole("police") returns a ship
- [rockhermit].launchMiner() returns a ship
Starting a new game in Lave with Dictators OXP:
- system.mainStation.launchPirateShip() returns null
- system.mainStation.launchShuttle() returns null
- system.mainStation.launchPolice() returns []
- system.mainStation.launchShipWithRole("hunter") returns null
- system.mainStation.launchShipWithRole("shuttle") returns null
However:
- system.mainStation.launchScavenger() returns a ship
- system.mainStation.launchPatrol() returns a ship
- system.mainStation.launchShipWithRole("interceptor") returns a Dictators ship
- system.mainStation.launchShipWithRole("wingman") returns a Dictators ship
- system.mainStation.launchShipWithRole("pirate") returns a ship
- system.mainStation.launchShipWithRole("trader") returns a ship
- system.mainStation.launchShipWithRole("police") returns a ship (can be either a Dictators ship or a standard Viper)
- [rockhermit].launchMiner() returns a ship
Starting a new game in Lave without Dictators:
- system.mainStation.launchShuttle() returns null
- system.mainStation.launchPolice() returns []
- system.mainStation.launchPirateShip() returns null
- system.mainStation.launchShipWithRole("hunter") returns null
- system.mainStation.launchShipWithRole("shuttle") returns null
- system.mainStation.launchShipWithRole("interceptor") returns null
- system.mainStation.launchShipWithRole("wingman") returns null
However:
- system.mainStation.launchPatrol() returns a ship
- system.mainStation.launchScavenger() returns a ship
- system.mainStation.launchShipWithRole("scavenger") returns a ship
- system.mainStation.launchShipWithRole("pirate") returns a ship
- system.mainStation.launchShipWithRole("trader") returns a ship
- system.mainStation.launchShipWithRole("police") returns a ship
- [rockhermit].launchMiner() returns a ship
Note that these are all station launches, so it mostly impacts the standard populator. system.addShips will add any of the roles listed. Which means it shouldn't impact on any other mission OXP, because they all (as far as I can remember) work by using system.addShips.
Re: The Assassins Guild Rebooted - Version 2.5 (Updated 20/03/26 - Now on the Expansion Manager)
Posted: Thu Apr 02, 2026 10:07 am
by LittleBear
Hmm. Well it looks like the Commies, Dictators and Assassins role weightings are all overriding the populator for launching ships from the main station at systems none of the OXZs are meant to. I've seen OXZ stations with has_npc_traffic set to yes launching normal shuttles and normal traders at systems not modified by assassins, commies or dictators, so presumably this only affects launches from the main station? However, if I changed the method to the one you'd set out on the previous page, whilst this would stop Assassins overriding the populator at main stations it still wouldn't work properly as it would still be overridden by Commies and Dictators. Am I right in thinking then that the change would need to be applied to all three OXZs?
Re: The Assassins Guild Rebooted - Version 2.5 (Updated 20/03/26 - Now on the Expansion Manager)
Posted: Thu Apr 02, 2026 10:39 am
by phkb
Probably. I’ll have to reexamine both of those OXPs to see what the intentions were. It certainly makes sense to update them to a more complimentary system, rather than going with the role weighings method.
Re: The Assassins Guild Rebooted - Version 2.5 (Updated 20/03/26 - Now on the Expansion Manager)
Posted: Thu Apr 02, 2026 12:56 pm
by LittleBear
I had to look through Dictators quite a lot to make Assassins compatible with it as Assassins modifies Eszausve very extensively (and it is a Dictatorship) so I had to account for the fact that Dictators would replace all the police ships in the system (including ones added in the spacelanes - not just those being launched by a station with a ship from the Dictators pool of ships. Which ship it uses depends on the tech level and economy so different ships appear as the police at an Industrial than at an Agricultural for example. But with both Commies and Dictators the intention is to completely supress the native populator (and any OXZs which add ships with police roles) at Dictatorships and Communist systems in order that these systems have unique types of ships.
Assassins does a similar thing but only at 10 specific systems in Galaxy 7. For the missions to work, I do have to suppress all native police due to the fact that as the Eszausveian civil war plays out, who is in control of the main station and who the police are changes. When installed the system is a normal dictatorship and normal GalCop law applies. The democrats are acting illegally in attacking the local police and so are offenders and the dictatorship is policed by ships from Dictators in the normal way. Different factions start to assist both sides. When Ramon Security amorally provide the Dictatorship with powerful military vessels, the police ships appearing change again as Ramon's ships are added to the Eszausveian police force. Neighbouring democratic systems then start arming the rebels with better ships. Eventually the rebels storm the main station and take it over. The Dictatorship develops an illegal superweapon which destroys a GalCop Behemoth, leading to GalCop declaring the Democratic faction the lawful government and the system is policed by democratic ships, heavily outgunned by the now fugitive Dictatorship navy. Should the rebels win the civil war, it is recognised by GalCop as a Democracy and policing goes back to normal. Once it is a democracy, dictators stops replacing ships at Eszausve as the government variable its condition scripts are checking for is no longer met.
I think therefore I need to use condition scripts as all of the above is done by different condition scripts attached to each ship version with a condition that the civil_war variable is particular value in addition to the system and galaxy conditions to set who is the police and who has control of the main station. However, all three OXZs do need to override the normal populator but only at their targeted systems and nowhere else. My question is, if I just use the populator method will this only effect ships launched? IE without the 99999 override will the main station launch the dictators / commies / assassins ships but police in the system generally will remain normal vipers?
Is the reason you are getting a null is that if 99.9% of the ships in the pool are dictators / commies / assassins ships and you are not at a communist / dictatorship / assassins modified system there is a 99.9% chance that the RNG will pick a ships from one of the overriding pools whose conditions to appear are not met? '
Re: The Assassins Guild Rebooted - Version 2.5 (Updated 20/03/26 - Now on the Expansion Manager)
Posted: Thu Apr 02, 2026 2:21 pm
by phkb
LittleBear wrote: ↑Thu Apr 02, 2026 12:56 pm
Is the reason you are getting a null is that if 99.9% of the ships in the pool are dictators / commies / assassins ships and you are not at a communist / dictatorship / assassins modified system there is a 99.9% chance that the RNG will pick a ships from one of the overriding pools whose conditions to appear are not met? '
It's worth noting that the first system I showed test results for, Tionisla, is a Democracy: so Commies and Dictators shouldn't come into play at all. And running my Tionisla tests again without Assassins, but with Dictators and Commies, proves this:
- system.mainStation.launchShuttle() returns a ship
- system.mainStation.launchPatrol() returns a ship
- system.mainStation.launchShipWithRole("hunter") returns a ship
- system.mainStation.launchShipWithRole("shuttle") returns a ship
- system.mainStation.launchShipWithRole("interceptor") returns a ship
- system.mainStation.launchShipWithRole("wingman") returns a ship
Curiously, system.mainStation.launchPirateShip() and system.mainStation.launchPolice() still return null. But as they appear to do that in a strict game as well, I'm going to leave them out of future discussions (and potentially start investigating whether they're bugged in Oolite *sigh*).
In any event, all this proves is that Commies and Dictators don't appear to be upsetting the role weightings as much as Assassins does. And I totally understand your reasoning. You're trying to create a unique and important scenario that has strict boundaries. We just need to come up with a way of doing what you want without upsetting other areas of the game.
In Commies, the maximum role weight given to anything is around 5 (with one exception, which I'll get to). This means that for those roles (police, interceptor, and wingman) they are 5 times more likely to be chosen over other roles. With values that low, we still get the occasional standard Viper ship returned, which I think makes sense in the context of Commies: the token GalCop presence in an otherwise highly controlled system.
The same is true in Dictators, where the maximum role weight given to anything is around 5.
The exception in Commies is a role weight of rockhermit(20) in the astromine definition, to force the astromine to replace rock hermits. That appears to happen quite reliably, without impacting on Rock Hermits in other systems.
So, using a value of 9999999 is a little extreme. Once again, given what you are attempting is very system-specific, I think overriding the populator and repopulator functions is a better way of achieving your goals. At the very least, it would be worth trying with smaller numbers (try 20 or 50).