Jump to content

[XCOM 2] Mod index


Xpyke

Recommended Posts

Posted (edited)

I found a way to do a pixel-perfect seam removal, geometry-wise. It turns out it's been a weight-mismatch between the torso and the legs seam vertices all along. I'll release it when I've got it ready.
Now that I've fixed it on my end, the difference between the textures becomes more pronounced since they now display side-by-side. If anyone could take my next release and update the textures to make their seam deltas completely vanish, please send me the updated files and I'll list you with credit for the fix, thanks. Cause that part is beyond my knowledge.

Edited by SurferJay
Posted (edited)

I've updated all three of my relevant mod edits with the pixel-perfect waist seam gap removal, using the weight transfer method for a scalpel-precision fix. Enjoy the removal of waist seams that have plagued XCOM's Barebaremod-based torsos so long!

(I've also edited Claus' meaty abs' normal map's waist seam to use Moo's transition, to make it less noticeable.)

Mod authors: If you want to fix to your own torsos, check out the X2 Torso Fixer tool.

 

Edited by SurferJay
Posted (edited)

Here's a few photos that illustrate the seam fix. I think this will be a great improvement over what I've seen.

Photo 1 - Three Soldiers - Illustrates various angles of casual poses and illustrates the new smoother waist transition for Claus' meaty abs.
Photo 2 - Backside Kneeling - Illustrates the most extreme pose (kneeling) on the most susceptible seam (side/rear), showing it does not separate even in this pose.
image.png.46fb939528dc95653ab10a241cab9237.pngimage.png.5c7a645ffc937f10ac037122ef9f1c64.png

I've been looking through my old photobooth photos, and here's a sample of what you'll be saying 'sayonara' to. Good riddance!
image.png.eced579b3b0f6e5665623bf0b0c0a565.pngimage.png.54f92f36cc84ad7346667d134e1fc8ff.pngimage.png.842b37625d0d6a18cddbdd9aba9051bd.pngimage.png.c3bf6d639825ac3af69d844a02d45f2d.pngimage.png.622343b80d6c760b6afb46e18a4674cb.png

Edited by SurferJay
Posted (edited)

For future reference regarding vertex positions between the three torsos I use and Moo's legs.

Looks like the torso authors were diligent & kept the fidelity of the paired waist vertices intact. Hurray! So, yeah, the weight transfer should be all these three torsos needed.

Spoiler
import bpy
import mathutils

# ──────────────────────────────────────────────────────────────
# CONFIGURATION
MAX_PAIRING_DIST  = 0.002  # max dist to look for a paired vertex. meters (2 mm)
MAX_EQUALITY_DIST = 0.0001 # max dist to consider as equality.     meters (0.1 mm)
GROUPNAME = "deleteme" # name of vertex group the torso's waist is assigned to
VERBOSE   = True # whether we want to log or not
# ──────────────────────────────────────────────────────────────

GREEN  = "\033[92m"
YELLOW = "\033[93m"
RED    = "\033[91m"
RESET  = "\033[0m"

sel = [o for o in bpy.context.selected_objects if o.type == 'MESH']
if len(sel) != 2:
    print(f"{RED} Select exactly TWO mesh objects: torso first, legs second.{RESET}")
else:
    torso, legs = sel
    print(f"{GREEN}Torso:{RESET} {torso.name}")
    print(f"{GREEN}Legs: {RESET} {legs.name}")
    print(f"{GREEN}MAX_PAIRING_DIST:{RESET} {MAX_PAIRING_DIST:.6f}")
    print(f"{GREEN}MAX_EQUALITY_DIST:{RESET} {MAX_EQUALITY_DIST:.6f}")
    print(f"{GREEN}Vertex Group:{RESET} '{GROUPNAME}'")

    # Build KDTree from leg vertices (world-space)
    kd = mathutils.kdtree.KDTree(len(legs.data.vertices))
    for v in legs.data.vertices:
        kd.insert(legs.matrix_world @ v.co, v.index)
    kd.balance()

    # Get vertex group
    vg = torso.vertex_groups.get(GROUPNAME)
    if not vg:
        print(f"{RED} Vertex group '{GROUPNAME}' not found on {torso.name}.{RESET}")
    else:
        moved, matched, skipped = 0, 0, 0
        farthest = 0.0
        moved_indices = []

        for v in torso.data.vertices:
            try:
                weight = vg.weight(v.index)
            except RuntimeError:
                continue  # vertex not in group
            if weight <= 0.0:
                continue

            world_co = torso.matrix_world @ v.co
            co_near, idx, dist = kd.find(world_co)
            farthest = max(farthest, dist)

            if dist == 0.0:  # already perfectly aligned (shouldn't happen, due to floating point coords)
                matched += 1
                if VERBOSE:
                    print(f"  {GREEN}✔ Vertex {v.index:<5} already matches perfectly (dist={dist:.8f}){RESET}")
                    
            elif dist <= MAX_EQUALITY_DIST:
                matched += 1
                if VERBOSE:
                    print(f"  {GREEN}✔ Vertex {v.index:<5} already matches (dist={dist:.8f}){RESET}")

            elif dist <= MAX_PAIRING_DIST:
                # Move the vertex to match its nearest partner
                v.co = torso.matrix_world.inverted() @ co_near
                moved += 1
                moved_indices.append(v.index)
                if VERBOSE:
                    print(f"  {YELLOW}🔧 Vertex {v.index:<5} moved (dist={dist:.6f} m){RESET}")

            else:
                skipped += 1
                if VERBOSE:
                    print(f"  {RED}⚠ Vertex {v.index:<5} skipped (dist={dist:.6f} m exceeds MAX_PAIRING_DIST){RESET}")

        bpy.context.view_layer.update()

        # ─── Summary ────────────────────────────────────────────
        print()
        print(f"{GREEN}✔ Seam check completed{RESET}")
        print(f"   {GREEN}{matched:>4}{RESET} already matched")
        print(f"   {YELLOW}{moved:>4}{RESET} moved (≤ {MAX_EQUALITY_DIST:.8f} m)")
        print(f"   {RED}{skipped:>4}{RESET} skipped (> {MAX_EQUALITY_DIST:.8f} m)")
        print(f"   Farthest measured distance: {farthest:.8f} m")

        # Highlight only moved vertices
        if moved > 0:
            bpy.ops.object.mode_set(mode='EDIT')
            bpy.ops.mesh.select_all(action='DESELECT')
            bpy.ops.object.mode_set(mode='OBJECT')
            for idx in moved_indices:
                torso.data.vertices[idx].select = True
            bpy.ops.object.mode_set(mode='EDIT')

        print(f"{YELLOW}→ Highlighted {len(moved_indices)} moved vertices for inspection.{RESET}")

 

image.png.587a6199d2dec3398ced0c37f3ca5deb.pngimage.png.0a1415369fc3bbcdc7d0a7c36cf10aa7.pngimage.png.85d0ed5a9d90faf277431b1b0aa30e50.png

How to use script:
1. Import both FBX
2. Select the waist on the torso
3. Create a "deleteme" vertex group and assign the selected vertices to it
4. Exit edit, select the torso, then select the legs
5. Run the script & check the console window to see the logs





 

Edited by SurferJay
Posted (edited)

I've created a convenience Blender "tool" file for easily and automagically fixing torsos to remove the seam gap. Merry Christmas.
 

 

Edited by SurferJay
Posted (edited)
On 10/20/2025 at 11:43 AM, SurferJay said:

I've created a convenience Blender "tool" file for easily and automagically fixing torsos to remove the seam gap. Merry Christmas.
 

 

I wish my rig could run Blender, I'd be glad to have these to fix things up on my end. Although I wonder if you'll provide in-house fixes here? I understand if you decline! :D

Edited by simplyabah
Posted

I prefer delegating what is reasonable delegatable. That's why I created the tool. Doing it manually after putting all that labor into providing it for the community feels like a betrayal of that effort. Have you ever actually tried running Blender? Using that tool does not use Blender's processor-intensive features. You likely can run it but just don't know it.

Posted (edited)
13 hours ago, SurferJay said:

I prefer delegating what is reasonable delegatable. That's why I created the tool. Doing it manually after putting all that labor into providing it for the community feels like a betrayal of that effort. Have you ever actually tried running Blender? Using that tool does not use Blender's processor-intensive features. You likely can run it but just don't know it.

Here's the specs:
8GB RAM DDR3L-1600
4GB VRAM NVIDIA GTX 950M
Intel i7-4720HQ @ 2.60 GHz

 

Eh, not so sure... I'll give it a try once I wipe my hard drive to make space for XCOM 2 and Blender. Sooner or later, I guess.🤔

Edited by simplyabah
  • 3 weeks later...
  • 2 weeks later...
Posted
One of my friends commissioned the Hitomi mod from dead or alive, her body is glossy. He doens't mind it but I like to have the texture matching her head.
  1. My friend got the uncooked files, which I have a copy too. I believe Asthye was concerned about censorship on steam, hence he changed some settings in unreal editor, as I tried to edit the texture files to no avail. If someone could make it happen, I have some texture file which has nipples so I can apply them.
     
     
     
    I commissioned 2 nude mods (Marie from DoA, and Moira from RE) a while ago, they are similar to Hitomi:
     
  • 4 weeks later...
  • 2 weeks later...
Posted
On 10/27/2025 at 4:46 AM, simplyabah said:

Here's the specs:
8GB RAM DDR3L-1600
4GB VRAM NVIDIA GTX 950M
Intel i7-4720HQ @ 2.60 GHz

 

Eh, not so sure... I'll give it a try once I wipe my hard drive to make space for XCOM 2 and Blender. Sooner or later, I guess.🤔

Blender is under 1gb, if you can run xcom2 you can easily run blender.

  • 1 month later...
Posted (edited)

Thanks for all the shares of these great mods, everybody! I make voicemods that may appeal to some of you who use these models: https://steamcommunity.com/profiles/76561198001126177/myworkshopfiles/?appid=268500

 

is there an insiders club of folks (on the main xcom 2 modding discord or elsewhere) that are sharing nsfw edits of workshop mods? @SurferJay

 

If so, any way to pledge the fraternity? 👽

Edited by faze384
  • 1 month later...
Posted (edited)
On 2/4/2026 at 12:43 PM, faze384 said:

Thanks for all the shares of these great mods, everybody! I make voicemods that may appeal to some of you who use these models: https://steamcommunity.com/profiles/76561198001126177/myworkshopfiles/?appid=268500

 

is there an insiders club of folks (on the main xcom 2 modding discord or elsewhere) that are sharing nsfw edits of workshop mods? @SurferJay

 

If so, any way to pledge the fraternity? 👽

Not that I know of, and this site is effectively a ghost town for XCOM 2, as you can see. I wish people would interact more. I gave up on checking it regularly months ago, sorry for the delay.

Edited by SurferJay
Posted

Well, I've been trying to upload an expanded version of LewdComCore for a while now, but I've heard nothing back from the LL tech support team on the error that keeps popping up. On the off chance that anybody in this thread knows how to get past the 'Error Code: 200' issue when uploading a .7z or .zip file, I can get that done. Or maybe I should just put it on a 3rd party host, link the URL instead...

Posted
10 hours ago, numbers_19 said:

Well, I've been trying to upload an expanded version of LewdComCore for a while now, but I've heard nothing back from the LL tech support team on the error that keeps popping up. On the off chance that anybody in this thread knows how to get past the 'Error Code: 200' issue when uploading a .7z or .zip file, I can get that done. Or maybe I should just put it on a 3rd party host, link the URL instead...

Maybe if we flag the site owner here, it'll get visibility.

@AshalSorry to bother you, but this is basically going to be the Sexout/Wicked Whims/Sexlab of XCOM 2. Would you be able to help with this?

Posted
10 hours ago, numbers_19 said:

Well, I've been trying to upload an expanded version of LewdComCore for a while now, but I've heard nothing back from the LL tech support team on the error that keeps popping up. On the off chance that anybody in this thread knows how to get past the 'Error Code: 200' issue when uploading a .7z or .zip file, I can get that done. Or maybe I should just put it on a 3rd party host, link the URL instead...

It may happens when the server is particularly busy, which prevent the proper execution of routines to handle the upload. I'd say come back at another time in the day. That or your file is too large.

Posted
On 3/17/2026 at 1:46 AM, numbers_19 said:

Well, I've been trying to upload an expanded version of LewdComCore for a while now, but I've heard nothing back from the LL tech support team on the error that keeps popping up. On the off chance that anybody in this thread knows how to get past the 'Error Code: 200' issue when uploading a .7z or .zip file, I can get that done. Or maybe I should just put it on a 3rd party host, link the URL instead...

Or you could upload it somewhere else and give us a link, if it doesn't work here ? I would really like to see your mod, lol. 

Posted
On 3/17/2026 at 9:46 AM, numbers_19 said:

Well, I've been trying to upload an expanded version of LewdComCore for a while now, but I've heard nothing back from the LL tech support team on the error that keeps popping up. On the off chance that anybody in this thread knows how to get past the 'Error Code: 200' issue when uploading a .7z or .zip file, I can get that done. Or maybe I should just put it on a 3rd party host, link the URL instead...

If you're using Chrome, try using a different browser like Firefox or Edge.
If that still doesn’t work, is it possible to upload it via an external link (like googledrive, mega) instead?

I’m really excited about it

  • 2 weeks later...
Posted

Okay, finally bit the bullet and created a Mediafire account just for hosting the file. Should be available here:

 

Again, this is a relatively minor expansion on LewdComCore thus far. I don't know how much time I'll have going forwards to work on it (it's been a busy year thus far), but I've included some of my ideas in case that inspires other modders the same way LewdComCore inspired me to dip my toes into XCOM2 modding.

 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...