Mod RPGM Sana Revamped [v0.1 Test, v0.1 Light Version] [WIP] [DevLog Thread]

5.00 star(s) 3 Votes

Big Chingus

Member
Nov 20, 2022
136
107
Wip for Sana's side view CG
What do you guys think?
View attachment 3980880 View attachment 3980881
Little bit too thicc on the front of the thighs, thus the over exaggerated rotundness lessens the sensuality of an extremely curvy but still fairly realistic depiction of anatomic proportions, the line of dark shading separating her upper and lower torso is a bit too clean perhaps, it sections it off kind of abruptly to no fault of yours since the og art also had it, but a softer more gradual change could perhaps express the shape better, a bit of highlight on the right leg like in the og pic would be nice to break up the monotomy of the shade, all in all great work
 

Ryuna_the_2nd

New Member
Aug 16, 2024
13
110
Little bit too thicc on the front of the thighs, thus the over exaggerated rotundness lessens the sensuality of an extremely curvy but still fairly realistic depiction of anatomic proportions, the line of dark shading separating her upper and lower torso is a bit too clean perhaps, it sections it off kind of abruptly to no fault of yours since the og art also had it, but a softer more gradual change could perhaps express the shape better, a bit of highlight on the right leg like in the og pic would be nice to break up the monotomy of the shade, all in all great work
I see! Ill adjust the thighs and shade it in like the OG, something was bordering me, and maybe thats it haha
I wasnt sure if i wanted to keep the shading on the leg as is, but seeing as someone noticed, ill fix it up
Thnx for the feedback
 

Cornelius REG

New Member
Sep 16, 2023
1
6
One of the best things about the way BM does boobs is the sense weight and elasticity he gives them. You made her boobs a lot bigger which I don't think is wrong, this size does look more consistant with sana's size in CGs such as the one I appended, but they do look a bit like they're magically floating now, in the CG you can tell the tits would be sagging on her belly if they weren't being lifted.
1725133054299.png
 
Last edited:

Ryuna_the_2nd

New Member
Aug 16, 2024
13
110
One of the best things about the way BM does boobs is the sense weight and elasticity he gives them. You made her boobs a lot bigger which I don't think is wrong, this size does look more consistant with sana's size in CGs such as the one I appended, but they do look a bit like they're magically floating now, in the CG you can tell the tits would be sagging on her belly if they weren't being lifted.
View attachment 3986902
Haha thanks but font worry about the sagginess
The one i showed is her with her robe on, since it always looks tight, i have it where its pulling her tits up

The alt where she doesnt have the robe covering her tits is where ill make her tits saggy, i love big breasts that sag

Ex of the CG that ill have her breasts saggy:
remember that i havent shown of ALL my CGs yet
1000003268.jpg
 

madeupfakery2

Newbie
Jun 28, 2021
36
51
Haha thanks but font worry about the sagginess
The one i showed is her with her robe on, since it always looks tight, i have it where its pulling her tits up

The alt where she doesnt have the robe covering her tits is where ill make her tits saggy, i love big breasts that sag

Ex of the CG that ill have her breasts saggy:
remember that i havent shown of ALL my CGs yet
View attachment 3996715
I like what you been doing, and I'm onboard with extra thick Sana
 

tygct

Member
Jun 6, 2017
140
714
Status Update
Hey hey, I've been on vacation these past few weeks and I've taken the opportunity to disconnect a bit from both my IRL job and the mod.

I've come back this week and before getting into the mod system, I've spent this weekend improving the tools I use to make the mod.

I've discovered that someone made a Visual Studio Code extension (better than the shitty self-made "extension" I was using until now) that greatly improves the workflow when creating games in RPG Maker, so far I was using a small Ruby script that I called with a custom extension I made in the past, which loads the game scripts recursively so the engine could process them, nothing mindblowing, I have already included this extension in my setup and it works wonderfully.

extension.png

What you see in this picture is the mod's source scripts and folders, I'm allowed to move them around, create and delete easily and organize them into subfolders.

I've also made a Visual Studio Code task that automates the creation of a game release with just two clicks, plus mkxp-z allows me to release the game on both Linux and Windows, so it's possible in the future the game can be played on both platforms.

tasks.png

In the last devlog, I talked about the mod menu, specifically:
1. Implement a database where mods (and the base game) will save the contents that are added to the game to allow overwriting data
2. Make the mod menu apply the changes to the mod manager when the user exits the menu so the database is rebuilt

I almost finished the functionality of both of these features before I went on vacation, I was planning this "devlog" would be about this topic and about the database but I found a critical design flaw in the mod system while I was away, which I confirmed when I came back, this flaw breaks the ability to merge/overwrite packages when you enabled/disabled a few of them in the mod menu, I have redesigned the way mod packages are created and once I implement the changes it should be functional, so you will be able to enable/disable mods as many times as you want since the database will be rebuilt everytime the load order changes.

Once I get this working I'll share a devlog talking about the mod database and how all of this is handled internally, which hopefully if nothing goes wrong it should be next week (y)
 

Ryuna_the_2nd

New Member
Aug 16, 2024
13
110
Status Update
Hey hey, I've been on vacation these past few weeks and I've taken the opportunity to disconnect a bit from both my IRL job and the mod.

I've come back this week and before getting into the mod system, I've spent this weekend improving the tools I use to make the mod.

I've discovered that someone made a Visual Studio Code extension (better than the shitty self-made "extension" I was using until now) that greatly improves the workflow when creating games in RPG Maker, so far I was using a small Ruby script that I called with a custom extension I made in the past, which loads the game scripts recursively so the engine could process them, nothing mindblowing, I have already included this extension in my setup and it works wonderfully.

What you see in this picture is the mod's source scripts and folders, I'm allowed to move them around, create and delete easily and organize them into subfolders.

I've also made a Visual Studio Code task that automates the creation of a game release with just two clicks, plus mkxp-z allows me to release the game on both Linux and Windows, so it's possible in the future the game can be played on both platforms.

In the last devlog, I talked about the mod menu, specifically:
1. Implement a database where mods (and the base game) will save the contents that are added to the game to allow overwriting data
2. Make the mod menu apply the changes to the mod manager when the user exits the menu so the database is rebuilt

I almost finished the functionality of both of these features before I went on vacation, I was planning this "devlog" would be about this topic and about the database but I found a critical design flaw in the mod system while I was away, which I confirmed when I came back, this flaw breaks the ability to merge/overwrite packages when you enabled/disabled a few of them in the mod menu, I have redesigned the way mod packages are created and once I implement the changes it should be functional, so you will be able to enable/disable mods as many times as you want since the database will be rebuilt everytime the load order changes.

Once I get this working I'll share a devlog talking about the mod database and how all of this is handled internally, which hopefully if nothing goes wrong it should be next week (y)
Oh man, i love seeing the dev logs, and welcom back from your vacation!
Amazing to hear the progress will be double the speed, cant wait to see more progress if it comes out next week!

I constantly have had overtime at my job for the last 3 months (especially having to work on the weekend which sucks) so my progress has slowed down
Im wanting to add more breast grabbing for Sana's standing stills and work on editing more CGs later when im free
 

tygct

Member
Jun 6, 2017
140
714
Mod Support Devlog 6: Mod System Database

Hi guys, I should have shared this last week like I said I was going to but I did not find enough time to fully write this post, as you can see the post is kinda long so bear with me.

Like I said here:
So basically, what is left to do is:
1. Implement a database where mods (and the base game) will save the contents that are added to the game to allow overwriting data
2. Make the mod menu apply the changes to the mod manager when the user exits the menu so the database is rebuilt
3. Handle save files with missing mods (ongoing)
4. Redirect all RPG Maker functions to use the mod database, instead of the vanilla database (ongoing)
5. Adapt the game interpreter (used by the game to process an event) to allow processing an event contents using a mod context and/or implement functions to interact directly with the mod database, like moving the player to a modded map, add a mod item, etc... (ongoing)
This devlog will be the last one about the mod system before the test version v0.2 release because with this new addition the core parts of the mod system are finally finished (Points 1 and 2) and the system is working exactly like I wanted to.
What is left to do is 3, 4, and 5 which will be done gradually as new versions are worked on.

This has been possible thanks to the implementation of the Mod System Database, this database is a deeper and more flexible implementation of the original RPG Maker's database which every RPG Maker games has, it allows the system to modify existing data and also insert new data in the form of packages, but before I dig in the functionality of this feature, I'm going to explain what a package is, I've already talked about this in a previous devlog but it was not completed at that time.

What is a mod package?

A "mod package" is basically the final product of a modification for the game, in other words, the distribution version of a mod which gets publicly shared.

These mod packages are stored inside the game's mods folder, and each of them has an unique ID that (uniquely) identifies each single object the package provides inside the game.

These mod packages are JSON files that enables a folder to act as a mod folder so the mod system can identify them when scanning the mods folder directory.

Here's an example of a mod package:
JSON:
{
    "mod_id": "john_doe_my_first_mod",
    "mod_version": "1.0.0",
    "mod_authors": [
        "John Doe"
    ],
    "mod_name": "My First Mod",
    "mod_description": "This is my first mod",
    "mod_requirements": [],
    "mod_url": "https://f95zone.to/",
    "mod_need_restart": false
}
The only mandatory information that a mod package must include is the "mod_id" attribute, this ID is used by the mod system to identify the package, in case there is another mod package that shares the same ID it will overwrite the first one (in alphabetical order) and all records from the first one will be lost.

It is very important this mod ID is not modified, during development, otherwise it will cause data-loss loading a save with a previous version of the mod, because this ID will also be used for data persistence between save games.

The "mod_need_restart" attribute is something that I'll talk about later in this devlog, the other ones are pretty much self-explanatory.

Now, when a mod package is scanned, their records are created, these "mod records" are the files that exists inside the mod package folder which are processed to create game objects that are added to the mod's database, here's some mod records files:
  • Scripts/*.rb -> Represents a script file
    • These scripts are evaluated and added to the game's code.
  • Data/Items.rvdata2 -> This file contains a list of item objects
    • These item objects can be new items or modifications of existing items
  • Graphics/**/*.png -> Represents a graphic image file
    • For example: Graphics/Pictures/Sana Standing.png
  • Translations/*.csv -> Contains translation strings for the game
    • For example: Translations/example_mod_spanish.csv
I think you can already get an idea of what a mod record is at this point.

Mod records allows the modder to specify how the list of objects each mod record provides is processed, this is done by using the RPG Maker notes attribute of some objects, for example:

RPG Maker Actors Database.jpg

This is an image of the Sana actor instance inside the RPG Maker database. On the notes tab ("Nota" in spanish) you can see a tag which will tell the mod system which package is overwriting.

In this case "sana" is the base game package so if you modify the actor (for example, changing the initial level) and create a mod package with this modified file, the base game actor for Sana will be replaced with this new one.

In case there is no tag inside the note, it will be treated as a new actor inside the mod's database and the package ID will be the mod ID specified inside the mod package JSON file.

There are two ways of specifying a package: <pkg>PACKAGE_NAME</pkg> and <pkg PACKAGE_NAME/>, if there's two or more tags the last one will be used.

There is also some attributes that, in certain conditions, will be need to be modified using the notes attribute, for example: the class, the initial equipment, but only in case you want to use a custom class or custom equipment that does not exists in the base game package, otherwise you can just change the value (we'll talk more about this later in the development, as I work on the point 4 above)

But here is where we found a hard limitation of RPG Maker, the majority of records will support adding new objects or modifying existing ones, like for example, the items, the actors, the weapons, the maps, the events, etc... but, there are some records that won't support this behavior, because it is not possible to explicitly specify which objects they are overwriting, mainly because they lack of a note attribute, for example, animations (not sex animations), system, graphics, audio files... So I decided that, to not make things more complicated than they need to be, for these specific packages the best solution is to force each single mod package to overwrite the base game package (sana), let me explain this with an example, if mod_a adds a new image file, lets say "test_image.png" and mod_b also adds a new image file with the same name, mod_b will end up overwriting mod_a image file, even if this was not an intended modification.

What is the mod database?

Now that I explained what a mod package is, all objects any mod package provides are stored in the mod system database, this mod database will be used by the game to request data that may have been modified by mod packages, for example: a game map, a custom event or even a translation line.

This mod database is used directly by the mod manager menu, each time the mod manager performs a modification on a mod package, like changing the current status or its priority and the changes are saved, the mod database is rebuilt to reflect these changes, so the user will be allowed to enable or disable any mod package without having to restart the game*, obviously you will be allowed to do this in the start scene (before starting a new game or loading an existing save file), and not during gameplay, mainly to avoid a lot of issues of missing game maps, graphics, etc... that ends up in crashes.

It also allows objects to merge themselves if there is a conflict, as for now, the whole object is replaced but for v1.0 I plan on changing the logic of certain objects, for example, the game maps to allow merging different mods modifying the same map instance.

I added a function to the mod system to save the current database contents into a text file for inspection, so as an example here's the contents of the mod database only with the base game package and three test mod packages I used (warning: it is a huge text):
You don't have permission to view the spoiler content. Log in or register now.

* Not applicable for certain mod packages, read below about the mod_need_restart flag.

Mod manager menu

The mod manager menu is the part of the mod system that the user interacts with, like I said before, it allows enabling/disabling mod packages and changing their priorities, so you are free to tweak the load order to whatever you want it to be.

It also allows to save the current load order as a profile and loading saved profiles, so you can share load orders with other people or restore them if you want to test different combinations.

Here's a video of the mod manager in action, I used F12 (reset key) to quickly go back to the start scene, so you'll notice some abrupt transitions.

You can notice how the image file changes everytime the mod manager rebuilds the database, as well as the window frame image, etc...

Mods that are disabled are drawn semi-transparent, enabled mods are drawn in full color.

You will notice how the right window does not display the information correctly, this will be obviously fixed in future versions since I'm planning to add a feature to the game's windows to enable / disable a word wrap mode, this will be useful not only for this window you see in the mod manager but also for the window message where the game text is shown because this will avoid cut text which it is a common problem when you translate RPG Maker games to other languages.


Current Limitations (mod_need_restart flag)

There are some limitations the mod system has that I think it is important to talk about, it is related to the mod_need_restart flag, that may exist inside a mod package JSON file.

This flag is used to notify the user that you must restart the game when enabling/disabling certain mods, but did not I say that you would not need to restart the game after enabling/disabling packages? you may ask, part of that is true BUT like I said in a previous devlog talking about scripts, I did not put any limitations when it comes to mods adding new scripts to the game, this is both a good and a bad thing because you can modify any part of the code freely but at the same time you can completely screw up the game (monkey patching for example) and cause crashes and infinite function calls that wil end up fucking up the game.

Also as I said, anyone can execute malicious code so in the future you should be careful with mods that add scripts.

I'm not saying all code is malicious, scripts are a key element to expand the game functionality and also, I already covered part of this problem in an effort to minimize the need to restart the game using the event system I created which any mod can subscribe to and execute callbacks when certain actions happens in the game (like an engine frame update, game initalization, a sex scene creation, etc...), so you probably won't have to restart the game for most mods, as long as the mods use the tools I've implemented to minimize the problem.

Still, if a mod makes drastic changes, for example a complete overhaul of the sex framework, it will be very likely you will need to restart the game in those cases.

So... What's next?

I have resumed the work on the sex framework, which it is the last big thing I need to do before v0.2 release, you will hear more things about this in future devlogs.

The Trello board (specifically the "In Progress" table) is kinda out-dated, I may need to push something for future updates, like the sex framework addons, the dirty talk system (which will be turned into an sex framework addon eventually) and the random NPCs.

Also the factions feature is not needed anymore, that was something I needed to do for the old dirty talk system, and MKXP-Z is fully implemented in the project already, so that card is already done.

The mod support card is obviously finished (duh).

Currently the mod system does not have support for the sex framework (specifically the sex animations) but I'll eventually add support for this so any artist that would like to step up and make new art for the game can do it without the need to write an script to insert their animations to the sex framework.

If you managed to read all of this big-ass wall of text I appreciate your interest... lol
 

Ryuna_the_2nd

New Member
Aug 16, 2024
13
110
Mod Support Devlog 6: Mod System Database

Hi guys, I should have shared this last week like I said I was going to but I did not find enough time to fully write this post, as you can see the post is kinda long so bear with me.

Like I said here:

This devlog will be the last one about the mod system before the test version v0.2 release because with this new addition the core parts of the mod system are finally finished (Points 1 and 2) and the system is working exactly like I wanted to.
What is left to do is 3, 4, and 5 which will be done gradually as new versions are worked on.

This has been possible thanks to the implementation of the Mod System Database, this database is a deeper and more flexible implementation of the original RPG Maker's database which every RPG Maker games has, it allows the system to modify existing data and also insert new data in the form of packages, but before I dig in the functionality of this feature, I'm going to explain what a package is, I've already talked about this in a previous devlog but it was not completed at that time.

What is a mod package?

A "mod package" is basically the final product of a modification for the game, in other words, the distribution version of a mod which gets publicly shared.

These mod packages are stored inside the game's mods folder, and each of them has an unique ID that (uniquely) identifies each single object the package provides inside the game.

These mod packages are JSON files that enables a folder to act as a mod folder so the mod system can identify them when scanning the mods folder directory.

Here's an example of a mod package:
JSON:
{
    "mod_id": "john_doe_my_first_mod",
    "mod_version": "1.0.0",
    "mod_authors": [
        "John Doe"
    ],
    "mod_name": "My First Mod",
    "mod_description": "This is my first mod",
    "mod_requirements": [],
    "mod_url": "https://f95zone.to/",
    "mod_need_restart": false
}
The only mandatory information that a mod package must include is the "mod_id" attribute, this ID is used by the mod system to identify the package, in case there is another mod package that shares the same ID it will overwrite the first one (in alphabetical order) and all records from the first one will be lost.

It is very important this mod ID is not modified, during development, otherwise it will cause data-loss loading a save with a previous version of the mod, because this ID will also be used for data persistence between save games.

The "mod_need_restart" attribute is something that I'll talk about later in this devlog, the other ones are pretty much self-explanatory.

Now, when a mod package is scanned, their records are created, these "mod records" are the files that exists inside the mod package folder which are processed to create game objects that are added to the mod's database, here's some mod records files:
  • Scripts/*.rb -> Represents a script file
    • These scripts are evaluated and added to the game's code.
  • Data/Items.rvdata2 -> This file contains a list of item objects
    • These item objects can be new items or modifications of existing items
  • Graphics/**/*.png -> Represents a graphic image file
    • For example: Graphics/Pictures/Sana Standing.png
  • Translations/*.csv -> Contains translation strings for the game
    • For example: Translations/example_mod_spanish.csv
I think you can already get an idea of what a mod record is at this point.

Mod records allows the modder to specify how the list of objects each mod record provides is processed, this is done by using the RPG Maker notes attribute of some objects, for example:


This is an image of the Sana actor instance inside the RPG Maker database. On the notes tab ("Nota" in spanish) you can see a tag which will tell the mod system which package is overwriting.

In this case "sana" is the base game package so if you modify the actor (for example, changing the initial level) and create a mod package with this modified file, the base game actor for Sana will be replaced with this new one.

In case there is no tag inside the note, it will be treated as a new actor inside the mod's database and the package ID will be the mod ID specified inside the mod package JSON file.

There are two ways of specifying a package: <pkg>PACKAGE_NAME</pkg> and <pkg PACKAGE_NAME/>, if there's two or more tags the last one will be used.

There is also some attributes that, in certain conditions, will be need to be modified using the notes attribute, for example: the class, the initial equipment, but only in case you want to use a custom class or custom equipment that does not exists in the base game package, otherwise you can just change the value (we'll talk more about this later in the development, as I work on the point 4 above)

But here is where we found a hard limitation of RPG Maker, the majority of records will support adding new objects or modifying existing ones, like for example, the items, the actors, the weapons, the maps, the events, etc... but, there are some records that won't support this behavior, because it is not possible to explicitly specify which objects they are overwriting, mainly because they lack of a note attribute, for example, animations (not sex animations), system, graphics, audio files... So I decided that, to not make things more complicated than they need to be, for these specific packages the best solution is to force each single mod package to overwrite the base game package (sana), let me explain this with an example, if mod_a adds a new image file, lets say "test_image.png" and mod_b also adds a new image file with the same name, mod_b will end up overwriting mod_a image file, even if this was not an intended modification.

What is the mod database?

Now that I explained what a mod package is, all objects any mod package provides are stored in the mod system database, this mod database will be used by the game to request data that may have been modified by mod packages, for example: a game map, a custom event or even a translation line.

This mod database is used directly by the mod manager menu, each time the mod manager performs a modification on a mod package, like changing the current status or its priority and the changes are saved, the mod database is rebuilt to reflect these changes, so the user will be allowed to enable or disable any mod package without having to restart the game*, obviously you will be allowed to do this in the start scene (before starting a new game or loading an existing save file), and not during gameplay, mainly to avoid a lot of issues of missing game maps, graphics, etc... that ends up in crashes.

It also allows objects to merge themselves if there is a conflict, as for now, the whole object is replaced but for v1.0 I plan on changing the logic of certain objects, for example, the game maps to allow merging different mods modifying the same map instance.

I added a function to the mod system to save the current database contents into a text file for inspection, so as an example here's the contents of the mod database only with the base game package and three test mod packages I used (warning: it is a huge text):
You don't have permission to view the spoiler content. Log in or register now.

* Not applicable for certain mod packages, read below about the mod_need_restart flag.

Mod manager menu

The mod manager menu is the part of the mod system that the user interacts with, like I said before, it allows enabling/disabling mod packages and changing their priorities, so you are free to tweak the load order to whatever you want it to be.

It also allows to save the current load order as a profile and loading saved profiles, so you can share load orders with other people or restore them if you want to test different combinations.

Here's a video of the mod manager in action, I used F12 (reset key) to quickly go back to the start scene, so you'll notice some abrupt transitions.

You can notice how the image file changes everytime the mod manager rebuilds the database, as well as the window frame image, etc...

Mods that are disabled are drawn semi-transparent, enabled mods are drawn in full color.

You will notice how the right window does not display the information correctly, this will be obviously fixed in future versions since I'm planning to add a feature to the game's windows to enable / disable a word wrap mode, this will be useful not only for this window you see in the mod manager but also for the window message where the game text is shown because this will avoid cut text which it is a common problem when you translate RPG Maker games to other languages.


Current Limitations (mod_need_restart flag)

There are some limitations the mod system has that I think it is important to talk about, it is related to the mod_need_restart flag, that may exist inside a mod package JSON file.

This flag is used to notify the user that you must restart the game when enabling/disabling certain mods, but did not I say that you would not need to restart the game after enabling/disabling packages? you may ask, part of that is true BUT like I said in a previous devlog talking about scripts, I did not put any limitations when it comes to mods adding new scripts to the game, this is both a good and a bad thing because you can modify any part of the code freely but at the same time you can completely screw up the game (monkey patching for example) and cause crashes and infinite function calls that wil end up fucking up the game.

Also as I said, anyone can execute malicious code so in the future you should be careful with mods that add scripts.

I'm not saying all code is malicious, scripts are a key element to expand the game functionality and also, I already covered part of this problem in an effort to minimize the need to restart the game using the event system I created which any mod can subscribe to and execute callbacks when certain actions happens in the game (like an engine frame update, game initalization, a sex scene creation, etc...), so you probably won't have to restart the game for most mods, as long as the mods use the tools I've implemented to minimize the problem.

Still, if a mod makes drastic changes, for example a complete overhaul of the sex framework, it will be very likely you will need to restart the game in those cases.

So... What's next?

I have resumed the work on the sex framework, which it is the last big thing I need to do before v0.2 release, you will hear more things about this in future devlogs.

The Trello board (specifically the "In Progress" table) is kinda out-dated, I may need to push something for future updates, like the sex framework addons, the dirty talk system (which will be turned into an sex framework addon eventually) and the random NPCs.

Also the factions feature is not needed anymore, that was something I needed to do for the old dirty talk system, and MKXP-Z is fully implemented in the project already, so that card is already done.

The mod support card is obviously finished (duh).

Currently the mod system does not have support for the sex framework (specifically the sex animations) but I'll eventually add support for this so any artist that would like to step up and make new art for the game can do it without the need to write an script to insert their animations to the sex framework.

If you managed to read all of this big-ass wall of text I appreciate your interest... lol
Absolutely amazing dude, i cant wait
All that hard work and we're almost there
 
5.00 star(s) 3 Votes