SP
SpartanPort

# SpartanPort
FelipePrado0%2FSpartanPort | Trendshift

Entre no Discord oficial do SpartanPort

[English](https://github.com/FelipePrado0/SpartanPort/blob/main/README.md) | **Português (Brasil)** | [Español](https://github.com/FelipePrado0/SpartanPort/blob/main/README.es.md) **SpartanPort** é um port não oficial para PC de **God of War III Remastered** (PlayStation 4) para Windows 10/11 e Linux (AppImage experimental). > **Nenhum arquivo do jogo está incluído.** É preciso um dump do seu próprio PS4 (testados: > CUSA01623 e CUSA01715, versões 01.00 e 01.02). Este projeto não tem relação com a Sony Interactive Entertainment nem com o > Santa Monica Studio, nem é endossado por elas. God of War é marca registrada da Sony Interactive Entertainment. > **Antes gow3_pc.** As versões anteriores à 2.8.0 não são migradas: baixe a 2.8.0 na > [página de releases](https://github.com/FelipePrado0/SpartanPort/releases) e instale do zero. Para > manter seus saves e configurações no Windows, copie estes itens da pasta antiga para a nova, se > existirem: `user/`, `mods/`, `spartanport.ini`, `settings.json`, `mods.json`, > `mods_presets.json`, `patches.json` e `gamecontrollerdb.txt`. Da 2.5.0 ou anterior, copie > `gow3.ini` como `spartanport.ini` e pegue o `settings.json` em `%APPDATA%\gow3-launcher`. No > Linux, troque a AppImage (agora `spartanport-x86_64.AppImage`: atualize as opções de inicialização > da Steam que usam o nome antigo do arquivo). Da 2.5.0 ou anterior, copie também > `~/.local/share/gow3` para `~/.local/share/spartanport` (sem `user/cache` e `out/`), renomeie > lá o `gow3.ini` para `spartanport.ini` e copie `~/.config/gow3-launcher/settings.json` para o > lado dele. Se você atualizou a 2.6.0 ou a 2.7.0 por dentro do launcher, apague > `God of War III.exe` e `_internal/` da pasta dele, e o atalho antigo `God of War III` da área de > trabalho: eles ainda abrem o launcher antigo. ## Sumário - [SpartanPort](#spartanport) - [Sumário](#sumário) - [Baixar e jogar](#baixar-e-jogar) - [Linux (AppImage, experimental)](#linux-appimage-experimental) - [O que funciona](#o-que-funciona) - [Disponibilidade dos recursos](#disponibilidade-dos-recursos) - [Configurações](#configurações) - [Teclado](#teclado) - [Importar saves do shadPS4](#importar-saves-do-shadps4) - [Overlays externos (Windows)](#overlays-externos-windows) - [Solução de problemas](#solução-de-problemas) - [Desempenho e compatibilidade](#desempenho-e-compatibilidade) - [Compilar a partir do código](#compilar-a-partir-do-código) - [Windows](#windows) - [Linux (Ubuntu 24.04)](#linux-ubuntu-2404) - [Testes](#testes) - [Python](#python) - [Testes C++ no Windows (MSYS2 CLANG64)](#testes-c-no-windows-msys2-clang64) - [Testes C/C++ no Linux](#testes-cc-no-linux) - [Verificações com o jogo preparado](#verificações-com-o-jogo-preparado) - [Como funciona](#como-funciona) - [Créditos](#créditos) - [Licença](#licença) ## Baixar e jogar - Windows 10 (1903 ou mais novo) ou Windows 11, 64 bits. - Processador de 64 bits com AVX: Intel Sandy Bridge (2011) ou mais novo, AMD FX ou mais novo. Em CPUs sem MOVBE, BMI1 ou LZCNT (Sandy/Ivy Bridge, AMD FX) o carregador reescreve as instruções do jogo que os usam para stubs emulados e registra uma linha `ISA:` no log; o desempenho nessas CPUs ainda não foi medido. CPUs mais antigas param na abertura com uma linha `STOP: this CPU lacks` no log. - Placa de vídeo com Vulkan 1.3 e driver atualizado. - Sua cópia do jogo (a pasta com `eboot.bin`, `sce_module` e `sce_sys`). Testados: CUSA01623 e CUSA01715, versões 01.00 e 01.02. **Passos** 1. Baixe o `spartanport-windows.zip` na [página de releases](https://github.com/FelipePrado0/SpartanPort/releases/latest). 2. Extraia numa pasta de sua escolha, por exemplo `C:\Jogos\spartanport-windows`. Não abra direto de dentro do zip. 3. Abra o **`SpartanPort.exe`**. Se o Windows mostrar "O Windows protegeu o computador", clique em **Mais informações** e depois em **Executar assim mesmo**: o programa não tem assinatura digital. 4. Clique em **Choose the game folder**. Isso leva à tela **Game**. Em **Game folder**, clique em **Browse…** e escolha a pasta que tem o `eboot.bin`. 5. De volta à **Home**, aparecem a capa e "CUSA01623 · version 01.02". Ajuste os **Quick settings** se quiser: modo de tela, limite de FPS, resolução e FPS do motor. 6. Clique em **Save** para guardar alterações pendentes e depois em **PLAY**. A primeira abertura prepara a imagem do jogo; a compilação de shaders também pode afetar a abertura e o desempenho nas próximas partidas. Patches e correções já vêm incluídos e são aplicados sozinhos: correção de texturas, pular vídeos com X e 120 FPS vêm ligados. Mude resolução e FPS na **Home** ou em **Performance**. A correção da tela preta na abertura é sempre solicitada, mesmo com uma seleção antiga de patches salva; cada patch só é aplicado onde sua assinatura corresponde. Um patch de resolução substitui a correção de texturas. **Durante o jogo** - **Insert** no teclado, ou **R3 + L2** no controle, abre o menu do port: trapaças, multiplicadores, imagem, desempenho e o contador de desempenho. - Os shaders salvos carregam em segundo plano. Um aviso pequeno "Loading shader cache" no canto mostra o progresso. **Das próximas vezes** - O **`Play SpartanPort.exe`** abre o jogo direto, com as configurações salvas. Dá para criar um atalho na área de trabalho ou adicionar à Steam em **Adicionar um jogo que não é da Steam**. - Saves, cache de shaders e log ficam na pasta `user`, ao lado do `SpartanPort.exe`. Guarde essa pasta ao atualizar. - **Advanced → Check for updates** baixa e instala a versão nova. Saves e configurações são mantidos. ## Linux (AppImage, experimental) A versão para Linux usa o mesmo runtime nativo e o mesmo launcher. Foi testada no Arch Linux com uma Radeon RX 7800 XT (RADV) numa sessão Wayland. **Você precisa de:** Linux x86-64 com glibc 2.39 ou mais nova, CPU com AVX, driver Vulkan 1.3 e seu próprio dump do jogo. A abertura do launcher é verificada em Ubuntu 24.04, Debian 13, Fedora 42, Arch e openSUSE Tumbleweed; isso não comprova gameplay em todas as GPUs. **Baixar e rodar** 1. Baixe `spartanport-x86_64.AppImage` na [página de releases](https://github.com/FelipePrado0/SpartanPort/releases/latest). 2. Na pasta do arquivo, execute: ```bash chmod +x spartanport-x86_64.AppImage ./spartanport-x86_64.AppImage ``` 3. Escolha a pasta do jogo, salve as configurações e pressione **PLAY**. Se um download antigo mostrar `GLIBC_2.44 not found`, baixe novamente o AppImage recompilado. O AppImage se atualiza sozinho: **Advanced → Check for updates** (ou o aviso ao abrir o launcher) baixa o AppImage novo do release, confere o SHA-256 e troca o arquivo. Precisa de uma pasta com permissão de escrita; senão abre a página de releases. A corrupção gráfica no Steam Deck/RADV é um problema conhecido do AppImage 2.2.0 publicado. - **Arquivos:** saves, configurações, cache de shaders e o registro ficam em `~/.local/share/spartanport`; as configurações do próprio launcher, em `~/.config/spartanport-launcher`. - **Pasta do update:** se o update foi dumpado separado do jogo, escolha-a em **Jogo → Pasta do update**. Ela é colocada por cima da pasta do jogo sem alterar nenhuma das duas. - **Avançado → Linux:** sistema de janelas (automático, Wayland ou X11), GameMode e MangoHud. Só as ferramentas instaladas no sistema podem ser ligadas. - **Steam:** **Avançado → Adicionar à Steam** inclui "SpartanPort" como jogo de fora da Steam, com o ícone, as capas vertical e horizontal, o fundo da biblioteca e o logotipo feitos a partir das imagens do dump. Feche a Steam antes (ela reescreve os atalhos quando fecha). O botão também está no launcher do Windows (ainda sem teste lá). - **Steam Deck / SteamOS (Gaming Mode):** se a Steam tentar executar o AppImage com Proton, abra **Propriedades → Compatibilidade** do atalho e selecione **Steam Linux Runtime** no lugar de Proton. O AppImage é um aplicativo nativo de Linux. - **Entrada no menu:** o AppImage grava `~/.local/share/applications/spartanport.desktop` ao iniciar, para o launcher e a janela do jogo mostrarem o ícone no dock; **Avançado → Linux** desliga e remove a entrada. Quando outra ferramenta (Gear Lever, AppImageLauncher…) já criou uma entrada que inicia o mesmo arquivo, ele não cria a dele e remove a que tiver criado, sem duplicar. ## O que funciona - Abertura, menus, cutscenes em vídeo (H.264) e gameplay. - Áudio: música, vozes e efeitos (ATRAC9 e MP3). - Controle (DualSense, Xbox e outros, via SDL3) e teclado ao mesmo tempo, os dois com botões configuráveis. - **Câmera livre (experimental):** o analógico direito ou o mouse gira a câmera em volta do Kratos, por completo, e ele anda para onde ela olha; ela para antes das paredes (veja [Teclado](#teclado)). - Salvar e carregar: a lista de saves aparece na tela, como no PS4. O autosave também funciona. O launcher faz backup dos saves antes de cada partida. - Patches: resolução de renderização de 480p, 720p, 900p, 1440p, 1800p ou 4K, correção de texturas corrompidas e pular vídeos com o botão X (comunidade); FPS do motor de 120 (kvicken), 100 (para telas de 100 Hz), 144 (para telas de 144 Hz) ou 240 (adaptado por Felipe Prado). - **Ultrawide (beta):** resoluções 21:9, 32:9 e 16:10 (3440x1440 testada) com campo de visão mais largo, em vez de uma imagem com zoom, já embutidas: escolha em **Resolução de renderização**, onde cada opção mostra a resolução exata e a proporção da tela. As cutscenes mantêm as bordas 16:9 (veja [docs/ultrawide.md](docs/ultrawide.md)). Os mods também podem trazer patches de jogo; o [mod Ultrawide](extras/mods/Ultrawide) é o mesmo para versões antigas. **Como instalar um mod:** coloque o `.zip` (sem extrair) na pasta `mods`, ao lado do `SpartanPort.exe`; o jogo extrai sozinho. O mod Ultrawide e um instalador de um clique para a 2.2.0 estão explicados em [extras/mods/Ultrawide](extras/mods/Ultrawide/README.md). - **Compilação de shaders em segundo plano:** os pipelines salvos carregam e compilam enquanto você joga. Ainda podem ocorrer travadas, efeitos ausentes durante a compilação e quedas temporárias de FPS; a abertura depende do cache, do driver de vídeo e da CPU. - **Launcher** com as cores do jogo, idiomas selecionáveis e inglês como fallback: cinco telas (**Home, Graphics, Performance, Game, Advanced**) e botão **Save** para alterações pendentes; ajustes rápidos na tela inicial, gráficos, desempenho, pasta do jogo e backups de save, patches, mods (ordem, presets e conflitos), controles com ícones de botões PlayStation ou Xbox, atualizações e diagnóstico. - **Ícones de botões no jogo** (opt-in, desligado por padrão): os ícones PlayStation do jogo podem ser os do seu controle, Xbox ou Nintendo, ou as teclas do teclado com que você joga (tela Game, seção Controls). - **Menu dentro do jogo** (Insert no teclado, R3+L2 no controle), com quatro abas: - **Game:** trapaças (vida, magia, item e Fúria de Esparta infinitos, orbes vermelhos no máximo, QTE automático: prompts de botão e de giro do analógico se resolvem sozinhos); multiplicadores de 0,1x a 100x para orbes vermelhos, verdes (vida), azuis (magia) e dourados (Fúria de Esparta) e para dano causado e recebido; barra de vida do inimigo. - **Image:** modo de tela (janela, sem borda, tela cheia), VSync e nitidez RCAS. - **Performance:** limite de FPS (de 30 a ilimitado), quadros na fila, compilação de shaders em segundo plano; resolução, FPS do motor e as opções de leitura da GPU valem com um único botão "Apply and restart". - **Overlay:** contador de desempenho com FPS, tempo de quadro, upscaler, GPU (nome e uso), CPU, RAM e VRAM, cada um opcional, com tamanho da fonte, canto, transparência e formato. Os números são o uso do próprio jogo, não do sistema inteiro. O menu segue o idioma do launcher (inglês, português, espanhol, francês, alemão, italiano, polonês, turco, indonésio, russo ou chinês), ou o escolhido no topo da aba **Jogo**, na hora. A escolha fica em `spartanport.ini` (`ui_language`). - **Troféus** (F8, ou R3+R2 no controle): todos os troféus com o nome oficial e o que pedem, a classe, quantos jogadores conseguiram, e filtros por estado e por classe; notificações de troféu em quatro temas, com sons e imagens seus se você quiser. Veja [docs/TROPHIES.pt-BR.md](docs/TROPHIES.pt-BR.md). ## Disponibilidade dos recursos Disponibilidade conferida na [release 2.2.0](https://github.com/FelipePrado0/SpartanPort/releases/tag/windows-v2.2.0) e no código em 14 de outubro de 2026. | Recurso | Pacotes 2.2.0 publicados | Código atual | |---|---|---| | ZIP Windows / AppImage Linux experimental | Disponíveis | Scripts de compilação disponíveis | | Correção da tela preta / ícones dos botões do controle | Incluídos | Incluídos | | Discord Rich Presence | Não incluído | Opcional em Advanced, desligado por padrão; nome do jogo e tempo decorrido | | Correção da fila esparsa no RADV | Não incluída | Integrada à `main` | | FSR 3.1, FSR 4, FSR 4.1, TAA | Desativados | Gráficos → Upscaling e os menus do jogo ([detalhes](#upscaling)) | | FSR 1 | Desativados | Desativados no fluxo de configurações do launcher/jogo | | Nitidez RCAS | Disponível | Disponível | O AppImage Linux foi recompilado em 14 de outubro para glibc 2.39 ou mais nova. Os pacotes Windows e Linux podem usar revisões diferentes do código. Consulte as notas da release para mudanças em downloads posteriores. ## Configurações As configurações ficam em `spartanport.ini` (o jogo e o menu do jogo) e em `settings.json` (o launcher), na pasta do port. Saves, cache de shaders e `last_run.log` ficam na pasta `user` do projeto. Em **Performance → GPU data → Stream buffer memory**, escolha **System RAM (cached, default)**, **System RAM (uncached)** ou **GPU memory (previous behavior)**. A RAM do sistema pode melhorar o FPS em notebooks com placa de vídeo NVIDIA. A escolha é salva e vale na próxima partida, inclusive pelo `Play SpartanPort.exe` ou pelo `--play`. Escolha **GPU memory** para voltar à alocação anterior. Sem o launcher, `SPARTAN_STREAM_MEMORY` aceita `cached`, `host` ou `device`; com o launcher, a escolha salva nele tem prioridade. Em **Performance → GPU data → Game multisampling**, **Automatic** decide conforme a placa de vídeo selecionada: usa uma única amostra nas imagens do jogo com os drivers de Windows da AMD e da Intel, onde a leitura do buffer de profundidade de duas amostras como textura causava linhas pretas na iluminação (família RX 6600 e Intel Arc). Nos demais drivers, como NVIDIA, mantém a multiamostragem. Isso inclui GPUs integradas que usam os dois drivers afetados. A opção automática mostra o nome da placa e a decisão, acompanhando **Graphics card**. A linha `GPU: guest multisampling off` ou `on` no registro informa o que foi aplicado. Escolha **Off** se aparecerem linhas em outra placa, ou **On** para manter a multiamostragem. A alteração vale na próxima abertura. Sem o launcher, `SPARTAN_NO_MSAA=1` desliga e `0` liga; **Automatic** preserva essa variável caso ela já exista no ambiente. ### Upscaling Escolha o upscaler e o preset de qualidade em **Gráficos → Upscaling**, no menu **Exibição** do jogo ou no menu **Insert** (**Image**). Os três mostram os mesmos valores. O padrão é Desligado. O preset renderiza uma fração da resolução de renderização, e o upscaler reconstrói a resolução completa; cada preset mostra a resolução em que renderiza. As mudanças valem ao reiniciar (**Aplicar e reiniciar** no jogo). - **FSR 3.1:** qualquer placa de vídeo. - **FSR 4:** o modelo aberto do FSR 4, incluso. Para AMD Radeon RX 6000 ou mais nova e Intel Arc; Windows e Linux. - **TAA:** antisserrilhamento na resolução completa, sem upscaling. A gera??o de quadros AMD FSR (2x) adiciona um quadro gerado entre os quadros do jogo. Ative em **Gr?ficos > Gera??o de quadros** ou nos menus do jogo, com um upscaler selecionado. A op??o ? aplicada na hora; deslig?-la mant?m o upscaler e volta aos quadros do jogo. #### FSR 4.1 (AMD, Windows) O FSR 4.1 roda pelo runtime Vulkan da AMD (`amdvkffx64.dll`), que vem com o driver da AMD (Adrenalin 26.10.1 ou mais recente). - RX 7000 e RX 9000: o driver deve incluí-lo. Ainda não confirmado; relatos são bem-vindos. - RX 6000: o driver atual traz o FSR 4.1 só para DirectX 12, sem o runtime Vulkan. O SpartanPort usa o FSR 3.1 no lugar e mostra o motivo no menu do jogo (**Insert → Image**). - NVIDIA e Intel: FSR 3.1. ## Teclado Padrão; mude na tela **Controls** do launcher, seção **Keyboard & Mouse Mapping**. | Tecla | Botão | |---|---| | WASD | analógico esquerdo | | Setas | analógico direito (câmera) | | Espaço | Xis (Cross) | | Shift esquerdo | Círculo | | Clique esquerdo | Quadrado | | Clique direito | Triângulo | | Q e E | L1 e R1 | | R e o botão de avançar do mouse | L2 e R2 | | Z e X | L3 e R3 | | F | Rage of Sparta (L3 + R3) | | C | Agarrar (L1 + Círculo) | | O botão de voltar do mouse | Esquiva | | 1, 2, 3, 4 | direcional: cima, direita, baixo, esquerda (armas) | | Roda do mouse para cima e para baixo | próxima arma e arma anterior (percorre as armas do direcional); nos menus do jogo (título, pausa e Power Up) sobe e desce a seleção, e volta às armas quando você anda ou esquiva | | Tab | Options | | P | clique esquerdo do touchpad (modo foto) | | Esc | clique direito do touchpad (menu de pausa) | | Insert | menu do port (R3+L2 no controle) | | G | liga e desliga a câmera livre (um toque no R3 no controle), quando a câmera livre está ligada | **Rage of Sparta em uma tecla** (ligado por padrão) deixa Z e X sem uso. Os **Joystick prompts** respondem aos eventos rápidos de girar o analógico sem analógico: digite o giro (meias-voltas D S A, A S D, A W D ou D W A; voltas completas D S A W ou A S D W) ou, com *Adaptive mouse*, desenhe-o com o mouse. Enquanto você joga, o mouse fica preso na janela do jogo; o menu do jogo, a tecla de pausa (Esc) e outras janelas o liberam, e Esc de novo ou um clique na janela o prende outra vez. Com L2 pressionado (R), o mouse mira com o analógico direito, para a Cabeça de Hélio ou o Arco de Apolo: *Relative* segue o movimento, *Absolute* aponta a partir de onde o mouse estava ao apertar L2, e *Right stick sensitivity* define quanto mouse é preciso. Sem o launcher, o jogo usa as próprias teclas: E e Q para Quadrado e Triângulo, 1 e 3 para L1 e R1, F para R2, C para R3, I, K, J, L para o direcional, Enter para Options, Tab e Backspace para o touchpad. **Teclas alternativas.** Todo botão pode ter uma segunda e uma terceira tecla ou entrada do mouse, na segunda e na terceira caixa da linha dele na tela Controls (o botão x ao lado de uma caixa a limpa). Todas apertam o botão, então você pode manter o Quadrado no clique esquerdo para o combate e também apertá-lo com o J, ou com o Keypad 4, nos minigames. Na lira das Musas, por exemplo, mantenha Espaço, Shift esquerdo e os dois botões do mouse e acrescente K, L, J e I, dispostas como os quatro botões (I em cima, J à esquerda, L à direita, K embaixo). Uma tecla que já é de outro botão troca com ele, como nas teclas principais. Os ícones de teclado no jogo mostram a tecla principal; *Teclas nos ícones* (tela Controls, com o estilo Teclado ou Igual ao meu controle) pode mostrar a alternativa no lugar, ou a alternativa só na lira (os outros ícones continuam com a principal). Os ícones desenham a primeira alternativa preenchida: a segunda caixa, ou a terceira se a segunda estiver vazia. Sem o launcher, junte os nomes com `|` no `SPARTAN_KEY_MAP`, por exemplo `cross=Space|K|Keypad 2,square=Mouse Left|J`. Em um controle sem touchpad (Xbox e outros), View abre o menu de pausa (o clique direito do touchpad) e L1 + View abre o modo foto (o clique esquerdo). No DualSense o touchpad funciona como no PS4, e Share/Create funciona como View. **Ataques de troca com L1 + direcional e L1 + Xis** (desligado por padrão, tela Controls): L1 + uma direção do direcional troca para essa arma com o ataque de troca dela, e a arma que já está na mão de Kratos repete o ataque; L1 + Xis faz o ataque de troca da arma na mão em vez de passar para a próxima arma. O ataque de troca da mesma arma de novo espera 0,8 segundo depois do último (o de outra arma não espera). O direcional sozinho troca como antes. Os tutoriais de troca de arma passam a dizer isso em todos os idiomas (em cópias dos arquivos de idioma na pasta de dados do port). Sem o launcher, defina `SPARTAN_SWITCH_ATTACKS=1`. **Câmera livre** (experimental, desligada por padrão): ligue em *Câmera livre (experimental)* na tela Controls do launcher, na seção *Controller* do menu do port (Insert) ou em Opções → Controles do jogo. Aí o analógico direito, ou o mouse enquanto o jogo o prende, gira a câmera em volta do Kratos por completo e por cima dele, e a câmera mantém esse ângulo enquanto ele anda; o mouse segue a *Sensibilidade da mira*, e com L2 pressionado ele mira como antes. O Kratos anda para onde a câmera olha, e L1 + analógico direito faz a esquiva. No jogo, G (configurável) ou um toque só no R3 desliga e liga a câmera livre: desligada, é a câmera do próprio jogo, para as lutas de chefe e as cenas roteirizadas. O jogo retoma a câmera sozinho nos cortes de câmera, nos eventos rápidos, na tela inicial e no menu de pausa. A câmera para antes de paredes e rochas (a colisão da própria fase, não as paredes invisíveis na beira dos penhascos), sobe por cima do Kratos quando ele está encostado numa parede e não desce abaixo dos pés dele. Muitos lugares foram feitos só para a câmera do jogo, então outros ângulos podem mostrar o fundo inacabado do cenário. Sem o launcher, defina `SPARTAN_FREE_CAMERA=1`; `SPARTAN_FREE_CAMERA_LIMITS=yaw,pitch` (graus) limita quanto ela gira. Os **ícones de botões no jogo** (desligados por padrão) são escolhidos na tela Controls do launcher, em *Ícones dos botões no jogo*: *Igual ao meu controle*, *Xbox*, *Nintendo* ou *Teclado*. Eles trocam os ícones PlayStation dos tutoriais, da lista de golpes, dos eventos rápidos e da lira das Musas na Câmara da Chama; o desenho do controle no menu de pausa continua sendo um DualShock 4. *Teclado* mostra a tecla que aperta cada botão, também na lira, seguindo o seu mapeamento do teclado (uma tecla trocada aparece no próximo início); *Igual ao meu controle* também mostra as teclas quando nenhum controle está conectado. *Cores das teclas* (no mesmo lugar) pinta as teclas do X, Círculo, Quadrado e Triângulo, na lira e nos outros ícones de teclado: *Cores do PlayStation*, ou *Personalizadas* com uma cor de uma paleta curta para cada botão; os outros ícones e o *Cinza* padrão não mudam. O launcher grava uma cópia com patch de até três arquivos do jogo (cerca de 410 MB) na pasta de dados do port e nunca altera a pasta do jogo. Um controle novo é reconhecido após reiniciar. Sem o launcher, defina `SPARTAN_GLYPH_STYLE` como `auto`, `xbox`, `nintendo` ou `keyboard` antes de iniciar o `run.sh`. No menu: L1/R1 ou Q/E trocam de aba. Na lista de saves: setas ou direcional escolhem, Enter ou Xis confirmam, Esc ou Círculo cancelam. ## Importar saves do shadPS4 Apenas **saves deste jogo no shadPS4** são compatíveis. Saves do RPCS3 pertencem ao jogo de PS3 e não funcionam. Use o mesmo identificador do jogo (este exemplo usa `CUSA01623`). 1. Feche o jogo e o shadPS4. Faça backup das duas pastas de saves. 2. No diretório de dados do shadPS4, procure `user\savedata\1\CUSA01623\` nas versões antigas, ou `home\\savedata\CUSA01623\` nas versões mais recentes. 3. O destino é **`user\savedata\1\CUSA01623\` ao lado de `SpartanPort.exe`**. Exemplo: `C:\Games\spartanport-windows\user\savedata\1\CUSA01623\`. Com uma **Saves folder** personalizada no launcher, use `\savedata\1\CUSA01623\`. 4. Copie cada pasta de slot para lá, mantendo o nome e os arquivos do jogo. Não crie outra pasta `CUSA01623` dentro dela. Exclua o `sce_sys` interno dos dados copiados. 5. Ao lado de cada slot, crie `.sce_sys` se não existir. Você pode copiar o `sce_sys\icon0.png` do shadPS4 para lá. **Não renomeie `param.sfo` para `param.bin`**: os formatos são diferentes. Preserve qualquer `param.bin` existente do port. Sem ele, o slot aparece pelo nome da pasta; salvar novamente no port grava os metadados e atualiza as informações exibidas. 6. Abra o port e selecione **Carregar jogo**. Saves com o jogo concluído também podem ser importados. O menu de saves do port exibe no máximo **32 entradas**. Se o slot importado não aparecer numa lista longa, teste com uma **Saves folder** separada contendo apenas esse slot em `savedata\1\CUSA01623\`, junto da pasta irmã de metadados. Preserve os saves originais e restaure a configuração anterior de Saves folder depois do teste. ## Overlays externos (Windows) O processo do jogo é **`bin\spartanport-probe.exe`**, não `SpartanPort.exe` (builds do código usam `out\spartanport-probe.exe`). Adicione esse executável ao RTSS e ative a exibição na tela do Afterburner. No instalador do ReShade, selecione esse executável e a API **Vulkan**. Se o overlay continuar ausente, informe as versões do port e do overlay, a última versão do port em que funcionou e envie `user\last_run.log`. Essas verificações não confirmam uma correção para todas as configurações de overlay. ## Solução de problemas - Tela preta ao abrir: use a release mais recente, que inclui o patch do deadlock na abertura. Se persistir, informe GPU, driver, build do jogo e a saída de **Advanced → Log**. Apagar o cache de shaders não é uma solução geral e exige reconstruí-lo na próxima abertura. - O jogo fecha com "cannot create ... guest memory (error 1450)", ou mais tarde com "cannot commit ... guest memory": o Windows ficou sem memória virtual para alocar o pool de memória do jogo. Aumente o arquivo de paginação: pressione **Win + R**, digite `SystemPropertiesAdvanced`, vá em Configurações de **Desempenho** → guia **Avançado** → **Memória virtual** Alterar, desmarque o gerenciamento automático, selecione a unidade **C:**, defina um tamanho personalizado (ex.: 16384 MB inicial, 24576 MB máximo), clique em **Definir**, **OK** e reinicie o PC. - O **Idioma do jogo** do launcher não muda nada: ele só vale no primeiro início do jogo. Depois, o jogo restaura os próprios idiomas de texto e de falas do save de configurações, então troque no jogo: **Opções → Configurações de jogo → Texto de jogo** e **Opções → Áudio → Falas** (por exemplo, texto em português com vozes em inglês). - O jogo não abre: veja **Advanced → Log**, ou envie o `user\last_run.log` junto com o relato. Se escolheu uma **Saves folder** personalizada, o `last_run.log` fica nessa pasta. Ao lado dele, o `last_run.jsonl` tem as mesmas linhas com a hora, o nível e a área de cada uma, para ferramentas e para saber qual evento veio primeiro; anexe os dois arquivos ao relatar um bug. - Texturas amarelas/laranjas/brancas ou iluminação errada: experimente desligar **Performance → GPU data → Deferred GPU readbacks** e reiniciar o jogo. Esse contorno pode causar travadas. - Falhas de renderização por GPU, crashes, problemas de áudio e bloqueios de progresso seguem em investigação. Consulte as [notas da release](https://github.com/FelipePrado0/SpartanPort/releases/latest) e as [issues](https://github.com/FelipePrado0/SpartanPort/issues) antes de relatar; quando relevante, inclua um save anterior ao problema. ## Desempenho e compatibilidade Testes anteriores numa AMD Radeon RX 6700 XT, Ryzen 5 5600X e 32 GB registraram 144 FPS de média (55 a 240) em 1080p com o motor a 240 FPS. São resultados de referência, não um benchmark de cada release nem garantia de desempenho em outras máquinas. **Testado e jogável do início ao fim** em 1080p nativo, com o motor a 240 FPS, na máquina de teste. Há relatos de texturas corrompidas, crashes e bloqueios de progresso em outras configurações, inclusive em 1080p. Consulte os problemas conhecidos nas notas da release. ## Compilar a partir do código ### Windows Instale o [rustup](https://rustup.rs) (stable) e o Visual Studio Build Tools com a carga "Desenvolvimento para desktop com C++"; o launcher é compilado com o cargo e não precisa de Python. Os comandos de compilação abaixo usam MSYS2 CLANG64; os comandos do launcher identificados como PowerShell rodam no Windows. O desenvolvimento acontece na branch `spartanport`; a `main` recebe as versões já testadas. 1. Instale o MSYS2 (`winget install MSYS2.MSYS2`) e, no terminal **MSYS2 CLANG64**, os pacotes listados em [packaging/windows/README.md](https://github.com/FelipePrado0/SpartanPort/blob/main/packaging/windows/README.md). 2. Clone o repositório com os submódulos e compile: ```bash git clone --recursive https://github.com/FelipePrado0/SpartanPort cd SpartanPort git checkout spartanport # development branch; omit to build main bash build.sh ``` 3. Abra o launcher (no PowerShell, na pasta do projeto): ```powershell cd launcher-rust cargo run --release ``` 4. Em **Game**, escolha a pasta do jogo e os patches. Ajuste **Graphics** e **Performance**, clique em **Save** para guardar alterações pendentes e depois em **PLAY**. Para jogar com as configurações salvas sem abrir a janela do launcher (para um atalho ou a Steam): ```powershell cd launcher-rust cargo build --release .\target\release\spartanport-launcher.exe --play ``` Ou sem as configurações do launcher, no Git Bash ou num terminal MSYS2: ```bash SPARTAN_GAME_DIR='D:\caminho\CUSA01623' bash run.sh ``` ### Linux (Ubuntu 24.04) Para um clone novo, execute os comandos abaixo num terminal Linux. O script de dependências instala pacotes do sistema usando sudo e seleciona GCC 14 como compilador padrão. O launcher precisa também do [rustup](https://rustup.rs) (stable). Ele é destinado ao Ubuntu 24.04; adapte as dependências em outras distribuições. Se já clonou, comece na pasta do repositório e pule os dois primeiros comandos. ```bash git clone --recursive https://github.com/FelipePrado0/SpartanPort cd SpartanPort bash packaging/linux/ci-deps.sh bash build.sh cd launcher-rust cargo run --release ``` Para gerar um AppImage depois de compilar: ```bash bash packaging/linux/build.sh ./dist/spartanport-x86_64.AppImage ``` O `packaging/linux/build.sh` compila o launcher em Rust sozinho. Compilar numa distribuição mais nova pode exigir uma glibc mais nova; os builds públicos usam Ubuntu 24.04. Na pasta do repositório, use `bash run.sh` para iniciar diretamente (ele compila o que falta e executa o exe do launcher com `--run`), com `SPARTAN_GAME_DIR=/caminho/para/CUSA01623` para indicar a pasta do jogo. Para as configurações salvas do launcher sem a janela, execute `launcher-rust/target/release/spartanport-launcher --play`. ### Launcher em Rust O launcher é escrito em Rust (`launcher-rust/`, iced) e é o único que os pacotes trazem. Compila com o [rustup](https://rustup.rs) (stable). No Windows, instale o Visual Studio Build Tools com a carga "Desenvolvimento para desktop com C++"; no Ubuntu, `sudo apt-get install build-essential pkg-config libwayland-dev libxkbcommon-dev`. ```bash cd launcher-rust cargo run --release ``` Aberto a partir de um checkout, ele acha sozinho as ferramentas de `out/`; `SPARTAN_PORT_DIR` aponta para um port empacotado (com `bin/`). O PLAY inicia o próprio exe do launcher com `--run`, então nada precisa de Python. No macOS, a `main` compila só o launcher (o PLAY ainda não tem jogo para iniciar); veja os passos em [launcher-rust/README.md](launcher-rust/README.md#macos) (em inglês). ## Testes Execute na raiz do repositório depois de compilar. Os primeiros testes C++ abaixo não precisam de um dump do jogo. ### Python O código Python do launcher e do runner está congelado: não é empacotado nem executado pelo port. Ele fica no repositório como referência de paridade do launcher em Rust. Os testes dele continuam rodando, com Python 3.10 ou mais novo (no Windows, no PowerShell): ```powershell python -m unittest discover -s tests -p "test_*.py" ``` ### Launcher em Rust ```bash cd launcher-rust cargo test ``` Os snapshots das páginas em `launcher-rust/snapshots/` são comparados pixel a pixel só no Windows. `python -m unittest discover -s tests -p "test_launcher_parity_doc.py"` confere que cada teste do launcher Python tem sua linha em `docs/specs/2026-10-21-rust-launcher-parity.md`. ### Testes C++ no Windows (MSYS2 CLANG64) ```bash source ./msys2-env.sh ninja -C out/gpu perf-overlay-test warmup-inbox-test graphics-settings-test out/gpu/perf-overlay-test.exe out/gpu/warmup-inbox-test.exe out/gpu/graphics-settings-test.exe ``` ### Testes C/C++ no Linux ```bash bash build.sh --test ninja -C out/gpu perf-overlay-test warmup-inbox-test graphics-settings-test out/gpu/perf-overlay-test out/gpu/warmup-inbox-test out/gpu/graphics-settings-test ``` `bash build.sh --test` executa os testes adicionais do runtime C somente no Linux. No Windows, a compilação termina antes desse bloco; use os alvos Ninja acima. ### Verificações com o jogo preparado Depois de preparar seu próprio dump, os arquivos `out/eboot.elf` e `out/boot-linked.bin` são necessários para as verificações abaixo. No MSYS2 CLANG64 do Windows, substitua o caminho de exemplo pela pasta do seu jogo: ```bash ninja -C out/gpu stat-multipliers-test out/gpu/stat-multipliers-test.exe out/eboot.elf out/spartanport-probe.exe out/boot-linked.bin --app0 "D:/Games/CUSA01623" --check-imports ``` No Linux, use `out/gpu/stat-multipliers-test` e `out/spartanport-probe`, sem `.exe`, e um caminho Linux para o jogo. `--check-imports` confere os imports do sistema e encerra sem iniciar o gameplay. Outros alvos estão em [gpu/CMakeLists.txt](https://github.com/FelipePrado0/SpartanPort/blob/main/gpu/CMakeLists.txt). ## Como funciona A parte da CPU é nativa: o executável original do jogo roda direto no processador do PC (o PS4 usa a mesma arquitetura x86-64), e um runtime escrito para este jogo substitui as bibliotecas de sistema do PS4, sem emulação de CPU. Os gráficos são traduzidos: rodam no núcleo de vídeo do [shadPS4](https://github.com/shadps4-emu/shadPS4), que converte os comandos e shaders da GPU do PS4 para Vulkan, com as correções de renderização do jogo da [branch `eltutz` de cuesta4](https://github.com/cuesta4/shadPS4/tree/eltutz). Rodar o código do jogo direto na CPU também é como o shadPS4 funciona; o que este projeto muda é a camada de sistema e o trabalho específico do jogo (patches, cache de shaders em segundo plano, launcher e menu no jogo). É um fork do [port para Windows de Supermedo](https://github.com/Supermedo/bloodborne_pc) do [bloodborne_pc de deadinside28](https://github.com/deadinside28/bloodborne_pc) (veja os [Créditos](#créditos)). - Os patches e os ganchos do menu (trapaças, multiplicadores, barra de vida) acham seus pontos por assinatura: os bytes originais em volta de cada um, onde quer que a versão do jogo tenha colocado esse código (`tools/make_signatures.py`). Um ponto que não é achado deixa só aquele patch ou gancho desligado; o jogo abre sem ele, e o log e o menu dizem o motivo. | Parte | Onde | O que faz | |---|---|---| | Preparação | `launcher-rust/src/core`, `launcher-rust/src/runner` | Lê o `eboot.bin`, aplica as realocações e junta a `libc` e a `libSceFios2` do próprio jogo numa imagem | | Loader | `src/probe.c` | Carrega a imagem, instala os ganchos conferidos (trapaças, multiplicadores, barra de vida) e inicia o código original do jogo | | Runtime | `src/runtime_*.c` | Reimplementa as funções de sistema do PS4: memória, threads, arquivos, áudio, vídeo, controle, saves e serviços | | GPU | `gpu/shadps4/` | O núcleo de vídeo do shadPS4, que traduz os comandos e shaders da GPU do PS4 para Vulkan, com as correções de cuesta4 para este jogo (branch `eltutz`) e as otimizações deste port (cache de shaders em segundo plano, leituras adiadas) | | Menu do jogo | `gpu/shim/spartanport_overlay.cpp` | Menu e contador de desempenho em Dear ImGui; configurações em `gpu/shim/spartanport_settings.cpp` | | Patches | `patches/CUSA01623.xml`, `launcher-rust/src/core` | Aplicados na memória ao iniciar, sem alterar os arquivos do jogo | | Launcher | `launcher-rust/src/ui` | Configurações, patches, mods, controles e o botão de jogar | O Python de `scripts/` e `launcher/` fica como a referência congelada da qual o código Rust foi portado; ele não é mais distribuído. Mais documentação: [mods](https://github.com/FelipePrado0/SpartanPort/blob/main/docs/MODS.pt-BR.md), [patches](https://github.com/FelipePrado0/SpartanPort/blob/main/docs/PATCHES.pt-BR.md), [mapa do quadro e histórico de pesquisa de upscalers](https://github.com/FelipePrado0/SpartanPort/blob/main/docs/upscaler.md) e [trabalho paralelo da GPU](https://github.com/FelipePrado0/SpartanPort/blob/main/docs/parallel_gpu.md). ## Créditos Este projeto é um fork do port para Windows de Supermedo, que parte do original de deadinside28: - **deadinside28**: [bloodborne_pc](https://github.com/deadinside28/bloodborne_pc), o port nativo original. - **Supermedo** (Mohammed Albarghouthi): [bloodborne_pc para Windows](https://github.com/Supermedo/bloodborne_pc), o fork de onde este projeto vem. - **cuesta4**: [fork do shadPS4 focado neste jogo](https://github.com/cuesta4/shadPS4/tree/eltutz) (branch `eltutz`). A renderização do jogo neste port depende das correções dele: a regravação de blends da GNM, o estado de profundidade e stencil e as correções de imagens que compartilham memória. cuesta4 também é coautor dos patches de resolução, correção de texturas, 120 FPS e pular vídeos (abaixo). Para jogar este jogo no shadPS4, este é o build indicado. - **Equipe do shadPS4**: o núcleo de vídeo do [shadPS4](https://github.com/shadps4-emu/shadPS4), que faz toda a tradução de GPU e shaders para Vulkan neste port. - **[WilkPrintes](https://github.com/WilkPrintes)**: criou o design e o [site do SpartanPort](https://spartanport.com/pt). Agradecimento especial por dar uma casa ao projeto. - **IFreemz** (eFMann no GitHub): [shadPS4 Bloodborne DLSS & FSR](https://github.com/eFMann/shadPS4-Bloodborne-DLSS-FSR). A ponte do DLSS e a integração dos upscalers temporais em que o DLSS, o FSR 3.1 e o FSR 4 deste port se baseiam. Patches: kvicken e cuesta4 (resolução, correção de texturas, 120 FPS e pular vídeos, a partir dos patches de PS3 de illusion0001), publicados para o shadPS4 em [shadps4-emu/ps4_cheats#145](https://github.com/shadps4-emu/ps4_cheats/pull/145) e adaptados a este executável. Os patches de 144 e 240 FPS foram adaptados por Felipe Prado a partir do de 120 FPS; o de 100 FPS é o mesmo patch com 100. Trapaças: adaptadas dos [cheats GoldHEN](https://github.com/GoldHEN/GoldHEN_Cheat_Repository) de Celogamez. Também usados: [LibAtrac9](https://github.com/Thealexbarney/LibAtrac9), [FFmpeg](https://ffmpeg.org), [SDL3](https://github.com/libsdl-org/SDL), [Dear ImGui](https://github.com/ocornut/imgui), [sirit](https://github.com/shadps4-emu/sirit), [magic_enum](https://github.com/Neargye/magic_enum), [miniz](https://github.com/richgel999/miniz), [xbyak](https://github.com/herumi/xbyak), [Vulkan Memory Allocator](https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator), [FSR-Vulkan](https://github.com/FireBurn/FSR-Vulkan) e o AMD FidelityFX SDK, [Q2RTX](https://github.com/FireBurn/Q2RTX) (os arquivos do modelo aberto do FSR 4), [MSYS2](https://www.msys2.org), [LLVM](https://llvm.org) e [Pillow](https://python-pillow.org). ## Licença GNU GPL v2 ou posterior ([LICENSE](https://github.com/FelipePrado0/SpartanPort/blob/main/LICENSE)). Componentes de terceiros mantêm suas licenças.