技術的なことを書こうとしてるただのゲームのブログ

RimworldのModとかなんか色々やってるよ。ニートだよ。

今Rimworldできないなら絶対にみないで下さい。記事がガバガバすぎて、ほぼ100%その場でコメントしてしまいます。

流行りに乗ってふざけたタイトルつけてみた。反省はしていない。

そういえばDiscordの通知が死んだ事件、どうも画面共有機能が追加されて「設定→配信モード→設定」の”通知の無効化”がオンになってたのが戦犯みたい。心当たりある方はそれオフにしてみましょ。


それでは本日のお題

ドラッグのワークテーブル弄って百合患者作るよ

発案はこれ。松屋Modで改変に味をしめたので色々作ってみることにした。
ゲームバランス崩さない程度でも強い概念をラベリングして並べるだけで面白いModになる事に気づいたので、まるで中毒症状のような百合患者*1を作り出そうと思った。

注意 この記事でこのModは完成しませんし現状の問題点だけを挙げます。

いつものごとくxml改変

DrugLabでCore内検索、構成ファイルを構築。ここからへんは前回と同じ。
違うのはドラッグは薬ごとに別ファイルでその薬の色んな種類の情報が書かれていたので、フレークのレシピを元にしました。

いつものようにファイル構成はこんな感じ。

Medical treatment of heterosis
                              About
                                   いつもの
                              Defs
                                  Doujin
                                        Writing_Doujin.xml
                                  ThingDefs_Buildings
                                                     Buildings_Production.xml
                                  WorkGivers
                                            WorkGivers


テクスチャはまだ試作状態なので作ってません(初期データを流用してます)

Writing_Doujin.xml

めっちゃくちゃなファイル名ですが元データはフレークのxml
名称とちょびっと効果変えた感じです。

<?xml version="1.0" encoding="utf-8" ?>
<Defs>

  <ThingDef ParentName="MakeableDrugBase">
    <defName>YuriBooks</defName>
    <label>百合本</label>
    <description>百合(ゆり)は、女性の同性愛のこと。また、それを題材とした各種作品。作品の場合、女性同士の恋愛だけでなく恋愛に近い友愛や広く友情を含んだ作品も百合と言うことが多い[注 1]</description>
    <graphicData>
      <texPath>Things/Item/Drug/Flake</texPath>
      <graphicClass>Graphic_StackCount</graphicClass>
    </graphicData>
    <rotatable>false</rotatable>
    <statBases>
      <WorkToMake>500</WorkToMake>
      <MarketValue>14</MarketValue>
      <Mass>0.05</Mass>
    </statBases>
    <techLevel>Industrial</techLevel>
    <ingestible>
      <foodType>Processed</foodType>
      <joy>1.20</joy>
      <baseIngestTicks>720</baseIngestTicks>
      <nurseable>true</nurseable>
      <drugCategory>Hard</drugCategory>
      <ingestSound>Ingest_Smoke</ingestSound>
      <ingestEffect>Smoke_Flake</ingestEffect>
			<ingestEffectEat>EatVegetarian</ingestEffectEat>
      <ingestHoldOffsetStanding>
        <northDefault>
          <offset>(0.23,0,0.065)</offset>
        </northDefault>
      </ingestHoldOffsetStanding>
      <ingestHoldUsesTable>false</ingestHoldUsesTable>
      <ingestCommandString>Smoke {0}</ingestCommandString>
      <ingestReportString>Smoking {0}.</ingestReportString>
      <useEatingSpeedStat>false</useEatingSpeedStat>
      <outcomeDoers>
        <li Class="IngestionOutcomeDoer_GiveHediff">
          <hediffDef>Yuri-ChuGreatVictory</hediffDef>
          <severity>0.75</severity>
          <toleranceChemical>Psychite</toleranceChemical>
        </li>
        <li Class="IngestionOutcomeDoer_OffsetNeed">
          <need>Rest</need>
          <offset>0.2</offset>
          <toleranceChemical>Psychite</toleranceChemical>
        </li>
        <li Class="IngestionOutcomeDoer_GiveHediff">
          <hediffDef>PsychiteTolerance</hediffDef>
          <severity>0.045</severity>
					<divideByBodySize>true</divideByBodySize>
				</li>
      </outcomeDoers>
    </ingestible>
    <recipeMaker>
			<researchPrerequisite>PsychiteRefining</researchPrerequisite>
      <recipeUsers>
        <li>DrugLab</li>
      </recipeUsers>
    </recipeMaker>
    <costList>
      <WoodLog>4</WoodLog>
    </costList>
    <comps>
      <li Class="CompProperties_Drug">
        <chemical>Psychite</chemical>
        <addictiveness>0.30</addictiveness>
        <minToleranceToAddict>0.10</minToleranceToAddict>
        <existingAddictionSeverityOffset>0.50</existingAddictionSeverityOffset>
        <needLevelOffset>1</needLevelOffset>
        <listOrder>110</listOrder>
        <overdoseSeverityOffset>
          <min>0.18</min>
          <max>0.5</max>
        </overdoseSeverityOffset>
				<largeOverdoseChance>0.015</largeOverdoseChance>
			</li>
    </comps>
  </ThingDef>
  
  <HediffDef>
    <defName>Yuri-ChuGreatVictory</defName>
    <hediffClass>HediffWithComps</hediffClass>
    <label>百合厨大勝利</label>
    <defaultLabelColor>(1,0,0.5)</defaultLabelColor>
    <scenarioCanAdd>true</scenarioCanAdd>
    <maxSeverity>1.0</maxSeverity>
    <comps>
      <li Class="HediffCompProperties_SeverityPerDay">
        <severityPerDay>-3.0</severityPerDay>
      </li>
    </comps>
      <stages>
        <li>
          <painFactor>0.5</painFactor>
          <restFallFactor>0.33</restFallFactor>
        </li>
      </stages>
  </HediffDef>
  
  <ThoughtDef>
    <defName>Yuri-ChuGreatVictory</defName>
    <workerClass>ThoughtWorker_Hediff</workerClass>
    <hediff>Yuri-ChuGreatVictory</hediff>
    <validWhileDespawned>true</validWhileDespawned>
    <stages>
      <li>
        <label>high on flake</label>
        <description>So good, so good.</description>
        <baseMoodEffect>35</baseMoodEffect>
      </li>
    </stages>
  </ThoughtDef>

</Defs>

一応BLとか普通の同人とか応用効くようにしてみた。

Buildings_Production.xml

DrugLabを改変。後述するけど今回あまり役に立ってない所。

<?xml version="1.0" encoding="utf-8" ?>
<ThingDefs>
  
  <ThingDef ParentName="BenchBase">
    <DefName>Studytable</DefName>
    <label>書斎</label>
    <ThingClass>Building_WorkTable</ThingClass>
    <Description>幾億キロの冒険もテーブルの上で</Description>
    <graphicData>
      <texPath>Things/Building/Production/TableDrugLab</texPath>
      <graphicClass>Graphic_Multi</graphicClass>
      <shaderType>CutoutComplex</shaderType>
      <drawSize>(3.5,1.5)</drawSize>
      <damageData>
        <cornerTL>Damage/Corner</cornerTL>
        <cornerTR>Damage/Corner</cornerTR>
        <cornerBL>Damage/Corner</cornerBL>
        <cornerBR>Damage/Corner</cornerBR>
      </damageData>
    </graphicData>
    <costStuffCount>50</costStuffCount>
    <stuffCategories>
      <li>Metallic</li>
      <li>Woody</li>
    </stuffCategories>
    <costList>
      <WoodLog>120</WoodLog>
      <Component>8</Component>
    </costList>
    <AltitudeLayer>Building</AltitudeLayer>
    <fillPercent>0.5</fillPercent>
    <useHitPoints>True</useHitPoints>
    <statBases>
      <WorkToBuild>3500</WorkToBuild>
      <MaxHitPoints>120</MaxHitPoints>
      <Flammability>1.0</Flammability>
    </statBases>
    <Size>(3,1)</Size>
    <DesignationCategory>Production</DesignationCategory>
    <Passability>PassThroughOnly</Passability>
    <pathCost>70</pathCost>
    <hasInteractionCell>True</hasInteractionCell>
    <interactionCellOffset>(0,0,-1)</interactionCellOffset>
    <surfaceType>Item</surfaceType>
    <inspectorTabs>
      <li>ITab_Bills</li>
    </inspectorTabs>
    <building>
      <spawnedConceptLearnOpportunity>BillsTab</spawnedConceptLearnOpportunity>
    </building>
    <comps>
      <li Class="CompProperties_AffectedByFacilities">
        <linkableFacilities>
          <li>ToolCabinet</li>
        </linkableFacilities>
      </li>
    </comps>
		<placeWorkers>
			<li>PlaceWorker_ShowFacilitiesConnections</li>
		</placeWorkers>
    <researchPrerequisites>
      <li>DrugProduction</li>
    </researchPrerequisites>
  </ThingDef>
  
</ThingDefs>


御覧の通り、ドラッグラボで作れるレシピは設定されない。
ドラッグのくくりから各ドラッグを参照して作成できるようになってるみたい(ちゃんとソースコード読み込めていない)
なので、百合本が普通のドラッグラボから作成が出来るようになっている。

まぁ処方されるものだしなにもおかしくないのだが、初めに設定した「専用のワークテーブルで百合本を作成」に適っていないのでもうちょいソース読んで作りたい。

上手く改変で来たら、普通のワークテーブルから百合本作成とか出来ないかと今度挑戦してみるつもり。

WorkGivers.xml

ここらへんはそんな目新しい事をしていないので割愛(これ追加した意味あまりないかもしれない)

終わりに

一応、ドラッグラボから百合本作成はできたので他のアプローチが出来るようにドラックラボ周りの動きを調べていきたい。
目指せ百合患者で近隣コロニーを殲滅。

*1:百合属性をもつ人の事ではなく百合作品を求めてゾンビの如く彷徨う人の事を指す

<