DeltaruneVita v0.62 (Internal Development Build)
Pre-releaseWarning
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óriavitaTextureCacheLimitfoi aumentado drasticamente de128ULLpara 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 (transformedCastleSafetyScaleechapter5SafetyScale) 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 de2048px (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 de8000ULL(8ms) para tolerantes20000ULL(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.