Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Article suit parts: blobs #32

Draft
wants to merge 81 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 27 commits
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
1a627b5
Rough Blobs intro
NeetBux-Hash Oct 27, 2024
f54bac3
Blobs article done
NeetBux-Hash Oct 27, 2024
be8d3b2
Refining blobs
NeetBux-Hash Oct 27, 2024
32f0eb4
Article no advanced search
NeetBux-Hash Oct 28, 2024
6cf5283
Needs way more refinement like blobs
NeetBux-Hash Oct 28, 2024
3375cea
Halfway nowhere
NeetBux-Hash Oct 28, 2024
11dd32e
Replacing this next
NeetBux-Hash Oct 28, 2024
4ba39ea
Good but needs checking and Sidebar
NeetBux-Hash Oct 28, 2024
bbcd488
Finished Blobs.
NeetBux-Hash Oct 28, 2024
ea2c57f
minor typo
NeetBux-Hash Oct 28, 2024
56f1302
Blobs done. Maybe too much adminations
NeetBux-Hash Oct 28, 2024
d3335d9
More Blobs article refining
NeetBux-Hash Oct 28, 2024
96fcc5b
More refining of blobs article
NeetBux-Hash Oct 28, 2024
58378a6
Ignore locals
NeetBux-Hash Oct 28, 2024
d6befcc
blobs refining
NeetBux-Hash Oct 28, 2024
c7c5f63
Finishing blobs and adding raw local article
NeetBux-Hash Oct 29, 2024
75869a0
blobs refining
NeetBux-Hash Oct 29, 2024
b1d87c0
Blobs refining
NeetBux-Hash Oct 29, 2024
e3e9a1b
Blobs considered done
NeetBux-Hash Oct 29, 2024
8bd7586
adding raw locals back in
NeetBux-Hash Oct 29, 2024
8721fe2
deleting old raw non md
NeetBux-Hash Oct 29, 2024
8e6887a
More refining when looking on mobile
NeetBux-Hash Oct 29, 2024
9993271
blobs refining
NeetBux-Hash Oct 29, 2024
42ea6d9
blobs refining
NeetBux-Hash Oct 29, 2024
237b2a3
refing blobs
NeetBux-Hash Oct 29, 2024
48bc225
Startting on locals
NeetBux-Hash Oct 30, 2024
3768c16
return locals ai
NeetBux-Hash Oct 30, 2024
9444269
Update addingblobs.md removing example admonition
NeetBux-Hash Oct 30, 2024
59d5838
Blobs refining
NeetBux-Hash Oct 30, 2024
309bed8
locals update
NeetBux-Hash Oct 30, 2024
1c38d6b
needs way more restructuring of info
NeetBux-Hash Oct 31, 2024
7706319
AI airticle is clean but no advanced search
NeetBux-Hash Oct 31, 2024
e32068c
MDX file attempt
NeetBux-Hash Nov 1, 2024
1d0c5ae
commit this
NeetBux-Hash Nov 1, 2024
d438067
Before css fix attempt
NeetBux-Hash Nov 1, 2024
787752b
Good tooltips text set
NeetBux-Hash Nov 1, 2024
b62962b
Before adding css icon class
NeetBux-Hash Nov 1, 2024
c521f3e
Working tooltip icon
NeetBux-Hash Nov 1, 2024
9a04add
Commiting before changing java
NeetBux-Hash Nov 1, 2024
fb1a9fa
refinig locals
NeetBux-Hash Nov 2, 2024
2ad9f14
half baked attempt of a dynamical tooltip
NeetBux-Hash Nov 2, 2024
028e54d
white border tooltip
NeetBux-Hash Nov 2, 2024
b5cae6f
green border, grey bg tooltip
NeetBux-Hash Nov 2, 2024
cb527fe
subtle glow
NeetBux-Hash Nov 2, 2024
948b6d7
tooltip dynamic refining
NeetBux-Hash Nov 2, 2024
9675d15
tooltip always bottom
NeetBux-Hash Nov 2, 2024
e1040cc
tooltip back to top
NeetBux-Hash Nov 2, 2024
cc29415
removed icon by accident in css
NeetBux-Hash Nov 2, 2024
2061888
before removing locals overview
NeetBux-Hash Nov 2, 2024
fcf4a97
cleaning redundant tooltips, adding checkered glossary
NeetBux-Hash Nov 3, 2024
08316e9
darker check padding
NeetBux-Hash Nov 3, 2024
4456994
Proper glossary
NeetBux-Hash Nov 3, 2024
65487d3
Forgot a key example in part 2
NeetBux-Hash Nov 3, 2024
5a9d930
fixed simplified locr
NeetBux-Hash Nov 3, 2024
f51eecb
adding ai adv search. To be fixed
NeetBux-Hash Nov 3, 2024
8989a5c
adding extra advanced link at suits. Might remove hash
NeetBux-Hash Nov 3, 2024
551961b
correctliy imported tippy.js
NeetBux-Hash Nov 3, 2024
7b4d774
Updated tooltip
NeetBux-Hash Nov 3, 2024
438589d
Updated tooltip in css and js to use custom style
NeetBux-Hash Nov 3, 2024
3aac650
added underline back
NeetBux-Hash Nov 3, 2024
cc2b254
Updated tooltip style to rounded
NeetBux-Hash Nov 3, 2024
b16c2be
refining locals article
NeetBux-Hash Nov 3, 2024
947d68e
Committing before restructuring part 2
NeetBux-Hash Nov 3, 2024
e1edae3
Much shorter and consice version RAW
NeetBux-Hash Nov 3, 2024
13b5b17
shorter guide refining base
NeetBux-Hash Nov 3, 2024
67254fe
SHortened copy refining
NeetBux-Hash Nov 3, 2024
735f139
refinig mini locals
NeetBux-Hash Nov 3, 2024
de64613
refining mini locals
NeetBux-Hash Nov 4, 2024
e93260d
refining locals mini
NeetBux-Hash Nov 4, 2024
1446add
refining custom tooltip exclam icon
NeetBux-Hash Nov 4, 2024
139f03d
More icon refining
NeetBux-Hash Nov 4, 2024
4c99bf3
refining locals
NeetBux-Hash Nov 4, 2024
3b4c3f7
commiting locals
NeetBux-Hash Nov 4, 2024
c6d70bf
refining locals
NeetBux-Hash Nov 4, 2024
603dabe
refining locqls
NeetBux-Hash Nov 5, 2024
4ce084a
refining locals
NeetBux-Hash Nov 5, 2024
6649b7e
refinig locals
NeetBux-Hash Nov 5, 2024
675914f
refining local
NeetBux-Hash Nov 5, 2024
e806e6f
adding condensed draft of short locals
NeetBux-Hash Nov 5, 2024
d32488a
backup before deleting package lock
NeetBux-Hash Nov 6, 2024
1c8294e
deleted package lock json
NeetBux-Hash Nov 6, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
234 changes: 234 additions & 0 deletions docs/modding/suitmodding/addingblobs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,234 @@
---
sidebar_position: 3
description: Modifying an image in the menu

---
# Adding "Blobs"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quotes are not necessary, blobs are what they are called

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did that to introduce an unfamiliar term. I'll change it



To continue on the previous adding/patching of parts article from before, you'll likely also want to;
- modify the image in the menu to reflect the changes you've made
- change the suit's name in the menu
- and even add in your own custom description for your suit.

I'll also be mentioning a potential issue that arises when you're trying to
- add parts to your suit that don't come from a reward suit chunk (chunk0) which will have to be solved in the manifest.



:::note Documentation
If you haven’t reviewed SMF’s documentation resources (the book icon on the left when you enable developer mode in SMF), consider skimming these then return here. I also made a little tutorial on adding parts with screenshots. Use it in combination with the previous article (because the code is unreadable). Here’s another excellent resource worth bookmarking for later:

- [Hitman Resources Documentation](https://hitman-resources.netlify.app/documentation) - An advanced look at WOA’s engine systems.
- [Adding Suit Parts guide](https://www.nexusmods.com/hitman3/articles/63) - A guide on adding parts with screenshots.
:::

>First up, let's try changing just the image in the menu with your custom image. These are called **"blobs"**

---

## STEP 1: **LOCATE YOUR FILE**
First, let's locate the suit within the **repository**, using either RPKG or GlacierKit.

There are 2 methods for this part. I'll do **RPKG** first since it's a bit more easier to find and confirm your image directly. I still suggest you try the **GlacierKit** method too for reasons I will explain later on.


### Method 1: Using RPKG

1. Open **RPKG**

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would recommend GlacierKit over RPKG wherever possible

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's what I'm gonna do in my next article concerning overrides. The only reason why rpkg was used is bc of the user friendly oversight of the repo with the pictures. I'll add a second method with glacier to the article to use glacier that nicely flows into the next article. Might make it easier to stay on glacier too

2. In **RPKG**, click on *"Import"* in the top left corner.
3. Select *"Import RPKGs folder"* and locate your Hitman 3 runtimes folder (it usually looks like this: `D:\SteamLibrary\steamapps\common\HITMAN 3\Runtime`).
4. Once the folder is imported, click on the big **REPO** tab button next to *"Resource Overview"*.
5. Then, click *"Load REPO from RPKGS folder"*. Now you’ll see everything neatly ordered with a good overview of each category. This is the **Repository**.
6. Expand the *Outfits* section below. Search for your outfit there. Or use the search bar on top.

>You can leave your **RPKG** program open after finding your suit

### Method 2: Using GlacierKit

1. Open **GlacierKit**
2. Select the *"game contents"* tab on the left.
3. - Copy the following **repository's** file hash ```00204D1AFD76AB13``` and paste it on the search bar and hit enter.
- Or simply type ***pro.repo*** on the search bar and hit enter.
Both methods should bring you to a single file called **pro.repo**.
4. Open it by clicking on it (obviously) and then click on *"Open in editor"* in the new menu that popped up on the right. This is the ***repository*** but in **Glacierkit**

:::tip
You now know the exact name of the **repository** file. Next time you want to open the **repository** in **GlacierKit** just type ***pro.repo***.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This tip is just restating step 3 but saying not to do part of step 3, you can just make step 3 "search pro.repo" instead of "copy this hash and then paste and hit enter but actually don't do that use pro.repo instead"

:::

5. You can then start searching for your suit below in the *"Unmodified section"*.
6. Double check if you have the right suit selected by looking up the image in **GlacierKit**.
To do so, simply

- find the correct image code line on the right that starts with ***"Image":".....***



- and copy the ***assembly path***

The **assembly path** is the line after **"image":"...**" inside the quotation.

Example of a full image code:
```json
"Image": "images/unlockables_override/47_outfits_bloodmoney_gloves.jpg"
```
and its **assembly path**
```json
images/unlockables_override/47_outfits_bloodmoney_gloves.jpg

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not an assembly path, it's a blob path. The assembly path for this blob is much longer because blobs are inside the cloudstorage folder

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also this should not be a JSON code block

```

- Paste that in the search bar in the *game contents* tab on the left
- and hit enter on your keyboard.


>If the image you found matches the suit you want to modify, you're all set for the next step and you can go back to your **repository** file. (Where you saw your code).

>You can leave open your **GlacierKit** program

:::info GlacierKit vs. RPKG
While **RPKG** is helpful for viewing images in the **repository**, it’s best to work primarily in **GlacierKit**, as it will be your main modding tool. The **repository code lines** in both tools are identical, so practicing in **GlacierKit** is encouraged for efficient modding.
:::

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do think it'll be a little confusing to show two separate tools for doing something and then say "it's best to not do the first one we told you to do"



---
## STEP 2: **FIND THE IMAGE**
In this step we will have to look for the correct Image code and remember its ***assembly path***.
:::note
You already did this step in the **GlacierKit** method but follow along

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What? Why is this repeated then

:::
### 1. Open your file
Click on your suit and you should see its **repository** code on the right

### 2. Locate the assembly path
There will be a line of code starting with `"Image":"....`

:::example
NeetBux-Hash marked this conversation as resolved.
Show resolved Hide resolved
For example:
```json
"Image": "images/unlockables_override/47_outfits_bloodmoney_gloves.jpg"
```
:::

It consists of a
- **file path** `images/unlockables_override/`
- **file name** `47_outfits_bloodmoney_gloves.jpg`

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The whole thing, including the file name, is the file path


These 2 together are called the **assembly path** of your file's image.

:::warning
Keep **RPKG** and/or **GlacierKit** open, you’ll need it in the next steps.
:::

---

## STEP 3: **SET UP A BLOBSFOLDER**
In this step, you’ll create a custom folder structure to replace the game’s default image.

### 1. Make a blobsfolder

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
### 1. Make a blobsfolder
### 1. Make a blobs folder


Create a new folder called `blobs` in your mod's root directory, where the manifest file is located. You can do this in **GlacierKit** or **File Explorer**.

### 2. Recreate the file path

Create folders that match the **file path** of the image you want to replace.
For example, if the **file path** is `images/unlockables_override/`, your `blobs` folder structure should look like this:
```
blobs/images/unlockables_override/
```
### 3. Add your custom image
- Place your image in the last folder you created (in this example, `unlockables_override`).

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can't see this fully previewed obviously but I feel like this formatting will look odd, having a big size-3 heading with a dot point; usually you'd just have body text instead of placing the step in a dot point (also the previous steps don't use dot points).

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, not being able to preview the site is a problem. Lots of choices are made aren't reflected properly from reviewing the MD file. I was looking into showing and sharing a link to a build version

### 4. Recreate the file name
- Make sure the custom image has the exact same **file name** and **file type** as the original by changing it, for example:
```
blobs/images/unlockables_override/47_outfits_bloodmoney_gloves.jpg
```
### 5. Confirm the assembly path
This fully recreates the **assembly path** of the image you're replacing.
Your final folder structure should look like this:
```
📁YourModFolder
├── 📁blobs
│ └── 📁images
│ └── 📁unlockables_override
│ └── 47_outfits_bloodmoney_gloves.jpg
├── 📁content
├── manifest.json
└── project.json
```
:::danger Important Tips
- **Aspect Ratio**: Match the aspect ratio of your replacement image with the original to avoid distortion. *Example*: The Blood Money suit image has a 4:3 ratio (resolution 696x520), which you can check in **GlacierKit**.
- **File Corruption**: If changing the file type manually corrupts your image, use an image converter tool (Photoshop, GIMP, online, etc.).
:::

---

## STEP 4: **UPDATE MANIFEST**

### 1. Open your manifest
Recommended to do so in **GlacierKit** (or in **VS code** with a ***"schema"***).

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a huge amount of bold and italic.
Also quotes around schema are not necessary, that is what it's called (might be a good idea to add a tooltip explaining what a schema is? or a link to somewhere else it's explained?)

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agree, Blobs article will need a rework with a tooltip. That's the copy of the locals article. A draft for the current locals artoce but condensing it and changing the flow of information


### 2. Add your blobsfolder:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
### 2. Add your blobsfolder:
### 2. Add your blobs folder

Add the following line that will make **SMF** do a blobs operation and have it refer to your ***`blobs`*** folder
```json
"blobsFolders": ["blobs"]
```
### 3. Save & Deploy
Simply click the little save icon on top or click **ctrl+S** on your keyboard. Deploy your mod in **SMF** and your new image will appear in place of the default one.

:::success
That's it! You’ve successfully replaced the suit’s image in the game with your own custom picture. Now, when you load up the game, your new image will appear in place of the default one. Don't close **GlacierKit** yet if you already are moving on to the next article or want to try the test below. It'll make things alot quicker.
:::
With your final step complete, below are additional options and tips for managing **blobs** in your mod.

---
## More on Blobs
These tips will help you manage multiple images and **blobsfolders**.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
These tips will help you manage multiple images and **blobsfolders**.
These tips will help you manage multiple images and blobs folders.



### More Blobs images

- If you want to add more images, remember to recreate the **file paths** by making more folders.
And place each image in its relevant folder

examples:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
examples:
Some examples:


| **Assembly Path** (in-game) | Your **BlobsFolder** Structure |
|--------------------------------------------|---------------------------------------------|
| `images/unlockables_override/absolution_suit.jpg` | `blobs/images/unlockables_override/absolution_suit.jpg` |
| `images/characters/male_suits/caruso_idk.png` | `blobs/images/characters/male_suits/caruso_idk.png` |
| `icons/equipment/distraction_device_old.jpg` | `blobs/icons/equipment/distraction_device_old.jpg` |

- For multiple images that use the same **assembly path**, simply place them within the same folders (e.g., images under `unlockables_override`). Don't forget to rename them too.


### Renaming ***"blobs"***
You can name your `blobsfolder` whatever you like (e.g., "MyCustomImages"), just update the manifest too after.:
```json
"blobsFolders": ["MyCustomImages"]
```
### Adding Multiple Blobsfolders
You can even add more **blobsfolders** in your mod. This is useful if your mod will have multiple options that can be selected in your mod's settings.
The same rules apply to them;
- set **file paths** by making folders
- and use correct **file name(s)**

You can then add them to the manifest by simply adding a comma and the name of the new folder in quotation marks.

```json
"blobsFolders": ["blobs","MyCustomImages","MoreBlobs"]
```

---
:::info challenge
*Up for a challenge?*

Reinforce what you learned by replacing more images in the game using **only** these essential steps:

- Locate image(s) in the **repository**
- Set up a new **blobs folder** and recreate **file paths**
- Add your images and ensure **file names** match
- Update the **manifest**, deploy, and test in-game

Repeat steps you struggled with until they’re familiar—if you can complete these steps without looking at the tutorial, you’re ready for the next article!
:::
Loading
Loading