mirror of
https://github.com/FalloutCollaborationProject/FCP-Tools.git
synced 2026-07-27 16:59:37 -07:00
Introduce terminal/holotape features, hacking jobs and UI plus extensive radiant quest content and faction/trader support. Adds many new C# systems (holotape storage/comp, terminal hacking, job drivers, quest nodes/parts, gensteps, settlement spawn control, pocket map components) and XML defs (quest scripts for CaravanRescue/ScavengerSupplyRun, mapgen prefab, faction/trader defs for currency exchange, site and research defs). Updates: JobDefs to include holotape/hack jobs, PawnKind apparel season handling and faction requirement metadata, ThingDefs and map/site defs, language word lists, map icons and textures, and various patches (workgiver, mapgen, currency). Removes obsolete VNPE compatibility patch, legacy pawn-rescue-animal script and a few unused defs/assets.
290 lines
20 KiB
XML
290 lines
20 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<Defs>
|
|
|
|
<QuestScriptDef>
|
|
<defName>FCP_Quest_SettlementRaidDefense</defName>
|
|
<rootSelectionWeight>1.0</rootSelectionWeight>
|
|
<rootMinPoints>50</rootMinPoints>
|
|
<defaultChallengeRating>1</defaultChallengeRating>
|
|
<canGiveRoyalFavor>true</canGiveRoyalFavor>
|
|
<expireDaysRange>4~8</expireDaysRange>
|
|
<questNameRules>
|
|
<rulesStrings>
|
|
<li>questName->Defending [settlement]</li>
|
|
<li>questName->Operation: Protect [settlement]</li>
|
|
<li>questName->Wasteland Defense: [settlement]</li>
|
|
<li>questName->Settlement Under Siege</li>
|
|
<li>questName->The [settlement] Stand</li>
|
|
<li>questName->Protecting the Innocent</li>
|
|
<li>questName->Raider Threat Elimination</li>
|
|
<li>questName->Last Stand at [settlement]</li>
|
|
<li>settlement->a wasteland settlement</li>
|
|
<li>settlement->a survivor outpost</li>
|
|
<li>settlement->a trading post</li>
|
|
<li>settlement->a farming community</li>
|
|
<li>settlement->a frontier settlement</li>
|
|
<li>settlement->a refugee camp</li>
|
|
<li>settlement->a scavenger outpost</li>
|
|
<li>settlement->a civilian settlement</li>
|
|
</rulesStrings>
|
|
</questNameRules>
|
|
<questDescriptionRules>
|
|
<rulesStrings>
|
|
<li>questDescription->Emergency transmission from [asker_nameFull], [asker_faction_leaderTitle] of [asker_faction_name]: "We've received urgent intelligence that raiders are planning a coordinated assault on one of our [settlement]s. The settlers there are defenseless - mostly farmers, traders, and families just trying to survive in the wasteland. We need experienced fighters to reach the settlement and help defend it before the attack begins."</li>
|
|
<li>questDescription->Priority alert from [asker_nameFull] of [asker_faction_name]: "A notorious raider gang has been spotted moving toward [settlement]. The civilians there have no military training and limited weapons - they're sitting ducks. Intelligence suggests the raiders are after the settlement's food stores and fuel reserves. Time is critical - get there and fortify their defenses before the wasteland vultures arrive."</li>
|
|
<li>questDescription->Distress signal from [asker_faction_name]: "[asker_nameFull] here. We've lost contact with [settlement] after reports of raider activity in the area. Our scouts indicate a major assault is imminent - possibly within hours. The settlement houses dozens of innocent survivors who've built something decent in this godforsaken wasteland. They deserve a chance to keep what they've worked so hard to build."</li>
|
|
<li>questDescription->Urgent communication from [asker_nameFull], [asker_faction_leaderTitle]: "Raiders have been circling [settlement] like vultures for days, testing their defenses. The settlement's barely armed - they're peaceful folks who've managed to carve out a life in the ruins. Word is the raiders plan to hit them at dawn. These people took us in when we had nothing - now it's our turn to stand by them."</li>
|
|
<li>questDescription->Critical mission briefing from [asker_faction_name]: A heavily armed raider warband is converging on [settlement]. The target is strategically important - it sits on a major trade route and has clean water sources. If it falls, it'll embolden every raider gang in the region. [asker_nameFull] is personally requesting assistance: "Help us protect these people. In this wasteland, every functioning settlement is a beacon of hope."</li>
|
|
</rulesStrings>
|
|
</questDescriptionRules>
|
|
<root Class="QuestNode_Sequence">
|
|
<nodes>
|
|
<li Class="FCP.Core.RadiantQuests.QuestNode_GetFactionFromList">
|
|
<storeAs>askerFaction</storeAs>
|
|
<factionDefs>
|
|
<li MayRequire="Rick.FCP.Wastelanders">FCP_Faction_Hidden_Wastelanders</li>
|
|
<li>OutlanderCivil</li>
|
|
</factionDefs>
|
|
</li>
|
|
<li Class="FCP.Core.RadiantQuests.QuestNode_GetLeaderOfFaction">
|
|
<storeAs>asker</storeAs>
|
|
<factionToUse>$askerFaction</factionToUse>
|
|
</li>
|
|
<li Class="FCP.Core.RadiantQuests.QuestNode_GetFactionFromList">
|
|
<storeAs>enemyFaction</storeAs>
|
|
<!--The faction def that will raid-->
|
|
<factionDefs>
|
|
<li>PirateWaster</li>
|
|
</factionDefs>
|
|
</li>
|
|
<li Class="FCP.Core.RadiantQuests.QuestNode_GetFactionFromList">
|
|
<storeAs>settlementFaction</storeAs>
|
|
<!--The faction def that will be raided-->
|
|
<factionDefs>
|
|
<li MayRequire="Rick.FCP.Wastelanders">FCP_Faction_Hidden_Wastelanders</li>
|
|
<li>OutlanderCivil</li>
|
|
</factionDefs>
|
|
</li>
|
|
<li Class="QuestNode_SubScript">
|
|
<def>Util_RandomizePointsChallengeRating</def>
|
|
<parms>
|
|
<pointsFactorTwoStar>1.5</pointsFactorTwoStar>
|
|
<pointsFactorThreeStar>2</pointsFactorThreeStar>
|
|
</parms>
|
|
</li>
|
|
<li Class="QuestNode_SubScript">
|
|
<def>Util_AdjustPointsForDistantFight</def>
|
|
</li>
|
|
<li Class="QuestNode_GetMap" />
|
|
<li Class="QuestNode_GetSiteTile">
|
|
<storeAs>siteTile</storeAs>
|
|
<preferCloserTiles>true</preferCloserTiles>
|
|
</li>
|
|
<li Class="FCP.Core.RadiantQuests.QuestNode_GetSitePartDefsByTagsAndFaction">
|
|
<factionToUse>$settlementFaction</factionToUse>
|
|
<storeAs>sitePartDefs</storeAs>
|
|
<storeFactionAs>siteFaction</storeFactionAs>
|
|
<sitePartsTags>
|
|
<li>
|
|
<tag>FCP_Site_SettlementRaidInProgress</tag>
|
|
</li>
|
|
</sitePartsTags>
|
|
</li>
|
|
<li Class="QuestNode_GetDefaultSitePartsParams">
|
|
<tile>$siteTile</tile>
|
|
<faction>$siteFaction</faction>
|
|
<sitePartDefs>$sitePartDefs</sitePartDefs>
|
|
<storeSitePartsParamsAs>sitePartsParams</storeSitePartsParamsAs>
|
|
</li>
|
|
|
|
<li Class="QuestNode_GetSiteThreatPoints">
|
|
<storeAs>sitePoints</storeAs>
|
|
<sitePartsParams>$sitePartsParams</sitePartsParams>
|
|
</li>
|
|
<li Class="QuestNode_SubScript">
|
|
<def>Util_GetDefaultRewardValueFromPoints</def>
|
|
<parms>
|
|
<!-- Use the actual threat points generated (some site parts define a minimum threshold) -->
|
|
<points>$sitePoints</points>
|
|
</parms>
|
|
</li>
|
|
<!-- Inflate reward value. Since we're basing the reward value on the threat points generated, we need to do this
|
|
even though the threat points was deflated from the input points already. -->
|
|
<li Class="QuestNode_Multiply">
|
|
<value1>$rewardValue</value1>
|
|
<value2>1.75</value2>
|
|
<storeAs>rewardValue</storeAs>
|
|
</li>
|
|
<li Class="QuestNode_SubScript">
|
|
<def>Util_GenerateSite</def>
|
|
<parms>
|
|
<sitePartsParams>$sitePartsParams</sitePartsParams>
|
|
</parms>
|
|
</li>
|
|
<li Class="QuestNode_SpawnWorldObjects">
|
|
<worldObjects>$site</worldObjects>
|
|
</li>
|
|
<li Class="QuestNode_Signal">
|
|
<inSignal>site.MapGenerated</inSignal>
|
|
<node Class="QuestNode_Sequence">
|
|
<nodes>
|
|
<li Class="QuestNode_Set">
|
|
<name>pointsForSettlers</name>
|
|
<value>$($points * 0.5)</value>
|
|
</li>
|
|
<li Class="FCP.Core.RadiantQuests.QuestNode_GeneratePawns">
|
|
<storeAs>settlers</storeAs>
|
|
<faction>$siteFaction</faction>
|
|
<pawnGroupKind>Peaceful</pawnGroupKind>
|
|
<pointsToUse>$pointsForSettlers</pointsToUse>
|
|
</li>
|
|
<li Class="FCP.Core.RadiantQuests.QuestNode_GeneratePawns">
|
|
<storeAs>raiders</storeAs>
|
|
<faction>$enemyFaction</faction>
|
|
<pawnGroupKind>Combat</pawnGroupKind>
|
|
<pointsToUse>$points</pointsToUse>
|
|
</li>
|
|
<li Class="FCP.Core.RadiantQuests.QuestNode_SpawnSettlers">
|
|
<inSignal>site.MapGenerated</inSignal>
|
|
<pawns>$settlers</pawns>
|
|
<radius>20</radius>
|
|
</li>
|
|
<li Class="QuestNode_GetRandomInRangeFloat">
|
|
<storeAs>chanceForInstant</storeAs>
|
|
<range>0~1</range>
|
|
</li>
|
|
<li Class="QuestNode_GreaterOrEqual">
|
|
<value1>$chanceForInstant</value1>
|
|
<!--If value1 >= value2, spawn raid instantly, otherwise with delay-->
|
|
<value2>0.75</value2>
|
|
<node Class="QuestNode_Sequence">
|
|
<nodes>
|
|
<li Class="FCP.Core.RadiantQuests.QuestNode_SpawnRaiders">
|
|
<inSignal>site.MapGenerated</inSignal>
|
|
<spawnOnEdge>false</spawnOnEdge>
|
|
<pawns>$raiders</pawns>
|
|
<radius>20</radius>
|
|
</li>
|
|
<li Class="QuestNode_Letter">
|
|
<label TKey="LetterLabelSettlerAidRaidInProgress">Raiders attacking settlement!</label>
|
|
<text TKey="LetterTextSettlerAidRaidInProgress">The wasteland scum have already begun their assault! The settlement's defenders are fighting for their lives - get in there and help them drive off these raiders!</text>
|
|
<letterDef>ThreatBig</letterDef>
|
|
<lookTargets>$raiders</lookTargets>
|
|
<filterDeadPawnsFromLookTargets>true</filterDeadPawnsFromLookTargets>
|
|
</li>
|
|
</nodes>
|
|
</node>
|
|
<elseNode Class="QuestNode_Delay">
|
|
<!--1 - 12 hours delay-->
|
|
<delayTicks>$(randInt(2500,30000))</delayTicks>
|
|
<node Class="QuestNode_Sequence">
|
|
<nodes>
|
|
<li Class="FCP.Core.RadiantQuests.QuestNode_SpawnRaiders">
|
|
<spawnOnEdge>true</spawnOnEdge>
|
|
<pawns>$raiders</pawns>
|
|
<radius>20</radius>
|
|
</li>
|
|
<li Class="QuestNode_Letter">
|
|
<label TKey="LetterLabelSettlerAidRaidDelayed">Raider assault incoming!</label>
|
|
<text TKey="LetterTextSettlerAidRaidDelayed">The raider warband has arrived at the settlement perimeter! Shots fired - the attack has begun!</text>
|
|
<letterDef>ThreatBig</letterDef>
|
|
<lookTargets>$raiders</lookTargets>
|
|
<filterDeadPawnsFromLookTargets>true</filterDeadPawnsFromLookTargets>
|
|
</li>
|
|
</nodes>
|
|
</node>
|
|
</elseNode>
|
|
</li>
|
|
<li Class="QuestNode_Delay">
|
|
<delayTicks>60000</delayTicks>
|
|
<isQuestTimeout>true</isQuestTimeout>
|
|
<node Class="QuestNode_Sequence">
|
|
<nodes>
|
|
<li Class="QuestNode_AnyPawnAlive">
|
|
<pawns>$settlers</pawns>
|
|
<node Class="QuestNode_Sequence">
|
|
<nodes>
|
|
<li Class="QuestNode_GiveRewards">
|
|
<parms>
|
|
<allowGoodwill>true</allowGoodwill>
|
|
<allowRoyalFavor>true</allowRoyalFavor>
|
|
<chosenPawnSignal>ChosenPawnForReward</chosenPawnSignal>
|
|
</parms>
|
|
<addCampLootReward>false</addCampLootReward>
|
|
<customLetterLabel TKey="LetterLabelPaymentArrived">Settlement defense successful</customLetterLabel>
|
|
<customLetterText TKey="LetterTextPaymentArrived">The raiders have been driven off and the settlement stands! The grateful survivors are pooling together what they can spare as payment for your heroic defense of their home.</customLetterText>
|
|
<nodeIfChosenPawnSignalUsed Class="QuestNode_Letter">
|
|
<letterDef>ChoosePawn</letterDef>
|
|
<label TKey="LetterLabelFavorReceiver">[asker_faction_royalFavorLabel]</label>
|
|
<text TKey="LetterTextFavorReceiver">These colonists participated in the victory for the quest [resolvedQuestName]. [asker_definite] wants to know who should receive the [royalFavorReward_amount] [asker_faction_royalFavorLabel] for this service.</text>
|
|
<useColonistsOnMap>$site</useColonistsOnMap>
|
|
<chosenPawnSignal>ChosenPawnForReward</chosenPawnSignal>
|
|
</nodeIfChosenPawnSignalUsed>
|
|
</li>
|
|
<li Class="QuestNode_End">
|
|
<outcome>Success</outcome>
|
|
</li>
|
|
</nodes>
|
|
</node>
|
|
</li>
|
|
<li Class="QuestNode_Letter">
|
|
<label TKey="LetterLabelSettlerAidEndFailure">Settlement overrun</label>
|
|
<letterDef>NegativeEvent</letterDef>
|
|
<text TKey="LetterTextSettlerAidEndFailure">The raiders have overwhelmed the settlement's defenses. Smoke rises from the ruins as the survivors flee into the wasteland. Your mission has failed.</text>
|
|
</li>
|
|
<li Class="QuestNode_End">
|
|
<outcome>Fail</outcome>
|
|
<goodwillChangeAmount>-5</goodwillChangeAmount>
|
|
<goodwillChangeFactionOf>$asker</goodwillChangeFactionOf>
|
|
<!--<goodwillChangeReason>QuestPawnLost</goodwillChangeReason> Needs to be settlement lost-->
|
|
</li>
|
|
</nodes>
|
|
</node>
|
|
</li>
|
|
</nodes>
|
|
</node>
|
|
</li>
|
|
<li Class="QuestNode_WorldObjectTimeout">
|
|
<worldObject>$site</worldObject>
|
|
<isQuestTimeout>true</isQuestTimeout>
|
|
<delayTicks>$(randInt(12,28)*60000)</delayTicks>
|
|
<inSignalDisable>site.MapGenerated</inSignalDisable>
|
|
<node Class="QuestNode_Sequence">
|
|
<nodes>
|
|
<li Class="QuestNode_Letter">
|
|
<label TKey="LetterLabelSettlerAidExpired">Settlement lost to raiders</label>
|
|
<text TKey="LetterTextSettlerAidExpired">Without assistance, the settlement fell to the raider assault. Another light in the wasteland has been extinguished. The quest [resolvedQuestName] has failed.</text>
|
|
</li>
|
|
<li Class="QuestNode_End">
|
|
<outcome>Fail</outcome>
|
|
<goodwillChangeAmount>-5</goodwillChangeAmount>
|
|
<goodwillChangeFactionOf>$asker</goodwillChangeFactionOf>
|
|
<!--<goodwillChangeReason>QuestPawnLost</goodwillChangeReason> Needs to be settlement lost-->
|
|
</li>
|
|
</nodes>
|
|
</node>
|
|
</li>
|
|
<li Class="QuestNode_Signal">
|
|
<inSignal>site.Destroyed</inSignal>
|
|
<node Class="QuestNode_Sequence">
|
|
<nodes>
|
|
<li Class="QuestNode_Letter">
|
|
<label TKey="LetterLabelSettlerAidFailedLeft">Settlement abandoned to raiders</label>
|
|
<text TKey="LetterTextSettlerAidFailedLeft">By leaving the settlement undefended, you've sealed its fate. The raiders have claimed another victory in the wasteland.</text>
|
|
</li>
|
|
<li Class="QuestNode_End">
|
|
<outcome>Fail</outcome>
|
|
<goodwillChangeAmount>-5</goodwillChangeAmount>
|
|
<goodwillChangeFactionOf>$asker</goodwillChangeFactionOf>
|
|
<!--<goodwillChangeReason>QuestPawnLost</goodwillChangeReason> Needs to be settlement lost-->
|
|
</li>
|
|
</nodes>
|
|
</node>
|
|
</li>
|
|
</nodes>
|
|
</root>
|
|
</QuestScriptDef>
|
|
|
|
</Defs>
|
|
|