├── .gitattributes ├── .github └── workflows │ └── release.yml ├── .gitignore ├── LICENSE ├── README.md ├── dist ├── 1.0 │ ├── Assemblies │ │ ├── 0MultiplayerAPI.dll │ │ ├── 1Harmony.dll │ │ ├── 2SettingsHelper.dll │ │ └── SnapOut.dll │ ├── Defs │ │ ├── InteractionDefs │ │ │ └── Interactions_SnapOut.xml │ │ ├── JobDefs │ │ │ └── Jobs_SnapOut.xml │ │ └── ThoughtDefs │ │ │ └── Thoughts_SnapOut.xml │ └── Patches │ │ └── CalmDownPatches.xml ├── 1.1 │ ├── Assemblies │ │ ├── 0MultiplayerAPI.dll │ │ └── SnapOut.dll │ ├── Defs │ │ ├── InteractionDefs │ │ │ └── Interactions_SnapOut.xml │ │ ├── JobDefs │ │ │ └── Jobs_SnapOut.xml │ │ └── ThoughtDefs │ │ │ └── Thoughts_SnapOut.xml │ └── Patches │ │ └── CalmDownPatches.xml ├── 1.2 │ ├── Assemblies │ │ ├── 0MultiplayerAPI.dll │ │ └── SnapOut.dll │ ├── Defs │ │ ├── InteractionDefs │ │ │ └── Interactions_SnapOut.xml │ │ ├── JobDefs │ │ │ └── Jobs_SnapOut.xml │ │ └── ThoughtDefs │ │ │ └── Thoughts_SnapOut.xml │ └── Patches │ │ └── CalmDownPatches.xml ├── 1.3 │ ├── Assemblies │ │ ├── 0Harmony.dll │ │ ├── 0MultiplayerAPI.dll │ │ └── SnapOut.dll │ ├── Defs │ │ ├── InteractionDefs │ │ │ └── Interactions_SnapOut.xml │ │ ├── JobDefs │ │ │ └── Jobs_SnapOut.xml │ │ └── ThoughtDefs │ │ │ └── Thoughts_SnapOut.xml │ └── Patches │ │ └── CalmDownPatches.xml ├── 1.4 │ ├── Assemblies │ │ ├── 0MultiplayerAPI.dll │ │ └── SnapOut.dll │ ├── Defs │ │ ├── InteractionDefs │ │ │ └── Interactions_SnapOut.xml │ │ ├── JobDefs │ │ │ └── Jobs_SnapOut.xml │ │ ├── ThoughtDefs │ │ │ └── Thoughts_SnapOut.xml │ │ └── WorkGiverDefs │ │ │ └── WorkGivers_SnapOut.xml │ └── Patches │ │ └── CalmDownPatches.xml ├── About │ ├── About.xml │ ├── LoadFolders.xml │ ├── Preview.png │ └── PublishedFileId.txt └── Languages │ ├── ChineseSimplified │ ├── DefInjected │ │ ├── InteractionDef │ │ │ └── Interactions_SnapOut.xml │ │ ├── JobDef │ │ │ └── Jobs_SnapOut.xml │ │ ├── ThoughtDef │ │ │ └── Thoughts_SnapOut.xml │ │ └── WorkGiverDef │ │ │ └── Jobs_SnapOut.xml │ └── Keyed │ │ └── CalmDown.xml │ ├── Czech │ ├── DefInjected │ │ ├── InteractionDef │ │ │ └── Interactions_SnapOut.xml │ │ ├── JobDef │ │ │ └── Jobs_SnapOut.xml │ │ ├── ThoughtDef │ │ │ └── Thoughts_SnapOut.xml │ │ └── WorkGiverDef │ │ │ └── Jobs_CalmDown.xml │ └── Keyed │ │ └── CalmDown.xml │ ├── English │ └── Keyed │ │ └── CalmDown.xml │ ├── French │ ├── DefInjected │ │ ├── InteractionDef │ │ │ └── Interactions_SnapOut.xml │ │ ├── JobDef │ │ │ └── Jobs_SnapOut.xml │ │ ├── ThoughtDef │ │ │ └── Thoughts_SnapOut.xml │ │ └── WorkGiverDef │ │ │ └── Jobs_SnapOut.xml │ └── Keyed │ │ └── CalmDown.xml │ ├── German │ ├── DefInjected │ │ ├── InteractionDef │ │ │ └── Interactions_SnapOut.xml │ │ ├── JobDef │ │ │ └── Jobs_SnapOut.xml │ │ ├── ThoughtDef │ │ │ └── Thoughts_SnapOut.xml │ │ └── WorkGiverDef │ │ │ └── Jobs_CalmDown.xml │ └── Keyed │ │ └── CalmDown.xml │ ├── Italian │ ├── DefInjected │ │ ├── InteractionDef │ │ │ └── Interactions_SnapOut.xml │ │ ├── JobDef │ │ │ └── Jobs_SnapOut.xml │ │ ├── ThoughtDef │ │ │ └── Thoughts_SnapOut.xml │ │ └── WorkGiverDef │ │ │ └── Jobs_SnapOut.xml │ └── Keyed │ │ └── CalmDown.xml │ ├── Polish │ └── Keyed │ │ └── CalmDown.xml │ ├── Portuguese │ └── Keyed │ │ └── CalmDown.xml │ ├── PortugueseBrazilian │ ├── DefInjected │ │ ├── InteractionDef │ │ │ └── Interactions_SnapOut.xml │ │ ├── JobDef │ │ │ └── Jobs_SnapOut.xml │ │ ├── ThoughtDef │ │ │ └── Thoughts_SnapOut.xml │ │ └── WorkGiverDef │ │ │ └── Jobs_SnapOut.xml │ └── Keyed │ │ └── CalmDown.xml │ ├── Russian │ ├── DefInjected │ │ ├── InteractionDef │ │ │ └── Interactions_SnapOut.xml │ │ ├── JobDef │ │ │ └── Jobs_SnapOut.xml │ │ ├── ThoughtDef │ │ │ └── Thoughts_SnapOut.xml │ │ └── WorkGiverDef │ │ │ └── Jobs_CalmDown.xml │ └── Keyed │ │ └── CalmDown.xml │ └── Spanish │ ├── DefInjected │ ├── InteractionDef │ │ └── Interactions_SnapOut.xml │ ├── JobDef │ │ └── Jobs_SnapOut.xml │ ├── ThoughtDef │ │ └── Thoughts_SnapOut.xml │ └── WorkGiverDef │ │ └── Jobs_SnapOut.xml │ └── Keyed │ └── CalmDown.xml └── src ├── JobDriver_ActuallyRecover.cs ├── JobDriver_CalmDown.cs ├── JobDriver_GoToSafety.cs ├── JobDriver_SnappingOut.cs ├── ModSettings.cs ├── Properties └── AssemblyInfo.cs ├── SnapCheck.cs ├── SnapDefOf.cs ├── SnapOut.cs ├── SnapOut.csproj ├── SnapOut.sln ├── SnapUtils.cs └── WorkGiver_CalmPawnDown.cs /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | release: 5 | types: [published] 6 | 7 | jobs: 8 | upload: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v2 12 | - name: Upload to Steam Workshop 13 | uses: weilbyte/steam-workshop-upload@v1 14 | with: 15 | appid: 294100 16 | itemid: 1319782555 17 | path: 'dist' 18 | env: 19 | STEAM_USERNAME: ${{ secrets.STEAM_USERNAME }} 20 | STEAM_PASSWORD: ${{ secrets.STEAM_PASSWORD }} 21 | STEAM_TFASEED: ${{ secrets.STEAM_TFASEED }} 22 | - name: Rename folder 23 | run: mv dist SnapOut 24 | - name: Package folder 25 | uses: montudor/action-zip@v0.1.0 26 | with: 27 | args: zip -qq -r out.zip SnapOut 28 | - name: Upload to release 29 | uses: actions/upload-release-asset@v1 30 | env: 31 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 32 | with: 33 | upload_url: ${{ github.event.release.upload_url }} 34 | asset_path: ./out.zip 35 | asset_name: SnapOut.zip 36 | asset_content_type: application/zip 37 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Aa][Rr][Mm]/ 27 | [Aa][Rr][Mm]64/ 28 | bld/ 29 | [Bb]in/ 30 | [Oo]bj/ 31 | [Ll]og/ 32 | [Ll]ogs/ 33 | 34 | # Visual Studio 2015/2017 cache/options directory 35 | .vs/ 36 | # Uncomment if you have tasks that create the project's static files in wwwroot 37 | #wwwroot/ 38 | 39 | # Visual Studio 2017 auto generated files 40 | Generated\ Files/ 41 | 42 | # MSTest test Results 43 | [Tt]est[Rr]esult*/ 44 | [Bb]uild[Ll]og.* 45 | 46 | # NUnit 47 | *.VisualState.xml 48 | TestResult.xml 49 | nunit-*.xml 50 | 51 | # Build Results of an ATL Project 52 | [Dd]ebugPS/ 53 | [Rr]eleasePS/ 54 | dlldata.c 55 | 56 | # Benchmark Results 57 | BenchmarkDotNet.Artifacts/ 58 | 59 | # .NET Core 60 | project.lock.json 61 | project.fragment.lock.json 62 | artifacts/ 63 | 64 | # StyleCop 65 | StyleCopReport.xml 66 | 67 | # Files built by Visual Studio 68 | *_i.c 69 | *_p.c 70 | *_h.h 71 | *.ilk 72 | *.meta 73 | *.obj 74 | *.iobj 75 | *.pch 76 | *.pdb 77 | *.ipdb 78 | *.pgc 79 | *.pgd 80 | *.rsp 81 | *.sbr 82 | *.tlb 83 | *.tli 84 | *.tlh 85 | *.tmp 86 | *.tmp_proj 87 | *_wpftmp.csproj 88 | *.log 89 | *.vspscc 90 | *.vssscc 91 | .builds 92 | *.pidb 93 | *.svclog 94 | *.scc 95 | 96 | # Chutzpah Test files 97 | _Chutzpah* 98 | 99 | # Visual C++ cache files 100 | ipch/ 101 | *.aps 102 | *.ncb 103 | *.opendb 104 | *.opensdf 105 | *.sdf 106 | *.cachefile 107 | *.VC.db 108 | *.VC.VC.opendb 109 | 110 | # Visual Studio profiler 111 | *.psess 112 | *.vsp 113 | *.vspx 114 | *.sap 115 | 116 | # Visual Studio Trace Files 117 | *.e2e 118 | 119 | # TFS 2012 Local Workspace 120 | $tf/ 121 | 122 | # Guidance Automation Toolkit 123 | *.gpState 124 | 125 | # ReSharper is a .NET coding add-in 126 | _ReSharper*/ 127 | *.[Rr]e[Ss]harper 128 | *.DotSettings.user 129 | 130 | # JustCode is a .NET coding add-in 131 | .JustCode 132 | 133 | # TeamCity is a build add-in 134 | _TeamCity* 135 | 136 | # DotCover is a Code Coverage Tool 137 | *.dotCover 138 | 139 | # AxoCover is a Code Coverage Tool 140 | .axoCover/* 141 | !.axoCover/settings.json 142 | 143 | # Visual Studio code coverage results 144 | *.coverage 145 | *.coveragexml 146 | 147 | # NCrunch 148 | _NCrunch_* 149 | .*crunch*.local.xml 150 | nCrunchTemp_* 151 | 152 | # MightyMoose 153 | *.mm.* 154 | AutoTest.Net/ 155 | 156 | # Web workbench (sass) 157 | .sass-cache/ 158 | 159 | # Installshield output folder 160 | [Ee]xpress/ 161 | 162 | # DocProject is a documentation generator add-in 163 | DocProject/buildhelp/ 164 | DocProject/Help/*.HxT 165 | DocProject/Help/*.HxC 166 | DocProject/Help/*.hhc 167 | DocProject/Help/*.hhk 168 | DocProject/Help/*.hhp 169 | DocProject/Help/Html2 170 | DocProject/Help/html 171 | 172 | # Click-Once directory 173 | publish/ 174 | 175 | # Publish Web Output 176 | *.[Pp]ublish.xml 177 | *.azurePubxml 178 | # Note: Comment the next line if you want to checkin your web deploy settings, 179 | # but database connection strings (with potential passwords) will be unencrypted 180 | *.pubxml 181 | *.publishproj 182 | 183 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 184 | # checkin your Azure Web App publish settings, but sensitive information contained 185 | # in these scripts will be unencrypted 186 | PublishScripts/ 187 | 188 | # NuGet Packages 189 | *.nupkg 190 | # NuGet Symbol Packages 191 | *.snupkg 192 | # The packages folder can be ignored because of Package Restore 193 | **/[Pp]ackages/* 194 | # except build/, which is used as an MSBuild target. 195 | !**/[Pp]ackages/build/ 196 | # Uncomment if necessary however generally it will be regenerated when needed 197 | #!**/[Pp]ackages/repositories.config 198 | # NuGet v3's project.json files produces more ignorable files 199 | *.nuget.props 200 | *.nuget.targets 201 | 202 | # Microsoft Azure Build Output 203 | csx/ 204 | *.build.csdef 205 | 206 | # Microsoft Azure Emulator 207 | ecf/ 208 | rcf/ 209 | 210 | # Windows Store app package directories and files 211 | AppPackages/ 212 | BundleArtifacts/ 213 | Package.StoreAssociation.xml 214 | _pkginfo.txt 215 | *.appx 216 | *.appxbundle 217 | *.appxupload 218 | 219 | # Visual Studio cache files 220 | # files ending in .cache can be ignored 221 | *.[Cc]ache 222 | # but keep track of directories ending in .cache 223 | !?*.[Cc]ache/ 224 | 225 | # Others 226 | ClientBin/ 227 | ~$* 228 | *~ 229 | *.dbmdl 230 | *.dbproj.schemaview 231 | *.jfm 232 | *.pfx 233 | *.publishsettings 234 | orleans.codegen.cs 235 | 236 | # Including strong name files can present a security risk 237 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 238 | #*.snk 239 | 240 | # Since there are multiple workflows, uncomment next line to ignore bower_components 241 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 242 | #bower_components/ 243 | 244 | # RIA/Silverlight projects 245 | Generated_Code/ 246 | 247 | # Backup & report files from converting an old project file 248 | # to a newer Visual Studio version. Backup files are not needed, 249 | # because we have git ;-) 250 | _UpgradeReport_Files/ 251 | Backup*/ 252 | UpgradeLog*.XML 253 | UpgradeLog*.htm 254 | ServiceFabricBackup/ 255 | *.rptproj.bak 256 | 257 | # SQL Server files 258 | *.mdf 259 | *.ldf 260 | *.ndf 261 | 262 | # Business Intelligence projects 263 | *.rdl.data 264 | *.bim.layout 265 | *.bim_*.settings 266 | *.rptproj.rsuser 267 | *- [Bb]ackup.rdl 268 | *- [Bb]ackup ([0-9]).rdl 269 | *- [Bb]ackup ([0-9][0-9]).rdl 270 | 271 | # Microsoft Fakes 272 | FakesAssemblies/ 273 | 274 | # GhostDoc plugin setting file 275 | *.GhostDoc.xml 276 | 277 | # Node.js Tools for Visual Studio 278 | .ntvs_analysis.dat 279 | node_modules/ 280 | 281 | # Visual Studio 6 build log 282 | *.plg 283 | 284 | # Visual Studio 6 workspace options file 285 | *.opt 286 | 287 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 288 | *.vbw 289 | 290 | # Visual Studio LightSwitch build output 291 | **/*.HTMLClient/GeneratedArtifacts 292 | **/*.DesktopClient/GeneratedArtifacts 293 | **/*.DesktopClient/ModelManifest.xml 294 | **/*.Server/GeneratedArtifacts 295 | **/*.Server/ModelManifest.xml 296 | _Pvt_Extensions 297 | 298 | # Paket dependency manager 299 | .paket/paket.exe 300 | paket-files/ 301 | 302 | # FAKE - F# Make 303 | .fake/ 304 | 305 | # CodeRush personal settings 306 | .cr/personal 307 | 308 | # Python Tools for Visual Studio (PTVS) 309 | __pycache__/ 310 | *.pyc 311 | 312 | # Cake - Uncomment if you are using it 313 | # tools/** 314 | # !tools/packages.config 315 | 316 | # Tabs Studio 317 | *.tss 318 | 319 | # Telerik's JustMock configuration file 320 | *.jmconfig 321 | 322 | # BizTalk build output 323 | *.btp.cs 324 | *.btm.cs 325 | *.odx.cs 326 | *.xsd.cs 327 | 328 | # OpenCover UI analysis results 329 | OpenCover/ 330 | 331 | # Azure Stream Analytics local run output 332 | ASALocalRun/ 333 | 334 | # MSBuild Binary and Structured Log 335 | *.binlog 336 | 337 | # NVidia Nsight GPU debugger configuration file 338 | *.nvuser 339 | 340 | # MFractors (Xamarin productivity tool) working folder 341 | .mfractor/ 342 | 343 | # Local History for Visual Studio 344 | .localhistory/ 345 | 346 | # BeatPulse healthcheck temp database 347 | healthchecksdb 348 | 349 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 350 | MigrationBackup/ 351 | 352 | # Ionide (cross platform F# VS Code tools) working folder 353 | .ionide/ 354 | 355 | # Rimworld Libraries 356 | Assembly-CSharp.dll 357 | UnityEngine.CoreModule.dll 358 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 DustyTB 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SnapOut - Calm down your pawns 2 | 3 | SnapOut is a mod for RimWorld that lets you calm down your colonists/prisoners/etc from their mental breaks. 4 | More info below. 5 | 6 | ## Workshop page 7 | [![Steam Workshop Page](https://img.shields.io/steam/subscriptions/1319782555.svg?label=Steam%20Subscriptions)](http://steamcommunity.com/sharedfiles/filedetails/?id=1319782555) 8 | 9 | ![](https://i.imgur.com/TUwekIZ.png) 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /dist/1.0/Assemblies/0MultiplayerAPI.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.0/Assemblies/0MultiplayerAPI.dll -------------------------------------------------------------------------------- /dist/1.0/Assemblies/1Harmony.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.0/Assemblies/1Harmony.dll -------------------------------------------------------------------------------- /dist/1.0/Assemblies/2SettingsHelper.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.0/Assemblies/2SettingsHelper.dll -------------------------------------------------------------------------------- /dist/1.0/Assemblies/SnapOut.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.0/Assemblies/SnapOut.dll -------------------------------------------------------------------------------- /dist/1.0/Defs/InteractionDefs/Interactions_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | SnapOut_CalmDownInteraction 5 | 6 | Things/Mote/SpeechSymbols/DeepTalk 7 | Social 8 | 30 9 | 10 | 11 |
  • r_logentry->Tried to calm [RECIPIENT_nameDef] down.
  • 12 |
    13 |
    14 | 15 | 16 |
  • r_logentry->[INITIATOR_nameDef] tried to calm me down.
  • 17 |
    18 |
    19 |
    20 | 21 |
    22 | -------------------------------------------------------------------------------- /dist/1.0/Defs/JobDefs/Jobs_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | SnapOut_CalmPawnDownWorkgiver 6 | 7 | SnapOut.WorkGiver_CalmPawnDown 8 | Warden 9 | calm 10 | calming 11 | 18 12 | 13 |
  • Manipulation
  • 14 |
  • Talking
  • 15 |
    16 |
    17 | 18 | 19 | SnapOut_CalmDownJob 20 | SnapOut.JobDriver_CalmDown 21 | calming TargetA down. 22 | true 23 | 24 | 25 | 26 | SnapOut_SnappingOutJob 27 | SnapOut.JobDriver_SnappingOut 28 | spending time alone. 29 | false 30 | 31 | 32 | 33 | SnapOut_GoToSafetyJob 34 | SnapOut.JobDriver_GoToSafety 35 | trying to relax. 36 | true 37 | 38 | 39 | 40 | SnapOut_ActuallyRecoverJob 41 | SnapOut.JobDriver_ActuallyRecover 42 | spending time alone. 43 | false 44 | 45 | 46 |
    47 | -------------------------------------------------------------------------------- /dist/1.0/Defs/ThoughtDefs/Thoughts_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | SnapOut_HelpedSomeoneThought 5 | 0.5 6 | 0.4 7 | 1 8 | 9 |
  • Psychopath
  • 10 |
    11 | 12 |
  • 13 | 14 | I've helped someone overcome their worries. 15 | 3 16 |
  • 17 |
    18 |
    19 |
    20 | -------------------------------------------------------------------------------- /dist/1.0/Patches/CalmDownPatches.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | */MentalStateDef[defName = "Wander_Sad"]/colonistsOnly 6 | 7 | False 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /dist/1.1/Assemblies/0MultiplayerAPI.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.1/Assemblies/0MultiplayerAPI.dll -------------------------------------------------------------------------------- /dist/1.1/Assemblies/SnapOut.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.1/Assemblies/SnapOut.dll -------------------------------------------------------------------------------- /dist/1.1/Defs/InteractionDefs/Interactions_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | SnapOut_CalmDownInteraction 5 | 6 | Things/Mote/SpeechSymbols/DeepTalk 7 | Social 8 | 30 9 | 10 | 11 |
  • r_logentry->Tried to calm [RECIPIENT_nameDef] down.
  • 12 |
    13 |
    14 | 15 | 16 |
  • r_logentry->[INITIATOR_nameDef] tried to calm me down.
  • 17 |
    18 |
    19 |
    20 | 21 |
    22 | -------------------------------------------------------------------------------- /dist/1.1/Defs/JobDefs/Jobs_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | SnapOut_CalmPawnDownWorkgiver 6 | 7 | SnapOut.WorkGiver_CalmPawnDown 8 | Warden 9 | calm 10 | calming 11 | 18 12 | 13 |
  • Manipulation
  • 14 |
  • Talking
  • 15 |
    16 |
    17 | 18 | 19 | SnapOut_CalmDownJob 20 | SnapOut.JobDriver_CalmDown 21 | calming TargetA down. 22 | true 23 | 24 | 25 | 26 | SnapOut_SnappingOutJob 27 | SnapOut.JobDriver_SnappingOut 28 | spending time alone. 29 | false 30 | 31 | 32 | 33 | SnapOut_GoToSafetyJob 34 | SnapOut.JobDriver_GoToSafety 35 | trying to relax. 36 | true 37 | 38 | 39 | 40 | SnapOut_ActuallyRecoverJob 41 | SnapOut.JobDriver_ActuallyRecover 42 | spending time alone. 43 | false 44 | 45 | 46 |
    47 | -------------------------------------------------------------------------------- /dist/1.1/Defs/ThoughtDefs/Thoughts_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | SnapOut_HelpedSomeoneThought 5 | 0.5 6 | 0.4 7 | 1 8 | 9 |
  • Psychopath
  • 10 |
    11 | 12 |
  • 13 | 14 | I've helped someone overcome their worries. 15 | 3 16 |
  • 17 |
    18 |
    19 |
    20 | -------------------------------------------------------------------------------- /dist/1.1/Patches/CalmDownPatches.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | */MentalStateDef[defName = "Wander_Sad"]/colonistsOnly 6 | 7 | False 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /dist/1.2/Assemblies/0MultiplayerAPI.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.2/Assemblies/0MultiplayerAPI.dll -------------------------------------------------------------------------------- /dist/1.2/Assemblies/SnapOut.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.2/Assemblies/SnapOut.dll -------------------------------------------------------------------------------- /dist/1.2/Defs/InteractionDefs/Interactions_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | SnapOut_CalmDownInteraction 5 | 6 | Things/Mote/SpeechSymbols/DeepTalk 7 | Social 8 | 30 9 | 10 | 11 |
  • r_logentry->Tried to calm [RECIPIENT_nameDef] down.
  • 12 |
    13 |
    14 | 15 | 16 |
  • r_logentry->[INITIATOR_nameDef] tried to calm me down.
  • 17 |
    18 |
    19 |
    20 | 21 |
    22 | -------------------------------------------------------------------------------- /dist/1.2/Defs/JobDefs/Jobs_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | SnapOut_CalmPawnDownWorkgiver 6 | 7 | SnapOut.WorkGiver_CalmPawnDown 8 | Warden 9 | calm 10 | calming 11 | 18 12 | 13 |
  • Manipulation
  • 14 |
  • Talking
  • 15 |
    16 |
    17 | 18 | 19 | SnapOut_CalmDownJob 20 | SnapOut.JobDriver_CalmDown 21 | calming TargetA down. 22 | true 23 | 24 | 25 | 26 | SnapOut_SnappingOutJob 27 | SnapOut.JobDriver_SnappingOut 28 | spending time alone. 29 | false 30 | 31 | 32 | 33 | SnapOut_GoToSafetyJob 34 | SnapOut.JobDriver_GoToSafety 35 | trying to relax. 36 | true 37 | 38 | 39 | 40 | SnapOut_ActuallyRecoverJob 41 | SnapOut.JobDriver_ActuallyRecover 42 | spending time alone. 43 | false 44 | 45 | 46 |
    47 | -------------------------------------------------------------------------------- /dist/1.2/Defs/ThoughtDefs/Thoughts_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | SnapOut_HelpedSomeoneThought 5 | 0.5 6 | 0.4 7 | 1 8 | 9 |
  • Psychopath
  • 10 |
    11 | 12 |
  • 13 | 14 | I've helped someone overcome their worries. 15 | 3 16 |
  • 17 |
    18 |
    19 |
    20 | -------------------------------------------------------------------------------- /dist/1.2/Patches/CalmDownPatches.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | */MentalStateDef[defName = "Wander_Sad"]/colonistsOnly 6 | 7 | False 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /dist/1.3/Assemblies/0Harmony.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.3/Assemblies/0Harmony.dll -------------------------------------------------------------------------------- /dist/1.3/Assemblies/0MultiplayerAPI.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.3/Assemblies/0MultiplayerAPI.dll -------------------------------------------------------------------------------- /dist/1.3/Assemblies/SnapOut.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.3/Assemblies/SnapOut.dll -------------------------------------------------------------------------------- /dist/1.3/Defs/InteractionDefs/Interactions_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | SnapOut_CalmDownInteraction 5 | 6 | Things/Mote/SpeechSymbols/DeepTalk 7 | Social 8 | 30 9 | 10 | 11 |
  • r_logentry->Tried to calm [RECIPIENT_nameDef] down.
  • 12 |
    13 |
    14 | 15 | 16 |
  • r_logentry->[INITIATOR_nameDef] tried to calm me down.
  • 17 |
    18 |
    19 |
    20 | 21 |
    22 | -------------------------------------------------------------------------------- /dist/1.3/Defs/JobDefs/Jobs_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | SnapOut_CalmPawnDownWorkgiver 6 | 7 | SnapOut.WorkGiver_CalmPawnDown 8 | Warden 9 | calm 10 | calming 11 | 18 12 | 13 |
  • Manipulation
  • 14 |
  • Talking
  • 15 |
    16 |
    17 | 18 | 19 | SnapOut_CalmDownJob 20 | SnapOut.JobDriver_CalmDown 21 | calming TargetA down. 22 | true 23 | 24 | 25 | 26 | SnapOut_SnappingOutJob 27 | SnapOut.JobDriver_SnappingOut 28 | spending time alone. 29 | false 30 | 31 | 32 | 33 | SnapOut_GoToSafetyJob 34 | SnapOut.JobDriver_GoToSafety 35 | trying to relax. 36 | true 37 | 38 | 39 | 40 | SnapOut_ActuallyRecoverJob 41 | SnapOut.JobDriver_ActuallyRecover 42 | spending time alone. 43 | false 44 | 45 | 46 |
    47 | -------------------------------------------------------------------------------- /dist/1.3/Defs/ThoughtDefs/Thoughts_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | SnapOut_HelpedSomeoneThought 5 | 0.5 6 | 0.4 7 | 1 8 | 9 |
  • Psychopath
  • 10 |
    11 | 12 |
  • 13 | 14 | I've helped someone overcome their worries. 15 | 3 16 |
  • 17 |
    18 |
    19 |
    20 | -------------------------------------------------------------------------------- /dist/1.3/Patches/CalmDownPatches.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | */MentalStateDef[defName = "Wander_Sad"]/colonistsOnly 6 | 7 | False 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /dist/1.4/Assemblies/0MultiplayerAPI.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.4/Assemblies/0MultiplayerAPI.dll -------------------------------------------------------------------------------- /dist/1.4/Assemblies/SnapOut.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/1.4/Assemblies/SnapOut.dll -------------------------------------------------------------------------------- /dist/1.4/Defs/InteractionDefs/Interactions_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | SnapOut_CalmDownInteraction 5 | 6 | Things/Mote/SpeechSymbols/DeepTalk 7 | Social 8 | 30 9 | 10 | 11 |
  • r_logentry->Tried to calm [RECIPIENT_nameDef] down.
  • 12 |
    13 |
    14 | 15 | 16 |
  • r_logentry->[INITIATOR_nameDef] tried to calm me down.
  • 17 |
    18 |
    19 |
    20 | 21 |
    22 | -------------------------------------------------------------------------------- /dist/1.4/Defs/JobDefs/Jobs_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | SnapOut_CalmDownJob 5 | SnapOut.JobDriver_CalmDown 6 | calming TargetA down. 7 | true 8 | 9 | 10 | 11 | SnapOut_SnappingOutJob 12 | SnapOut.JobDriver_SnappingOut 13 | spending time alone. 14 | false 15 | 16 | 17 | 18 | SnapOut_GoToSafetyJob 19 | SnapOut.JobDriver_GoToSafety 20 | trying to relax. 21 | true 22 | 23 | 24 | 25 | SnapOut_ActuallyRecoverJob 26 | SnapOut.JobDriver_ActuallyRecover 27 | spending time alone. 28 | false 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /dist/1.4/Defs/ThoughtDefs/Thoughts_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | SnapOut_HelpedSomeoneThought 5 | 0.5 6 | 0.4 7 | 1 8 | 9 |
  • Psychopath
  • 10 |
    11 | 12 |
  • 13 | 14 | I've helped someone overcome their worries. 15 | 3 16 |
  • 17 |
    18 |
    19 |
    20 | -------------------------------------------------------------------------------- /dist/1.4/Defs/WorkGiverDefs/WorkGivers_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | SnapOut_CalmPawnDownWorkgiver 5 | 6 | SnapOut.WorkGiver_CalmPawnDown 7 | Warden 8 | calm 9 | calming 10 | 18 11 | 12 |
  • Manipulation
  • 13 |
  • Talking
  • 14 |
    15 |
    16 |
    17 | -------------------------------------------------------------------------------- /dist/1.4/Patches/CalmDownPatches.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | */MentalStateDef[defName = "Wander_Sad"]/colonistsOnly 6 | 7 | False 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /dist/About/About.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Snap Out! 4 | Weilbyte 5 | weilbyte.snapout 6 | 7 |
  • 1.1
  • 8 |
  • 1.0
  • 9 |
  • 1.2
  • 10 |
  • 1.3
  • 11 |
  • 1.4
  • 12 |
    13 | Gives your pawns the ability to try calm down a pawn in a mental break. 14 | https://steamcommunity.com/sharedfiles/filedetails/?id=1319782555 15 |
    -------------------------------------------------------------------------------- /dist/About/LoadFolders.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |
  • 1.1
  • 4 |
    5 | 6 |
  • 1.2
  • 7 |
    8 | 9 |
  • 1.3
  • 10 |
    11 | 12 |
  • 1.4
  • 13 |
    14 |
    -------------------------------------------------------------------------------- /dist/About/Preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Weilbyte/SnapOut/4dc8bfc9f16094e923ec06c38f2022ec3c66502a/dist/About/Preview.png -------------------------------------------------------------------------------- /dist/About/PublishedFileId.txt: -------------------------------------------------------------------------------- 1 | 1319782555 -------------------------------------------------------------------------------- /dist/Languages/ChineseSimplified/DefInjected/InteractionDef/Interactions_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 冷静 4 | r_logentry->尝试让[RECIPIENT_nameDef]冷静下来。 5 | r_logentry->[INITIATOR_nameDef]试图让我冷静下来。 6 | -------------------------------------------------------------------------------- /dist/Languages/ChineseSimplified/DefInjected/JobDef/Jobs_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 想要自己一个人冷静一下。 4 | 正在安抚 TargetA 冷静下来 5 | 试着放松情绪。 6 | 需要一些时间来自我冷静。 7 | -------------------------------------------------------------------------------- /dist/Languages/ChineseSimplified/DefInjected/ThoughtDef/Thoughts_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 帮助了别人 4 | 我帮助了别人,解决了他/她眼前的烦恼。 5 | -------------------------------------------------------------------------------- /dist/Languages/ChineseSimplified/DefInjected/WorkGiverDef/Jobs_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 安抚伙伴 4 | 安抚中 5 | 安抚 6 | -------------------------------------------------------------------------------- /dist/Languages/ChineseSimplified/Keyed/CalmDown.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | {0}未能成功让{1}冷静下来。 4 | {1}被{0}成功安抚下来。 5 | {0}安抚失败并遭到{1}的攻击。 6 | 振作起来! 7 | 启用消息提示 8 | 启用安抚处于攻击状态的角色 9 | 仅有意见更重要 10 | 使囚犯平静下来 11 | 使贸易商人平静下来 12 | 高级选项 13 | 交谈乘数 14 | 意见增加 15 | 交谈上限 16 | 仅意见乘数 17 | 失控的小人能制服的倍率 18 | 平静持续时间 19 | 控制台中的输出调试和机会消息 20 | 禁用宣泄情绪增益 21 | 没能成功的让对方冷静下来。(ticks) 22 | 启动计数器 23 | 不会失败(debug) 24 | 将高级选项恢复为默认值 25 | 一切都会好起来的。 26 | 别担心,我会支持你的。 27 | 坚持住,我会一直陪着你。 28 | 只是一张桌子,我们会没事的。 29 | 我们会和你在一起。 30 | 我就在这里陪着你,告诉我是什么困扰着你——我在听。 31 | 我们可以一起解决这个问题。 32 | 深呼吸,你能做到的。放松..... 33 | 我知道你在经历什么,我真的很想帮你... 34 | 你在担心什么? 35 | 别再这样了,拜托... 36 | 告诉我你的顾虑。 37 | 这一切都会过去。 38 | 就像一场风暴,只是暂时的。 39 | 让我们一起解决这个问题。 40 | 你很安全,我在这里等你。 41 | 我很抱歉对于你经历的这些。 42 | 你不是一个人,我们都在你身边。 43 | 这不是你的错。 44 | 你可以跟我发泄,我会听的。 45 | 我们有一个很大的娱乐室,我们一起下棋怎么样? 46 | -------------------------------------------------------------------------------- /dist/Languages/Czech/DefInjected/InteractionDef/Interactions_SnapOut.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | uklidni se 5 | r_logentry->Se pokoušel uklidnit [RECIPIENT_nameDef] . 6 | r_logentry->[INITIATOR_nameDef] se mě pokoušel uklidnit. 7 | 8 | 9 | -------------------------------------------------------------------------------- /dist/Languages/Czech/DefInjected/JobDef/Jobs_SnapOut.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | uklidňuje osobu. 5 | tráví čas o samotě. 6 | pokouší se uklidnit. 7 | tráví čas o samotě. 8 | 9 | 10 | -------------------------------------------------------------------------------- /dist/Languages/Czech/DefInjected/ThoughtDef/Thoughts_SnapOut.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Někomu pomohl 5 | Pomohl jsem někomu překonat jeho starosti. 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /dist/Languages/Czech/DefInjected/WorkGiverDef/Jobs_CalmDown.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | uklidnit lidi 5 | uklidnit 6 | uklidnit osobu 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /dist/Languages/Czech/Keyed/CalmDown.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | {0} se nepodařilo dosáhnout úspěchu při pokusu o uklidnění {1}. 5 | {1} osoba byla uklidněna {0}. 6 | {0} byl napadnut {1} poté co probíhal pokus o uklidnění 7 | Domluv jim! 8 | Povolit zprávy u kolonistů 9 | Povolit uklidňování agresivních kolonistů 10 | Pouze na názoru záleží 11 | Povolit uklidňování vězňů 12 | Povolit uklidňování obchodníků 13 | Pokročilé možnosti 14 | Vyjednávací násobitel 15 | Názorový násobitel 16 | Vyjednávací limit 17 | Pouze názorový násobič 18 | Násobitel omráčení na agresivní kolonisty 19 | Délka uklidnění 20 | Debug mód 21 | Zakázat zisk katarze 22 | Časové omezení na neúspěšné pokusy 23 | Spustit počítadlo 24 | Bez neúspěchu (debug) 25 | Vrátit pokročilá nastavení na výchozí hodnoty 26 | 27 | 28 | Vše bude v pořádku. 29 | Neboj se, kryju ti záda. 30 | Jen se mnou chvíli vydrž, budu tu s tebou po celou dobu. 31 | Je to jen stůl, to bude v pohodě. 32 | Jsme tu pro tebe. 33 | Jsem tu pro tebe, řekni mi co tě trápí - A vždy tu pro tebe budu. 34 | Vyřešíme to spolu. 35 | Zhluboka se nadechni, to dokážeš. Uvolni se... 36 | Vím čím si procházíš, chci ti opravdu pomoct... 37 | Čeho se tak bojíš? 38 | Ale noták, tímhle už jsme si prošli... 39 | Řekni mi co tě tíží. 40 | To přejde. 41 | Po každé bouřce vyjde sluníčko. 42 | Pojďme to spolu vyřešit. 43 | Jsi v bezpečí, jsem tu pro tebe. 44 | Mrzí mě, že jsi tím procházíš. 45 | Nejsi na to sám, jsem tu všichni pro to aby jsme ti pomohli. 46 | Není to tvoje vina. 47 | Klidně si vylej srdíčko, já budu poslouchat. 48 | Máme skvělou rekreační místnost, co takhle si jít spolu zahrát šachy? 49 | 50 | 51 | -------------------------------------------------------------------------------- /dist/Languages/English/Keyed/CalmDown.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | {0} failed to calm {1} down. 5 | {1} has been successfully calmed down by {0}. 6 | {0} is being attacked after failing to calm {1} down 7 | Snap Out! 8 | Enable character messages 9 | Enable calming of aggressive pawns 10 | Only opinion matters 11 | Enable calming prisoners 12 | Enable calming traders 13 | Advanced options 14 | Negotiation multiplier 15 | Opinion multiplier 16 | Negotiation cap 17 | Opinion only multiplier 18 | Aggressive pawn stun chance multiplier 19 | Duration of the calm 20 | Debug mode 21 | Disable catharsis gain 22 | Cool down on failed attempt 23 | Launch Counter 24 | No fail (debug) 25 | Revert advanced settings to default 26 | 27 | 28 | It will be all fine. 29 | Don't worry, I've got your back. 30 | Just hold on with me, I'll be with you all the way. 31 | It's just a table, we will be fine. 32 | We will be with you. 33 | I'm here for you, tell me what's bothering you - I'm listening. 34 | We can solve this together. 35 | Take deep breaths, you can do it. Relax... 36 | I know what you're going through, I'd really like to help... 37 | What are you worried about? 38 | Not this again, come on... 39 | Tell me your concerns. 40 | This too will pass. 41 | It's like a storm, it's just temporary. 42 | Let's solve this together. 43 | You're safe, I'm here for you. 44 | I'm sorry you're going through that. 45 | You're not on your own, we are all here for you. 46 | It's not your fault. 47 | You can vent to me, I'll listen. 48 | We have a great recreation room, how about we play some chess together? 49 | 50 | 51 | -------------------------------------------------------------------------------- /dist/Languages/French/DefInjected/InteractionDef/Interactions_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | calmer 5 | r_logentry->A essayé de calmer [RECIPIENT_nameDef]. 6 | r_logentry->[INITIATOR_nameDef] a essayé de me calmer. 7 | 8 | 9 | -------------------------------------------------------------------------------- /dist/Languages/French/DefInjected/JobDef/Jobs_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | calme TargetA. 5 | passer du temps seul. 6 | essaie de se détendre. 7 | passer du temps seul. 8 | 9 | 10 | -------------------------------------------------------------------------------- /dist/Languages/French/DefInjected/ThoughtDef/Thoughts_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | J'ai aidé quelqu'un 5 | J'ai aidé quelqu'un à surmonter ses inquiétudes. 6 | 7 | 8 | -------------------------------------------------------------------------------- /dist/Languages/French/DefInjected/WorkGiverDef/Jobs_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | calmer un colon 5 | calmer 6 | calme 7 | 8 | 9 | -------------------------------------------------------------------------------- /dist/Languages/French/Keyed/CalmDown.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | {0} n'a pas réussi à calmer {1}. 5 | {1} a été calmé avec succès par {0}. 6 | {0} est attaqué après avoir échoué à calmer {1}. 7 | Snap Out ! 8 | Activer l'affichage des dialogues 9 | Permettre de calmer les pions agressifs 10 | Seule l'opinion compte 11 | Activer l'apaisement pour les prisonniers 12 | Activer l'apaisement pour les commerçants 13 | Options avancées 14 | Multiplicateur de négociation 15 | Multiplicateur d'opinion 16 | Limite de négociation 17 | Multiplicateur utilise seulement l'opinion 18 | Multiplicateur de chance d'étourdissement d'un pion agressif 19 | Durée de l'accalmie 20 | Mode débogage 21 | Désactiver le gain de catharsis 22 | Temps d'attente en cas de tentative ratée 23 | Compteur de lancement 24 | Pas d'échec (débogage) 25 | Rétablir les paramètres par défaut 26 | 27 | 28 | Tout ira bien. 29 | Ne t'inquiète pas, je te couvre. 30 | Tiens bon, je serai avec toi tout le long du chemin. 31 | C'est juste une table, tout ira bien. 32 | Nous sommes avec toi. 33 | Je suis là pour toi, dis-moi ce qui te tracasse, je t'écoute. 34 | Nous pouvons résoudre ce problème ensemble. 35 | Respire profondément, tu peux le faire. Détend-toi... 36 | Je sais ce que tu traverse, j'aimerais vraiment t'aider... 37 | Qu'est-ce qui t'inquiète ? 38 | Pas encore ça, allez... 39 | Dites-moi ce qui te préoccupe. 40 | Cela aussi passera. 41 | C'est comme une tempête, c'est juste temporaire. 42 | Résolvons cela ensemble. 43 | Tu est en sécurité, je suis là pour toi. 44 | Je suis désolé que tu traverse cette épreuve. 45 | Tu n'est pas seul, nous sommes tous là pour toi. 46 | Ce n'est pas ta faute. 47 | Tu peux te défouler sur moi, je t'écouterai. 48 | Que dirais-tu de jouer aux échecs ensemble ? 49 | 50 | 51 | -------------------------------------------------------------------------------- /dist/Languages/German/DefInjected/InteractionDef/Interactions_SnapOut.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | beruhigen 5 | r_logentry->Habe versucht, [RECIPIENT_nameDef] zu beruhigen. 6 | r_logentry->[INITIATOR_nameDef] hat versucht, mich zu beruhigen. 7 | 8 | 9 | -------------------------------------------------------------------------------- /dist/Languages/German/DefInjected/JobDef/Jobs_SnapOut.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | versucht, TargetA zu beruhigen. 5 | verbringt Zeit alleine. 6 | versucht zu entspannen. 7 | verbringt Zeit alleine. 8 | 9 | 10 | -------------------------------------------------------------------------------- /dist/Languages/German/DefInjected/ThoughtDef/Thoughts_SnapOut.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Jemandem geholfen 5 | Ich habe jemandem über schlimme Sorgen hinweggeholfen. 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /dist/Languages/German/DefInjected/WorkGiverDef/Jobs_CalmDown.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Personen beruhigen 5 | beruhigen 6 | Beruhigen von 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /dist/Languages/German/Keyed/CalmDown.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | {0} hat es nicht geschafft, {1} zu beruhigen. 5 | {1} wurde von {0} beruhigt. 6 | {0} wird angegriffen nach dem Versuch, {1} zu beruhigen. 7 | Snap Out! 8 | Aktiviere Charakternachrichten 9 | Aktiviere Beruhigung von aggressiven Personen 10 | Nur die Meinung beeinflusst das Beruhigen 11 | Aktiviere Beruhigung von Gefangenen 12 | Aktiviere Beruhigung von Händlern 13 | Erweiterte Optionen 14 | Multiplikator für Diplomatie 15 | Multiplikator für Meinung 16 | Multiplikator für Nur-Meinung 17 | Multiplikator für die Chance, aggressive Personen zu betäuben 18 | Dauer des Beruhigungsversuchs 19 | Debug-Ausgabe in der Konsole 20 | Katharsis deaktivieren 21 | Abklingzeit bei fehlgeschlagenem Versuch 22 | 23 | Alles wird gut. 24 | Mach dir keine Sorgen, ich pass auf dich auf. 25 | Wir stehen das durch, ich bleib die ganze Zeit bei dir. 26 | Es ist doch nur ein Tisch, das wird schon wieder. 27 | Wir sind bei dir. 28 | Ich bin für dich da, was hast du denn - ich hör dir zu. 29 | Zusammen kriegen wir das schon geregelt. 30 | Tief durchatmen, du schaffst das. Entspann dich... 31 | Ich weiß, was du durchmachst, ich möchte dir gerne helfen... 32 | Was ist denn so schlimm? 33 | Nicht schon wieder, nun komm schon... 34 | Sag mir doch einfach, was das Problem ist. 35 | Das geht vorüber, so wie immer. 36 | Das ist wie ein Gewitter, das geht vorbei. 37 | Gemeinsam schaffen wir das. 38 | Du bist in Sicherheit, ich bin bei dir. 39 | Es tut mir so leid, was du durchmachen musst. 40 | Du bist nicht allein, wir sind alle für dich da. 41 | Es ist nicht deine Schuld. 42 | Lass alles raus, ich werde zuhören. 43 | Wir haben einen tollen Aufenthaltsraum, wie wäre es, wenn wir eine Partie Schach spielen? 44 | 45 | 46 | -------------------------------------------------------------------------------- /dist/Languages/Italian/DefInjected/InteractionDef/Interactions_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | calma 5 | r_logentry->Ha provato a calmare [RECIPIENT_nameDef]. 6 | r_logentry->[INITIATOR_nameDef] ha provato a calmarmi. 7 | 8 | 9 | -------------------------------------------------------------------------------- /dist/Languages/Italian/DefInjected/JobDef/Jobs_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | sta calmando TargetA. 5 | passa il tempo in solitudine. 6 | sta provando a rilassarsi. 7 | sta passando il tempo in solitudine. 8 | 9 | 10 | -------------------------------------------------------------------------------- /dist/Languages/Italian/DefInjected/ThoughtDef/Thoughts_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Ha aiutato qualcuno 5 | Ho aiutato qualcuno a liberarsi delle proprie preoccupazioni. 6 | 7 | 8 | -------------------------------------------------------------------------------- /dist/Languages/Italian/DefInjected/WorkGiverDef/Jobs_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | calma un altro colono 5 | calma 6 | sta calmando 7 | 8 | 9 | -------------------------------------------------------------------------------- /dist/Languages/Italian/Keyed/CalmDown.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | {0} non ha avuto successo nel calmare {1}. 5 | {0} ha calmato {1}. 6 | {1} sta colpendo {0}, che ha fallito nel calmarl{0_gender ? o : a} 7 | Intervieni! 8 | Consenti i messaggi dei coloni 9 | Consenti di calmare i coloni aggressivi 10 | Only opinion matters 11 | Consenti di calmare i prigionieri 12 | Consenti di calmare i mercanti 13 | Opzioni avanzate 14 | Rilevanza abilità diplomatiche 15 | Rilevanza livello di opinione 16 | Limite della diplomazia 17 | Opinion only multiplier 18 | Probabilità di stordimento del colono aggressivo 19 | Durata del tentativo di calmare 20 | Modalità debug 21 | Disabilita catarsi 22 | Intervallo prima di un nuovo tentativo in caso di fallimento 23 | Conto alla rovescia 24 | Forza successo garantito (debug) 25 | Ripristina le impostazioni ai valori predefiniti 26 | 27 | 28 | Andrà tutto bene. 29 | Tranquill{1_gender ? o : a}, sono qui per te. 30 | Tieni duro, ti starò vicin{0_gender ? o : a}. 31 | Non è niente, è solo un tavolo. 32 | Ti staremo vicini. 33 | Sono qui per te, dimmi cosa ti affligge, ti ascolto. 34 | Possiamo risolverlo insieme. 35 | Fai un bel respiro e rilassati... 36 | So cosa stai passando e voglio aiutarti... 37 | Cosa ti affligge? 38 | Non ricominciare, su... 39 | Dimmi cosa ti preoccupa. 40 | Passerà anche questa. 41 | Non durerà per sempre, è momentaneo come un acquazzone. 42 | Risolviamolo insieme. 43 | Sei al sicuro, sono qui per te. 44 | Mi spiace che tu stia passando tutto questo. 45 | Siamo qui per te e non ti abbandoniamo. 46 | Non è colpa tua. 47 | Puoi sfogatrti con me, ti ascolto. 48 | Abbiamo una splendida stanza dei giochi, che ne dici di una partita a scacchi? 49 | 50 | 51 | -------------------------------------------------------------------------------- /dist/Languages/Polish/Keyed/CalmDown.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {0} nie udało się uspokoić {1}. 5 | {1} uspokoił się dzięki {0}. 6 | {0} jest atakowany po nieudanej próbie uspokojenia {1}. 7 | Snap Out! 8 | Zezwól na wiadomości postaci 9 | Zezwól na uspokajanie agresywnych postaci 10 | Tylko opinia ma znaczenie 11 | Zezwól na uspokajanie więźniów 12 | Zezwól na uspokajanie kupców 13 | Opcje zaawansowane 14 | Mnożnik dyplomacji 15 | Mnożnik opinii 16 | Mnożnik jedynie opinii 17 | Mnożnik szansy na unieruchomienie agresywnej postaci 18 | Czas trwania uspokojenia 19 | Debug mode 20 | Disable Catharsis 21 | Czas oczekiwania po nieudanej próbie 22 | Licznik uruchomienia 23 | Bez porażki (debug) 24 | 25 | Wszystko będzie w porządku. 26 | Nie martw się, jestem z Tobą. 27 | Trzymaj się, będę z Tobą przez cały czas. 28 | To tylko stół, nic nam nie będzie. 29 | Będziemy z Tobą. 30 | Jestem przy Tobie, powiedz mi co Cię dręczy - słucham. 31 | Rozwiążemy to razem. 32 | Weź głęboki oddech, damy radę. Wyluzuj... 33 | Wiem przez co przechodzisz, bardo chciałbym pomóc... 34 | Czym się martwisz? 35 | Znowu to samo, no weź... 36 | Powiedz mi swoje obawy. 37 | To też przeminie. 38 | To przeminie, niczym burza. 39 | Rozwiążmy to razem. 40 | Jesteś bezpieczny, jestem przy Tobie. 41 | Przykro mi że przez to przechodzisz. 42 | Nie jesteś sam, jesteśmy tu dla Ciebie. 43 | To nie Twoja wina. 44 | Możesz mi się wygadać, słucham. 45 | Mamy świetny pokój rekreacyjny, co powiesz na to żebyśmy zagrali razem w szachy? 46 | 47 | 48 | -------------------------------------------------------------------------------- /dist/Languages/Portuguese/Keyed/CalmDown.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {0} não conseguiu acalmar {1}. 5 | {1} foi acalmado com sucesso por {0}. 6 | {0} está a ser atacado depois de não conseguir acalmar {1} 7 | Snap Out! 8 | Ativar mensagens de personagens 9 | Ativar acalmar colonos agressivos 10 | Só opinião importa 11 | Ativar acalmar prisioneiros 12 | Ativar acalmar mercadores 13 | Opções avançadas 14 | Multiplicador de Diplomacia 15 | Multiplicador de Opinião 16 | Multiplicador de só Opinião 17 | Multiplicador de chance de atordoar colonos agressivos 18 | Duração da calma 19 | Enviar mensagens de debug e probabilidades para a consola 20 | Desativar catarse 21 | Tempo de espera de tentativas falhadas 22 | 23 | Vai tudo estar bem. 24 | Não te preocupes, eu ajudo-te. 25 | Aguenta comigo, eu irei sempre estar contigo. 26 | É só uma mesa, vai tudo correr bem. 27 | Nós vamos estar contigo. 28 | Estou aqui para ti, diz-me o que te incomoda - estou a ouvir. 29 | Podemos resolver isto juntos. 30 | Respira profundamente, tu consegues. Relaxa.. 31 | Eu sei pelo que estás a passar, eu realmente gostaria de ajudar.. 32 | Estás preocupado com o quê? 33 | Outra vez isto não, vá lá.. 34 | Diz-me as tuas preocupações. 35 | Isto também vai passar. 36 | É como uma tempestade, é só temporária. 37 | Vamos resolver isto juntos 38 | Estás seguro, eu estou aqui para ti. 39 | Sinto muito pelo que estás a passar. 40 | Não estás sozinho, estamos todos aqui. 41 | A culpa não é tua. 42 | Podes desabafar comigo, eu vou ouvir. 43 | Nós temos uma grande sala de recreação, e que tal jogarmos xadrez juntos? 44 | 45 | 46 | -------------------------------------------------------------------------------- /dist/Languages/PortugueseBrazilian/DefInjected/InteractionDef/Interactions_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | acalmar 5 | r_logentry->Tentou acalmar[RECIPIENT_nameDef]. 6 | r_logentry->[INITIATOR_nameDef] tentou me acalmar. 7 | 8 | 9 | -------------------------------------------------------------------------------- /dist/Languages/PortugueseBrazilian/DefInjected/JobDef/Jobs_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | acalmando TargetA. 5 | passar o tempo sozinho. 6 | tentando relaxar. 7 | passar o tempo sozinho. 8 | 9 | 10 | -------------------------------------------------------------------------------- /dist/Languages/PortugueseBrazilian/DefInjected/ThoughtDef/Thoughts_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Ajudou alguém 5 | Eu ajudei alguém a superar suas preocupações. 6 | 7 | 8 | -------------------------------------------------------------------------------- /dist/Languages/PortugueseBrazilian/DefInjected/WorkGiverDef/Jobs_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | acalme outro coloco 5 | calma 6 | acalmando 7 | 8 | 9 | -------------------------------------------------------------------------------- /dist/Languages/PortugueseBrazilian/Keyed/CalmDown.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {0} não conseguiu acalmar {1}. 5 | {1} foi acalmado com sucesso por {0}. 6 | {0} está a ser atacado depois de não conseguir acalmar {1} 7 | Snap Out! 8 | Ativar mensagens de personagens 9 | Ativar acalmar colonos agressivos 10 | Só opinião importa 11 | Ativar acalmar prisioneiros 12 | Ativar acalmar mercadores 13 | Opções avançadas 14 | Multiplicador de Diplomacia 15 | Multiplicador de Opinião 16 | Multiplicador de só Opinião 17 | Multiplicador de chance de atordoar colonos agressivos 18 | Duração da calma 19 | Enviar mensagens de debug e probabilidades para a consola 20 | Desativar catarse 21 | Tempo de espera de tentativas falhadas 22 | 23 | Vai tudo estar bem. 24 | Não te preocupes, eu ajudo-te. 25 | Aguenta comigo, eu irei sempre estar contigo. 26 | É só uma mesa, vai tudo correr bem. 27 | Nós vamos estar contigo. 28 | Estou aqui para ti, diz-me o que te incomoda - estou a ouvir. 29 | Podemos resolver isto juntos. 30 | Respira profundamente, tu consegues. Relaxa.. 31 | Eu sei pelo que estás a passar, eu realmente gostaria de ajudar.. 32 | Estás preocupado com o quê? 33 | Outra vez isto não, vá lá.. 34 | Diz-me as tuas preocupações. 35 | Isto também vai passar. 36 | É como uma tempestade, é só temporária. 37 | Vamos resolver isto juntos 38 | Estás seguro, eu estou aqui para ti. 39 | Sinto muito pelo que estás a passar. 40 | Não estás sozinho, estamos todos aqui. 41 | A culpa não é tua. 42 | Podes desabafar comigo, eu vou ouvir. 43 | Nós temos uma grande sala de recreação, e que tal jogarmos xadrez juntos? 44 | 45 | 46 | -------------------------------------------------------------------------------- /dist/Languages/Russian/DefInjected/InteractionDef/Interactions_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | успокоить 5 | r_logentry->Пытается успокоить [RECIPIENT_nameDef]. 6 | r_logentry->[INITIATOR_nameDef] пытается меня успокоить. 7 | 8 | 9 | -------------------------------------------------------------------------------- /dist/Languages/Russian/DefInjected/JobDef/Jobs_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | успокаивает человека. 5 | проводит время наедине. 6 | пробует расслабиться. 7 | пробует расслабиться. 8 | 9 | -------------------------------------------------------------------------------- /dist/Languages/Russian/DefInjected/ThoughtDef/Thoughts_SnapOut.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Помощь другу 5 | Я помог(ла) кому-то преодолеть их проблемы. 6 | 7 | 8 | -------------------------------------------------------------------------------- /dist/Languages/Russian/DefInjected/WorkGiverDef/Jobs_CalmDown.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | успокоить другого человека 5 | успокоить 6 | успокаивает 7 | 8 | 9 | -------------------------------------------------------------------------------- /dist/Languages/Russian/Keyed/CalmDown.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | {0} не удалось успокоить {1}. 5 | {1} был(а) успешно успокоен(а), благодаря {0}. 6 | {0} атакован(а) после неудачной попытки успокоить {1} 7 | Snap Out! 8 | Включить сообщения персонажей 9 | Включить успокаивание агрессивных поселенцев 10 | Только мнение имеет значение 11 | Включить успокаивание заключенных 12 | Включить успокаивание торговцев 13 | Расширенные опции 14 | Множитель дипломатии 15 | Множитель мнений 16 | Множитель личных мнений 17 | Шанс оглушения агрессивного поселенца 18 | Продолжительность спокойствия 19 | Вывод отладочных и случайных сообщений в консоли 20 | Отключить катарсис 21 | Перезарядка при неудачной попытке 22 | 23 | Все будет хорошо. 24 | Не волнуйся, я тебе помогу. 25 | Просто держись за меня, я буду с тобой до конца. 26 | Это всего лишь маленькая проблема, мы будем в порядке. 27 | Мы будем с тобой. 28 | Я здесь ради тебя, расскажи мне, что тебя беспокоит - я слушаю. 29 | Мы можем решить это вместе. 30 | Сделай глубокий вдох, ты сможешь это сделать. Расслабься. 31 | Я знаю, что ты переживаешь, я бы очень хотел помочь. 32 | Что тебя беспокоит? 33 | Только не опять, прекрати. 34 | Расскажите мне о своих проблемах. 35 | Это все пройдёт. 36 | Это как шторм, это всё временно. 37 | Давай решим это вместе. 38 | Ты в безопасности, я с тобой. 39 | Мне жаль, что ты переживаешь это. 40 | Ты здесь не один, мы тебе помодем. 41 | Это не твоя вина. 42 | Вы можете выпустить меня, я буду слушать. 43 | У нас отличная комната для отдыха, как насчет того, чтобы поиграть в шахматы вместе? 44 | 45 | -------------------------------------------------------------------------------- /dist/Languages/Spanish/DefInjected/InteractionDef/Interactions_SnapOut.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | calmar 5 | r_logentry->Intentó calmar a [RECIPIENT_nameDef]. 6 | r_logentry->[INITIATOR_nameDef] intentó calmarme. 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /dist/Languages/Spanish/DefInjected/JobDef/Jobs_SnapOut.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | calmando a TargetA. 5 | pasar tiempo a solas. 6 | tratando de relajarse. 7 | pasar tiempo a solas. 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /dist/Languages/Spanish/DefInjected/ThoughtDef/Thoughts_SnapOut.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Ayudé a alguien. 5 | Ayudé a alguien con sus preocupaciones. 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /dist/Languages/Spanish/DefInjected/WorkGiverDef/Jobs_SnapOut.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | calmar otro colono 5 | calma 6 | calmando 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /dist/Languages/Spanish/Keyed/CalmDown.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {0} no logró calmar a {1}. 5 | {1} ha sido calmado con éxito por {0}. 6 | {0} está siendo atacado por no poder calmar a {1} 7 | Snap Out! 8 | Activar mensajes de personaje 9 | Permitir calmar a colonos agresivos 10 | Solo importa la opinión 11 | Permitir calmar prisioneros 12 | Permitir calmar comerciantes 13 | Opciones avanzadas 14 | Multiplicador de diplomacia 15 | Mutliplicador de opinión 16 | Multiplicador de solo opinión 17 | Multiplicador de chance de aturdimiento a colonos agresivos 18 | Duración de calma 19 | Modo debug 20 | Inhabilitar catarsis 21 | Tiempo de espera entre intentos fallidos 22 | Launch Counter 23 | No intentos fallidos (debug) 24 | 25 | Todo estará bien. 26 | No te preocupes, cuenta conmigo. 27 | Aguanta, siempre estaré contigo. 28 | Es solo una mesa, estaremos bien. 29 | Te acompañaremos. 30 | Estoy para ti, dime qué te molesta - Te escucho. 31 | Podemos resolverlo juntos. 32 | Respira hondo, tú puedes. Relájate... 33 | Sé por lo que estás pasando, me gustaría ayudarte... 34 | ¿Qué es lo que te preocupa? 35 | Vamos... no otra vez. 36 | Cuéntame lo que te preocupa. 37 | Ya pasará. 38 | Como una tormenta, esto es temporal. 39 | Resolvamos esto juntos. 40 | Estás seguro, estoy aquí para ti. 41 | Lamento que estés pasando por esto. 42 | No estás solo, estamos todos para ti. 43 | No es tu culpa. 44 | Puedes desahogarte conmigo, te escucho. 45 | Tenemos una gran sala de recreación. ¿Jugamos ajedrez juntos? 46 | 47 | 48 | -------------------------------------------------------------------------------- /src/JobDriver_ActuallyRecover.cs: -------------------------------------------------------------------------------- 1 | namespace SnapOut 2 | { 3 | using RimWorld; 4 | using System.Collections.Generic; 5 | using Verse; 6 | using Verse.AI; 7 | 8 | /// 9 | /// Job driver. Calls RecoverFromState on the pawn - recovering it from its mental breakdown. 10 | /// 11 | public class JobDriver_ActuallyRecover : JobDriver 12 | { 13 | public override bool TryMakePreToilReservations(bool errorOnFailed) 14 | { 15 | return true; 16 | } 17 | 18 | protected override IEnumerable MakeNewToils() 19 | { 20 | yield return Toils_General.Wait(1); 21 | this.pawn.MentalState.RecoverFromState(); 22 | if (SOMod.Settings.DisableCath) this.pawn.needs.mood.thoughts.memories.RemoveMemoriesOfDef(ThoughtDefOf.Catharsis); 23 | this.pawn.jobs.ClearQueuedJobs(); 24 | this.pawn.jobs.EndCurrentJob(JobCondition.InterruptForced); 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /src/JobDriver_CalmDown.cs: -------------------------------------------------------------------------------- 1 | namespace SnapOut 2 | { 3 | using System.Collections.Generic; 4 | using RimWorld; 5 | using UnityEngine; 6 | using Verse; 7 | using Verse.AI; 8 | using Multiplayer.API; 9 | 10 | /// 11 | /// Job driver. This is the first job assigned when calming down a pawn. 12 | /// 13 | public class JobDriver_CalmDown : JobDriver 14 | { 15 | private const TargetIndex subjecteeTargetIndex = TargetIndex.A; 16 | private Job recoverjob = new Job(SnapDefOf.SnappingOutJob); 17 | 18 | [SyncMethod] 19 | protected Toil AttemptCalm(TargetIndex ctrg) 20 | { 21 | Pawn subjectee = (Pawn)this.pawn.CurJob.targetA.Thing; 22 | var toil = new Toil 23 | { 24 | initAction = () => 25 | { 26 | if (subjectee == null) return; 27 | 28 | subjectee.jobs.EndCurrentJob(JobCondition.InterruptForced); 29 | this.TargetThingB = this.pawn; // Defining our initiator pawn 30 | float rand = Rand.RangeSeeded(0f, 0.70f, Find.TickManager.TicksAbs); 31 | pawn.interactions.TryInteractWith(subjectee, SnapDefOf.CalmDownInteraction); 32 | float num = SnapUtils.DoFormula(pawn, subjectee); 33 | 34 | if (SOMod.Settings.AlwaysSucceed) rand = 0f; 35 | 36 | SnapUtils.DebugLog(string.Format("Success chance of {0} opposed to failure chance of {1}", num.ToString(), rand.ToString())); 37 | if (rand > num) 38 | { 39 | if (SOMod.Settings.MessagesEnabled) SnapUtils.CalmText(this.pawn, Color.red); 40 | 41 | if (subjectee.InAggroMentalState) 42 | { 43 | subjectee.TryStartAttack(pawn); 44 | SnapUtils.DoStatusMessage(3, pawn, subjectee); 45 | subjectee.mindState.lastAssignedInteractTime = Find.TickManager.TicksGame; 46 | return; 47 | } 48 | 49 | SnapUtils.DoStatusMessage(2, pawn, subjectee); 50 | subjectee.mindState.lastAssignedInteractTime = Find.TickManager.TicksGame; 51 | SnapUtils.AttemptSendSafety(subjectee); 52 | return; 53 | } 54 | 55 | if (SOMod.Settings.MessagesEnabled) SnapUtils.CalmText(this.pawn, Color.green); 56 | 57 | if (subjectee.InAggroMentalState) 58 | { 59 | subjectee.MentalState.RecoverFromState(); 60 | if (SOMod.Settings.DisableCath) subjectee.needs.mood.thoughts.memories.RemoveMemoriesOfDef(ThoughtDefOf.Catharsis); 61 | subjectee.mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.Wander_Sad); 62 | } 63 | 64 | SnapUtils.DoStatusMessage(1, pawn, subjectee); 65 | 66 | pawn.needs.mood.thoughts.memories.TryGainMemory(SnapDefOf.HelpedThought, null); 67 | pawn.skills.Learn(SkillDefOf.Social, Rand.RangeSeeded(50, 125, Find.TickManager.TicksAbs)); 68 | subjectee.jobs.EndCurrentJob(JobCondition.Succeeded); 69 | recoverjob.playerForced = true; 70 | subjectee.jobs.StartJob(recoverjob, JobCondition.Succeeded); 71 | subjectee.mindState.lastAssignedInteractTime = Find.TickManager.TicksGame; 72 | }, 73 | socialMode = RandomSocialMode.Off, 74 | defaultCompleteMode = ToilCompleteMode.Instant, 75 | defaultDuration = SOMod.Settings.CalmDuration 76 | }; 77 | return toil.WithProgressBarToilDelay(TargetIndex.B); 78 | } 79 | 80 | [SyncMethod] 81 | public override bool TryMakePreToilReservations(bool erroronfailed = false) 82 | { 83 | return this.pawn.Reserve(this.job.GetTarget(subjecteeTargetIndex), this.job, 1, -1, null); 84 | } 85 | 86 | [SyncMethod] 87 | protected override IEnumerable MakeNewToils() 88 | { 89 | Pawn subjectee = (Pawn)this.pawn.CurJob.targetA.Thing; 90 | var attemptCalmJob = AttemptCalm(subjecteeTargetIndex); 91 | 92 | this.FailOnDowned(subjecteeTargetIndex); 93 | this.FailOnDespawnedOrNull(subjecteeTargetIndex); 94 | this.FailOnNotAwake(subjecteeTargetIndex); 95 | 96 | yield return Toils_Goto.GotoThing(subjecteeTargetIndex, PathEndMode.Touch); 97 | yield return Toils_Interpersonal.WaitToBeAbleToInteract(this.pawn); 98 | yield return Toils_Interpersonal.GotoInteractablePosition(subjecteeTargetIndex); 99 | yield return Toils_General.Do(delegate 100 | { 101 | subjectee.rotationTracker.FaceCell(pawn.PositionHeld); 102 | if (subjectee.InAggroMentalState) 103 | { 104 | float rand = Rand.RangeSeeded(0f, 0.85f, Find.TickManager.TicksAbs); 105 | float socialImpact = pawn.GetStatValue(StatDefOf.SocialImpact, true); 106 | socialImpact *= SOMod.Settings.StunWeight; 107 | SnapUtils.DebugLog(string.Format("Aggressive stun success chance was {0} opposed to a failure chance of {1}", socialImpact.ToString(), rand.ToString())); 108 | if (rand > socialImpact) 109 | { 110 | SnapUtils.DoStatusMessage(3, pawn, subjectee); 111 | subjectee.TryStartAttack(pawn); 112 | subjectee.mindState.lastAssignedInteractTime = Find.TickManager.TicksGame; 113 | EndJobWith(JobCondition.Incompletable); 114 | } else { 115 | subjectee.stances.stunner.StunFor(SOMod.Settings.CalmDuration, pawn); 116 | } 117 | } 118 | }); 119 | yield return Toils_Interpersonal.GotoInteractablePosition(subjecteeTargetIndex); 120 | yield return Toils_General.WaitWith(subjecteeTargetIndex, SOMod.Settings.CalmDuration, true, true); 121 | yield return attemptCalmJob; 122 | yield return Toils_Interpersonal.SetLastInteractTime(subjecteeTargetIndex); 123 | } 124 | } 125 | } -------------------------------------------------------------------------------- /src/JobDriver_GoToSafety.cs: -------------------------------------------------------------------------------- 1 | namespace SnapOut 2 | { 3 | using System.Collections.Generic; 4 | using Multiplayer.API; 5 | using RimWorld; 6 | using Verse; 7 | using Verse.AI; 8 | 9 | /// 10 | /// Job driver. Makes the pawn go their bedroom for safety. 11 | /// 12 | public class JobDriver_GoToSafety : JobDriver 13 | { 14 | public override bool TryMakePreToilReservations(bool errorOnFailed) 15 | { 16 | return true; 17 | } 18 | 19 | [SyncMethod] 20 | protected override IEnumerable MakeNewToils() 21 | { 22 | Pawn tpawn = this.pawn; 23 | this.TargetThingB = this.pawn; 24 | Room bedroom = tpawn.ownership.OwnedRoom; 25 | bedroom.Cells.TryRandomElement(out IntVec3 c); 26 | yield return Toils_Goto.GotoCell(c, PathEndMode.ClosestTouch); 27 | int wticks = Rand.RangeSeeded(1750, 3500, Find.TickManager.TicksAbs); 28 | Toil relax = Toils_General.Wait(wticks); 29 | relax.socialMode = RandomSocialMode.Off; 30 | yield return relax; 31 | } 32 | } 33 | } -------------------------------------------------------------------------------- /src/JobDriver_SnappingOut.cs: -------------------------------------------------------------------------------- 1 | namespace SnapOut 2 | { 3 | using System.Collections.Generic; 4 | using RimWorld; 5 | using Verse; 6 | using Verse.AI; 7 | using Multiplayer.API; 8 | 9 | /// 10 | /// Job driver. Makes the pawn go to their bed (if not present, a random spot nearby) where they are given a job that snaps them out. 11 | /// 12 | public class JobDriver_SnappingOut : JobDriver 13 | { 14 | public override bool TryMakePreToilReservations(bool errorOnFailed) 15 | { 16 | return true; 17 | } 18 | 19 | [SyncMethod] 20 | protected override IEnumerable MakeNewToils() 21 | { 22 | Pawn rpawn = this.pawn; 23 | this.TargetThingB = this.pawn; 24 | Building ownedbed = this.pawn.ownership.OwnedBed; 25 | Job actuallyrecoverjob = new Job(SnapDefOf.ActuallyRecoverJob); 26 | if (ownedbed != null) 27 | { 28 | if (pawn.guest.IsPrisoner) 29 | { 30 | IntVec3 c = RCellFinder.RandomWanderDestFor(rpawn, rpawn.Position, 0.3f, null, Danger.None); 31 | yield return Toils_Goto.GotoCell(c, PathEndMode.OnCell); 32 | } 33 | 34 | yield return Toils_Goto.GotoCell(ownedbed.Position, PathEndMode.OnCell); 35 | } 36 | else 37 | { 38 | IntVec3 c = RCellFinder.RandomWanderDestFor(rpawn, rpawn.Position, 2f, null, Danger.None); 39 | yield return Toils_Goto.GotoCell(c, PathEndMode.OnCell); 40 | } 41 | 42 | Toil waitonspot = Toils_General.Wait(500); 43 | 44 | waitonspot.socialMode = RandomSocialMode.Off; 45 | yield return waitonspot; 46 | Toil snappingout = Toils_General.Do(delegate 47 | { 48 | rpawn.jobs.EndCurrentJob(JobCondition.Succeeded); 49 | actuallyrecoverjob.playerForced = true; 50 | rpawn.jobs.StartJob(actuallyrecoverjob, JobCondition.Succeeded); 51 | }); 52 | snappingout.socialMode = RandomSocialMode.Off; 53 | yield return snappingout; 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /src/ModSettings.cs: -------------------------------------------------------------------------------- 1 | namespace SnapOut 2 | { 3 | using UnityEngine; 4 | using Verse; 5 | 6 | public class SOSettings : ModSettings 7 | { 8 | public bool MessagesEnabled = true; 9 | public bool AggroCalmEnabled = false; 10 | public bool NonFaction = true; 11 | public bool TraderCalm = true; 12 | public bool AdvancedMenu = false; 13 | public bool Debug = false; 14 | public bool AlwaysSucceed = false; 15 | public bool DisableCath = false; 16 | public float BaseValue = -25f; 17 | public float NegMult = 50f; 18 | public float OpnMult = 30f; 19 | public float StunWeight = 0.55f; 20 | public float NegotiationCap = 165f; 21 | public int CalmDuration = 1250; 22 | public int Cooldown = 15000; 23 | 24 | public override void ExposeData() 25 | { 26 | base.ExposeData(); 27 | Scribe_Values.Look(ref this.MessagesEnabled, "MessagesEnabled", true); 28 | Scribe_Values.Look(ref this.AggroCalmEnabled, "AggroCalmEnabled", false); 29 | Scribe_Values.Look(ref this.NonFaction, "NonFaction", true); 30 | Scribe_Values.Look(ref this.TraderCalm, "TraderCalm", true); 31 | Scribe_Values.Look(ref this.AdvancedMenu, "AdvancedMenu", false); 32 | Scribe_Values.Look(ref this.Debug, "Debug", false); 33 | Scribe_Values.Look(ref this.AlwaysSucceed, "AlwaysSucceed", false); 34 | Scribe_Values.Look(ref this.DisableCath, "DisableCath", false); 35 | Scribe_Values.Look(ref this.NegotiationCap, "NegotiationCap", 165f); 36 | Scribe_Values.Look(ref this.BaseValue, "BaseValue", -25f); 37 | Scribe_Values.Look(ref this.StunWeight, "StunWeight", 0.45f); 38 | Scribe_Values.Look(ref this.NegMult, "NegMult", 50f); 39 | Scribe_Values.Look(ref this.OpnMult, "OpnMult", 30f); 40 | Scribe_Values.Look(ref this.CalmDuration, "SOCalmDuration", 1250); 41 | Scribe_Values.Look(ref this.Cooldown, "CoolDown", 15000); 42 | } 43 | } 44 | 45 | public class SOMod : Mod 46 | { 47 | #region SOsettings 48 | 49 | public static SOSettings Settings; 50 | 51 | public SOMod(ModContentPack content) : base(content) 52 | { 53 | Settings = GetSettings(); 54 | } 55 | 56 | public override string SettingsCategory() => "SettingsCategoryLabel".Translate(); 57 | 58 | #endregion SOsettings 59 | 60 | public override void DoSettingsWindowContents(Rect inRect) 61 | { 62 | Listing_Standard listing_Standard = new Listing_Standard(); 63 | listing_Standard.Begin(inRect); 64 | listing_Standard.Gap(6); 65 | listing_Standard.CheckboxLabeled($"{"MessagesEnabledLabel".Translate()} ", ref Settings.MessagesEnabled); 66 | listing_Standard.CheckboxLabeled($"{"NoCathEnabledLabel".Translate()} ", ref Settings.DisableCath); 67 | listing_Standard.Gap(6); 68 | listing_Standard.CheckboxLabeled($"{"AggroCalmEnabledLabel".Translate()} ", ref Settings.AggroCalmEnabled); 69 | listing_Standard.CheckboxLabeled($"{"NonFactionEnabledLabel".Translate()} ", ref Settings.NonFaction); 70 | listing_Standard.CheckboxLabeled($"{"TraderCalmEnabledLabel".Translate()} ", ref Settings.TraderCalm); 71 | listing_Standard.Gap(6); 72 | listing_Standard.CheckboxLabeled($"{"AdvancedMenu".Translate()} ", ref Settings.AdvancedMenu); 73 | listing_Standard.Gap(6); 74 | if (SOMod.Settings.AdvancedMenu) 75 | { 76 | 77 | listing_Standard.Label($"{"SMultLabel".Translate()}: {Mathf.Round(Settings.NegMult)}%"); 78 | Settings.NegMult = listing_Standard.Slider(Settings.NegMult, 0, 100); 79 | listing_Standard.Gap(2); 80 | listing_Standard.Label($"{"OMultLabel".Translate()}: {Mathf.Round(Settings.OpnMult)}%"); 81 | Settings.OpnMult = listing_Standard.Slider(Settings.OpnMult, 0, 100); 82 | listing_Standard.Gap(2); 83 | listing_Standard.Label($"{"CapLabel".Translate()}: {Mathf.Round(Settings.NegotiationCap)}"); 84 | Settings.NegotiationCap = listing_Standard.Slider(Settings.NegotiationCap, 40, 190); 85 | listing_Standard.Gap(6); 86 | 87 | listing_Standard.Label($"{"StunWeight".Translate()}: {Mathf.Round(Settings.StunWeight * 100)}%"); 88 | Settings.StunWeight = listing_Standard.Slider(Settings.StunWeight, 0, 1); 89 | listing_Standard.Gap(2); 90 | listing_Standard.Label($"{"CalmDuration".Translate()}: {(float)Settings.CalmDuration / 2500:F1}h"); 91 | Settings.CalmDuration = (int)listing_Standard.Slider(Settings.CalmDuration, 500, 15000); 92 | listing_Standard.Gap(2); 93 | listing_Standard.Label($"{"SOCooldown".Translate()}: {(float)Settings.Cooldown / 2500:F1}h"); 94 | Settings.Cooldown = (int)listing_Standard.Slider(Settings.Cooldown, 2500, 60000); 95 | listing_Standard.Gap(); 96 | listing_Standard.CheckboxLabeled($"{"DebugChanceSetting".Translate()} ", ref Settings.Debug); 97 | listing_Standard.CheckboxLabeled($"{"AlwaysSucceedSetting".Translate()} ", ref Settings.AlwaysSucceed); 98 | if (listing_Standard.ButtonText("Default", "DefaultButton".Translate())) { 99 | Settings.NegMult = 50f; 100 | Settings.OpnMult = 30f; 101 | Settings.NegotiationCap = 165f; 102 | Settings.StunWeight = 0.55f; 103 | Settings.CalmDuration = 1250; 104 | Settings.Debug = false; 105 | Settings.Cooldown = 15000; 106 | } 107 | } 108 | 109 | listing_Standard.End(); 110 | Settings.Write(); 111 | } 112 | } 113 | } -------------------------------------------------------------------------------- /src/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | [assembly: AssemblyTitle("SnapOut")] 6 | [assembly: AssemblyDescription("A mod for Rimworld.")] 7 | [assembly: AssemblyConfiguration("")] 8 | [assembly: AssemblyCompany("Weilbyte")] 9 | [assembly: AssemblyProduct("SnapOut")] 10 | [assembly: AssemblyCopyright("Copyright Weilbyte © 2024")] 11 | [assembly: AssemblyTrademark("")] 12 | [assembly: AssemblyCulture("")] 13 | 14 | [assembly: ComVisible(false)] 15 | 16 | [assembly: Guid("d7d21b4a-1da7-41d8-b202-c58ca8fa62aa")] 17 | 18 | [assembly: AssemblyVersion("0.8.2")] 19 | [assembly: AssemblyFileVersion("0.8.2")] -------------------------------------------------------------------------------- /src/SnapCheck.cs: -------------------------------------------------------------------------------- 1 |  2 | 3 | namespace SnapOut 4 | { 5 | using System; 6 | using System.Collections.Generic; 7 | using System.Linq; 8 | using System.Text; 9 | using Verse; 10 | using RimWorld; 11 | 12 | /// 13 | /// SnapCheck contains the methods for checking certain conditions related to pawns 14 | /// 15 | class SnapCheck 16 | { 17 | 18 | private static readonly List incompatDef = new List(new string[] { "RunWild", "PanicFlee", "HuntingTrip", "SocialFighting", "Fighter", "Giggling", "Crying" }); // Def names of incompatible mental states 19 | 20 | 21 | /// 22 | /// Checks whether a pawn is a prisoner or not 23 | /// 24 | /// 25 | /// True or False 26 | public static bool isPrisoner(Pawn pawn) { 27 | if (pawn.guest.IsPrisoner) { 28 | return true; 29 | } 30 | return false; 31 | } 32 | 33 | /// 34 | /// Checks whether a pawn is a trader or not 35 | /// 36 | /// 37 | /// True or False 38 | public static bool isTrader(Pawn pawn) 39 | { 40 | if (!pawn.Faction.IsPlayer) { 41 | if (!(pawn.Faction.RelationKindWith(Faction.OfPlayer) == FactionRelationKind.Hostile)) 42 | { 43 | return true; 44 | } 45 | } 46 | return false; 47 | } 48 | 49 | /// 50 | /// Checks whether a pawn should be calmed or not, depending on the severity of their mental state and mod settings 51 | /// 52 | /// 53 | /// True or False 54 | public static bool aggroPass(Pawn pawn) { 55 | if (pawn.InAggroMentalState) { 56 | if (SOMod.Settings.AggroCalmEnabled) { 57 | return true; 58 | } 59 | return false; 60 | } 61 | return true; 62 | } 63 | 64 | /// 65 | /// Returns true if the pawn has a null faction or is null by itself 66 | /// 67 | /// 68 | /// True or False 69 | public static bool isNull(Pawn pawn) 70 | { 71 | if (pawn == null) 72 | { 73 | return true; 74 | } 75 | else if (pawn.Faction == null) 76 | { 77 | return true; 78 | } 79 | return false; 80 | } 81 | 82 | /// 83 | /// Checks to see if target pawn meets conditions to be calmed 84 | /// 85 | /// Target pawn 86 | /// True or False 87 | public static bool CanDo(Pawn pawn) 88 | { 89 | if (isNull(pawn)) { 90 | return false; 91 | } else { 92 | if (RestUtility.Awake(pawn)) { 93 | if (isPrisoner(pawn)) { 94 | if (!SOMod.Settings.NonFaction) { 95 | return false; 96 | } 97 | } else if (isTrader(pawn)) { 98 | if (!SOMod.Settings.TraderCalm) { 99 | return false; 100 | } 101 | } 102 | 103 | return aggroPass(pawn); 104 | } 105 | return false; 106 | } 107 | } 108 | 109 | /// 110 | /// Checks if pawn is capable of calming others down 111 | /// 112 | /// The Pawn to Check 113 | /// True or False 114 | public static bool IsCapable(Pawn pawn) 115 | { 116 | if (pawn.health.capacities.CapableOf(PawnCapacityDefOf.Talking) && pawn.health.capacities.CapableOf(PawnCapacityDefOf.Hearing) && pawn.health.capacities.CapableOf(PawnCapacityDefOf.Moving)) 117 | { 118 | return true; 119 | } 120 | 121 | return false; 122 | } 123 | 124 | /// 125 | /// Checks if provided mental state def name is listed as incompatible 126 | /// 127 | /// Def Name 128 | /// True or False 129 | public static bool CompatCheck(string defname) 130 | { 131 | if (incompatDef.Any(s => defname.Contains(s))) 132 | { 133 | return false; 134 | } 135 | 136 | return true; 137 | } 138 | } 139 | } 140 | -------------------------------------------------------------------------------- /src/SnapDefOf.cs: -------------------------------------------------------------------------------- 1 | namespace SnapOut 2 | { 3 | using RimWorld; 4 | using Verse; 5 | 6 | public static class SnapDefOf 7 | { 8 | public static JobDef CalmDownJob = DefDatabase.GetNamed("SnapOut_CalmDownJob"); 9 | public static JobDef SnappingOutJob = DefDatabase.GetNamed("SnapOut_SnappingOutJob"); 10 | public static JobDef GoToSafetyJob = DefDatabase.GetNamed("SnapOut_GoToSafetyJob"); 11 | public static JobDef ActuallyRecoverJob = DefDatabase.GetNamed("SnapOut_ActuallyRecoverJob"); 12 | public static InteractionDef CalmDownInteraction = DefDatabase.GetNamed("SnapOut_CalmDownInteraction"); 13 | public static ThoughtDef HelpedThought = DefDatabase.GetNamed("SnapOut_HelpedSomeoneThought"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/SnapOut.cs: -------------------------------------------------------------------------------- 1 | namespace SnapOut 2 | { 3 | using Verse; 4 | using Multiplayer.API; 5 | 6 | [StaticConstructorOnStartup] 7 | public static class SnapOutMultiplayer 8 | { 9 | static SnapOutMultiplayer() 10 | { 11 | if (!MP.enabled) return; 12 | MP.RegisterAll(); 13 | } 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/SnapOut.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {D7D21B4A-1DA7-41D8-B202-C58CA8FA62AA} 8 | Library 9 | Properties 10 | SnapOut 11 | SnapOut 12 | 512 13 | v4.7.2 14 | 15 | 16 | 17 | 18 | 19 | true 20 | ..\dist\1.4\Assemblies\ 21 | 22 | 23 | prompt 24 | 4 25 | false 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | False 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 1.4.3520-beta 57 | 58 | 59 | 0.3.0 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /src/SnapOut.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SnapOut", "SnapOut.csproj", "{D7D21B4A-1DA7-41D8-B202-C58CA8FA62AA}" 4 | EndProject 5 | Global 6 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 7 | Release|Any CPU = Release|Any CPU 8 | EndGlobalSection 9 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 10 | {D7D21B4A-1DA7-41D8-B202-C58CA8FA62AA}.Release|Any CPU.ActiveCfg = Release|Any CPU 11 | {D7D21B4A-1DA7-41D8-B202-C58CA8FA62AA}.Release|Any CPU.Build.0 = Release|Any CPU 12 | EndGlobalSection 13 | EndGlobal 14 | -------------------------------------------------------------------------------- /src/SnapUtils.cs: -------------------------------------------------------------------------------- 1 | namespace SnapOut 2 | { 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using RimWorld; 6 | using Verse.AI; 7 | using UnityEngine; 8 | using Verse; 9 | using Multiplayer.API; 10 | 11 | internal class SnapUtils 12 | { 13 | /// 14 | /// Gets a random calming message from the translation files. Picks random message with ID between 1-21. 15 | /// 16 | [SyncMethod] 17 | public static string GetCalmingMessage() 18 | { 19 | int rand = Rand.RangeSeeded(1, 21, Find.TickManager.TicksAbs); 20 | string cmrand = "CM" + rand; 21 | DebugLog(string.Format("Calming message ID is {0}", cmrand)); 22 | return cmrand.Translate(); 23 | } 24 | 25 | /// 26 | /// Logs debug message to the game's console 27 | /// 28 | /// Message 29 | public static void DebugLog(string message) 30 | { 31 | if (SOMod.Settings.Debug) 32 | { 33 | Log.Message("SnapOut :: " + message); 34 | } 35 | } 36 | 37 | /// 38 | /// Creates comforting text above the pawn 39 | /// 40 | /// Pawn to create text above 41 | /// Color of the text 42 | public static void CalmText(Pawn pawn, Color color) 43 | { 44 | MoteMaker.ThrowText(pawn.DrawPos + pawn.Drawer.renderer.BaseHeadOffsetAt(pawn.Rotation), pawn.Map, GetCalmingMessage(), color, 3.85f); 45 | } 46 | 47 | /// 48 | /// Attempt to send pawn to safety 49 | /// 50 | /// Pawn to send to safety 51 | [SyncMethod] 52 | public static void AttemptSendSafety(Pawn subjectee) 53 | { 54 | Job goToSafetyJob = new Job(SnapDefOf.GoToSafetyJob); 55 | if (subjectee.ownership.OwnedRoom != null) 56 | { 57 | int srand = Rand.RangeSeeded(0, 100, Find.TickManager.TicksAbs); 58 | SnapUtils.DebugLog(subjectee.Name.ToStringShort + " has a bedroom. Chance to get sent to safety.. " + srand); 59 | if (srand <= 65) // 65% chance 60 | { 61 | SnapUtils.DebugLog(subjectee.Name.ToStringShort + " has been sent to safety!"); 62 | goToSafetyJob.playerForced = true; 63 | goToSafetyJob.locomotionUrgency = LocomotionUrgency.Jog; 64 | subjectee.jobs.EndCurrentJob(JobCondition.Succeeded); 65 | subjectee.jobs.StartJob(goToSafetyJob, JobCondition.Succeeded); 66 | } 67 | else 68 | { 69 | SnapUtils.DebugLog(subjectee.Name.ToStringShort + " has not been sent to safety!"); 70 | } 71 | } 72 | } 73 | 74 | /// 75 | /// Runs the chance formula 76 | /// 77 | /// Pawn 78 | /// Target pawn 79 | /// Chance of Success 80 | [SyncMethod] 81 | public static float DoFormula(Pawn doer, Pawn subjectee) 82 | { 83 | float baseValue = SOMod.Settings.BaseValue; 84 | float negotiationCap = SOMod.Settings.NegotiationCap; 85 | 86 | float negotiationSkill = doer.GetStatValue(StatDefOf.NegotiationAbility, true) * 100; 87 | if (negotiationSkill > negotiationCap) negotiationSkill = negotiationCap; 88 | 89 | float opinion = (float)subjectee.relations.OpinionOf(doer); 90 | 91 | float dipWeight = SOMod.Settings.NegMult / 100; 92 | float opnWeight = SOMod.Settings.OpnMult / 100; 93 | 94 | float badOpnPenalty = 0f; 95 | float opinionCopy = opinion; 96 | 97 | while (opinionCopy < 0) { 98 | badOpnPenalty -= 0.25f; 99 | opinionCopy++; 100 | } 101 | 102 | float chance = (baseValue + badOpnPenalty) + (negotiationSkill * dipWeight) + (opinion * opnWeight); 103 | 104 | SnapUtils.DebugLog($"({baseValue} + {badOpnPenalty}) + ({negotiationSkill} * {dipWeight}) + ({opinion} * {opnWeight}) = {chance / 100}"); 105 | 106 | return chance / 100; 107 | } 108 | 109 | /// 110 | /// Summons a status message 111 | /// 112 | /// The type of message: 113 | /// 1 - Success; 114 | /// 2 - Failure; 115 | /// 3 - Critical Failure 116 | /// Pawn 117 | /// Target Pawn 118 | public static void DoStatusMessage(int type, Pawn doer, Pawn subjectee) 119 | { 120 | switch (type) 121 | { 122 | case 1: // Success 123 | Messages.Message( 124 | "SuccessCalm".Translate(doer.Name.ToStringShort, subjectee.Name.ToStringShort), 125 | MessageTypeDefOf.TaskCompletion); 126 | break; 127 | 128 | case 2: // Failure 129 | Messages.Message( 130 | "FailCalm".Translate(doer.Name.ToStringShort, subjectee.Name.ToStringShort), 131 | MessageTypeDefOf.TaskCompletion); 132 | break; 133 | 134 | case 3: // Critical Failure 135 | Messages.Message( 136 | "AggroFailCalm".Translate(doer.Name.ToStringShort, subjectee.Name.ToStringShort), 137 | MessageTypeDefOf.TaskCompletion); 138 | break; 139 | } 140 | } 141 | } 142 | } -------------------------------------------------------------------------------- /src/WorkGiver_CalmPawnDown.cs: -------------------------------------------------------------------------------- 1 | namespace SnapOut 2 | { 3 | using RimWorld; 4 | using Verse; 5 | using Verse.AI; 6 | 7 | public class WorkGiver_CalmPawnDown : WorkGiver_Warden 8 | { 9 | public override bool ShouldSkip(Pawn pawn, bool forced = false) 10 | { 11 | return base.ShouldSkip(pawn) && (pawn.Faction != Faction.OfPlayer) && (!pawn.RaceProps.Humanlike); 12 | } 13 | 14 | public override Job JobOnThing(Pawn pawn, Thing targetThing, bool forced = true) 15 | { 16 | if ((targetThing == null) || (pawn == targetThing)) 17 | { 18 | return null; 19 | } else { 20 | Pawn targetPawn = (Pawn)targetThing; 21 | if (targetPawn.RaceProps.Humanlike && targetPawn.InMentalState) 22 | { 23 | if (SnapCheck.CompatCheck(targetPawn.MentalState.def.ToString())) 24 | { 25 | bool recent = Find.TickManager.TicksGame < targetPawn.mindState.lastAssignedInteractTime + SOMod.Settings.Cooldown; 26 | if (pawn.CurJobDef != SnapDefOf.CalmDownJob) 27 | { 28 | if (SnapCheck.CanDo(targetPawn) && SnapCheck.IsCapable(pawn) && !recent && pawn.CanReserve(targetPawn)) 29 | { 30 | SnapUtils.DebugLog(string.Format("{0} given calm job with {1} as target", pawn.Name.ToStringShort, targetPawn.Name.ToStringShort)); 31 | return new Job(SnapDefOf.CalmDownJob, targetPawn); 32 | } 33 | } 34 | SnapUtils.DebugLog(string.Format("{0} has been considered but conditions were not fulfilled", targetPawn.Name.ToStringShort)); 35 | return null; 36 | } 37 | else 38 | { 39 | SnapUtils.DebugLog(string.Format("{0} mental state def has failed compatability check", targetPawn.MentalState.def.ToString())); 40 | return null; 41 | } 42 | } 43 | } 44 | return null; 45 | } 46 | } 47 | } --------------------------------------------------------------------------------