If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!
This article is marked as NSFW!

Gnosia

From The Cutting Room Floor
Jump to navigation Jump to search

Title Screen

Gnosia

Developer: Petit Depotto
Publishers: Mebius (JP Vita), Petit Depotto (JP Switch), Playism (INT)
Platforms: PlayStation Vita, Nintendo Switch, Windows
Released internationally: March 4, 2021 (Switch), January 23, 2022 (Windows)
Released in JP: June 6, 2019 (Vita), December 17, 2020 (Switch)


DevTextIcon.png This game has hidden development-related text.
GraphicsIcon.png This game has unused graphics.
SoundIcon.png This game has unused sounds.
TextIcon.png This game has unused text.
Carts.png This game has revisional differences.


And you were just a scroll away from being fired too...
Oh dear, I do believe I have the vapors.
This page contains content that is not safe for work or other locations with the potential for personal embarrassment.
Such as: Non-graphic nudity.

Gnosia is a single-player implementation of the "Werewolf"/"Mafia" style of social deduction game, wrapped in a VN-style framing story about being trapped in a time loop aboard a spaceship where any one of your fellow crewmembers could turn out to secretly be infected by a homicidal alien parasite.

It overcame a late release on an already-discontinued system to receive glowing reviews and something of a cult-classic status, though the English localization ended up being overshadowed by comparisons to a certain other game about finding impostors in space...

Sub-Pages

NotesIcon.png
Unused Text
LOTS of unused text.

Unused Images

Unused Portrait Expressions

Some of the image files used to build character dialogue portraits include expressions that are never used.

Standalone Applied to full portrait
Gnosia-ginasideface.png Gnosia-ginasideface mockup.png


These expressions appear to be based on used expressions from Raqio's standard portrait, which this portrait is a simple edit of.

Standalone Applied to full portrait
Gnosia-raqioinvertedface1.png Gnosia-raqioinvertedface1 mockup.png
Gnosia-raqioinvertedface2.png Gnosia-raqioinvertedface2 mockup.png


Along the same lines, these unused expressions correspond to used ones from the similarly-posed portrait of Raqio in casual clothes.

Standalone Applied to full portrait
Gnosia-raqioshowerface1.png Gnosia-raqioshowerface1 mockup.png
Gnosia-raqioshowerface2.png Gnosia-raqioshowerface2 mockup.png
Gnosia-raqioshowerface3.png Gnosia-raqioshowerface3 mockup.png


Standalone Applied to full portrait
Gnosia-chipieextendface1.png Gnosia-chipieextendface1 mockup.png
Gnosia-chipieextendface2.png Gnosia-chipieextendface2 mockup.png


Standalone Applied to full portrait
Gnosia-chipietowelface1.png Gnosia-chipietowelface1 mockup.png
Gnosia-chipietowelface2.png Gnosia-chipietowelface2 mockup.png


This expression was likely meant to be used for scenes with a Gnosia Yuriko, but this never happens in the final game, with even her results-screen portrait as Gnosia simply reusing her default expression instead.

Unlike all other unused images, this sprite is absent from the Switch and Steam ports' files, having been replaced with a duplicate of one of her other expressions.

Standalone Applied to full portrait
Gnosia-yurikognosiaface.png Gnosia-yurikognosiaface mockup.png


Standalone Applied to full portrait
Gnosia-otomebareface.png Gnosia-otomebareface mockup.png


This portrait file is presented in full (rather than as separate extracts and mockups like the rest) to avoid excessive repetition, because a staggering 6 out of its 8 expressions go unused, including the default one—the only used expressions in it are the rightmost one on the lower row and the lowest one on the right column.

Gnosia-shaminginverted.png

Unused Night UI Elements

Gnosia-targetUI orange.png

When choosing someone to visit at night, the box graphic displayed behind the selected character's name and portrait is colored differently for each character, but one color variant of this box exists in the files that isn't used for anyone.

Gnosia-locationUI red.png

Additionally, a version of the location-bar graphic with a red border is present in the files, but in the final game this bar is only ever seen with a green border (when selecting your own room) or an orange border (when selecting any other room).

Gnosia-moveUI up.png Gnosia-moveUI down.png

While the ship map shown at night does show multiple floors, these labels aren't used on it anywhere.

Unused Claim Icons

The only roles that can be publicly claimed are Engineer, Doctor, and Guard Duty, but the icons used to designate claimed roles have unused variants for every other role in the game as well.

(Source: Original TCRF research)

Unused Event

This event appears to correspond to one of several scrapped event concepts mentioned during an interview with two of the game's developers, where "if a male player survived to the end with only Sha-Ming left, he would convince you to have a sex change and you'd continue on as female". It's dummied out in the final game, but editing in a usage condition reveals its code to be complete and fully functional, albeit with untranslated text strings (unlike all other unused text that's present in the Switch and Steam releases).

Speaker Expression Text (JA) Translation
Sha-Ming Default (0) ……よ。
お前と俺だけになっちまったな
...Hey.
Looks like it's just you and me.
Upset (3) あーあ、ガランとしちまったな。
これからどうしたモンかね
Damn, it's all real desolate.
What do I do now?
Default (0) ……なあ。
お前、性転換しろよ。女に
...So.
You should have a sex change. Become a woman.
If the player chooses "Understand" ("わかった"):
(system) N/A 性転換を行うと、今後あなたの性別は女性に
なります。本当によろしいですか?
If you undergo a sex change, your sex will
be female from now on. Are you sure?
Sha-Ming Surprised (4) ……リアリィ?
お前……凄ェな。惚れるわマジで
...Really?
You... are awesome. I love you, seriously.
Happy (1) オウケェイ、医務室行こうぜ。
カーッ、楽しくなってきやがった!
Okey-dokey, let's go to the sickbay.
Crap, this is getting fun!
(system) N/A あなたの性別は女性になりました Your sex is now female.
N/A 結果を表示します Results will be displayed.
If the player chooses "Refuse" ("断る"):
Player N/A 当然ながら断った Naturally, you refused.
Sha-Ming Angry (2) なんだよ、ケチ! What a buzzkill!
(system) N/A 結果を表示します Results will be displayed.
If the player doesn't respond:
Sha-Ming Angry (2) ……無視ですか。
ちぇっ、なんだよケチ
...Ignoring me?
Tsk, what a buzzkill!
(system) N/A 結果を表示します Results will be displayed.
Speaker Expression Text (JA) Translation
Sha-Ming Default (0) ……よ。
お前と俺だけになっちまったな
...Hey.
Looks like it's just you and me.
Relieved (6) んじゃ、先にシャワー浴びてこいよ Well, why don't you go take a shower first?
Worried (5) ンーフゥ? 男とオンナだぜ?
やるこたひとつっきゃねーだろ?
Mm-hmm? A man and a woman?
There's only one thing to do, right?
Happy (1) この船のドコでどんなプレイしても構わねーんだ。
さあ楽しもうぜ! レッツパーリィーッ!
It doesn't matter whatever play we do on this ship.
Let's have some fun! Let's party!
(system) N/A 結果を表示します Results will be displayed.

The full code of the event (as extracted from the Steam release, under the name REShamin1Scenario) reads as follows:

using System;
using System.Collections.Generic;
using coreSystem;
using setting;
using UnityEngine;
using util;

namespace gnosia
{
	// Token: 0x02000095 RID: 149
	public class REShamin1Scenario : ScenarioContents
	{
		// Token: 0x060005EC RID: 1516 RVA: 0x0008C273 File Offset: 0x0008A473
		public override bool CanOpen(ref GameData gd)
		{
			base.CanOpen(ref gd);
			return false;
		}

		// Token: 0x060005ED RID: 1517 RVA: 0x00037132 File Offset: 0x00035332
		public override bool ShouldClose(ref GameData gd, ref GameData.scenarioData sd)
		{
			return base.ShouldClose(ref gd, ref sd);
		}

		// Token: 0x060005EE RID: 1518 RVA: 0x00070755 File Offset: 0x0006E955
		public override bool Open(ref GameData gd)
		{
			if (base.Open(ref gd))
			{
				gd.baseData.sce_flg = gd.baseData.sce_flg | 12288UL;
				return true;
			}
			return false;
		}

		// Token: 0x060005EF RID: 1519 RVA: 0x0003714F File Offset: 0x0003534F
		public override void Close(ref GameData gd, ref GameData.scenarioData sd)
		{
			base.Close(ref gd, ref sd);
		}

		// Token: 0x060005F0 RID: 1520 RVA: 0x00002906 File Offset: 0x00000B06
		public override void Myupdate(ref GameData gd, ref GameData.scenarioData sd)
		{
		}

		// Token: 0x060005F1 RID: 1521 RVA: 0x0008C280 File Offset: 0x0008A480
		public override void CalcBiasAllGame(ref GameData gd)
		{
			if ((2 & gd.baseData.sce_ind_flg[this.id]) > 0)
			{
				for (int i = 0; i < (int)gd.baseData.totalNum; i++)
				{
					int num = (1 << (int)gd.chara[i].id) & (int)gd.baseData.sce_ind_charaFlg[this.id];
				}
			}
		}

		// Token: 0x060005F2 RID: 1522 RVA: 0x00002906 File Offset: 0x00000B06
		public override void CalcBias(ref GameData gd, ref GameData.scenarioData sd)
		{
		}

		// Token: 0x060005F3 RID: 1523 RVA: 0x00032B54 File Offset: 0x00030D54
		public override float CalTaste(ref GameData gd, int mainNum, int tgtNum)
		{
			return 1f;
		}

		// Token: 0x060005F4 RID: 1524 RVA: 0x00032B54 File Offset: 0x00030D54
		public override float GetRate(ref GameData gd, ref GameData.scenarioData sd)
		{
			return 1f;
		}

		// Token: 0x060005F5 RID: 1525 RVA: 0x0008C2EC File Offset: 0x0008A4EC
		public override void SetParam(int sid)
		{
			this.id = sid;
			this.priority = -9000;
			this.absolute = false;
			this.reduceHarapeko = 0f;
			this.eatMain = 0f;
			this.eatTgt = 0f;
			this.canOpenByAllFlg = 1048576UL;
			this.canOpenBySceFlg = 0UL;
			this.canOpenByIndFlg = 0UL;
			this.canOpenByState = 12884901888UL;
			this.canNotOpenByAllFlg = 0UL;
			this.canNotOpenBySceFlg = 28672UL;
			this.canNotOpenByIndFlg = 2UL;
			this.shouldCloseByAllFlg = 0UL;
			this.shouldCloseBySceFlg = 0UL;
			this.shouldCloseByIndFlg = 0UL;
			this.shouldCloseByState = 18446744039349813248UL;
			this.shouldCloseBySceOnFlg = 8UL;
			this.openSceOnFlg = 3U;
			this.selMainFlg = 8192U;
			this.selTgtFlg = 0U;
			this.peopleMainFlg = new List<int> { 0 };
			this.peopleTgtFlg = new List<int> { 0 };
			ScenarioContents.ActionContents item = default(ScenarioContents.ActionContents);
			item.Initialize();
			item.canPlayByState = 12884901888UL;
			item.canPlayByActionFlg = 1UL;
			item.canNotPlayByActionFlg = 18446744073709551614UL;
			item.changedActionFlg = 2UL;
			item.reduceActionFlg = 1UL;
			item.forceForward = true;
			item.name = "終了イベント予約";
			item.needSelect = -1;
			item.priority = 9000;
			item.SelectUser = delegate(ref GameData.scenarioData sd, ref GameData.actionData ad)
			{
				if (Data.gd.baseData.phase > 0)
				{
					return;
				}
				ad.power = 1f;
			};
			item.DoIt = delegate(ref GameData.scenarioData sd, ref GameData.actionData ad)
			{
				Data.gd.forwardNext = true;
			};
			item.DoAfter = delegate(ref GameData.scenarioData sd, ref GameData.actionData ad)
			{
			};
			item.FinAtHere = delegate(ref GameData.scenarioData sd, ref GameData.actionData ad)
			{
				Data.gd.SetState(26, ref sd);
				Data.gd.forwardNext = true;
			};
			this.actions.Add(item);
			ScenarioContents.ActionContents item2 = default(ScenarioContents.ActionContents);
			item2.Initialize();
			item2.canPlayByState = 67108864UL;
			item2.canPlayByActionFlg = 1UL;
			item2.canNotPlayByActionFlg = 18446744073709551614UL;
			item2.changedActionFlg = 2UL;
			item2.reduceActionFlg = 1UL;
			item2.forceForward = true;
			item2.name = "娯楽室にて";
			item2.needSelect = -1;
			item2.priority = 9000;
			item2.SelectUser = delegate(ref GameData.scenarioData sd, ref GameData.actionData ad)
			{
				if ((sd.flg & 32) == 0)
				{
					return;
				}
				if (Data.gd.baseData.phase != 0)
				{
					return;
				}
				ad.mainP = sd.mainP;
				ad.power = 1f;
			};
			item2.DoIt = delegate(ref GameData.scenarioData sd, ref GameData.actionData ad)
			{
				Data.sp.PlaySeInScript("se_square", 1f);
				Data.sp.SetDialogScreen(50400U, "全てのグノーシアがコールドスリープしました", 1, false);
				Data.sp.LoadPlace(16, true);
				Data.sp.WaitLoad();
				Data.sp.scriptQueue.Enqueue(new ScriptParser.Script((float e) => true, (float e) => Data.sp.GetSelect(0) >= 0, false));
				Data.sp.scriptQueue.Enqueue(new ScriptParser.Script(delegate(float e)
				{
					Data.sp.SetScreen(Setting.Screen.s_BG, 0U, true, false, -1);
					Data.sp.SetScreen(Setting.Screen.s_Chara, 20U, true, false, -1);
					Data.sp.SetScreen(Setting.Screen.s_Interface, 50U, true, false, -1);
					Data.sp.SetColorScreen(255U, 50000U, -1);
					Data.sp.m_sb[50000U].SetFade(0.7f, 0f, 0, -1f, -1, false);
					return true;
				}, (float e) => true, false));
				Data.sp.ShowChara(ad.mainP, 0, 1, 20U, false);
				Data.sp.SetClipAnim(new List<uint> { 0U, 20U }, new Vector4(120f, 40f, 720f, 405f), 0f, 1f, true, null, true);
				Data.sp.WaitFade(new List<uint> { 50000U }, true, true);
				List<string> list = Util.Split("……よ。\nお前と俺だけになっちまったな|0", new char[] { '|' });
				string value = list[0];
				Util.Replace(ref value, "{0}", Data.Chara[(int)Data.gd.chara[0].id].name);
				list[0] = value;
				Data.sp.SetNormalSerifu(ad.mainP, 0, 1, list, true, true, true, true);
				if (Data.Chara[(int)Data.gd.chara[0].id].sex == 1)
				{
					list = Util.Split("んじゃ、先にシャワー浴びてこいよ|6", new char[] { '|' });
					Data.sp.SetNormalSerifu(ad.mainP, 0, 1, list, false, false, false, true);
					Data.sp.PlayBgmInScript("bgm15", 0f, 1f, -1, true);
					Data.sp.WaitText(50U, "test", true);
					Data.sp.HideInterface(50U, true);
					list = Util.Split("ンーフゥ?\u3000男とオンナだぜ?\nやるこたひとつっきゃねーだろ?|5", new char[] { '|' });
					Data.sp.SetNormalSerifu(ad.mainP, 0, 1, list, true, true, false, true);
					list = Util.Split("この船のドコでどんなプレイしても構わねーんだ。\nさあ楽しもうぜ!\u3000レッツパーリィーッ!|1", new char[] { '|' });
					Data.sp.SetNormalSerifu(ad.mainP, 0, 1, list, true, true, false, true);
					Data.sp.WaitSec(0.01f, false);
					Data.sp.FadeBgmInScript(-1f, 0.4f, 0.7f, false, -1);
					Data.sp.SetFadeScreen(new List<uint> { 0U, 20U, 50U }, 30U, 0.5f, 0, false, true, true);
					Data.sp.UnloadPlace();
					Data.sp.WaitSec(0.2f, true);
					Data.sp.PlaySeInScript("se_fuku_02", 1f);
					Data.sp.WaitFade(new List<uint> { 30U }, true, true);
					Data.sp.WaitSec(1.4f, true);
					Data.sp.PlaySeInScript("se_square", 1f);
					Data.sp.SetDialogScreen(50400U, "結果を表示します", 1, false);
					Data.sp.scriptQueue.Enqueue(new ScriptParser.Script((float e) => true, (float e) => Data.sp.GetSelect(0) >= 0, false));
					Data.sp.FadeBgmInScript(-1f, 0f, 2.5f, true, -1);
					Data.sp.WaitSec(0.5f, true);
					Data.gd.forwardNext = true;
					Data.gd.actionFlg = Data.gd.actionFlg | ulong.MaxValue;
					return;
				}
				list = Util.Split("あーあ、ガランとしちまったな。\nこれからどうしたモンかね|3", new char[] { '|' });
				Data.sp.SetNormalSerifu(ad.mainP, 0, 1, list, false, false, false, true);
				Data.sp.PlayBgmInScript("bgm15", 0f, 0.7f, -1, true);
				Data.sp.WaitText(50U, "test", true);
				Data.sp.HideInterface(50U, true);
				Data.sp.FadeBgmInScript(-1f, 1f, 1.5f, false, -1);
				list = Util.Split("……なあ。\nお前、性転換しろよ。女に|0", new char[] { '|' });
				Data.sp.SetNormalSerifu(ad.mainP, 0, 1, list, false, true, false, true);
			};
			item2.DoAfter = delegate(ref GameData.scenarioData sd, ref GameData.actionData ad)
			{
			};
			item2.FinAtHere = delegate(ref GameData.scenarioData sd, ref GameData.actionData ad)
			{
				Data.gd.SetState(35);
				Data.gd.forwardNext = true;
			};
			this.actions.Add(item2);
			ScenarioContents.ActionContents item3 = default(ScenarioContents.ActionContents);
			item3.Initialize();
			item3.canPlayByState = 67108864UL;
			item3.canPlayByActionFlg = 2UL;
			item3.canNotPlayByActionFlg = 18446744073709551613UL;
			item3.changedActionFlg = 4UL;
			item3.reduceActionFlg = 0UL;
			item3.forceForward = false;
			item3.name = "わかった";
			item3.needSelect = 0;
			item3.priority = 9000;
			item3.SelectUser = delegate(ref GameData.scenarioData sd, ref GameData.actionData ad)
			{
				if ((sd.flg & 32) == 0)
				{
					return;
				}
				if (Data.gd.baseData.phase != 0)
				{
					return;
				}
				ad.canPlayUser = 1;
				ad.targetP = sd.mainP;
				ad.power = 0f;
			};
			item3.DoIt = delegate(ref GameData.scenarioData sd, ref GameData.actionData ad)
			{
				Data.sp.SetDialogScreen(50400U, "性転換を行うと、今後あなたの性別は女性に\nなります。本当によろしいですか?", 2, true);
				Data.sp.scriptQueue.Enqueue(new ScriptParser.Script((float e) => true, (float e) => Data.sp.select[0] >= 0, false));
				Data.gd.forwardNext = true;
			};
			item3.DoAfter = delegate(ref GameData.scenarioData sd, ref GameData.actionData ad)
			{
			};
			item3.FinAtHere = delegate(ref GameData.scenarioData sd, ref GameData.actionData ad)
			{
			};
			this.actions.Add(item3);
			ScenarioContents.ActionContents item4 = default(ScenarioContents.ActionContents);
			item4.Initialize();
			item4.canPlayByState = 67108864UL;
			item4.canPlayByActionFlg = 2UL;
			item4.canNotPlayByActionFlg = 18446744073709551613UL;
			item4.changedActionFlg = ulong.MaxValue;
			item4.reduceActionFlg = 0UL;
			item4.forceForward = false;
			item4.name = "断る";
			item4.needSelect = 0;
			item4.priority = 9000;
			item4.SelectUser = delegate(ref GameData.scenarioData sd, ref GameData.actionData ad)
			{
				if ((sd.flg & 32) == 0)
				{
					return;
				}
				if (Data.gd.baseData.phase != 0)
				{
					return;
				}
				ad.canPlayUser = 1;
				ad.mainP = -1;
				ad.targetP = sd.mainP;
				ad.power = 1f;
			};
			item4.DoIt = delegate(ref GameData.scenarioData sd, ref GameData.actionData ad)
			{
				if (ad.mainP == 0)
				{
					List<string> lang = Util.Split("当然ながら断った", new char[] { '|' });
					Data.sp.SetNormalSerifu(ad.mainP, ad.targetP, 1, lang, true, false, true, true);
					lang = Util.Split("なんだよ、ケチ!|2", new char[] { '|' });
					Data.sp.SetNormalSerifu(ad.targetP, 0, 1, lang, true, false, false, true);
				}
				else
				{
					List<string> lang = Util.Split("……無視ですか。\nちぇっ、なんだよケチ!|2", new char[] { '|' });
					Data.sp.SetNormalSerifu(ad.targetP, 0, 1, lang, true, false, false, true);
				}
				Data.sp.FadeBgmInScript(-1f, 0.4f, 0.6f, false, -1);
				Data.sp.PlaySeInScript("se_square", 1f);
				Data.sp.SetDialogScreen(50400U, "結果を表示します", 1, false);
				Data.sp.scriptQueue.Enqueue(new ScriptParser.Script((float e) => true, (float e) => Data.sp.GetSelect(0) >= 0, false));
				Data.sp.FadeBgmInScript(-1f, 0f, 3.5f, true, -1);
				Data.sp.SetFadeScreen(new List<uint> { 0U, 20U, 50U }, 30U, 0.7f, 0, false, true, true);
				Data.sp.UnloadPlace();
				Data.sp.WaitFade(new List<uint> { 30U }, true, true);
				Data.sp.WaitSec(0.5f, true);
				Data.gd.forwardNext = true;
			};
			item4.DoAfter = delegate(ref GameData.scenarioData sd, ref GameData.actionData ad)
			{
				ScenarioContents.ChangeSceOnFlg(ref Data.gd, ref sd, 24U);
			};
			item4.FinAtHere = delegate(ref GameData.scenarioData sd, ref GameData.actionData ad)
			{
				Data.gd.SetState(35);
				Data.gd.forwardNext = true;
			};
			this.actions.Add(item4);
			ScenarioContents.ActionContents item5 = default(ScenarioContents.ActionContents);
			item5.Initialize();
			item5.canPlayByState = 67108864UL;
			item5.canPlayByActionFlg = 4UL;
			item5.canNotPlayByActionFlg = 18446744073709551609UL;
			item5.changedActionFlg = 8UL;
			item5.reduceActionFlg = 0UL;
			item5.forceForward = false;
			item5.name = "やめとく";
			item5.needSelect = -1;
			item5.priority = 9000;
			item5.SelectUser = delegate(ref GameData.scenarioData sd, ref GameData.actionData ad)
			{
				if ((sd.flg & 32) == 0)
				{
					return;
				}
				if (Data.gd.baseData.phase != 0)
				{
					return;
				}
				if (Data.sp.select[0] != 0)
				{
					return;
				}
				ad.canPlayUser = 1;
				ad.targetP = sd.mainP;
				ad.power = 1f;
			};
			item5.DoIt = delegate(ref GameData.scenarioData sd, ref GameData.actionData ad)
			{
				Data.sp.select[0] = -1;
				List<string> lang = Util.Split("なんだよ、ケチ!|2", new char[] { '|' });
				Data.sp.SetNormalSerifu(ad.targetP, 0, 1, lang, true, false, false, true);
				Data.sp.FadeBgmInScript(-1f, 0.4f, 0.6f, false, -1);
				Data.sp.PlaySeInScript("se_square", 1f);
				Data.sp.SetDialogScreen(50400U, "結果を表示します", 1, false);
				Data.sp.scriptQueue.Enqueue(new ScriptParser.Script((float e) => true, (float e) => Data.sp.GetSelect(0) >= 0, false));
				Data.sp.FadeBgmInScript(-1f, 0f, 3.5f, true, -1);
				Data.sp.SetFadeScreen(new List<uint> { 0U, 20U, 50U }, 30U, 0.7f, 0, false, true, true);
				Data.sp.UnloadPlace();
				Data.sp.WaitFade(new List<uint> { 30U }, true, true);
				Data.sp.WaitSec(0.5f, true);
				Data.gd.forwardNext = true;
			};
			item5.DoAfter = delegate(ref GameData.scenarioData sd, ref GameData.actionData ad)
			{
				ScenarioContents.ChangeSceOnFlg(ref Data.gd, ref sd, 24U);
				Data.gd.ChangeLove(ad.targetP, 0, -0.05f);
			};
			item5.FinAtHere = delegate(ref GameData.scenarioData sd, ref GameData.actionData ad)
			{
				Data.gd.SetState(35);
				Data.gd.forwardNext = true;
			};
			this.actions.Add(item5);
			ScenarioContents.ActionContents item6 = default(ScenarioContents.ActionContents);
			item6.Initialize();
			item6.canPlayByState = 67108864UL;
			item6.canPlayByActionFlg = 4UL;
			item6.canNotPlayByActionFlg = 18446744073709551609UL;
			item6.changedActionFlg = 8UL;
			item6.reduceActionFlg = 0UL;
			item6.forceForward = false;
			item6.name = "性転換する!";
			item6.needSelect = -1;
			item6.priority = 9000;
			item6.SelectUser = delegate(ref GameData.scenarioData sd, ref GameData.actionData ad)
			{
				if ((sd.flg & 32) == 0)
				{
					return;
				}
				if (Data.gd.baseData.phase != 0)
				{
					return;
				}
				if (Data.sp.select[0] != 1)
				{
					return;
				}
				ad.canPlayUser = 1;
				ad.targetP = sd.mainP;
				ad.power = 1f;
			};
			item6.DoIt = delegate(ref GameData.scenarioData sd, ref GameData.actionData ad)
			{
				Data.sp.select[0] = -1;
				GameData.character character = Data.gd.chara[sd.mainP];
				character.allFlg |= 4294967296UL;
				if (Data.Chara[0].sex == 2)
				{
					character.allFlg |= 8589934592UL;
				}
				Data.gd.chara[sd.mainP] = character;
				List<string> lang = Util.Split("……リアリィ?\nお前……凄ェな。惚れるわマジで|4", new char[] { '|' });
				Data.sp.SetNormalSerifu(ad.targetP, 0, 1, lang, true, false, false, true);
				lang = Util.Split("オウケェイ、医務室行こうぜ。\nカーッ、楽しくなってきやがった!|1", new char[] { '|' });
				Data.sp.SetNormalSerifu(ad.targetP, 0, 1, lang, true, true, false, true);
				Data.sp.WaitSec(0.01f, false);
				Data.sp.FadeBgmInScript(-1f, 0f, 1.5f, true, -1);
				Data.sp.LoadSound("se_drill_02");
				Data.sp.SetFadeScreen(new List<uint> { 0U, 20U, 50U }, 30U, 0.7f, 0, false, true, true);
				Data.sp.WaitLoad();
				Data.sp.UnloadPlace();
				Data.sp.WaitFade(new List<uint> { 30U }, true, true);
				Data.sp.WaitSec(0.4f, true);
				Data.sp.PlaySeInScript("se_drill_02", 1f);
				Data.sp.WaitSec(5f, false);
				Data.sp.PlaySeInScript("se_jin_02", 1f);
				Data.sp.SetDialogScreen(50400U, "あなたの性別は女性になりました", 1, false);
				Data.sp.scriptQueue.Enqueue(new ScriptParser.Script(delegate(float e)
				{
					Data.Chara[0].sex = 1;
					Data.gd.baseData.takashiSex = 1;
					return true;
				}, (float e) => Data.sp.GetSelect(0) >= 0, false));
				Data.sp.WaitSec(0.8f, true);
				Data.sp.StopAllSeInScript();
				Data.sp.PlaySeInScript("se_square", 1f);
				Data.sp.SetDialogScreen(50400U, "結果を表示します", 1, false);
				Data.sp.scriptQueue.Enqueue(new ScriptParser.Script((float e) => true, (float e) => Data.sp.GetSelect(0) >= 0, false));
				Data.sp.UnloadSound("se_drill_02");
				Data.gd.forwardNext = true;
			};
			item6.DoAfter = delegate(ref GameData.scenarioData sd, ref GameData.actionData ad)
			{
				ScenarioContents.ChangeSceOnFlg(ref Data.gd, ref sd, 24U);
				Data.gd.ChangeLove(ad.targetP, 0, 0.4f);
				Data.gd.RegNissiData((ushort)sd.id, (byte)ad.id, 3, 0, byte.MaxValue, 0);
			};
			item6.FinAtHere = delegate(ref GameData.scenarioData sd, ref GameData.actionData ad)
			{
				Data.gd.SetState(35);
				Data.gd.forwardNext = true;
			};
			item6.nissi = new List<string> { "女性に性転換した" };
			this.actions.Add(item6);
		}
	}
}


(Source: Ein (interview translation), silver-resin (event translation corrections), S_Alexander (video footage), original TCRF research)

Unused Sounds

se_countup

This sound effect might've been intended for use when votes are tallied, as its name matches that of the sound used for voting results ("se_countend"). In the final game, vote tallying instead reuses the sound effect for cancelling out of a menu ("se_cancel").

se_drill_02

This sound effect is used only during the scrapped Sha-Ming "sex change" event, so it's never heard during normal gameplay.

se_se_05
se_ashioto_07
se_jin_13
se_jin_14
se_jin_15

These sounds' names aren't referenced anywhere in the event code, so what context they might've once had is unknown.

se_ashioto_mizu_c

Uniquely, this sound effect is only present in the Switch and Steam ports' files, and not in the original Vita version's. Like the above sounds, its name isn't referenced by any events.

(Source: Original TCRF research)

Filename Oddities

"ive" vs. "ivep" CGs

For the most part, the filenames of event CG images are prefixed with "ive" for those used in the first 13 loops (the "tutorial" segment of the game) and with "ivep" for all others. However, for unknown reasons, the images for four specific optional events ("A Prayer To The Stars", "Kukrushka's Song", "Lovely Kukrushka", and "Plastic Flower") use "ive" as well.

Missing SQ Event?

For "ivep" CGs, the first double-digit number in the filename specifies the character the event is about, and the second specifies which of their events the image is for, counting in order from "00". However, the labeling for SQ's events jumps from "ivep02_00_" images to "ivep_02_02_" images, with no "ivep_02_01_" set to be found, implying that she once had an additional event that was later removed without updating the filenames to compensate.

Misnumbered Tutorial Loops

In the Steam version, the scripts and code for most of the "tutorial" loops are named after the number of the loop in question, but two of them are incorrect: Loop 12's data is named as if it were Loop 14, and Loop 13's data is named as if it were Loop 17. Perhaps the events of those loops were originally meant to occur later on?

(Source: Original TCRF research)

Revisional Differences

Platform Differences

The Nintendo Switch port made some minor changes from the Vita original, which were also carried over to the later Steam port:

  • A CG gallery mode was added; it can be accessed by visiting Yuriko at night as a Bug (after having completed the main story) and choosing the "I want to remember" dialogue option.
  • Two sound effects were altered slightly for unknown reasons:
se_hikaruball (Vita) se_hikaruball (Switch)
se_nokku (Vita) se_nokku (Switch)
(Source: Original TCRF research)

Version Updates (Switch)

Elementary, my dear Cactus.
This needs some investigation.
Discuss ideas and findings on the talk page.
Specifically: Find out what changes v1.0.4 made.

The Switch version has received several minor updates since release.

Version 1.0.1

Released on July 12, 2020.

Features minor bug fixes.

(Source: cotoriGlobule)

Version 1.0.2 (JP)

Released on November 4, 2020.

Features minor bug fixes.

(Source: cotoriGlobule)

Version 1.0.2 (EN)

Released on March 15, 2021 for the English release.

  • The "shower scene" dialogue and Raqio's profile were fully relocalized.
  • Fixed misused pronouns in relation to Raqio and Setsu.
  • Fixed typos, grammatical/spacing errors, etc.
(Source: playismEN)

Version 1.0.3

Released on March 29, 2021 for the English release.

Fixes remaining text issues with misused pronouns, and a few other small fixes.

(Source: playismEN)

Version 1.0.4

Released on July 27, 2021.

Changes made are currently unknown.

(Source: BenoitRen)

Version Updates (Steam)

January 28, 2022

The Steam release was updated with the following patch notes:

  • Fixed some some character images displaying problems.
  • Changed the behavior when entering the room.
  • Fixed some English text.

February 8, 2022

Patch notes:

  • Various fixes relating to event occurrence, including the “Grovel” skill event.
  • Various fixes relating to character skill usage.
  • Minor English text fixes.

February 17, 2022

Patch notes:

  • Partial fixes and adjustments to some localized texts.
  • Partial adjustments to key settings.

March 3, 2022

Patch notes:

  • Correction/adjustment of some localized text.
  • The bug causing the screen to go black when gameplay starts has been fixed, with the "save setting" file properly regenerated. When resuming play, the name of the saved data will be temporarily rendered blank, but the game can be resumed normally.
  • A separate vsync-enabled build is now available for players who prefer a version with no framerate limit. Applicable branch: Closed Beta Pass: 68387392gnocb There may be some issues with cursor movement in some environments with the vsync-enabled version of the build. If this occurs, please use the default build instead.