<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.hard-light.org/index.php?action=history&amp;feed=atom&amp;title=Cowardly_Ships</id>
	<title>Cowardly Ships - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.hard-light.org/index.php?action=history&amp;feed=atom&amp;title=Cowardly_Ships"/>
	<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Cowardly_Ships&amp;action=history"/>
	<updated>2026-11-15T22:23:07Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Cowardly_Ships&amp;diff=44384&amp;oldid=prev</id>
		<title>Niffiwan: note to self</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Cowardly_Ships&amp;diff=44384&amp;oldid=prev"/>
		<updated>2014-12-29T22:49:14Z</updated>

		<summary type="html">&lt;p&gt;note to self&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:49, 29 December 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;I found a need to have ships evade their attackers rather than fly on without responding to incoming fire. Probably an edge case! Could be useful for making escape pods harder to shoot down (or conversely easier to escort?)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;I found a need to have ships evade their attackers rather than fly on without responding to incoming fire. Probably an edge case! Could be useful for making escape pods harder to shoot down (or conversely easier to escort?)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;NOTE: I need to fix this by removing the for-loop searches for the ship name and replace with mn.Ships[NAME] &amp;amp; isValid() check (where it doesn&#039;t already exist).&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Niffiwan</name></author>
	</entry>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Cowardly_Ships&amp;diff=44380&amp;oldid=prev</id>
		<title>Niffiwan: Created page with &quot;I found a need to have ships evade their attackers rather than fly on without responding to incoming fire. Probably an edge case! Could be useful for making escape pods harder to…&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Cowardly_Ships&amp;diff=44380&amp;oldid=prev"/>
		<updated>2014-12-21T09:04:41Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;I found a need to have ships evade their attackers rather than fly on without responding to incoming fire. Probably an edge case! Could be useful for making escape pods harder to…&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;I found a need to have ships evade their attackers rather than fly on without responding to incoming fire. Probably an edge case! Could be useful for making escape pods harder to shoot down (or conversely easier to escort?)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Conditional Hooks&lt;br /&gt;
$Application: FS2_Open&lt;br /&gt;
$On Game Init:&lt;br /&gt;
[&lt;br /&gt;
&lt;br /&gt;
OD = {}&lt;br /&gt;
&lt;br /&gt;
function OD:Init()&lt;br /&gt;
	--[[&lt;br /&gt;
		allow sexps to set order state; i.e. evade to start with&lt;br /&gt;
		if ship has state set; and was hit/attacked&lt;br /&gt;
			set goal (e.g. ai-evade-ship its attacker)&lt;br /&gt;
		after goal Duration has elapsed, remove goal&lt;br /&gt;
	]]--&lt;br /&gt;
&lt;br /&gt;
	self.ShipList = {}&lt;br /&gt;
	self.Duration = 9&lt;br /&gt;
	self.CheckInterval = 1&lt;br /&gt;
	self.LastRun = 0&lt;br /&gt;
&lt;br /&gt;
	self.addKey = &amp;quot;9&amp;quot;&lt;br /&gt;
	self.delKey = &amp;quot;0&amp;quot;&lt;br /&gt;
	self.DEBUG = true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function OD:wasAttacked(ship,weapon)&lt;br /&gt;
	if ship:isValid() then&lt;br /&gt;
		local numShips = #self.ShipList&lt;br /&gt;
		for i=1, numShips do&lt;br /&gt;
			if ship.Name == self.ShipList[i].Name then&lt;br /&gt;
				curTime = mn.getMissionTime()&lt;br /&gt;
				if self.ShipList[i].Time &amp;lt; curTime then&lt;br /&gt;
					self.ShipList[i].Time = curTime + OD.Duration&lt;br /&gt;
					if self.DEBUG then&lt;br /&gt;
						local numOrders = #ship.Orders&lt;br /&gt;
						for i=1, numOrders do&lt;br /&gt;
							ba.warning(tostring(ship.Orders[i]:getType()))&lt;br /&gt;
							ba.warning(ship.Orders[i].Priority)&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					if weapon.Parent:isValid() then&lt;br /&gt;
						ship:giveOrder(ORDER_EVADE,weapon.Parent,nil,1.0)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function OD:evalRemove()&lt;br /&gt;
	now = mn.getMissionTime()&lt;br /&gt;
	if self.LastRun + self.CheckInterval &amp;lt; now then&lt;br /&gt;
		self.LastRun = now&lt;br /&gt;
		local numShips = #self.ShipList&lt;br /&gt;
		for i=1, numShips do&lt;br /&gt;
			if self.ShipList[i].Time &amp;lt; now then&lt;br /&gt;
				OD:removeOrder(self.ShipList[i])&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function OD:removeOrder(item)&lt;br /&gt;
	local ship = mn.getObjectFromSignature(item.sig)&lt;br /&gt;
	if not ship:isValid() then return end&lt;br /&gt;
	if not ship.Orders:isValid() then return end&lt;br /&gt;
	local numOrders = #ship.Orders&lt;br /&gt;
	for i=1, numOrders do&lt;br /&gt;
		if tostring(ship.Orders[i]:getType()) == item.Order then&lt;br /&gt;
			ship.Orders[i]:remove()&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function OD:as(shipname,order)&lt;br /&gt;
	-- addShip to ShipList&lt;br /&gt;
	local allships = #mn.Ships&lt;br /&gt;
	for i=1, allships do&lt;br /&gt;
		if mn.Ships[i].Name == shipname then&lt;br /&gt;
			local tmp = {}&lt;br /&gt;
			tmp.Name = mn.Ships[i].Name&lt;br /&gt;
			tmp.sig = mn.Ships[i]:getSignature()&lt;br /&gt;
			tmp.Time = 0&lt;br /&gt;
			tmp.Order = OD:OrderLookup(order)&lt;br /&gt;
			self.ShipList[#self.ShipList+1] = tmp&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if self.DEBUG then ba.warning(&amp;#039;ran OD:as&amp;#039;) end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function OD:ds(shipname,order)&lt;br /&gt;
	-- deleteShip from ShipList&lt;br /&gt;
	-- also remove the order if its active&lt;br /&gt;
	local ships = #self.ShipList&lt;br /&gt;
	for i=1, ships do&lt;br /&gt;
		if self.ShipList[i].Name == shipname then&lt;br /&gt;
			if self.ShipList[i].Order == OD:OrderLookup(order) then&lt;br /&gt;
				OD:removeOrder(self.ShipList[i])&lt;br /&gt;
				table.remove(self.ShipList,i)&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if self.DEBUG then ba.warning(&amp;#039;ran OD:ds&amp;#039;) end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function OD:OrderLookup(order)&lt;br /&gt;
	if order == &amp;#039;evade&amp;#039; then&lt;br /&gt;
		return &amp;#039;ORDER_EVADE&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;UNKNOWN&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
$On Gameplay Start:&lt;br /&gt;
[&lt;br /&gt;
	OD:Init()&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
$Object Type: Weapon&lt;br /&gt;
$On Ship Collision:&lt;br /&gt;
[&lt;br /&gt;
	-- do not treat ramming as an attack&lt;br /&gt;
	OD:wasAttacked(hv.Object,hv.Weapon)&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
$State: GS_STATE_GAME_PLAY&lt;br /&gt;
$On Key Released:&lt;br /&gt;
[&lt;br /&gt;
	if OD.DEBUG then&lt;br /&gt;
		local shipname = &amp;quot;Glich&amp;quot; -- testing only&lt;br /&gt;
		local order = &amp;#039;evade&amp;#039;&lt;br /&gt;
		if hv.Key == OD.addKey then&lt;br /&gt;
			OD:as(shipname,order)&lt;br /&gt;
		elseif hv.Key == OD.delKey then&lt;br /&gt;
			OD:ds(shipname,order)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
$State: GS_STATE_GAME_PLAY&lt;br /&gt;
$On Frame:&lt;br /&gt;
[&lt;br /&gt;
	OD:evalRemove()&lt;br /&gt;
]&lt;br /&gt;
#End&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Niffiwan</name></author>
	</entry>
</feed>