Oracus & Domina I: The March of the Heretic

A place to discuss mods in development and concepts for new mods.
Post Reply
User avatar
0xABCDEF
Commonwealth Pilot
Commonwealth Pilot
Posts: 75
Joined: Thu May 19, 2016 12:58 am
Location: Was destroyed by a Phobos-class dreadnought in the Eridani system

Oracus & Domina I: The March of the Heretic

Post by 0xABCDEF » Sun Jul 24, 2016 3:36 am

Oracus & Domina I: The March of the Heretic
When the recurring nightmares began, you knew Oracus was calling you...
To tell you that humanity is a mistake, that incurable evils will run in any society...
And to offer you a new, better life, as a human endling and a living god, at the Galactic Core.
Reduced to a cold, misanthropic shell by nightmares, you set out to leave mankind in extinction.
You decide to join the Order of Penitence; they are the only who will listen to you, anyway.
After you annihiliate all human civilization, you shall head for the Galactic Core.
You are blessed by Oracus; no human will stop you.


An adventure based on my previous mod, Penitent Charms. Join the Order of Penitence and bring humanity to extinction. The story and events have been pieced together from the ingame lore and the archived Neurohack page on "Sisters"
A few years since the events of Stars of the Pilgrim, the power of Oracus has grown drastically and the Penitents have become corrupted by a dark aura. This aura, which unleashes one's misanthropy at extreme and uncontrollable levels, has brainwashed most of the Penitents to the point where they have lost all of their mental capacities and entered a mindless state where all that matters is torture, death, and destruction in the name of "universal justice" for the crimes of humanity; in their minds, all forms of cruelty towards humans is justified by their own cruel acts against others. The few who have managed to retain their mental capacities are now murderers who seek to decorate themselves and their altars with as many corpses and as much blood as possible. Known as Necromancers, they lead the more zombie-like members in their attacks against the rest of humanity and in seeking more human sacrifices for Oracus. The Order of Penitence has also discovered the more horrifying powers of Oracus through the use of mysterious charms: Containers of dark magic that serve as a gift from Oracus to those who have served through merciless killing. In addition to dangerous trinkets, traces of the Chimeras continue to survive in Human Space. Originally unleashed as one of Oracus' more chaotic and uncontrollable creations, the Chimeras have evolved into a small horde of hyperaggressive machines; The Penitents aim to exploit them.

You, the player, have been touched by Oracus. You received The Rapture, a series of surreal, inescapable nightmares; these evil terrors have transformed you into a murderer. Your most recent act was the slaughtering of your spouse and child. You were rescued from prison by a group of Penitents who heard your call. Now, you are to become a member...
Oracus Powers
*Play with the highly destructive powers of Oracus:
  • HARASS: The classic attack used by all Penitent stations. Now passes through Sustain and Defend!
  • BATTER: Fires dark acid missiles at your enemies
  • TORTURE: Multiple repeating energy shockwaves
  • VANDALIZE: Twelve outwardly-moving thermo shockwaves
  • PURGE: An upgrade of HARASS and BATTER. Creates a huge explosion and many explosive projectiles
  • RUIN: A red wave that leaves a damaging, paralyzing effect and damages devices on everything it hits
  • SLAUGHTER: A yellow wave that forces enemies and projectiles away and also ejects items into explosive crates.
  • CORRUPT: Select a target, surround it with charm-containing cargo crates in any demonic pattern you prefer, and inflict various effects onto any ships near the target.
  • AVENGE: Avoid death by instantly restoring everything back to full hp
*Using a power requires its corresponding charm and consumes a certain number of charges from that charm based on your relationship level and the last time you used it
*Charms can be somewhat rare.
*Gain XP by damaging enemy stations and ships.
*There are no forced cooldowns for any power. However, your charms will last longer if you wait longer in between uses
*There are no level requirements either, though having more XP will allow you to use charms more efficiently.
*Start in the Sanctuary system, supposed home to the Saint Josephine Cathedral. This station is the capital of the Order of Saint Josephine and the Sisters of Domina.
*Receive training from Arnold, a Penitent general and Commonwealth traitor. Abandoned by his parents after they became pilgrims, he stole a starship to follow and eventually dissuade, only to eventually witness their death by phobos-class dreadnought. He continues to plot revenge against the Sisters of Domina (who he believes were responsible for "brainwashing" his parents) and the pilgrims (who he believes need to learn the truth).
*Have dangerous encounters with named pilgrims and fight the Sisters of Domina, including ambushing Fiona's freighter and dueling with Benedict.
*Take control of the highly dangerous Chimeras and spread the biotechnological plague.
*Travel through a secret passage of mysterious systems in Penitent Space to evade the forces of the Commonwealth and Ares alike
Chimeric Changes
  • Anarchimeras
  • Now have hyperaggressive behavior
  • Earthzone-class Chimeras are the equivalent of hornet queens; they continuously make more hornets when there are fewer than one hundred escorting them.
  • Hornet-class Chimeras are, of course, basically hornets. When damaged, they will call other nearby hornets to avenge them.
  • The Settlement, a chimeric counterpart of the hornet nest, is usually surrounded by hundreds of hornets and a few Earthzones; attacking it cause a deadly swarm of hyper-aggressive chimeras. They occasionally send out ships to claim nearby wrecks as new nests and slowly construct more Earthzones.
  • Ultra-light and light chimeric armor segments reflect laser damage
  • The chimeric laser cannon now leaves an after-effect on armor segments that makes them more vulnerable to damage from subsequent hits.
  • All ships fire at the full rate and range with near-perfect accuracy
  • Any attack on this faction will raise your perceived threat level, which means the anarchist chimeras will strike you more aggressively.
  • Chimeron Pirates
  • They frequently target Korolov stations and freighters while looting any crates and wrecks they find.
  • Drake-class chimeras lay their "eggs" at all times regardless of enemy presence; any excess Vikings are sent to destroy nearby Commonwealth stations.
  • Viking-class chimeras now have the unique ability to fire missiles directly out of the cargo hold without a launcher.
  • Medium chimeric armor reflects kinetic along with laser
  • The chimeric ion blaster permanently damages shield generators.
  • Chimeric Death Fleet
  • A new Chimeric faction; Uses squad-like behavior and "military tactics" mainly against the Commonwealth Fleet
  • EI7000-class chimeras use inertialess drives.
  • Centurion-class chimeras now have the unique ability to fire any weapon available in their cargo holds that is below 200MW.
  • The Chimeric Injector now works against ANY ship with armor lower than level 12; the ship gains a special overlay and armor/weapons are converted into randomly-generated chimeric versions.
  • Medium chimeric armor now reflects particle damage and regenerates from blast damage.
  • Heavy chimeric armor now reflects ion damage and regenerates from thermo damage.
Last edited by 0xABCDEF on Mon May 29, 2017 4:01 am, edited 18 times in total.

Code: Select all

<OnFireWeapon>
	(gamEnd Nil "encountered an unexpected error")
</OnFireWeapon>
-Command Screen Library: RTS in a dockscreen
-Extended Justice: A safer Commonwealth for all
-Playership Bones: Revisit your old ship wrecks!
-Please help out our official Documentarist (me) by editing the wiki

User avatar
JohnBWatson
Fleet Officer
Fleet Officer
Posts: 1323
Joined: Tue Aug 19, 2014 10:17 pm

Re: Oracus & Domina I: The March of the Heretic

Post by JohnBWatson » Sun Jul 24, 2016 4:41 am

Interesting. It's an ambitious mod, but the idea is promising. I especially like the concept of a different system for using powers - the current one is a bit too generous to people who have patience and an 'a' key.

george moromisato
Developer
Developer
Posts: 2849
Joined: Thu Jul 24, 2003 9:53 pm
Contact:

Re: Oracus & Domina I: The March of the Heretic

Post by george moromisato » Fri Jul 29, 2016 3:09 am

This is a great idea! I hugely support it. Let me offer a few guidelines so you can avoid conflict with Part II and other things:

1. Remember that there are many unreliable narrators throughout the game. We mostly know about the Penitents from the Sisters (and Benedict) but not from the Penitents themselves. I'm not saying the Penitents are good, only that their true motives and goals are as yet unrevealed. I'll try to guide you as appropriate, but it's OK to be vague or even contradictory about specific points.

2. The Chimera storyline hints that Oracus can "connect" to certain people just as Domina can, but that he uses that connection to transmit alien (and often dangerous) technology. That's why I love the concept of the "charms" that you've come up with. The Penitents could have come up with that technology via connection with Oracus.

3. The Sanctuary system is indeed the location of the Sisters' first and largest cathedral. It is not currently included in the game, but it will be eventually. I think it's a good place to start, although it means your adventure will start at a higher level than Stars of the Pilgrim. That's perfectly fine.

4. The Order of Saint Josephine is actually a sub-sect of the Sisters. They are mostly in the Outer Realm, the most dangerous places, including Heretic. The cathedral in Sanctuary is probably called the "Cathedral of St. Euginia" (but don't quote me--I'm not sure yet). More about the Sisters here: http://transcendence.kronosaur.com/guid ... xm?id=1715

5. I like the call-back to the attack on Fiona's freighter. The Benedict story arc will continue; as I flesh that story out, I'll post some updates.

Keep going on this--it's a great idea.

User avatar
0xABCDEF
Commonwealth Pilot
Commonwealth Pilot
Posts: 75
Joined: Thu May 19, 2016 12:58 am
Location: Was destroyed by a Phobos-class dreadnought in the Eridani system

Re: Oracus & Domina I: The March of the Heretic

Post by 0xABCDEF » Sun Jul 31, 2016 7:23 am

I finished part of Arnold's introduction and have the first mission and the charge-power system available for testing. The first intro screen is incomplete and Penitent Sanctum and player ships still require large images.

http://xelerus.de/index.php?s=mod&id=1555

Code: Select all

<OnFireWeapon>
	(gamEnd Nil "encountered an unexpected error")
</OnFireWeapon>
-Command Screen Library: RTS in a dockscreen
-Extended Justice: A safer Commonwealth for all
-Playership Bones: Revisit your old ship wrecks!
-Please help out our official Documentarist (me) by editing the wiki

User avatar
0xABCDEF
Commonwealth Pilot
Commonwealth Pilot
Posts: 75
Joined: Thu May 19, 2016 12:58 am
Location: Was destroyed by a Phobos-class dreadnought in the Eridani system

Advanced Wingman Base

Post by 0xABCDEF » Sun Aug 28, 2016 5:32 pm

Here is an advanced wingman base class I will be using in the adventure

Code: Select all

<?xml version="1.0" encoding="utf-8"?>

<TranscendenceModule>

	<!-- Wingman Base Class
		USAGE NOTES
		
		Do not rely on the implementation of this class across versions. If you wish
		to inherit from this class in an Extension, you should copy the class into
		your own Extension and then inherit from that.
		EXTRA DATA
		
		The following data is stored on the wingman object. These track internal state
		used by the base class. You should not change these values nor make assumptions
		about their meaning.
		
		behavior:			Ship's current behavior
								Nil					= nothing
								'attackingAtWill			= attacking any target in range
								'attackingTarget			= attacking a target
								'escorting				= escorting the player
								'goingHome			= wingman wants to go home
								'lookingAround			= patrolling the player at 90 ls and marking visible enemies.
								'patrollingTarget			= patrolling a target at 10 ls
								'repairingArmor			= docking with station to repair
								'waiting				= waiting for the player
		homeSystem			System nodeID where we were created
		nextArmorRepairMsg	Tick at which we should tell player about armor damage
		welcomeMsg			True if we already said hello to player
		GLOBAL DATA
		status:				Ship's status
								Nil						= never encountered
								'joined					= Has joined the player
								'declined				= Player has declined escort
								'destroyed				= Dead
								'destroyedByPlayer		= Killed by player
								'returnedHome			= Left the player to return home
								
		ORDERS
		
		orderJoinPlayer:	Fire this event to order the wingman to join the player. The
							object will receive an OnWingmanJoinedPlayer event.
								
		OPTIONS
		
		These variables may be set in StaticData to alter the behavior of wingmen.
		
		maxSystemLevel:		If set, the wingman will leave the player if they exceed
							this system level.
							
		EVENTS
		
		The wingman type may override these events.
		
		OnWingmanJoinedPlayer: Fired when the wingman joins the player.

		OnOrderAttackSelf: Fired when the player orders the wingman to attack self. Returns Nil by default
		OnOrderAttackFriend: Fired when the player orders the wingman to attack a friend. Returns Nil by default.
								
	-->

	<ShipClass UNID="&baAdvWingmanBase;"
			class=				"(advanced wingman base class)"
			virtual=			"true"
			
			attributes=			"baseClass"
			>

		<Communications>
			<Message name="Attack target" key="A">
				<OnShow>
					(and (objGetTarget gSender)
						(not (eq (objGetTarget gSender) (objGetTarget gSource)))
						(not (eq (objGetData gSource "behavior") 'goingHome))
						)
				</OnShow>
				
				<Invoke>
					(switch
						(eq (objGetTarget gSender) gSource)
							(if (objFireEvent gSource 'OrderAttackSelf gSender)
								(block Nil
									(shpCancelOrders gSource)
									(shpOrder gSource 'attack (objGetTarget gSender))
									(objSetData gSource "behavior" 'attackingTarget)
									)
								(objSendMessage gSender gSource (objTranslate gSource 'CannotAttackMyself "\"Unable to comply\""))
								)

						(and (not (objIsEnemy gSender (objGetTarget gSender)))
								(not (objIsAngryAt (objGetTarget gSender) gSender))
								)
							(if (objFireEvent gSource 'OrderAttackFriend (objGetTarget gSender))
								(block Nil
									(shpCancelOrders gSource)
									(shpOrder gSource 'attack (objGetTarget gSender))
									(objSetData gSource "behavior" 'attackingTarget)
									)
								(objSendMessage gSender gSource (objTranslate gSource 'CannotAttackFriend "\"Unable to comply\""))
								)

						(block Nil
							(shpCancelOrders gSource)
							(shpOrder gSource 'attack (objGetTarget gSender))
							
							(objSetData gSource "behavior" 'attackingTarget)
							(objSendMessage gSender gSource (objTranslate gSource 'AttackTargetAck "\"Acknowledged\""))
							)
						)
				</Invoke>
			</Message>
			
			<Message name="Break & attack" key="B">
				<OnShow>
					(eq (objGetData gSource "behavior") 'escorting)
				</OnShow>
				
				<Invoke>
					(block (theTarget)
						(switch
							(or (not (setq theTarget (sysFindObject gPlayerShip "sTYAN")))
									(gr (objGetDistance gPlayerShip theTarget) 100)
									)
								(objSendMessage gSender gSource (objTranslate gSource 'NoTargetInRange "\"No target in range\""))
							
							(block Nil
								(shpCancelOrders gSource)
								(shpOrder gSource 'attack theTarget)
								
								(objSetData gSource "behavior" 'attackingAtWill)
								(objSendMessage gSender gSource (objTranslate gSource 'AttackTargetAck "\"Acknowledged\""))
								)
							)
						)
				</Invoke>
			</Message>

			<Message name="Form up" key="F">
				<OnShow>
					(and 
						(or (eq (objGetData gSource "behavior") 'waiting)
							(objCommunicate gSource gSender 'QueryAttackStatus)
							)
						(not (eq (objGetData gSource "behavior") 'goingHome))
						)
				</OnShow>

				<Invoke>
					(block (behavior)
						(setq behavior (objGetData gSource "behavior"))
						(switch
							(eq behavior 'escorting)
								(block Nil
									(objCommunicate gSource gSender 'FormUp)
									(objSendMessage gSender gSource (objTranslate gSource 'FormUpAck "\"Acknowledged\""))
									)

							(block Nil
								(shpCancelOrders gSource)
								(shpOrder gSource 'follow gPlayerShip)
								
								(objSetData gSource "behavior" 'escorting)

								(switch
									(or
										(eq behavior 'attackingTarget)
										(eq behavior 'attackingAtWill)
										)
																					(objSendMessage gSender gSource (objTranslate gSource 'CancelAttackAck "\"Acknowledged\""))

																				(objSendMessage gSender gSource (objTranslate gSource 'FormUpAck "\"Acknowledged\""))
									)
								)
							)
						)
				</Invoke>
			</Message>
			
			<Message name="Look around" key="L">
				<OnShow>
					(eq (objGetData gSource "behavior") 'escorting)
				</OnShow>

				<Invoke>
						(block Nil
							(shpCancelOrders gSource)
							(shpOrder gSource 'patrol gSender 90)
							
							(objSetData gSource "behavior" 'lookingAround)
							(objSendMessage gSender gSource (objTranslate gSource 'LookAroundAck "\"Acknowledged\""))
							)
				</Invoke>
			</Message>

			<Message name="Patrol target" key="P">
				<OnShow>
					(and (objGetTarget gSender)
						(eq (objGetData gSource "behavior") 'escorting)
						)
				</OnShow>

				<Invoke>
					(switch
						(eq (objGetTarget gSender) gSource)
							(objSendMessage gSender gSource (objTranslate gSource 'CannotPatrolMyself "\"Unable to comply\""))
						
						(objIsEnemy gSource (objGetTarget gSender))
								)
							(objSendMessage gSender gSource (objTranslate gSource 'CannotPatrolEnemies "\"Unable to comply\""))

						(block Nil
							(shpCancelOrders gSource)
							(shpOrder gSource 'patrol (objGetTarget gSender) 10)
							
							(objSetData gSource "behavior" 'patrollingTarget)
							(objSendMessage gSender gSource (objTranslate gSource 'PatrolTargetAck "\"Acknowledged\""))
							)
						)
				</Invoke>
			</Message>

			<Message name="Status" key="S">
				<OnShow>
					True
				</OnShow>
				
				<Invoke>
					(block (behavior armorDamage shieldLevel)
						(setq behavior (objGetData gSource "behavior"))
						
						(objSendMessage gSender gSource
							(switch
								(or (eq behavior 'attackingTarget) (eq behavior 'attackingAtWill))
									(objTranslate gSource 'StatusAttackingTarget "\"Engaging target\"")

								(eq behavior 'goingHome)
									(objTranslate gSource 'StatusGoingHome "\"Returning home\"")
								
								(eq behavior 'repairingArmor)
									(objTranslate gSource 'StatusRepairingArmor "\"Repairing armor\"")
									
								(eq behavior 'waiting)
									(objTranslate gSource 'StatusWaiting "\"Waiting\"")
									
								(and (eq (setq armorDamage (objGetVisibleDamage gSource)) 0)
										(or (eq (setq shieldLevel (objGetShieldLevel gSource)) 100) (eq shieldLevel -1))
										)
									(objTranslate gSource 'Status100Percent "\"No damage\"")

								(eq armorDamage 0)
									(cat "Shields down to " shieldLevel "%")
								
								(cat "Armor is " armorDamage "% damaged")
								)
							)
							
						(objSetShowAsDestination gSource Nil 'autoclear)
						)
				</Invoke>
			</Message>

			<Message name="Wait" key="W">
				<OnShow>
					(eq (objGetData gSource "behavior") 'escorting)
				</OnShow>

				<Invoke>
					(block Nil
						(shpCancelOrders gSource)
						(shpOrder gSource 'hold)
						
						(objSetData gSource "behavior" 'waiting)
						(objSendMessage gSender gSource (objTranslate gSource 'WaitAck "\"Acknowledged\""))
						)
				</Invoke>
			</Message>
		</Communications>
		
		<Language>
			<Text id="EscortReportingIn">
				(if (not (objGetData gSource "welcomeMsg"))
					(block Nil
						(objSetData gSource "welcomeMsg" True)
						(objTranslate gSource 'WingmanJoined "\"Ready\"")
						)
					""
					)
			</Text>
			
			<Text id="NiceShooting">			"\"Nice shooting!\""</Text>
			<Text id="WatchYourTargets">		"\"Watch your targets!\""</Text>
		</Language>
		
		<Events>
			<OnBehavior>
				(block (behavior theTarget nextTime maxSystemLevel armorDamage)
					(setq behavior (objGetData gSource "behavior"))
					
					(switch
						; If we're injured and we're near a base that repairs armor then
						; dock with the base and get repaired

						(and (eq behavior 'escorting)
								(geq (setq armorDamage (objGetVisibleDamage gSource)) 10)
								(not (objIsUnderAttack gSource))
								)
							(switch
								; Some wingmen (like Jenna) doesn't want to proceed beyond a certain point
								(and (setq maxSystemLevel (objGetStaticData gSource "MaxSystemLevel"))
										(gr (sysGetLevel) maxSystemLevel)
										)
									(block Nil
										(shpCancelOrders gSource)
										(shpOrder gSource 'hold 30)
										(shpOrder gSource 'gate (intGetGateToSystem gSource (objGetData gSource "homeSystem")))

										(objSetData gSource "behavior" 'goingHome)
										(objSendMessage gPlayerShip gSource (objTranslate gSource 'ImGoingHome "\"Going home\""))
										)
								
								; If there is a station that can repair armor, dock with it
								(setq theTarget (srvFindRepairArmor gSource 60 (itmGetLevel (shpGetArmor gSource 0))))
									(block Nil
										(shpCancelOrders gSource)
										(shpOrder gSource 'dock theTarget)
										(shpOrder gSource 'wait (random 3 8))
										
										(objSetData gSource "behavior" 'repairingArmor)
										(objSendMessage gPlayerShip gSource (objTranslate gSource 'ImRepairingArmor "\"Docking to repair armor\""))
										)
								
								(eq behavior 'lookingAround)
									(if (setq theTarget (sysFindObject gSource "TsA E P"))
										(block
											(
												(playerPower (objGetCombatPower gPlayerShip))
												(threat (match theTarget ship (geq (objGetCombatPower ship) playerPower)))
												)
											(enum theTarget ship
												(block Nil
													(objSetShowAsDestination ship 'autoClear)
													(objSetKnown ship)
													)
												)
											(if threat
												(objSendMessage gPlayerShip gSource (cat (objTranslate gSource 'ThreatDetectedStart "\"Threat detected: ") (objGetName threat 0x0040) (objTranslate gSource 'ThreatDetectedEnd ".\""))
												(objSendMessage gPlayerShip gSource (cat (objTranslate gSource 'ThreatDetectedStart "\"Detected ") (count theTarget) (objTranslate gSource 'ThreatDetectedEnd " enemy ships.\""))
												)
											)
										)
									)

								; Otherwise, tell the player that we need repairs
								(and (geq armorDamage 50)
										(or (not (setq nextTime (objGetData gSource "nextArmorRepairMsg")))
											(geq (unvGetTick) nextTime)
											)
										)
									(block Nil
										(objSendMessage gPlayerShip gSource (objTranslate gSource 'MyArmorNeedsRepair "\"Armor repair needed\""))
										(objSetData gSource "nextArmorRepairMsg" (add (unvGetTick) 3600))
										)
								)
						)
					)
			</OnBehavior>

			<OnCreate>
				(block Nil
					(objSetData gSource "homeSystem" (sysGetNode))
					(sysAddObjRecurringTimerEvent 60 gSource "OnBehavior")
					)
			</OnCreate>

			<OnDestroy>
				(switch
					(eq (objGetGlobalData gSource "status") 'returnedHome)
						Nil

					(and gPlayerShip (eq aOrderGiver gPlayerShip))
						(objSetGlobalData gSource "status" 'destroyedByPlayer)

					(block Nil
						(objSetGlobalData gSource "status" 'destroyed)
						(plyMessage gPlayer (objTranslate gSource 'WingmanKilled "Wingman killed"))
						)
					)
			</OnDestroy>
			
			<OnEnteredGate>
				(if (eq (objGetData gSource "behavior") 'goingHome)
					(objSetGlobalData gSource "status" 'returnedHome)
					)
			</OnEnteredGate>
			
			<OnEnteredSystem>
				(block (maxSystemLevel)
					(setq maxSystemLevel (objGetStaticData gSource "MaxSystemLevel"))
					(switch
						(not maxSystemLevel)
							Nil
							
						(eq (objGetData gSource "homeSystem") (sysGetNode))
							Nil

						(geq (sysGetLevel) maxSystemLevel)
							(objSendMessage gPlayerShip gSource (objTranslate gSource 'ImTooFarFromHome "\"I'm too far from home\""))

						(eq (sysGetLevel) (subtract maxSystemLevel 1))
							(objSendMessage gPlayerShip gSource (objTranslate gSource 'ImFarFromHome "\"I'm far from home\""))
						)
					)
			</OnEnteredSystem>

			<OnOrdersCompleted>
				(block (behavior theTarget)
					(setq behavior (objGetData gSource "behavior"))
					(switch
						(eq behavior 'repairingArmor)
							(block Nil
								(intArmorRepairAll gSource 25 'alwaysRepair)
								(objSendMessage gPlayerShip gSource (objTranslate gSource 'ArmorRepaired "\"Armor repairs completed\""))
								)
						)
					
					; Set orders and state
					
					(switch
						(and (eq behavior 'attackingAtWill)
								(setq theTarget (sysFindObject gPlayerShip "sTYAN"))
								(leq (objGetDistance gPlayerShip theTarget) 100)
								)
							(shpOrder gSource 'attack theTarget)
								
						gPlayerShip
							(block Nil
								(shpOrder gSource 'follow gPlayerShip)
								(objSetData gSource "behavior" 'escorting)
								)

						(block Nil
							(shpOrder gSource 'hold)
							(objSetData gSource "behavior" 'waiting)
							)
						)
					)
			</OnOrdersCompleted>
			
			<OnPlayerLeftSystem>
				(block (behavior)
					(setq behavior (objGetData gSource "behavior"))
					(switch
						(or (not behavior)
								(eq behavior 'goingHome)
								)
							Nil

						; If we're waiting, stay in this system and wait for the player
						(or (eq behavior 'waiting)
								(eq behavior 'repairingArmor)
								)
							'waitForPlayer

						; Otherwise, follow the player through the gate
						'followPlayer
						)
					)
			</OnPlayerLeftSystem>
			
			<OnTranslateMessage>
				(switch
					(eq aMessage 'EscortReportingIn)
						(if (not (objGetData gSource "welcomeMsg"))
							(block Nil
								(objSetData gSource "welcomeMsg" True)
								(objTranslate gSource 'WingmanJoined "\"Ready\"")
								)
							""
							)
							
					(eq aMessage 'WatchYourTargets)
						(objTranslate gSource 'WatchYourTargets "\"Watch your targets!\"")
						
					(eq aMessage 'NiceShooting)
						(objTranslate gSource 'NiceShooting "\"Nice shooting!\"")
						
					Nil
					)
			</OnTranslateMessage>

			<OrderJoinPlayer>
				(block Nil
					(objSetProperty gSource 'playerWingman True)
					(objSetGlobalData gSource "status" 'joined)
					(objFireEvent gSource "OnWingmanJoinedPlayer")
					)
			</OrderJoinPlayer>
			
			<OrderLeavePlayer>
				(block Nil
					(objSetProperty gSource 'playerWingman Nil)
					
					(shpCancelOrders gSource)
					(shpOrder gSource 'hold 30)
					(shpOrder gSource 'gate)
					(objSetData gSource "behavior" 'goingHome)
					
					(objFireEvent gSource "OnWingmanLeftPlayer")
					)
			</OrderLeavePlayer>
		</Events>
	</ShipClass>

	<Globals>
		(block Nil
			;(item1 item2 item2 item3 item3 item3) --> ((item1 1) (item2 2) (item3 3))
			;Group each entry with the number of times it occurs
			(setq group (lambda (theList)
				(block (result theIndex)
					(enum theList theItem
						(if (setq theIndex (find result theItem 0)) ;The index of the (item count) entry
							(set@ result theIndex (inc@ (@ seen theIndex) 1 1))
							(lnkAppend result (list theItem 1))
							)
						)
					result
					)
				))
			(setq sortByLambda (lambda (theList theLambda theOrder)
				;Remove the lambda result from each entry and return the list
				(map
					;Sort by lambda result
					(sort
						;Append each entry with the result of its lambda
						(map
							theList
							theEntry
							(list
								theEntry									(theLambda theEntry)
								)
							)
						theOrder
						1
						)
					theEntry
					(@ theEntry 0)
					)
				))
			;DOES NOT WORK WITH POINTERS
			(setq inc@ (lambda (theList theIndex theAmount)
				(set@ theList theIndex (add (@ theList theIndex) theAmount))
				))
			)
	</Globals>

</TranscendenceModule>

Code: Select all

<OnFireWeapon>
	(gamEnd Nil "encountered an unexpected error")
</OnFireWeapon>
-Command Screen Library: RTS in a dockscreen
-Extended Justice: A safer Commonwealth for all
-Playership Bones: Revisit your old ship wrecks!
-Please help out our official Documentarist (me) by editing the wiki

User avatar
0xABCDEF
Commonwealth Pilot
Commonwealth Pilot
Posts: 75
Joined: Thu May 19, 2016 12:58 am
Location: Was destroyed by a Phobos-class dreadnought in the Eridani system

Re: Oracus & Domina I: The March of the Heretic

Post by 0xABCDEF » Wed Mar 22, 2017 5:39 am

Work on this adventure has become slow and stagnant, though I plan to incorporate the Commonwealth Police and the Royal Family into it.

Edit: Mod is broken again
Last edited by 0xABCDEF on Wed Mar 22, 2017 2:34 pm, edited 1 time in total.

Code: Select all

<OnFireWeapon>
	(gamEnd Nil "encountered an unexpected error")
</OnFireWeapon>
-Command Screen Library: RTS in a dockscreen
-Extended Justice: A safer Commonwealth for all
-Playership Bones: Revisit your old ship wrecks!
-Please help out our official Documentarist (me) by editing the wiki

User avatar
JohnBWatson
Fleet Officer
Fleet Officer
Posts: 1323
Joined: Tue Aug 19, 2014 10:17 pm

Re: Oracus & Domina I: The March of the Heretic

Post by JohnBWatson » Wed Mar 22, 2017 6:26 am

Doesn't show up in the list of adventures, but command screen does appear in the SoTP menu. Does the download work for you if you clear your extensions folder, or is the problem on my end?

User avatar
0xABCDEF
Commonwealth Pilot
Commonwealth Pilot
Posts: 75
Joined: Thu May 19, 2016 12:58 am
Location: Was destroyed by a Phobos-class dreadnought in the Eridani system

Re: Oracus & Domina I: The March of the Heretic

Post by 0xABCDEF » Thu Mar 23, 2017 4:34 am

JohnBWatson wrote:
Wed Mar 22, 2017 6:26 am
Doesn't show up in the list of adventures, but command screen does appear in the SoTP menu. Does the download work for you if you clear your extensions folder, or is the problem on my end?
Turns out that I forgot to include a name-randomization library that I planned to use for pilgrim characters.

http://xelerus.de/index.php?s=mod&id=1580

Code: Select all

<OnFireWeapon>
	(gamEnd Nil "encountered an unexpected error")
</OnFireWeapon>
-Command Screen Library: RTS in a dockscreen
-Extended Justice: A safer Commonwealth for all
-Playership Bones: Revisit your old ship wrecks!
-Please help out our official Documentarist (me) by editing the wiki

User avatar
JohnBWatson
Fleet Officer
Fleet Officer
Posts: 1323
Joined: Tue Aug 19, 2014 10:17 pm

Re: Oracus & Domina I: The March of the Heretic

Post by JohnBWatson » Thu Mar 23, 2017 4:57 am

Found a bug - the starting station's harass attack can kill you in the middle of the opening dialogue. Making the opening battle a bit smaller and shorter could reduce the risk of this, as could ordering threats to gate out once the freighter arrives.

You may want to update the Penitent ship graphics.

Edit:

There are also some issues going on with docking before you get your ship, traffic at the Cathedral after it's killed, and the like. I haven't yet gotten the mod to work past the cathedral raid. The cathedral should also avoid stations it's hostile to, and keep its little metropolis.

Pilgrim behavior also feels a bit off. There should definitely be far fewer of them, and they should probably be more responsive to what's going on. At the very least, they should stop what they're doing and attack things that attack them. Trying to gate once desperate escape or sustain gets activated would also be an improvement.

Looking at the powers from the source code, they seem interesting. Is there a reason CORRUPT is used the way it is?

User avatar
0xABCDEF
Commonwealth Pilot
Commonwealth Pilot
Posts: 75
Joined: Thu May 19, 2016 12:58 am
Location: Was destroyed by a Phobos-class dreadnought in the Eridani system

Re: Oracus & Domina I: The March of the Heretic

Post by 0xABCDEF » Thu Mar 23, 2017 6:52 am

I will make sure that the fighting completes before the Monastery scene.

I am not really sure how to handle ship images and armor segment stuff besides the facings. I also need a way to render the hero images for the playership and monastery. I might make the NPC penitents use the updated graphics and keep the player with the old graphics (for some reason).

The Sanctuary system uses an outdated version of the XML (before the Benedict updates). Also, I was initially unsure about how to handle pilgrim behavior.

CORRUPT was initially a gimmick-based power. I'm going to get rid of the crate gimmick and replace it with calculations based on the matchup between the player and the target.

Code: Select all

<OnFireWeapon>
	(gamEnd Nil "encountered an unexpected error")
</OnFireWeapon>
-Command Screen Library: RTS in a dockscreen
-Extended Justice: A safer Commonwealth for all
-Playership Bones: Revisit your old ship wrecks!
-Please help out our official Documentarist (me) by editing the wiki

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest