It's always Kate...

Bug reports for the different beta versions of transcendence.
Post Reply
F50
Fleet Officer
Fleet Officer
Posts: 1004
Joined: Sat Mar 11, 2006 5:25 pm

So, if I recall correctly, it used to be (potentially a long time ago, long, long time ago) when you got the bad Rigel spawn (bottom left and BM top right, for instance), Kate being stuck wasn't such a bad thing because you could still complete the mission without her, but now it just won't work.

I can kill the guard, and the station, which just tells me to wait for Kate. Even another guard that spawns on the startgate when you go back to the arena and chat with it (!). But the mission refuses to proceed without Kate's presence. Unfortunately you can't aggro Kate to get her to the station (she forgets completely about the 8person you saved), and leaving the system ruins everything and then some. So it would seem that quest is unavailable to me unless I feel like lobotomizing the mission logic (or giving myself a unique item to move Kate). Unfortunate really. Am I missing a new workaround?
F50
Fleet Officer
Fleet Officer
Posts: 1004
Joined: Sat Mar 11, 2006 5:25 pm

Okay, so the first problem is caused by missing some RPG ascension logic.

Code: Select all

KateMorgental.xml
			<OnGlobalSystemStopped>
				;	If Kate is in this system, then ascend her (so that
				;	she can appear in other systems).
				(rpgCharacterAscend &unidKateMorgental;)
			</OnGlobalSystemStopped>
When this happens in the middle of the kidnapping mission, there is no way to descend Kate back into the system for the purpose of completing it, nor detecting this was the case so as to fail it (or for that matter auto-succeed it if the station and guard are both destroyed). The second problem is hard to follow due to events. It seems to tell Kate to approach the station right away, but I think that behaviour is being overridden by msnSetData.

Code: Select all

BattleArenaKidnapped.xml
					;	Create a marker for the cruiser

					(setq anchorObj (sysCreateMarker "Morgental cruiser anchor" (sysVectorPolarOffset arenaObj 270 20) &svCorporate;))
					(msnSetData gSource 'anchorID (objGetID anchorObj))

					;	Create Morgental's cruiser

					(setq kateMorgentalObj
						(rpgCharacterCreateShip
							&unidKateMorgental;
							&scKateMorgentalCruiser;
							(objGetPos anchorObj)
							)
						)

					;	Orbit the black market station waiting for the player

					(shpCancelOrders kateMorgentalObj)
					(shpOrder kateMorgentalObj 'approach destObj 180)
					(shpOrder kateMorgentalObj 'fireEvent gSource 'OnKateInPosition)
					(shpOrder kateMorgentalObj 'orbit destObj 180)

					(msnRegisterForEvents gSource kateMorgentalObj)
					(msnSetData gSource 'kateID (objGetID kateMorgentalObj))

					;	Set status
					(msnSetData gSource 'status 'outbound)
					;	 Update player target
					(msnSetPlayerTarget gSource)
					)
I think I just need to queue up a few more shpOrder calls to approach to zero to get Kate clear before (shpOrder...'approach destObj 180). Probably the logic would be something like using sysVectorPolarOffset to create four markers outside the four corners of the arena, and then send Kate clockwise/counterclockwise around the battle arena until Kate arrives at the one closest to destObj -- but only if there isn't a reasonably clear shot to destObj from the anchor itself, which should always be the case if the anchor point is closer to DestObj than a point slightly closer to the arena entrance (Kate can't get stuck unless it is necessary to go back towards the arena). I'll probably play around with that tomorrow.
User avatar
Periculi
Fleet Officer
Fleet Officer
Posts: 1282
Joined: Sat Oct 13, 2007 7:48 pm
Location: Necroposting in a forum near you

Hi F50!
F50
Fleet Officer
Fleet Officer
Posts: 1004
Joined: Sat Mar 11, 2006 5:25 pm

Greetings, it has been, what, 10 years, 11? It feels so good to come back to this game, let me tell you.

Unfortunately since my game was registered I can't apply this mod to it, and I'm not sure I could even if I hadn't, it seems mods are selected only when starting a new game nowadays. But, I have a fix concept for Kate getting stuck (but not the quest failing to resolve on gate-out because that is very easy to avoid) in mod form at xelerus. As usual, looking back over it a third time shows me a bit of a goof, I got the position vector of the Black Market into a variable, which I then fail to use. I'll fix that later when I feel like it.

Code: Select all

                    ; The arena as defined in BattleArena.xml is about 3800x1550 pixels, but the default for sysVector stuff is in light seconds and I don't know the conversion. 
                    ; 28 is about the center of the Arena, so I'll estimate 60 as the arena entrance and 100ish as the bottom of our path. 45 degrees would be the angle for a
                    ; square arena, would be the polar offset for a square arena, but the arena is not square so we'll try 40 degrees (first I tried 30, that was too wide).
                    ; Rather than a perfect box we'll also go for a slightly trapizoidal shape, but only slightly or Kate will bounce off the side of the arena sometimes.

                    (setq trCorner (sysVectorPolarOffset arenaObj 0 135))
                    (setq tlCorner (sysVectorPolarOffset arenaObj 180 135))
                    (setq blCorner (sysVectorPolarOffset arenaObj 220 155))
                    (setq brCorner (sysVectorPolarOffset arenaObj 320 155))

                    ; need estimates of whether any pathing is needed at all
                    (setq arenaFrontEst (sysVectorPolarOffset arenaObj 270 60))
                    (setq arenaFrontAndABit (sysVectorPolarOffset arenaObj 270 75))

                    ; May as well make Kate path beautifully around the corporate stations as well
                    (setq kateLeaveArenaMarker (sysCreateMarker "Kate Leave Arena Marker" (sysvectorPolarOffset arenaObj 270 110) &svCorporate;))
                    (setq firstPathAroundArena Nil)
                    (setq secondPathAroundArena Nil)

                    ; Using the pathing box corners, the arena front positions, and the distance to the BM station (destObj) we can logic through where Kate needs to go.
                    (setq destObjPos (objGetPos destObj))
                    (if (ls (sysVectorDistance arenaFrontEst destObj) (sysVectorDistance arenaFrontAndABit destObj))
                        (block Nil
                        ; Kate could get stuck
                            (if (leq (sysVectorDistance blCorner destObj) (sysVectorDistance brCorner destObj))
                                (block Nil 
                                    (setq firstPathAroundArena (sysCreateMarker "1st Kate Arena Path" blCorner &svCorporate;))
                                    (if (leq (sysVectorDistance tlCorner destObj) (sysVectorDistance blCorner destObj))
                                        (setq secondPathAroundArena (sysCreateMarker "2nd Kate Arena Path" tlCorner &svCorporate;))
                                    )
                                )
                                (block Nil 
                                    (setq firstPathAroundArena (sysCreateMarker "1st Kate Arena Path" brCorner &svCorporate;))
                                    (if (leq (sysVectorDistance trCorner destObj) (sysVectorDistance brCorner destObj))
                                        (setq secondPathAroundArena (sysCreateMarker "2nd Kate Arena Path" trCorner &svCorporate;))
                                    )
                                )
                            )
                        )
                    )

; END MODCODE

			;	Orbit the black market station waiting for the player

			(shpCancelOrders kateMorgentalObj)
; MODCODE
                    (shpOrder kateMorgentalObj 'approach kateLeaveArenaMarker 5)
                    (if firstPathAroundArena (shpOrder kateMorgentalObj 'approach firstPathAroundArena 5))
                    (if secondPathAroundArena (shpOrder kateMorgentalObj 'approach secondPathAroundArena 5))
; END MODCODE
			(shpOrder kateMorgentalObj 'approach destObj 180)
			(shpOrder kateMorgentalObj 'fireEvent gSource 'OnKateInPosition)
			(shpOrder kateMorgentalObj 'orbit destObj 180)

User avatar
Periculi
Fleet Officer
Fleet Officer
Posts: 1282
Joined: Sat Oct 13, 2007 7:48 pm
Location: Necroposting in a forum near you

F50 wrote:
Wed Oct 14, 2020 8:39 pm
Greetings, it has been, what, 10 years, 11? It feels so good to come back to this game, let me tell you.
Yeah, it's been a while, and I felt the same way too coming back recently. Good to run across you on the forums again!
Post Reply