Skip to content

DeltaruneVita v0.62 (Internal Development Build)

Pre-release
Pre-release

Choose a tag to compare

@WolffsRoom WolffsRoom released this 23 Jul 04:46
df88bf9

Warning

Internal development build. This version is intended for testing and may still contain performance issues, visual errors, softlocks or crashes.

Pre-Release v0.62

Main changes

  • Implementação Nativa do Codec de Vídeo (sceAvPlayer):

Cutscenes do Capítulo 3 (Ex.: introdução da Tenna) utilizam chamadas GML nativas de vídeo (video_open, video_draw, video_get_status). Sem uma implementação na engine para o Vita, o jogo travava em um loop infinito no script aguardando um sinal de video_status_playing (/issues/11).

Foi escrito do zero o módulo assíncrono vita_video.c, que age como um wrapper em C para o decoder de hardware H.264 do Vita (SceAvPlayer). Isso delega 100% da decodificação de vídeo e áudio do formato .mp4 para a GPU e o DSP secundário do console.

Na thread principal de renderização, apenas capturamos o buffer de vídeo decodificado (YVU420P2_CSC1), inicializamos linearmente a textura via sceGxmTextureInitLinear e injetamos em um Quad desenhado pelo vitaGL usando interpolação bilinear. O resultado é reprodução de vídeo nativa com zero engasgos de CPU.

  • Implementação da API de Comparação Semântica GMS2.3+ (array_equals / array_copy):

O puzzle de luzes no chão da Mansão (Capítulo 2 - room_dw_mansion_darkbulb_1) estava com um "softlock" onde a resolução perfeita nunca era ativada. Investigando o bytecode, notamos que o GML do jogo usa array_equals(estadoAtual, solucao) para a validação.

A engine Butterscotch até então resolvia a comparação GML de arrays baseada em referência direta de ponteiro (a.array == b.array). Implementamos o builtin dinâmico builtin_array_equals, que executa um Deep Value Comparison. A varredura iterativa navega por cada slot da hierarquia de vetores (RValue_shallowEqual), e valida Int32, Int64, Reals e Strings individualmente por valor/hash.

Com isso, arrays de estruturas idênticas instanciados na memória são aceitos e o puzzle libera o caminho.


Compilado de Alterações das Build Anteriores (v0.58, v0.59, v0.60 e v0.61)

  • Reimplementado comportamento do botão 'C' (Triângulo, no Vita) para pular todo diálogo (/issues/11).

  • Adicionado uma opção nas configurações do jogo para ativar ou desativar isso.

  • Teste de Estresse de Alocação de Memória para Mods:
    O teto global de memória vitaTextureCacheLimit foi aumentado drasticamente de 128ULL para até 192ULL (cerca de 200MB testando os limites físicos de RAM do console em VRAM + UMA).
    As travas de downscale forçado de segurança (transformedCastleSafetyScale e chapter5SafetyScale) foram completamente removidas. Qualquer textura (incluindo atlas NPOT gigantescos sem compressão originados do Mod PT-BR) passa a ser processada em sua resolução nativa de 2048px (Original Mode) sem sofrer degradação visual, prevenindo também falhas de esgotamento de Parameter Buffer (OOM GXM) que faziam objetos desaparecerem no Castelo e na Cidade do Dark World mo Capítulo 3.

  • Transições no Carregamento de Saves:

O processo de carregar arquivos .sav congelava (frame-freeze) agressivamente na leitura de I/O em disco, entregando uma UX terrível (congelamento visual em "ROOM PLACE" até o spawn final). Integrado um novo hook no playable_main.c com uma chamada de preenchimento primitivo preto (vglSwapBuffers) disparado logo após a interceptação do input de seleção, garantindo um fade visual fluído em todas as mudanças de room.

  • Expansão do Profiler do GML :
    O monitoramento global (step_us) foi expandido de 8000ULL (8ms) para tolerantes 20000ULL (20ms).

A inicialização da geometria de colisão no começo do Capítulo 3 estava colidindo com a gravação simultânea de alertas pesados em I/O da própria engine reportando FPS baixo. Isso gerava um ciclo vicioso onde registrar a lentidão aprofundava ela (travadas severas durante navegação e menu). Agora, o log só despeja stack traces se a engine enfrentar solavancos de renderização reais e absurdos, otimizando o overhead em cenários complexos do Capítulo 3.