KEW Shipyards

A place to discuss mods in development and concepts for new mods.
Post Reply
BienM
Miner
Miner
Posts: 31
Joined: Thu Mar 06, 2008 1:19 pm

I've recently installed 3ds Max on this computer and I decided to take up making playerships and learning how to mod Transcendence as a hobby.

Here's my first playership:
Katana-class Experimental Assault Frigate
Image

The Katana was designed to be a hit-and-run type vessel, either closing to range while firing its main armament at an enemy or hitting it with missiles and long-range kinetic weaponry from a distance. It is very fast, able to keep up with most gunships, but not very maneuverable.

Roadmap:
1.0: Initial WIP release
1.1: Playership Drones compatibility, 'full' release
1.2: Fine-tuning
1.3: Better model, textures
1.?: Heliogenesis Fighter Equipment integration?
Outstanding issues:
- Balancing
- Weapon mounts, engine emissions need to be fixed
- armor display image off centered

Future plans:
More ships
Stations
Custom star systems and quests?
Addition of the ships to patrols and sovereigns
Custom items, weapons, and equiment

Download 1.0z Here
Changelog
1.0c: fixed an issue that prevented the Katana extension from being selected. Apparently I have to call the TSB library now. Added interior compartments.
1.0d: Some outstanding issues
1.0z: Changed the model some. The ship now detects stations in a 250ls radius. PSD compatibility.

Todo:
Move sensor functionality to an 'active sensor' device. Activating it will scan a 250 ls area, but will have a chance of increasing the number of enemies sent at you by hostile sovereigns.
Make planning maneuvers an important fact of gameplay. Massive fuel use when firing thrusters?

Credits to:
JohnBWatson for Pale Blue Light, which helped me get my head around making a playership.
PM for Playership Drones. I used some of the armor segment code from the EI7000 playership
AssumedPseudonym for help with setting up the 3d model, and the syntax
Wolfy for the sprite sheet generator, and
George Moromisato for such a great game
Last edited by BienM on Sun Sep 11, 2016 5:31 pm, edited 1 time in total.
BienM
Miner
Miner
Posts: 31
Joined: Thu Mar 06, 2008 1:19 pm

An Old Pilgrim's Playership
Image
A few days after your vision, your father summons you to his deathbed. He reveals to you that he too was a pilgrim, but lacked the conviction to finish his journey. Filled with shame at his cowardice, he returned to his family. With his dying breath, he bequeaths to you his old ship and implores you to succeed where he failed.

Will you honor your father's last request?

Todo:
- Playership code
- Quirks
  • - You begin with powerful weapons but:
    - Your father's old ship is fickle. Too much damage may lead to the failure of important systems;
    - Your father has amassed many enemies in his journey. The sight of his ship may bring them out of their dens once more.
JohnBWatson
Fleet Officer
Fleet Officer
Posts: 1452
Joined: Tue Aug 19, 2014 10:17 pm

That reskin on the Katana is very impressive. I liked the original model too, but the new version fits the game perfectly.
BienM
Miner
Miner
Posts: 31
Joined: Thu Mar 06, 2008 1:19 pm

JohnBWatson wrote:That reskin on the Katana is very impressive. I liked the original model too, but the new version fits the game perfectly.
Thanks!

On another note, I'm putting out a call for help for scripting. I'm moving the Katana's sensor functionality to an item to allow for further expansion of functionality. I want it to scan the area six times on each activation, with a delay of ten seconds between each scan.

Code: Select all

	<ItemType UNID="&itKatanaActiveScan;"
			name=				"Active Scan"
			level=				"5"
			mass=				"5000"
			frequency=			"notrandom"

			description=		"Activates the Katana's active scanners."
			>

		<Image imageID="&rsItems1;" imageX="0" imageY="192" imageWidth="96" imageHeight="96"/>

		<MiscellaneousDevice
				powerUse=		"5"
				capacitorPowerUse=	"50"
				powerToActivate=	"10000"
		/>

<!--issue: does one scan while It's supposed to be doing six-->
	<Invoke installedOnly="true">
			(block Nil
				(plyMessage gPlayer "Sensors initialized...")
				(sysAddObjTimerEvent 100 gplayership "sensorTest")
				)
			)
			
	</Invoke>
	<Events>
		<sensorTest>
			(plyMessage gPlayer "Systems test.")
		</sensorTest>
		<scanEvent>
			(block (obj mappedAll mapEnemy)
				(plyMessage gPlayer "Scanning...")
				(setq mappedAll True)

				; Compute the probability of mapping an enemy station
				(switch
					(geq (sysGetLevel) 7)
						(setq mapEnemy 0)

					(geq (sysGetLevel) 3)
						(setq mapEnemy (subtract 360 (multiply 72 (subtract (sysGetLevel) 2))))

					(setq mapEnemy 360)
				)

				; Iterate over all stations in the system
				(enum (sysFindObject gSource "TsN:250") obj
					(switch
						(and (objIsEnemy gSource obj) (gr (add (objGetDestiny obj) 1) mapEnemy))
							(setq mappedAll Nil)
						(block Nil
							(if (not (objIsKnown obj))
								(plyMessage gPlayer "New station(s) detected")
								(plyMessage gPlayer "All stations within 250 ls detected")
							)
							(objSetKnown obj)
						)	
					)
				)
			)
		</scanEvent>
	</Events>
	</ItemType>
It scans properly when the code in the sensorTest event is placed in the Invoke element, but it only does so once with each use. I think externalizing it so that it can be called by a timer would be the correct method, but I'm having no luck with getting it to work so far. Activating the device results in it sending the message "Systems initialized" but does not run the sensorTest code, with no errors attached.

I've still yet to create the counter that makes it run six times too.

Edit: Getting there!

Code: Select all

	<Invoke installedOnly="true">
			(block Nil
				(plyMessage gPlayer "Sensors initialized...")
				(objFireItemEvent gplayership gitem "runCounter")
				"runcounter"
				)
			)
	</Invoke>
	<Events>
		<runCounter>
			(block (runTimes)
				(setq runTimes 0)
				(loop (ls runTimes 6)
					(block Nil
						(sysAddObjTimerEvent 300 gPlayerShip 'sensorTest)
						(dbgOutput runTimes)
						(setq runTimes (add 1 runTimes))
						"initializing"
					)
				)
			)
		</runCounter>
		<sensorTest>
			(plyMessage gPlayer "Systems test.")
			"sensor test"
		</sensorTest>
		<!--<scanEvent>
			(block (obj mappedAll mapEnemy)
				(plyMessage gPlayer "Scanning...")
				(setq mappedAll True)

				; Compute the probability of mapping an enemy station
				(switch
					(geq (sysGetLevel) 7)
						(setq mapEnemy 0)

					(geq (sysGetLevel) 3)
						(setq mapEnemy (subtract 360 (multiply 72 (subtract (sysGetLevel) 2))))

					(setq mapEnemy 360)
				)

				; Iterate over all stations in the system
				(enum (sysFindObject gSource "TsN:250") obj
					(switch
						(and (objIsEnemy gSource obj) (gr (add (objGetDestiny obj) 1) mapEnemy))
							(setq mappedAll Nil)
						(block Nil
							(if (not (objIsKnown obj))
								(plyMessage gPlayer "New station(s) detected")
								(plyMessage gPlayer "All stations within 250 ls detected")
							)
							(objSetKnown obj)
						)	
					)
				)
			)
		</scanEvent>-->
	</Events>
	</ItemType>
NMS
Militia Captain
Militia Captain
Posts: 569
Joined: Tue Mar 05, 2013 8:26 am

If you don't want them all to happen at once, you've got to either use a recurring timer (and stop it after some number of iterations), or set each timer for a different amount of time. For instance:

Code: Select all

(for i 1 7
    (sysAddObjTimerEvent (multiply 300 i) gPlayerShip 'sensorTest)
)
User avatar
Aury
Fleet Admiral
Fleet Admiral
Posts: 5421
Joined: Tue Feb 05, 2008 1:10 am
Location: Somewhere in the Frontier on a Hycrotan station, working on new ships.

Thats a cool ship! :D
I'd love to see you take on making NPC factions
(shpOrder gPlayership 'barrelRoll)
(plySetGenome gPlayer (list 'Varalyn 'nonBinary))
Homelab Servers: Xeon Silver 4110, 16GB | Via Quadcore C4650, 16GB | Athlon 200GE, 8GB | i7 7800X, 32GB | Threadripper 1950X, 32GB | Atom x5 8350, 4GB | Opteron 8174, 16GB | Xeon E5 2620 v3, 8GB | 2x Xeon Silver 4116, 96GB, 2x 1080ti | i7 8700, 32GB, 6500XT
Workstations & Render machines: Threadripper 3990X, 128GB, 6900XT | Threadripper 2990WX, 32GB, 1080ti | Xeon Platinum 8173M, 48GB, 1070ti | R9 3900X, 16GB, Vega64 | 2x E5 2430L v2, 24GB, 970 | R7 3700X, 32GB, A6000
Gaming Systems: R9 5950X, 32GB, 6700XT
Office Systems: Xeon 5318Y, 256GB, A4000
Misc Systems: R5 3500U, 20GB | R5 2400G, 16GB | i5 7640X, 16GB, Vega56 | E5 2620, 8GB, R5 260 | P4 1.8ghz, 0.75GB, Voodoo 5 5500 | Athlon 64 x2 4400+, 1.5GB, FX 5800 Ultra | Pentium D 3.2ghz, 4GB, 7600gt | Celeron g460, 8GB, 730gt | 2x Athlon FX 74, 8GB, 8800gts 512 | FX 9590, 16GB, R9 295x2 | E350, 8GB | Phenom X4 2.6ghz, 16GB, 8800gt | random core2 duo/atom/i5/i7 laptops
User avatar
TheLoneWolf
Militia Captain
Militia Captain
Posts: 802
Joined: Thu Nov 28, 2013 5:03 pm
Location: Aboard the CSS Radiant

Nice job, mate! Maybe I should ditch Blender and start 3DS MAX too.
Post Reply