Skip to main content

On Sale: GamesAssetsToolsTabletopComics
Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

Voice Line Garment Trigger Keys List

A topic by Zora_Zebra created Apr 10, 2023 Views: 311 Replies: 5
Viewing posts 1 to 4
(1 edit)

Hi!  We were talking about it in another thread but I feel like this is a useful enough resource it will be nice to have it in its own topic.

I'd love an official, updated (1.9) list of all the garment-specific wav files in the game, and for each wav, which garment names key to it.

If you don't know what I mean, please see here for a list of keys graciously provided by stripe6499 for the 1.8 version of the game, now out of date.

Thank you!

Developer(+1)

The list of garment voice lines hasn't changed, but here it is:

undress, undressHat, undressShirt, undressSkirt, undressPants, undressShorts, undressDress, undressUndies, undressBra, undressStockings, undressShoes, undressModesty, undressTop, undressBottom

As for which clothing names triggers which line, it's not as straightforward as a list. It's a bunch of ordered string matching checks that get it right most of the time, but not always. I'll just post the code here.

public void playUndressVoice(Player player, Clothing clothing) {

    PlayerVoiceData.VoiceEventType eventType = PlayerVoiceData.VoiceEventType.undress;

    if(clothing != null) {

      String clothingName = clothing.getName().trim().toLowerCase();

      if (clothingName.contains("shirt") || clothingName.contains("blouse")) {

        eventType = PlayerVoiceData.VoiceEventType.undressShirt;

      } else if (clothingName.contains("skirt")) {

        eventType = PlayerVoiceData.VoiceEventType.undressSkirt;

      } else if (clothingName.contains("pants") || clothingName.contains("trousers")) {

        eventType = PlayerVoiceData.VoiceEventType.undressPants;

      } else if (clothingName.contains("shorts")) {

        eventType = PlayerVoiceData.VoiceEventType.undressShorts;

      } else if (clothingName.contains("dress") || clothingName.contains("gown") || clothingName.contains("robe")) {

        eventType = PlayerVoiceData.VoiceEventType.undressDress;

      } else if (clothingName.contains("panties") || clothingName.contains("undies") || clothingName.contains("bloomers") || clothingName.contains("knickers") || clothingName.contains("thong") || clothingName.contains("briefs") || clothingName.contains("g-string") || clothingName.contains("loincloth")) {

        eventType = PlayerVoiceData.VoiceEventType.undressUndies;

      } else if (clothingName.contains("bra") || clothingName.contains("corset") || clothingName.contains("bustier") || clothingName.contains("bikini top") || clothingName.contains("halter top")|| clothingName.contains("bandeau")) {

        eventType = PlayerVoiceData.VoiceEventType.undressBra;

      } else if (clothingName.contains("stockings") || clothingName.contains("pantyhose") || clothingName.contains("socks") || clothingName.contains("knee-highs") || clothingName.contains("tights") || clothingName.contains("body stocking")) {

        eventType = PlayerVoiceData.VoiceEventType.undressStockings;

      } else if (clothingName.contains("shoes") || clothingName.contains("boots") || clothingName.contains("slippers") || clothingName.contains("sandals") || clothingName.contains("sneaker")) {

        eventType = PlayerVoiceData.VoiceEventType.undressShoes;

      } else if (clothingName.contains("modesty")) {

        eventType = PlayerVoiceData.VoiceEventType.undressModesty;

      } else if (clothingName.contains("top") || clothingName.contains("sweater") || clothingName.contains("jacket") || clothingName.contains("coat") || clothingName.contains("vestments") || clothingName.contains("breastplate")) {

        eventType = PlayerVoiceData.VoiceEventType.undressTop;

      } else if (clothingName.contains("bottom") || clothingName.contains("leggings")) {

        eventType = PlayerVoiceData.VoiceEventType.undressBottom;

      } else if (clothingName.contains("hat") || clothingName.contains("veil") || clothingName.contains("headdress") || clothingName.contains("helmet") || (clothingName.contains("head") && clothingName.contains("scarf"))) {

        eventType = PlayerVoiceData.VoiceEventType.undressHat;

      }

    }

    if(!player.getPlayerVoiceData().hasVoiceEvent(eventType)) {

      eventType =  PlayerVoiceData.VoiceEventType.undress;

    }    

    playVoice(player, eventType, true);

  }

(2 edits)

Thanks so much Eldricus.  I'm guessing that if a key fails to match, speech defaults to a normal "undress" line.

I don't speak code, but it looks like certain keys match to certain event types, which I assume in turn trigger the voice lines of the same name:

undress = anything not caught by other event lines
undressShirt = shirt, blouse
undressSkirt = skirt
undressPants = pants, trousers
undressShorts = shorts
undressDress = dress, gown, robe
undressUndies = panties, undies, bloomers, knickers, thong, briefs, g-string, loincloth
undressBra = bra, corset, bustier, bikini top, halter top, bandeau
undressStockings = stockings, pantyhose, socks, knee-highs, tights, body stocking
undressShoes = shoes, boots, slippers, sandals, sneaker (sic)
undressTop = top, sweater, jacket, coat, vestments, breastplate
undressBottom = bottom, leggings
undressHat = hat, veil, headdress*, helmet, head scarf

*EDIT: in 1.9, 'headdress' will get picked up earlier in sequence by 'dress'.  Do not use

Very much appreciate your time in sharing what's behind the curtain.  This gives me more fuel for creating voice lines!  And thank you especially for incorporating my suggestions  :)  Work on my custom opponents continues ...

Developer(+1)

That's the gist of it.  The checks happen in order, and even a partial match is a match.  So "nightgown" gets picked up by "gown", which is good, and "bracers" gets picked up by "bra", which is bad. (Sorry about that, Rosie. It's fixed now.)

Aha!  That makes good sense, and also solves a problem I was having with a very nonstandard character.  Thanks for the additional clarification!

(+1)

Heh, I got confused for a while when "headdress" fed back the line to my character's robe .... but of course headdress gets picked up by "Dress" so it makes sense.  I changed the key to helmet which works well enough :D