StardewModPY
StardewModPY é uma biblioteca Python projetada para simplificar a criação e manipulação de arquivos de patch de conteúdo (mods) para o jogo Stardew Valley.
Instalação
Você pode instalar a biblioteca via pip:
pip install stardewmodpy
Criando um Novo Projeto
Após instalar o StardewModPY, você pode facilmente criar um novo projeto de mod usando o seguinte comando:
sdvpy create "nomeMod" "nomeAutor" "0.0.1" "Descrição do Mod"
Ao criar um projeto, uma estrutura de arquivos será criada na pasta onde o comando for executado:
Folder -- dependences -- frameworks -- nameMod + sdvproject.json
Arquivo: sdvproject.json << arquivo usado para dar inicio ao processo de compilação do mod>>
{
"defaultProject": "nomeMod",
"mods_path": null,
"projects": {
"nomeMod": {
"path": "nomeMod",
"framework": "ContentPatcher"
}
}
}
Arquivo: main.py Este aquivo é o inicio do código em python, onde inicia a compilação do mod
from ModEntry import ModEntry
from StardewValley import Manifest
manifest = Manifest(
Name="nomeMod",
Author="nomeAutor",
Version="0.0.1",
Description="Descrição do Mod",
UniqueID="nomeAuthor.nomeMod"
)
mod = ModEntry(manifest=manifest)
mod.write()
Arquivo: ModEntry.py É nesse arquivo que você irá começar o desenvolvimento do código do seu mod, tudo irá na função contents()
from StardewValley import Manifest, Helper, ContentPatcher
class ModEntry(Helper):
def __init__(self, manifest:Manifest):
super().__init__(
manifest=manifest, modFramework=ContentPatcher(manifest=manifest)
)
self.contents()
def contents(self):
# Add your contents here
Parâmetros Extra
Existem também alguns parâmetros que você pode definir no comando ao criar o mod, além dos padrões que são:
| Parâmetro | Descrissão |
|---|---|
| --framework |
Define custom framework (default: ContentPatcher) |
| --MinimumApiVersion |
Set minimum API version |
| --mods_path |
Define custom path to the game's Mods folder |
| --Dialogues | Create folder and structure for NPC dialogues |
| --Events | Create folder and structure for custom events |
| --Maps | Create folder and structure for maps |
| --NPCs | Create folder and structure for custom NPCs |
| --Schedules | Create folder and structure for schedules |
Exemplos:
Se você quer criar um npc você pode definir os parâmetros Necessários para criação do npc
Exemplo:
sdvpy create "nomeMod" "nomeAutor" "0.0.1" "Descrição do Mod" --Dialogues --Events --NPCs --Schedules
Dessa forma será criada a estrutura para adição de NPCs e suas necessidades já ao criar o código.
Extraindo Arquivos do Stardew Valley com StardewXnbHack
Para começar a modificar o Stardew Valley usando o Content Patcher e nossa biblioteca Python, você primeiro precisa extrair os arquivos .xnb do jogo. Para isso, usaremos a ferramenta StardewXnbHack.
📥 Passo 1: Baixar o StardewXnbHack
-
Acesse a página do projeto no GitHub:
👉 https://github.com/Pathoschild/StardewXnbHack -
Clique na aba Releases ou vá diretamente para:
https://github.com/Pathoschild/StardewXnbHack/releases. -
Baixe a versão mais recente do programa compatível com seu sistema operacional (Windows, Linux ou MacOS).
📂 Passo 2: Extraia para a Pasta do Stardew Valley
Após o download:
- Extraia o conteúdo do arquivo
.zipna pasta onde o Stardew Valley está instalado.
Exemplo de caminho no Windows (Steam):
C:\Program Files (x86)\Steam\steamapps\common\Stardew Valley
- Execute o programa
StardewXnbHack.exe(ou o script correspondente ao seu sistema).
📁 Passo 3: Acesse os Arquivos Extraídos
Após executar o programa, será criada uma pasta chamada:
Content (unpacked)
Nessa pasta, você encontrará todos os arquivos .xnb convertidos em formatos legíveis, como .json, .png, .tbin e outros.
Esses são os arquivos que você pode modificar usando o Content Patcher e nossa biblioteca.
✅ Próximos Passos
Agora que os arquivos foram extraídos, você pode começar a criar seus mods, ler dados do jogo e gerar patches personalizados usando nossa biblioteca! 🚀
📁 A pasta assets
A pasta assets é usada para armazenar todos os arquivos visuais e de conteúdo que serão usados ou modificados no jogo. Ela deve ser criada dentro da pasta do mod, junto ao arquivos main.py e ModEntry.py
🎨 O que colocar na pasta assets?
Você deve colocar dentro dessa pasta:
- Imagens (
.png) usadas pelo mod. - Mapas (
.tmx) arquivos de mapa, ou (.tbin). - Arquivos
.jsonusados pelos patches do Content Patcher (ex.:newAssets.json, etc.). - Sons ou outros recursos que seu mod possa precisar.
⚙️ Comportamento de Compilação
Sempre que você compilar o projeto usando nossa biblioteca, tudo dentro da pasta assets será automaticamente copiado para a pasta final do mod.
Isso significa:
- Não é necessário mover os arquivos manualmente.
- Qualquer alteração na pasta
assetsserá refletida na próxima compilação. - Os caminhos dos arquivos devem ser pensados como se já estivessem dentro da pasta do mod.
📌 Exemplo
Se você tiver o seguinte arquivo:
assets/Characters/Abigail.png
Ele será copiado para:
<nome-do-mod>/assets/Characters/Abigail.png
E poderá ser referenciado normalmente nos patches do Content Patcher.
✅ Dica
Mantenha sua pasta assets organizada desde o início para facilitar a manutenção do mod e garantir que tudo seja copiado corretamente.
🖼️ Modificando Recursos com o Content Patcher
Nossa biblioteca fornece uma maneira simples de modificar os arquivos do jogo Stardew Valley usando o Content Patcher.
📚 Usando a Classe Helper
A classe ModEntry herda de Helper, que fornece acesso às ferramentas de modificação do jogo. Dentro dela, temos o atributo self.content, que permite registrar alterações nos arquivos do jogo.
Construtor da classe Helper
def __init__(self, manifest:Manifest, modFramework:Optional[ContentPatcher|SlingShotFramework|FarmTypeManager|ItemExtensions]=None):
self.modFolderAssets=os.path.join(os.getcwd(), "assets")
self.assetsFileIgnore=[]
if modFramework is None:
self.content = ContentPatcher(manifest=manifest)
else:
self.content = modFramework
self.i18n=i18n()
steamVerify=steamLoad()
self.pathSteam=steamVerify.verify()
self.jsonRead=jsonStardewRead()
self.modPath=os.path.join("build", self.content.Manifest.Name)
self.autoTranslate=False
📌 Explicação das variáveis:
-
"self.ModFolderAssets"- Guarda o caminho da pasta assets, caso presente no projeto. -
"self.assetsFileIgnore"- Guarda uma lista de itens a ser ignorado na pasta assets para não inclusão no mod(útil para mapas que arquivos apontam pra referencia de itens vanilla, ou de outros mods, que podem atrapalhar caso esteja na versão final, e tenha diferentes estações). -
"self.content"- Recebe a classe do framework que irá utilizar (Valor vem do parâmetro modFramework) -
self.i18n- Variável usada para tradução entre linguagens no smapi -
"steamVerify"- Objeto que detecta a pasta do jogo -
"self.pathSteam"- Recebe a pasta da Steam onde fica o seu jogo. -
"self.jsonRead"- Objeto da classe jsonStardewRead, que é responsavel por ler e escrever arquivos .json -
"self.modPath"- Caminho para a pasta build para compilação do mod. -
"self.autoTranslate"- Variavel de controle para auto tradução.