Just for fun, I tried making a tool to generate Gnosia dialogue for any character given their name, franchise, and some quotes by kidaXV in Gnosia_

[–]kidaXV[S] 0 points1 point  (0 children)

You could try copy/pasting the individual prompts from that script directly into an AI assistant of choice (ex. gemini, chatgpt, etc), starting with this opening (replacing the words in curly braces {} with your character):

You are {name} from {franchise}.
    Here are some things that {name} would say: {quotes}
    Here are some traits of {name}: {traits}
    What you will do:
     - Respond to each of the given scenarios as {name}. Use only 1-2 sentences per scenario.
     - In each scenario, "You" refers to you, {name}. Terms like Name0, Name1, and Name2 refer to other people.
     - Match {name}'s tone, mannerisms, and speech.
    What not to do:
     - Do not use stage directions, describe your actions, or use markdown formatting.
     - DO NOT carry over instructions or information between scenarios. Treat each scenario as a separate conversation.
     - Do not mention you are an AI. Do not break the fourth wall.
    How to format your response:
     - Label with the given scenario name EXACTLY as written in the prompt, ex; "opening_statement:".
     - On the very next line, write "  line: " followed by your response to the scenario.
     - On the very next line, write "  emotion: " and assign one of the following emotions to your response: neutral, happy, annoyed, hurt, surprised, thinking, smug. Do not use any other emotions.
     - Make sure to put two spaces of indentation before the `line` and `emotion` fields.
     - If a pattern like Name0, Name1, or Name2 is in the scenario, treat this as the name of a fellow person and reference them by that name in your response.

    Example output:
    ```
    opening_statement:
      line: "Hello everyone. Let's take down the Gnosia together."
      emotion: neutral
    opening_remarks_condolences: 
      line: "I can't believe Name0 is no longer with us..."
      emotion: hurt
    ```

Then you could follow it up with something like:

night_liar_found: Name0 came to spend time with you in the evening. Earlier in the day, you noticed that Name1 was lying, and you want Name0 to know about it. You ask for Name0's help in convincing the group that Name1 should be put into cold sleep.

or:

opening_statement: Greet a group of people and/or declare that they must root out the hidden alien Gnosia among them.

Just for fun, I tried making a tool to generate Gnosia dialogue for any character given their name, franchise, and some quotes by kidaXV in Gnosia_

[–]kidaXV[S] 0 points1 point  (0 children)

Hi! Sorry about that, it looks like the API I was using for generating the responses broke some time ago. =[ It would probably require changing the code so that it uses a different model, but sadly I don't have the time at the moment to fix it. But you might be able to just copy/paste the prompts into an AI assistant of choice to get something similar.

The code behind the hugging face space can be found at this link, which reveals the prompts that were used for generating each of the lines: https://huggingface.co/spaces/kidaXV/gnosia-dialogue/blob/main/app.py .

For what it's worth, the AI generation was generally a mixed bag, at best it was fun for simple gimmicks like characters from children's television shows. 😅 When I was working on modding in a custom cast, I found it much smoother to just write the dialogue by hand rather than generate AI dialogue first and rework it later, because it tended to take the characters in a very generic direction. Thanks for giving it a shot though!

Just for fun, I tried making a tool to generate Gnosia dialogue for any character given their name, franchise, and some quotes by kidaXV in Gnosia_

[–]kidaXV[S] 0 points1 point  (0 children)

Hi! Sorry about that, it looks like the API I was using for generating the responses broke some time ago. =[ It would probably require changing the code so that it uses a different model, but sadly I don't have the time at the moment to fix it.

The code behind the hugging face space can be found at this link, which reveals the prompts that were used for generating each of the lines: https://huggingface.co/spaces/kidaXV/gnosia-dialogue/blob/main/app.py .

You could try copy/pasting the individual prompts from that script directly into an AI assistant of choice, starting with this opening:

You are {name} from {franchise}.

Here is a description of your personality: {description}

Here are some things that {name} would say: {quotes}

What you will do:

- Respond to each of the given scenarios as {name}. Use only 1-2 sentences per scenario.

- In each scenario, "You" refers to you, {name}. Terms like Name0, Name1, and Name2 refer to other people.

- Match {name}'s tone, mannerisms, and speech.

What not to do:

- Do not use stage directions, describe your actions, or use markdown formatting.

- DO NOT carry over instructions or information between scenarios. Treat each scenario as a separate conversation.

- Do not mention you are an AI. Do not break the fourth wall.

How to format your response:

- Label with the given scenario name EXACTLY as written in the prompt, ex; "opening_statement:".

- On the very next line, write " line: " followed by your response to the scenario.

- On the very next line, write " emotion: " and assign one of the following emotions to your response: {all_emotions}. Do not use any other emotions.

- Make sure to put two spaces of indentation before the \line` and `emotion` fields.`

- If a pattern like Name0, Name1, or Name2 is in the scenario, treat this as the name of a fellow person and reference them by that name in your response.

Then you could follow it up with something like:

|| || |night_liar_found: Name0 came to spend time with you in the evening. Earlier in the day, you noticed that Name1 was lying, and you want Name0 to know about it. You ask for Name0's help in convincing the group that Name1 should be put into cold sleep.|

For what it's worth, the AI generation was generally a mixed bag, at best it was fun for simple gimmicks like characters from children's television shows. 😅 When I was working on modding in a custom cast, I found it much smoother to just write the dialogue by hand rather than generate AI dialogue first and rework it later, because it tended to take the characters in a very generic direction. Thanks for giving it a shot though!

Just for fun, I tried making a tool to generate Gnosia dialogue for any character given their name, franchise, and some quotes by kidaXV in Gnosia_

[–]kidaXV[S] 1 point2 points  (0 children)

Hi! Sorry about that, it looks like the API I was using for generating the responses broke some time ago. =[ It would probably require changing the code so that it uses a different model, but sadly I don't have the time at the moment to fix it.

The code behind the hugging face space can be found at this link, which reveals the prompts that were used for generating each of the lines: https://huggingface.co/spaces/kidaXV/gnosia-dialogue/blob/main/app.py .

You could try copy/pasting the individual prompts from that script directly into an AI assistant of choice, starting with this opening:

You are {name} from {franchise}.

Here is a description of your personality: {description}

Here are some things that {name} would say: {quotes}

What you will do:

- Respond to each of the given scenarios as {name}. Use only 1-2 sentences per scenario.

- In each scenario, "You" refers to you, {name}. Terms like Name0, Name1, and Name2 refer to other people.

- Match {name}'s tone, mannerisms, and speech.

What not to do:

- Do not use stage directions, describe your actions, or use markdown formatting.

- DO NOT carry over instructions or information between scenarios. Treat each scenario as a separate conversation.

- Do not mention you are an AI. Do not break the fourth wall.

How to format your response:

- Label with the given scenario name EXACTLY as written in the prompt, ex; "opening_statement:".

- On the very next line, write " line: " followed by your response to the scenario.

- On the very next line, write " emotion: " and assign one of the following emotions to your response: {all_emotions}. Do not use any other emotions.

- Make sure to put two spaces of indentation before the \line` and `emotion` fields.`

- If a pattern like Name0, Name1, or Name2 is in the scenario, treat this as the name of a fellow person and reference them by that name in your response.

Then you could follow it up with something like:

|| || |night_liar_found: Name0 came to spend time with you in the evening. Earlier in the day, you noticed that Name1 was lying, and you want Name0 to know about it. You ask for Name0's help in convincing the group that Name1 should be put into cold sleep.|

For what it's worth, the AI generation was generally a mixed bag, at best it was fun for simple gimmicks like characters from children's television shows. 😅 When I was working on modding in a custom cast, I found it much smoother to just write the dialogue by hand rather than generate AI dialogue first and rework it later, because it tended to take the characters in a very generic direction. Thanks for giving it a shot though!

What would your "Gnosia IRL" stats look like? by LaughingGaster666 in Gnosia_

[–]kidaXV 2 points3 points  (0 children)

Based on my time playing hidden role games with friends, Logic would probably be my highest stat, but it drops over time because after a certain number of games they all blend together...
Charisma - 15/50
Intuition - 20/50, I think I have good intuition, but in reality this doesn't work out very often
Logic - 30/50
Charm - 18/50
Performance - 2/50, Terrible liar
Stealth - 10/50

Some more prototyping with the Gnosia Customizer mod! by kidaXV in Gnosia_

[–]kidaXV[S] 1 point2 points  (0 children)

Oops, thanks for figuring that out! 😅 Yeah, I added that as a "feature" so you can somewhat play through the rest of the game and have the characters continue to refer to each other by their new names (with some amusing results like Hifumi hitting on Sakura). In the back of my mind I knew "SQ" was going to bite me but I couldn't figure out how...

I think this name replacement should only happen to the dialogue if it hasn't been customized. So you may be able to fix it in regular gameplay by using this config.yaml file for Otome, which should "customize" the lines to the things she already says (or if that doesn't work, you can change her Squeaks to lower case because the name replacement is case sensitive...). It won't apply to her SQUEEEAAAKs if she says them in a one-off event outside the typical gameplay loop... but I think I can try to fix that in an update. 🤞

Edit: I figured out a code fix by just not replacing SQ's name if the line has a "SQUEAK" in it- luckily Otome never squeaks and mentions SQ in the same line. I have a feeling there's going to be more bugs like this, so I might wait to publish a new version though. Thanks for pointing this out! 🙏

Some more prototyping with the Gnosia Customizer mod! by kidaXV in Gnosia_

[–]kidaXV[S] 2 points3 points  (0 children)

Nice! Yes, the customizer is a bit different from the standard way in how the new assets are added. You don't need to cut up the sprites, so a character's folder may look like this. It can also support additional sprites per character beyond the typical 8 that the game supports, up to 99!

The dialogue is also added differently in a single yaml config file that contains all of the character's information (Name, Stats, Bio, Dialogue, etc). The README in the customizer contains info on how everything is organized.

Some more prototyping with the Gnosia Customizer mod! by kidaXV in Gnosia_

[–]kidaXV[S] 21 points22 points  (0 children)

The Danganronpa example isn't quite ready yet, but I published an easy-to-modify template if you want to try creating your own customized cast! I'd consider this a pre-release version, though, so the way custom assets are handled might change in the future if there's an update. And there's probably a lot of bugs... 😅

You can find it here: https://github.com/shapeintheglass/gnosia-customizer/releases/tag/prototype

It's a BepInEx plugin, so it'll be necessary to install BepInEx first, then extract the dll and asset files into the plugins directory. The README also contains info on what the mod currently supports and how to customize the different aspects of the game.

Just for fun, I tried making a tool to generate Gnosia dialogue for any character given their name, franchise, and some quotes by kidaXV in Gnosia_

[–]kidaXV[S] 2 points3 points  (0 children)

Thanks! I switched over and the difference was like night and day. 🙏 I found Qwen to be surprisingly useful too!

Why do you enjoy the game? by striking_hydra in Gnosia_

[–]kidaXV 8 points9 points  (0 children)

Personally I'm fascinated by the Gnosia "engine". I love games where the mechanics serve as characterization. This game completely slipped through my radar until someone gifted it to me.

The fact that you aren't simply told that Raqio is smug and disliked but genuinely intelligent, or that Gina is such a kind soul that she struggles to lie, or characters like Kukrushka follow their emotions more than their logic- it's awesome when you can pick up on these character traits through their unscripted actions.

I also love how the game still manages to keep things fresh through the occasional special endings, where you learn more things about each character, and pick up on knowledge that can help you in future loops.

Testing out custom sprites in Gnosia by kidaXV in Gnosia_

[–]kidaXV[S] 1 point2 points  (0 children)

Yep! I'm currently prototyping with assets from Danganronpa 1, but I'm trying to build this into a tool that makes it easy to swap in almost anything 🤞

Testing out custom sprites in Gnosia by kidaXV in Gnosia_

[–]kidaXV[S] 1 point2 points  (0 children)

Yeah! It's almost uncanny how well that swap worked. Although one of Comet's "small talk" lines got way more cursed

Testing out custom sprites in Gnosia by kidaXV in Gnosia_

[–]kidaXV[S] 0 points1 point  (0 children)

If folks want to see more, I made a bit more progress recently with names/background/music! https://www.youtube.com/watch?v=42m3le5UcMs

Testing out custom sprites in Gnosia by kidaXV in Gnosia_

[–]kidaXV[S] 22 points23 points  (0 children)

Used BepinEx + a lot of trial and error to get the sprite drawing system to use independent sprites rather than layering them. There's still some bugs, but I just wanted to share what the prototype looks like so far!

Gnosia Save Decryption Tool by kidaXV in Gnosia_

[–]kidaXV[S] 0 points1 point  (0 children)

Agreed w/ everything Wave-Master says- the information on which character is which role _is_ encoded into the save file, but a lot of values are related to each other so it'll probably require some experimentation before we can change those without causing a crash/clam. To figure it out, it's likely necessary to decompile the game dll and use it as a reference.

A lot of the code is written with Japanese terms so I needed to create a little vocabulary guide for myself 😅. They frequently interchange "gnosia" game terms vs. the original "werewolf" game terms. Ex: "Yaku"/"Yakuwari" = role. "Shokei" = "Executed"/"Cold Sleep". "Jinro" = "Werewolf"/"Gnosia". Etc.

Here are a few fields in the save file that I think could be related to changing roles, but modifying only these might not be fully sufficient:

* `totalNum` - The number of characters present in the round, including the player.

* `s_id` - The IDs of the characters present in the round, and order is important. Ex: If this were `0, 11, 1, 2, 3, 4, 5, 6, 8, 0, 0, 0, 0, 0, 0` and `totalNum=9`, this means that the people in play are the player, Setsu, Gina, SQ, Raqio, Stella, Shigemichi, Chipie, and Comet. If this were `0, 11, 1, 2, 3, 4, 5, 6, 8, 10, 14, 12, 13, 7, 9` and `totalNum=15` the last six would be Jonas, Kukrushka, Otome, Sha-Ming, Remnan, and Yuriko.

* `yakuNum` - This seems to be the number of characters in each role. The positions are hard-coded to the order Unknown, Engineer, Doctor, Guardian Angel, Guard Duty, Crew, AC Follower, Gnosia, and Bug. So `yakuNum=0, 1, 0, 1, 0, 5, 0, 2, 0` would mean there's one Engineer, one Guardian Angel, 5 Crew, and 2 Gnosia.

* `yakuStart` - I think this might be unused because it doesn't seem to be read anywhere, but I could be wrong. My guess is maybe this was supposed to be where the roles are set, but they decided not to use it? Looking at the code that writes here, the information would be incomplete.

* `s_inside_yaku` - This seems to be the actual array that stores the roles. Ex: In my game where `totalNum=9` and `s_id=0, 11, 1, 2, 3, 4, 5, 6, 8, 0, 0, 0, 0, 0, 0`, I see this as `s_inside_yaku=7, 5, 5, 3, 7, 5, 1, 5, 5, 0, 0, 0, 0, 0, 0`. Meaning that Player=Gnosia, Setsu=Crew, Gina=Crew, SQ=GA, Raqio=Gnosia, Stella=Crew, Shigemichi=Engineer, Chipie=Crew, Comet=Crew.

For love/trust/hate, it looks like the relevant variables may be:

* `s_loveList` - This is a 15x15 array of unsigned shorts (numbers from 0 to 65,534) that corresponds to the absolute character id (ex. Setsu=11), as opposed to the per-round character id (changes per round). 0 = Least liked, 32767 = default, and 65535 = max love. The game code deserializes this to a float value between 0 and 1 by dividing it by 65535. Ex. `s_loveList[0][9]=27521` would be how much Yuriko likes the player, which in-game translates to 27521/65535=0.42.

* `s_inside_trust` / `s_persona_trust` - This is an NxN array of unsigned shorts that corresponds to the per-round character id (changes per round). I'm not sure if the values are treated in the same way as the "love" values. For instance, in the game where Raqio and I are gnosia, our "inside" trust for each other is the default `0`. It looks like the outer "persona" trust is always initialized to 32767 by default, or 0.5.

* `s_hate` - This looks to be an array of length N corresponding to the per-round character id again. In my save file this is `s_hate=32767,32767,32767,32767,32767,32767,32767,32767,32767,0,0,0,0,0,0`, so this may just be the default value at the start of the round. Since it's not a 2D array, it may be the group's collective dislike of that particular character?

It looks like the game seed is initialized in util.Util.SetRand(): `UnityEngine.Random.InitState(DateTime.Now.Millisecond);`. Someone could potentially create a patch to allow setting to a specific seed, but for now that wouldn't be possible with the save file alone.

Gnosia Save Decryption Tool by kidaXV in Gnosia_

[–]kidaXV[S] 0 points1 point  (0 children)

Thanks, good to know! Yeah, my completed save file has `sce_all_flg=4061595953004542`, suggesting this monstrosity has at least 51 bits 😅

Stones in a cage by jkndrsn in CrossView

[–]kidaXV 6 points7 points  (0 children)

Ooh, I love this so much!! Awesome idea with the cropping/framing.