What would you like me to add to the game in the next update?

  • The connection (police) mechanic. This would be a new "currency" and a new batch of upgrades.

  • More events and the possiblity for the packmakers to add some in their packs.

  • The possbility to train the skills of the girls

  • Progress the story and add story missions (mostly focused on Nicole)

  • Something else (tell me either by PM or in this thread).


Results are only viewable after voting.

Disgruntler

Well-Known Member
Game Developer
May 2, 2021
1,059
1,141
229
Dude, after playing your game, I want to make one myself.

But I have a problem. How do you create the file for every girl in [Girlpacks]?

What should the corresponding code be?

I want to make a game similar to fm2022
Tobe made the code for this a long time ago and I've not changed it--but I can tell you the broad strokes on how it works.

First, there's the GirlClass class that contains the data structure for the girl. This just uses unity's library to read the initial values from the JSON directly for each property. For example, the property GirlClass.moneyCost is in the JSON as "moneyCost": 300, or whatever--it's just as easy as making sure the name matches the property. For internal-only properties, you just don't put those in JSONs, and you don't tell anyone they exist.

Handling the videos is easy as well. Because the name of the girl and the name of the folder must be identical, you just have the code look into the directory like StaticStrings.PATHTOGIRLPACKS + girl.name + StaticStrings.VIDEOFOLDER + StaticStrings.SEXFOLDER + StaticStrings.BACKVAGFOLDER where the properties of StaticStrings are defined in their own static class. It then pulls a random video from the file list there (checking if that was the last video played but that's neither here nor there.)

That leaves the portraits. In initialization, it runs co-routines that load the images into unity's sprite objects for each of the 6 portrait types, and then stores them. If a portrait is missing, I then added code that has it set the references for missing portraits to the level below, ensuring that all 6 portraits have a representative in the code (and therefore doesn't have to check every type it calls a portrait). This doesn't work with Nicole, however, because she operates under completely different rules, accessing Unity's resource system.

Once you have that structure in place, it goes into the Girlpacks directory---and it checks every subdirectory for the JSON, and if it's missing, it gives an error and won't create that girl. If it is and the JSON has the wrong name, it gives an error and won't create that girl. Otherwise, it goes in and creates it.

To keep track of it, it just using a List<Girlclass> as a master list of the girls in the game. Girl gets created, added to the list, rinse repeat.

There is a snag though. You do not want to use this master list as your in-game data. In order to get around this, you have a clone method that creates a copy of the girl as a new object, and you use this as your recruited girl data. Creating a clone is important--if you just go recruitedGirlsList.Add(masterList[index]) you'll toss a reference to the master data on your recruited list and that means any changes you make to the girl (including gaining stats in the booth or other changes over time) will copy over to your master list, and on a restart this means that your girls will not 'start from scratch.'

A similar thing is necessary for Scramble Mode, though my exact implementation is different from Tobe's and I had a lot of 'learning as I go' trying to get it to work, and save properly. The recruited girls in Scramble Mode save as normal, but the list of girls to be recruited needed to be saved seperately as well.

----

Now, if you want to make a game along these lines, if I may?

There is no need to reinvent the wheel! Just go into this thread, look up Tobe's posts, and you should be able to find his link to the 8.1 source code. Study it (the GirlClass.cs in particular, as well as RegisterGirl.cs and StaticFunctions.cs and StaticStrings.cs is where the meat of what you're looking for is) and use it as a basis of your own. Port the code over that does the loading and initialization, and leave out the part that loads data from the Girlpack's JSON.

Then you can have a second JSON it'd pull your game's specific data from, and have that in the same place the description.JSON is. Have code that can generate a new one from scratch and save it as a JSON (unity has this in its library) and badabing badaboom, you're now able to use VC girlpacks in your game.

You'll want to add an interface for selecting the location for the girlpack folder (do NOT copy VC's for this, for your own sanity TRUST ME) but other than that, bob's your uncle.

I fully support and endorse other games using VC Girlpacks as expandable user-made content for their own--I love TUSC's take on it and I do not see more games using this as a bad thing.
 
  • Heart
Reactions: GrooveDaddy

Disgruntler

Well-Known Member
Game Developer
May 2, 2021
1,059
1,141
229
Sad it isn't playable on Linux. I only use ubuntu now :/
Run a script that converts all the mp4s in girlpacks to webms using v8 for the video codec and vorbis for the audio codec.

Then, next time I do a source-code upload you can recompile that using Unity 2019 on linux and it will work. I just don't have a linux environment to do this in myself.
 

A524298690

New Member
Sep 1, 2021
4
0
11
There is no need to reinvent the wheel! Just go into this thread, look up Tobe's posts, and you should be able to find his link to the 8.1 source code. Study it (the GirlClass.cs in particular, as well as RegisterGirl.cs and StaticFunctions.cs and StaticStrings.cs is where the meat of what you're looking for is) and use it as a basis of your own. Port the code over that does the loading and initialization, and leave out the part that loads data from the Girlpack's JSON.
It helps me a lot

Thank you so so so so much!
 

bingho8

Newbie
Aug 15, 2020
37
19
82
Sorry if this was asked and answered, couldn't find it. Just started this game.

Seems you can't change NICOLE(original Mission girl) to other person, packs?, pics? or whatever) is this true?

ALSO Can you change PICTURES of Menu? Improvement?
 

Disgruntler

Well-Known Member
Game Developer
May 2, 2021
1,059
1,141
229
Sorry if this was asked and answered, couldn't find it. Just started this game.

Seems you can't change NICOLE(original Mission girl) to other person, packs?, pics? or whatever) is this true?

ALSO Can you change PICTURES of Menu? Improvement?
As CaptC said, it is not *currently* changeable.

However--the system itself is potentially modular and it's entirely possible for me to change things to 'Assistant Packs' in a similar manner to GirlPacks--though this would be a higher level of work for creators.

So my answer to this is 'no, for now.' I won't promise I will change this but I won't promise I won't.
 
  • Like
Reactions: bingho8
Apr 20, 2018
23
2
62
Screenshot from 2022-08-25 18-23-15.png




Here are pictures of my screens loading it on linux. The loading of characters can be fixed via converting the video files. I still, however, have black rectangular text boxes covering almost all of the text in the game. How do I reconcile this?
















Screenshot from 2022-08-25 18-23-30.png Screenshot from 2022-08-25 18-23-15.png Screenshot from 2022-08-25 18-23-15.png Screenshot from 2022-08-25 18-23-49.png Screenshot from 2022-08-25 18-23-41.png
 

Disgruntler

Well-Known Member
Game Developer
May 2, 2021
1,059
1,141
229
View attachment 2005094




Here are pictures of my screens loading it on linux. The loading of characters can be fixed via converting the video files. I still, however, have black rectangular text boxes covering almost all of the text in the game. How do I reconcile this?
















View attachment 2005096 View attachment 2005097 View attachment 2005094 View attachment 2005098 View attachment 2005099
Oof.

I have no idea!

The best I can do is upload source code and let you unity it into a linux version.
 

A524298690

New Member
Sep 1, 2021
4
0
11
Tobe made the code for this a long time ago and I've not changed it--but I can tell you the broad strokes on how it works.
Dude, some problems now...

I copied the code and made some modifications..

...↓code↓...

public List<GirlClass> girls = new List<GirlClass>();

GirlClass Lee = new GirlClass();
...

Lee = SaveWithJson.Instance.LoadFromJsonFile<GirlClass>("/StreamingAssets/GirlpacksA/" + directoryInfo.Name + "/JSON_data/Description.json");//RegisterGirlFromJsonFile

girls.Add(Lee);

Debug.Log(girls[0]);

Debug.Log(girls[0].name);
...

【theUnityConsole】

GirlClass
UnityEngine.Debug:Log (object)
Aria Lee
UnityEngine.Debug:Log (object)


My expectation is: Debug.Log(girls[0])→“Aria Lee” instead of “GirlClass”

I want to find a designated girl by naming so how should I modify the code?T T
 

ThroneAweigh

Newbie
Aug 7, 2018
65
128
183
Dude, some problems now...

I copied the code and made some modifications..

...↓code↓...

public List<GirlClass> girls = new List<GirlClass>();

GirlClass Lee = new GirlClass();
...

Lee = SaveWithJson.Instance.LoadFromJsonFile<GirlClass>("/StreamingAssets/GirlpacksA/" + directoryInfo.Name + "/JSON_data/Description.json");//RegisterGirlFromJsonFile

girls.Add(Lee);

Debug.Log(girls[0]);

Debug.Log(girls[0].name);
...

【theUnityConsole】

GirlClass
UnityEngine.Debug:Log (object)
Aria Lee
UnityEngine.Debug:Log (object)


My expectation is: Debug.Log(girls[0])→“Aria Lee” instead of “GirlClass”

I want to find a designated girl by naming so how should I modify the code?T T
The first debug log is going to return the class because it's a list of class instances. You should be able to search by name (if girls.name == string) and return the values that fit it. I might have an old copy of my attempt laying around somewhere and I can copy-paste my search code in here when I'm home from work.
 

ThroneAweigh

Newbie
Aug 7, 2018
65
128
183
Dude, some problems now...

I copied the code and made some modifications..

...↓code↓...

public List<GirlClass> girls = new List<GirlClass>();

GirlClass Lee = new GirlClass();
...

Lee = SaveWithJson.Instance.LoadFromJsonFile<GirlClass>("/StreamingAssets/GirlpacksA/" + directoryInfo.Name + "/JSON_data/Description.json");//RegisterGirlFromJsonFile

girls.Add(Lee);

Debug.Log(girls[0]);

Debug.Log(girls[0].name);
...

【theUnityConsole】

GirlClass
UnityEngine.Debug:Log (object)
Aria Lee
UnityEngine.Debug:Log (object)


My expectation is: Debug.Log(girls[0])→“Aria Lee” instead of “GirlClass”

I want to find a designated girl by naming so how should I modify the code?T T
Heads up, you'll need to include "using System.Text" in your search script for the StringBuilder but that only matters if you want dynamic updating on keypress.

Here's my Search function:
Code:
    void Search()
    {
            for (int j = 0; j < shopList.Count; j++) //Traverses the list of performers in shopList
            {
            if(search.Length == 1 && shopList[j].name.ToLower().StartsWith(search.ToLower())) //If user inputs a single character, jumps to the first performer with that name.
            {                                                                                  // Would otherwise look for the first instance of that character anywhere in a name.   
                    GetComponent<Girlpack_Reader>().LoadPortrait(shopList[j],girl); //Set the girl to the front
                    LoadGirlInfo(shopList[j]); //Display all relevant info
                    i = j; //int used to keep track of shop highlight
                    SideGirls(); //Function call to load portrait on either side.
                    break;
            }
            if (search.Length > 1 && shopList[j].name.ToLower().Contains(search.ToLower())) //If user enters more than one character.
            {
                GetComponent<Girlpack_Reader>().LoadPortrait(shopList[j], girl); //Same as above
                LoadGirlInfo(shopList[j]);                                  //
                i = j;                                                                //
                SideGirls();                                                       //
                break;                                                              //Same as above
            }
        }
        return;
    }
And here's what I call during the Update to use it:
Code:
        if (Input.anyKeyDown && (Input.inputString.Length != 0) && (Input.inputString != "\n") && (Input.inputString != "\b"))
        { //Verifies that the input isn't enter or backspace
            timerIsRunning = true; //all timer related things is for a function that had the text stay on screen temporarily
            if(timerIsRunning)
            {
                builder.Append(Input.inputString); //Using the System.Text Stringbuilder to add characters as they're input
                search = builder.ToString(); //Converts to whole sting
                searchTime = defaultTime; //resets fade out time
                searchBar.GetComponent<TMPro.TextMeshProUGUI>().text = search; //displays text on screen
                StopCoroutine("FadeText"); //stops the text fade out
                StartCoroutine("FadeText"); //resets the fade out
            }
            Search(); //Calls search function
        }
 
  • Like
Reactions: A524298690

A524298690

New Member
Sep 1, 2021
4
0
11
Heads up, you'll need to include "using System.Text" in your search script for the StringBuilder but that only matters if you want dynamic updating on keypress.

Here's my Search function:
Code:
    void Search()
    {
            for (int j = 0; j < shopList.Count; j++) //Traverses the list of performers in shopList
            {
            if(search.Length == 1 && shopList[j].name.ToLower().StartsWith(search.ToLower())) //If user inputs a single character, jumps to the first performer with that name.
            {                                                                                  // Would otherwise look for the first instance of that character anywhere in a name.  
                    GetComponent<Girlpack_Reader>().LoadPortrait(shopList[j],girl); //Set the girl to the front
                    LoadGirlInfo(shopList[j]); //Display all relevant info
                    i = j; //int used to keep track of shop highlight
                    SideGirls(); //Function call to load portrait on either side.
                    break;
            }
            if (search.Length > 1 && shopList[j].name.ToLower().Contains(search.ToLower())) //If user enters more than one character.
            {
                GetComponent<Girlpack_Reader>().LoadPortrait(shopList[j], girl); //Same as above
                LoadGirlInfo(shopList[j]);                                  //
                i = j;                                                                //
                SideGirls();                                                       //
                break;                                                              //Same as above
            }
        }
        return;
    }
And here's what I call during the Update to use it:
Code:
        if (Input.anyKeyDown && (Input.inputString.Length != 0) && (Input.inputString != "\n") && (Input.inputString != "\b"))
        { //Verifies that the input isn't enter or backspace
            timerIsRunning = true; //all timer related things is for a function that had the text stay on screen temporarily
            if(timerIsRunning)
            {
                builder.Append(Input.inputString); //Using the System.Text Stringbuilder to add characters as they're input
                search = builder.ToString(); //Converts to whole sting
                searchTime = defaultTime; //resets fade out time
                searchBar.GetComponent<TMPro.TextMeshProUGUI>().text = search; //displays text on screen
                StopCoroutine("FadeText"); //stops the text fade out
                StartCoroutine("FadeText"); //resets the fade out
            }
            Search(); //Calls search function
        }
Thanks a million !!!!
 

Disgruntler

Well-Known Member
Game Developer
May 2, 2021
1,059
1,141
229
Dude, some problems now...

I copied the code and made some modifications..

...↓code↓...

public List<GirlClass> girls = new List<GirlClass>();

GirlClass Lee = new GirlClass();
...

Lee = SaveWithJson.Instance.LoadFromJsonFile<GirlClass>("/StreamingAssets/GirlpacksA/" + directoryInfo.Name + "/JSON_data/Description.json");//RegisterGirlFromJsonFile

girls.Add(Lee);

Debug.Log(girls[0]);

Debug.Log(girls[0].name);
...

【theUnityConsole】

GirlClass
UnityEngine.Debug:Log (object)
Aria Lee
UnityEngine.Debug:Log (object)


My expectation is: Debug.Log(girls[0])→“Aria Lee” instead of “GirlClass”

I want to find a designated girl by naming so how should I modify the code?T T
Im assuming you mean in a user-made girlpacks folder?

Your mistake here is you're doing calls into the Resources. (Which doesn't exist in the built version and therefore requires a different call to access) Instead what you want to do (assuming this is for a third game) is:

Step one: Set up a String (folder) that contains the actual location of your girlpacks

Step two: Have a user interface that lets the user point to where the location is (so you don't have to move them from VC)

Step three: Put that into your string

Step four: PlayerPrefs.SetString("GirlPackDirectory", folder);

Step five: PlayerPrefs.Save;

Step six:
You don't have permission to view the spoiler content. Log in or register now.

And then after that you've built a master list inside your system and referencing that by name is easy sauce.
 

saucepan35

Member
Jul 30, 2018
101
378
202
Just a couple of random ideas. Just throwing them out there in case they're interesting or viable.


1.
Would it be possible to add some modifier to the random clip algorithm so that you have an increasing chance of drawing a clip you haven't seen before? Feels like the current random generator hates me at times, as I've been getting what feels like the same 3-4 clips when there should be 12+ in the category for a certain girl.


2
"MISC packs."

There's loads of hot scenes from girls who only ever did one or two scenes or only ever did softcore/solo for example. Not enough to build a pack with. Would be cool if there was some kind of gameplay device for using such scenes in the game. Could be random callgirl events (Mafia sending you "gifts" or something), or just a way to have an additional money sink by hiring a random callgirl for the night. And then have the game draw a random clip from a big folder of "disorganized" stuff). Or maybe a phonebook of booty calls/dates you could gradually build&unlock with money and influence.. or something like that.

Guess such girls could also find a use in custom Date packs, which I've seen others mention recently, if that makes it into the game at some point. Though scripting a full custom dating scenario I would assume requires way more effort both on your part to build the system, and of the packmakers.
 

Disgruntler

Well-Known Member
Game Developer
May 2, 2021
1,059
1,141
229
Just a couple of random ideas. Just throwing them out there in case they're interesting or viable.


1.
Would it be possible to add some modifier to the random clip algorithm so that you have an increasing chance of drawing a clip you haven't seen before? Feels like the current random generator hates me at times, as I've been getting what feels like the same 3-4 clips when there should be 12+ in the category for a certain girl.
There already is!


2
"MISC packs."

There's loads of hot scenes from girls who only ever did one or two scenes or only ever did softcore/solo for example. Not enough to build a pack with. Would be cool if there was some kind of gameplay device for using such scenes in the game. Could be random callgirl events (Mafia sending you "gifts" or something), or just a way to have an additional money sink by hiring a random callgirl for the night. And then have the game draw a random clip from a big folder of "disorganized" stuff). Or maybe a phonebook of booty calls/dates you could gradually build&unlock with money and influence.. or something like that.
Let me put a pin on this.

Guess such girls could also find a use in custom Date packs, which I've seen others mention recently, if that makes it into the game at some point. Though scripting a full custom dating scenario I would assume requires way more effort both on your part to build the system, and of the packmakers.
Yes... and no.
 
  • Like
Reactions: saucepan35

Shardoom

Spunkbubble
Donor
May 4, 2017
1,618
1,904
380
Disgruntler I was thinking about this new portrait100 thing...

Would it be possible to code this image to only unlock once we have maxxed not only a girls openness, but also all of her other stats? Then we could have this image be like a 'reward' image for fully upgrading a girl.

I'm envisioning a sex act image with a nice golden border around it...
 
4.40 star(s) 48 Votes