Автор Гілка: Зібрав Flatpak для GTA Vice City з українською озвучкою і субтитрами  (Прочитано 2178 раз)

Відсутній ps

  • Графоман
  • ****
  • дописів: 261
  • Карма: +4/-0
    • Мої дописи на DevZone
Недавно пройшов GTA3 на базі рушія re3 що реалізує нативний запуск в Linux без wine (як це робив руками - писав тут, відео)

Оскільки re3 підходить для всіх ігор цієї серії, зробив те само для Vice City а потім вирішив зібрати Flatpak бо для цієї версії є ще й українська озвучка а це годиться для повноцінного релізу десь на Толоці, бо такого на Linux (як і на Windows) я ще не зустрічав. Маніфест Flatpak розмістив в Radicle, утім всі компоненти ще досі гуляють просторами GitHub і можна замінити своїми лінками в source.

Додаю приклад, але краще слідкуйте за оновленнями в репозиторії rad:z47dq1LBSbfNAiX7UeBqf8zL85kh1

app-id: ps.GTA.VC-Andrulko-SkynetUA
runtime: org.freedesktop.Platform
runtime-version: '25.08'
sdk: org.freedesktop.Sdk
command: ps.GTA.VC-Andrulko-SkynetUA
separate-locales: false

finish-args:
  - --device=dri
  - --device=input
  - --share=ipc
  - --socket=pulseaudio
  - --socket=wayland
  - --socket=x11

modules:
  - name: premake5
    buildsystem: simple
    build-commands:
      - |
        make -f Bootstrap.mak linux
        mkdir -p "${FLATPAK_DEST}/bin"
        install "bin/release/premake5" "${FLATPAK_DEST}/bin"
    sources:
      - type: git
        url: rad://z43kgaxLn8Fc2sb7R3VgZZ7ccUe5p
        commit: 2ca338a25ed5f6e62d36c9cd70e5f313953c630d #v5.0.0-beta8

  - name: glfw
    buildsystem: cmake
    config-opts:
      - -DCMAKE_BUILD_TYPE=Release
      - -DBUILD_SHARED_LIBS=ON
      - -DGLFW_BUILD_EXAMPLES=OFF
      - -DGLFW_BUILD_TESTS=OFF
      - -DGLFW_BUILD_DOCS=OFF
    sources:
      - type: git
        url: rad://z3FCk347V5ASZ87ur2sMnmmTp4P9Q
        commit: 7b6aead9fb88b3623e3b3725ebb42670cbe4c579 #v3.4

  - name: game
    buildsystem: simple
    build-commands:
      - |
        mkdir -p "${FLATPAK_DEST}/gamefiles/TEXT"
        rm "app/GTA Vice City Trainer (v1.0).exe" "app/gta-vc.exe"
        rm "app/models/generic.txd" "app/models/particle.txd"
        rm "app/TEXT/american.gxt"
        mv "app/TEXT/ukrainian.gxt" "${FLATPAK_DEST}/gamefiles/TEXT/american.gxt"
        cp -r "app/." "${FLATPAK_DEST}/gamefiles"
    sources:
      - type: git
        url: rad://z22sMx8VdL7YSDaCdbpo5X2TMuZ1z
        branch: master

  - name: dub
    buildsystem: simple
    build-commands:
      - |
        cp -r "Audio/." "${FLATPAK_DEST}/gamefiles/Audio/"
    sources:
      - type: git
        url: rad://z2aNJ1EcoPbEaRTxsuVQXaofrEVn2
        branch: master

  - name: re3
    buildsystem: simple
    build-commands:
      - |
        mkdir -p "${FLATPAK_DEST}/share/applications"
        mkdir -p "${FLATPAK_DEST}/share/icons/hicolor/scalable/apps"

        mv "ps.GTA.VC-Andrulko-SkynetUA.desktop" "${FLATPAK_DEST}/share/applications"
        mv "res/images/logo.svg" "${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/ps.GTA.VC-Andrulko-SkynetUA.svg"
        rm -r "gamefiles/TEXT"
        cp -r "gamefiles/." "${FLATPAK_DEST}/gamefiles"

        premake5 --with-librw gmake
        cd build
        readonly CF="-O0 -fno-strict-aliasing"
        CFLAGS="${CF}" CXXFLAGS="${CF}" make config=debug_linux-amd64-librw_gl3_glfw-oal
        install ../bin/linux-amd64-librw_gl3_glfw-oal/Debug/reVC "${FLATPAK_DEST}/gamefiles"
        rm "${FLATPAK_DEST}/bin/premake5"

        readonly F="${FLATPAK_DEST}/bin/ps.GTA.VC-Andrulko-SkynetUA"
        echo '#!/bin/bash'                                    > "$F"
        echo 'if [ ! -f "${XDG_DATA_HOME}/reVC" ]; then'     >> "$F"
        echo 'cp -as "/app/gamefiles/." "${XDG_DATA_HOME}/"' >> "$F"
        echo 'fi'                                            >> "$F"
        echo 'cd "${XDG_DATA_HOME}"'                         >> "$F"
        echo 'exec $DEBUGGER ./reVC "$@"'                    >> "$F"
        chmod +x "$F"
    sources:
      - type: git
        url: rad://z3LPm3fELhq1VGX4tWHRbvP2923mT
        branch: miami-rad-linux
      - type: file
        path: ps.GTA.VC-Andrulko-SkynetUA.desktop

Це друга третя редакція, що обходить обмеження рушія, який намагається писати прямо в директорії замість окремого профілю. Хто не знає - Flatpak має сховище тільки на читання і якщо копіювати файли то вийде + 1 гігабайт простору. Отже, рішення вище створює профіль у теці ~/.var/app/ps.GTA.VC-Andrulko-SkynetUA/data наступного вмісту:


* тут ігрові набори статичні і захищені від запису а файли конфігурації, сейви, динамічно згенеровані під систему файли - доступні для редагування

Може пізніше зроблю відео на Peertube. Кому цікавий сам файл .flatpak: дзеркало 1, дзеркало 2, дзеркало 3

UPD. записав скрінкаст (чекає на модерацію).
* поки робив пару дублів, гра один раз крашнулась коли я активно "допитував" моба на демонстрацію розмови (може був відсутній або пошкоджений якийсь аудіо-файл)
на трійці нативно без flatpak такого не було, тому буду пускати гру з терміналу і дивитись дебаг.

UPD. оновлено: виправлено креш зміною білду з Release на Debug (без оптимізацій компілятора)
« Змінено: 2026-08-03 08:23:56 від ps »

Відсутній BeSiDa

  • Письменник
  • *****
  • дописів: 512
  • Карма: +7/-0
* поки робив пару дублів, гра один раз крашнулась коли я активно "допитував" моба на демонстрацію розмови (може був відсутній або пошкоджений якийсь аудіо-файл)
на трійці нативно без flatpak такого не було, тому буду пускати гру з терміналу і дивитись дебаг.
Мабуть щось записує до одного з каталогів що ріад-онлі. Може щоб розмови не повторювалися постійно. Або вірус вбудований :)

Відсутній Tamer4

  • Новачок
  • *
  • дописів: 26
  • Карма: +4/-0
посилання на peertube не працює, пише:
"401.Ви тут не авторизовані.
Можливо, вам знадобиться увійти, щоб переглянути ресурс."
з федіверсу теж не бачу його в пошуку. Чи це у них саме через модерацію змінилось посилання на https://peertube.in.ua/w/1RUVtyfhSS8jNP5x4JuCXH
« Змінено: 2026-07-23 13:08:39 від Tamer4 »

Відсутній ps

  • Графоман
  • ****
  • дописів: 261
  • Карма: +4/-0
    • Мої дописи на DevZone
Цитата
посилання на peertube не працює
Цитата
записав скрінкаст (чекає на модерацію)
просто додав наперед бо адмін там то є то нема, минулого разу чекав з суботи здається

а те відео що ви знайшли воно не демонструє озвучку голосу, там просто шматок гри, яку я ще пускав нативно (не знав про повну локалізацію)
я його хотів дропнути і замінити ось цим та модер вже схвалив хай буде

* поки робив пару дублів, гра один раз крашнулась коли я активно "допитував" моба на демонстрацію розмови (може був відсутній або пошкоджений якийсь аудіо-файл)
на трійці нативно без flatpak такого не було, тому буду пускати гру з терміналу і дивитись дебаг.
Мабуть щось записує до одного з каталогів що ріад-онлі. Може щоб розмови не повторювалися постійно. Або вірус вбудований :)
Може й вірус, ігровий набір взяв тут - на толоці вже знаходив вірусняки в clamav, правда в цьому випадку мовчить. Взагалі якщо він і писатиме то в теку профілю, як і у випадку "динаміки" сейвів, ігрового кешу. Самому цікаво але думаю це банально відсутність якоїсь залежності бо набір все-таки взятий зі збірки а озвучку як видно по компоненту "dub" я вже натягую з репозиторію, який створив з архіву на kuli.com.ua (в кожному readme.md вказане джерело)
« Змінено: 2026-07-23 15:53:01 від ps »

Відсутній BeSiDa

  • Письменник
  • *****
  • дописів: 512
  • Карма: +7/-0
Може й вірус
Взагалі якщо він і писатиме то в теку профілю, як і у випадку "динаміки" сейвів, ігрового кешу.
Може бути під іншу ос і тому крешиться, тому не знайде куди писати чи взагалі не пише себе, а лише у пам'яті щось намагається змінити в ос.

Відсутній ps

  • Графоман
  • ****
  • дописів: 261
  • Карма: +4/-0
    • Мої дописи на DevZone
Це реверсний рушій re3 на с++ він працюватиме й на Android, та гілка з якої зібраний саме цей порт Linux взагалі розроблявся для Haiku OS (для гілки miami я тільки доповнив заголовки)
« Змінено: 2026-07-23 21:36:00 від ps »

Відсутній yvs115

  • Графоман
  • ****
  • дописів: 386
  • Карма: +15/-0
Цитата
щось намагається змінити
"Press and hold the Antivirus-button for a few seconds"
- з інструкції аборигенів диску Це

Відсутній BeSiDa

  • Письменник
  • *****
  • дописів: 512
  • Карма: +7/-0
Це реверсний рушій re3 на с++
Вірус може бути не частиною рушія, а частиною контенту, експлоїт аудіо кодека чи кодеків зображення. Його не "портували" :)

Відсутній ps

  • Графоман
  • ****
  • дописів: 261
  • Карма: +4/-0
    • Мої дописи на DevZone
Стосовно вірусів, то я користуюсь наступною стратегією при використанні ігрових наборів з торентів:

1. намагаюсь обирати якомога старіший торент (по даті створення) - тобто багато ігор сьогодні мають дату -20 років, коли трояни писались під win і ще не було поширення Linux а різні copyfail ще не були відомі
2. запуск з пісочниці, де окрім прав доступу ще відключено мережу (конкретно цей флетпак я зібрав якраз щоб від такої пісочниці відмовитись бо поставив LocalTranslate і всеодно підтягнув в систему Flatpak)
3. віднедавна відкрив для себе хеш-суми GOG, по ним можна звірити деякі релізи (GOG цю опцію вже прибрали і хеш можна звірити тільки якщо купив гру в маркеті)

UPD 1. заліз в дебагер:

flatpak run --devel --command=sh ps.GTA.VC-Andrulko-SkynetUA
echo ${XDG_DATA_HOME}
cd ~/.var/app/ps.GTA.VC-Andrulko-SkynetUA/data
[📦 ps.GTA.VC-Andrulko-SkynetUA data]$ gdb ./reVC

..
[DBG]: CCarGenerator::DoInternalProcessing - can't find ground z for new car x = 309.200012 y = 1204.400024
[DBG]: CCarGenerator::DoInternalProcessing - can't find ground z for new car x = 309.200012 y = 1204.400024
[DBG]: CCarGenerator::DoInternalProcessing - can't find ground z for new car x = 309.200012 y = 1204.400024
[DBG]: CCarGenerator::DoInternalProcessing - can't find ground z for new car x = 309.200012 y = 1204.400024
[DBG]: Request Ped BFYRI
[DBG]: Remove Ped BFYST
Start loading mule
Finish loading mule
[DBG]: CCarGenerator::DoInternalProcessing - can't find ground z for new car x = 309.200012 y = 1204.400024
[DBG]: CCarGenerator::DoInternalProcessing - can't find ground z for new car x = 309.200012 y = 1204.400024
[DBG]: CCarGenerator::DoInternalProcessing - can't find ground z for new car x = 309.200012 y = 1204.400024
[DBG]: CCarGenerator::DoInternalProcessing - can't find ground z for new car x = 309.200012 y = 1204.400024
[DBG]: CCarGenerator::DoInternalProcessing - can't find ground z for new car x = 309.200012 y = 1204.400024
[DBG]: CCarGenerator::DoInternalProcessing - can't find ground z for new car x = 309.200012 y = 1204.400024
[DBG]: CCarGenerator::DoInternalProcessing - can't find ground z for new car x = 309.200012 y = 1204.400024
[DBG]: CCarGenerator::DoInternalProcessing - can't find ground z for new car x = 309.200012 y = 1204.400024
[DBG]: CCarGenerator::DoInternalProcessing - can't find ground z for new car x = 309.200012 y = 1204.400024
[DBG]: CCarGenerator::DoInternalProcessing - can't find ground z for new car x = 309.200012 y = 1204.400024
[DBG]: CCarGenerator::DoInternalProcessing - can't find ground z for new car x = 309.200012 y = 1204.400024
[DBG]: CCarGenerator::DoInternalProcessing - can't find ground z for new car x = 309.200012 y = 1204.400024
[DBG]: CCarGenerator::DoInternalProcessing - can't find ground z for new car x = 309.200012 y = 1204.400024
[DBG]: CCarGenerator::DoInternalProcessing - can't find ground z for new car x = 309.200012 y = 1204.400024
[DBG]: nbhotel08.txd took 8 ms
[DBG]: Request Ped WFYRI
[DBG]: Remove Ped WFYST
Start loading sentinel
Finish loading sentinel
[DBG]: Request Ped HMYST
[DBG]: Remove Ped HFOST
[DBG]: colmodel nbt_mansion01 is huge, size 24476
[DBG]: colmodel nbeachbit04 is huge, size 17204
[DBG]: colmodel nbt_hotel05 is huge, size 24796
[DBG]: colmodel nbt_mansionbase02 is huge, size 21172
[DBG]: colmodel nbeachbit04b is huge, size 19884
[DBG]: colmodel nbt_road11 is huge, size 15428

Thread 1 "reVC" received signal SIGSEGV, Segmentation fault.
0x000055555588d280 in CustomPipes::customFindCB (name=0x7fffffffd140 "shpfrnts3rail01") at ../src/extras/custompipes.cpp:522
522 rw::Texture *res = defaultFindCB(name);

Finish loading sentinel
[DBG]: Request Ped HMYST
[DBG]: Remove Ped HFOST
[DBG]: colmodel nbt_mansion01 is huge, size 24476
[DBG]: colmodel nbeachbit04 is huge, size 17204
[DBG]: colmodel nbt_hotel05 is huge, size 24796
[DBG]: colmodel nbt_mansionbase02 is huge, size 21172
[DBG]: colmodel nbeachbit04b is huge, size 19884
[DBG]: colmodel nbt_road11 is huge, size 15428

Thread 1 "reVC" received signal SIGSEGV, Segmentation fault.
0x000055555588d280 in CustomPipes::customFindCB (name=0x7fffffffd140 "shpfrnts3rail01") at ../src/extras/custompipes.cpp:522
522 rw::Texture *res = defaultFindCB(name);

(gdb) bt
#0  0x000055555588d280 in CustomPipes::customFindCB (name=0x7fffffffd140 "shpfrnts3rail01") at ../src/extras/custompipes.cpp:522
#1  0x0000555555905f1b in rw::Texture::read (name=0x7fffffffd140 "shpfrnts3rail01", mask=0x7fffffffd1c0 "shpfrnts3rail01a") at ../vendor/librw/src/texture.cpp:339
#2  0x0000555555906175 in rw::Texture::streamRead (stream=stream@entry=0x55555b186050) at ../vendor/librw/src/texture.cpp:407
#3  0x00005555558d9a8c in rw::Material::streamRead (stream=stream@entry=0x55555b186050) at ../vendor/librw/src/geometry.cpp:952
#4  0x00005555558d9e0e in rw::MaterialList::streamRead (stream=stream@entry=0x55555b186050, matlist=matlist@entry=0x55555b971a80) at ../vendor/librw/src/geometry.cpp:796
#5  0x00005555558da0d2 in rw::Geometry::streamRead (stream=stream@entry=0x55555b186050) at ../vendor/librw/src/geometry.cpp:189
#6  0x00005555558d1668 in rw::Clump::streamRead (stream=stream@entry=0x55555b186050) at ../vendor/librw/src/clump.cpp:210
#7  0x000055555589aaf9 in RpClumpStreamRead (stream=stream@entry=0x55555b186050) at ../src/fakerw/fake.cpp:754
#8  0x0000555555695928 in CFileLoader::LoadAtomicFile (stream=stream@entry=0x55555b186050, id=id@entry=4241) at ../src/core/FileLoader.cpp:530
#9  0x000055555583100c in CStreaming::ConvertBufferToObject (buf=<optimized out>, streamId=streamId@entry=4241) at ../src/core/Streaming.cpp:554
#10 0x0000555555835e9c in CStreaming::ProcessLoadingChannel (ch=ch@entry=1) at ../src/core/Streaming.cpp:2230
#11 0x0000555555837bd3 in CStreaming::ProcessLoadingChannel (ch=<optimized out>) at ../src/core/Streaming.cpp:2195
#12 CStreaming::LoadRequestedModels () at ../src/core/Streaming.cpp:2304
#13 CStreaming::Update () at ../src/core/Streaming.cpp:353
#14 0x00005555556cb8e0 in CGame::Process () at ../src/core/Game.cpp:868
#15 0x00005555558a174c in Idle (arg=0x1) at ../src/core/main.cpp:1540
#16 0x00005555558a20f0 in AppEventHandler (event=<optimized out>, param=<optimized out>) at ../src/core/main.cpp:1784
#17 0x00005555558bff77 in RsEventHandler (event=rsIDLE, param=0x1) at ../src/skel/skeleton.cpp:210
#18 0x0000555555584c09 in main (argc=<optimized out>, argv=<optimized out>) at ../src/skel/glfw/glfw.cpp:2347

Схоже причина таки у відсутності або не відповідності деяких ігрових файлів, хоча жодного разу без Flatpak не падало (але й грав мало, всього 5 місій пройшов). Так чи інакше, піду тепер по цьому бектрейсу подивлюсь сорс, може вийде обробити вказівники.

P.S. ColourFilter=0,1 / PS2AlphaTest=0 в reVC.ini не допомогло (тільки перетворило неони VC в сіру трійку)

UPD 1.1. нагуглив інфу по фільтрам ColourFilter

0 - None (Чиста картинка без фільтрації кольорів).
1 - Normal / PC (Оригінальний колірний фільтр ПК-версії гри).
2 - PS2 (Кастомний помаранчево-рожевий теплий фільтр з ефектом марева, який був ексклюзивом для консолі PlayStation 2) mrxenginner/reVC - стандартно для @robante15.
3 - Xbox (Специфічна насичена гамма з оригінальної консолі Xbox) mrxenginner/reVC.

UPD 2. Судячи з (gdb) bt, причина може бути в затримці слабкого заліза при ініціації моделей (адже почав помічати проблему записуючи відео в OBS, коли без Flatpak на Wayland воно відпрацьовувало швидше) Тому думаю це проблема таймінгу / unexpected behavior. Поки тестую такий код в src/extras/custompipes.cpp

static rw::Texture*
customFindCB(const char *name)
{
rw::Texture *res = nil; // оголосив дефолт

if(defaultFindCB != nil) // додав перевірку ініціації
res = defaultFindCB(name);

if(res == nil)
res = genericTxd->find(name);

return res;
}

  * задумка повертати null на обробку рушію, замість звернення в пустоту при виклику не проініційованого defaultFindCB

UPD 2.1. Власне я обійшов ці вильоти іншою, але схожою обробкою відсутніх ресурсів, але тоді в грі зникають звукові ефекти і врешті вона крашиться рівнем вище.

Тут я згадав що причиною можуть бути імпортовані сейви, в яких закешувались якісь некоректні шляхи зі старої системи: спробував пройти п'ять місій від початку і піймав краш. Тому для галочки - не воно, перевірив.

Ще одним нюансом є те, що на Flatpak гра дебажить ось такі повідомлення
casepath couldn't find dir/file "MUSIC", full path was AUDIO\MUSIC\CITY.VB* це може бути суто якесь обмеження регістру файлової системи Flatpak..

Ну і ще: спробував відкотитись на версію маніфесту що копіює набори в профіль (у сподіванні що причина в симлінках і їх 'абсолютизації' рушієм) - не спрацювало.

Тому таке, шкода - рано анонсував бо на перший погляд все працювало.

UPD 3. Вирішив звірити коміти для гілки master (re3) яких там 277 і деякі стосуються librw. При нативному запуску GTA 3 я не помічав жодних проблем, пройшовши повністю. Тому вирішив зібрати ще й "ванільний" маніфест для цієї версії і спробувати піймати вильот на трійці. Маніфест ps.GTA.re3.yml лежатиме поряд в репозиторії та закріплю тут його копію, якщо хтось хоче підставити свої сорси:

app-id: ps.GTA.re3
runtime: org.freedesktop.Platform
runtime-version: '25.08'
sdk: org.freedesktop.Sdk
command: ps.GTA.re3
separate-locales: false

finish-args:
  - --device=dri
  - --device=input
  - --share=ipc
  - --socket=pulseaudio
  - --socket=wayland
  - --socket=x11

modules:
  - name: premake5
    buildsystem: simple
    build-commands:
      - |
        make -f Bootstrap.mak linux
        mkdir -p "${FLATPAK_DEST}/bin"
        install "bin/release/premake5" "${FLATPAK_DEST}/bin"
    sources:
      - type: git
        url: rad://z43kgaxLn8Fc2sb7R3VgZZ7ccUe5p
        commit: 2ca338a25ed5f6e62d36c9cd70e5f313953c630d #v5.0.0-beta8

  - name: glfw
    buildsystem: cmake
    config-opts:
      - -DCMAKE_BUILD_TYPE=Release
      - -DBUILD_SHARED_LIBS=ON
      - -DGLFW_BUILD_EXAMPLES=OFF
      - -DGLFW_BUILD_TESTS=OFF
      - -DGLFW_BUILD_DOCS=OFF
    sources:
      - type: git
        url: rad://z3FCk347V5ASZ87ur2sMnmmTp4P9Q
        commit: 7b6aead9fb88b3623e3b3725ebb42670cbe4c579 #v3.4

  - name: re3
    buildsystem: simple
    build-commands:
      - |
        mkdir -p "${FLATPAK_DEST}/gamefiles"
        mkdir -p "${FLATPAK_DEST}/share/applications"
        mkdir -p "${FLATPAK_DEST}/share/icons/hicolor/scalable/apps"

        mv "ps.GTA.re3.desktop" "${FLATPAK_DEST}/share/applications"
        mv "res/images/logo.svg" "${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/ps.GTA.re3.svg"

        premake5 --with-librw gmake
        cd build
        make config=debug_linux-amd64-librw_gl3_glfw-oal
        install "../bin/linux-amd64-librw_gl3_glfw-oal/Debug/re3" "${FLATPAK_DEST}/gamefiles"
        cp -r "../gamefiles/." "${FLATPAK_DEST}/gamefiles/"
        rm "${FLATPAK_DEST}/bin/premake5"

        readonly F="${FLATPAK_DEST}/bin/ps.GTA.re3"
        echo '#!/bin/bash'                                    > "$F"
        echo 'if [ ! -f "${XDG_DATA_HOME}/re3" ]; then'      >> "$F"
        echo 'cp -as "/app/gamefiles/." "${XDG_DATA_HOME}/"' >> "$F"
        echo 'fi'                                            >> "$F"
        echo 'if [ ! -d "${XDG_DATA_HOME}/audio" ]; then'    >> "$F"
        echo 'echo "Copy game asset to ${XDG_DATA_HOME}!"'   >> "$F"
        echo 'exit 1'                                        >> "$F"
        echo 'fi'                                            >> "$F"
        echo 'cd "${XDG_DATA_HOME}"'                         >> "$F"
        echo 'exec $DEBUGGER ./re3 "$@"'                     >> "$F"
        chmod +x "$F"
    sources:
      - type: git
        url: rad://z3LPm3fELhq1VGX4tWHRbvP2923mT
        branch: rad
      - type: file
        path: ps.GTA.re3.desktop
* у цьому наборі користувач сам встановлює ігрові набори і локалізацію в `~/.var/app/ps.GTA.re3/data` (особисто я грав на цій версії)
* .flatpak (sum)
« Змінено: 2026-07-27 07:11:19 від ps »

Відсутній BeSiDa

  • Письменник
  • *****
  • дописів: 512
  • Карма: +7/-0
Цитата
defaultFindCB
А ви додавали друкування значення? Може там не нулл, а якесь число, яке посилається на розділ пам'яті що вже встигли звільнити?
Коли багато, то лише для тієї назви, що зазначена у змінній нейм.
Може той кол-бек і не існував? Чи може існував, але деякий час?

Відсутній ps

  • Графоман
  • ****
  • дописів: 261
  • Карма: +4/-0
    • Мої дописи на DevZone
Цитата
А ви додавали друкування значення? Може там не нулл, а якесь число, яке посилається на розділ пам'яті що вже встигли звільнити?

По ходу сміття / непроініційована пам'ять:
Thread 1 "reVC" received signal SIGSEGV, Segmentation fault.
0x000055555588d280 in CustomPipes::customFindCB (name=0x7fffffffd0c0 "reefer86speca") at ../src/extras/custompipes.cpp:522
522 rw::Texture *res = defaultFindCB(name);
(gdb) bt
#0  0x000055555588d280 in CustomPipes::customFindCB (name=0x7fffffffd0c0 "reefer86speca") at ../src/extras/custompipes.cpp:522
#1  0x0000555555905f1b in rw::Texture::read (name=0x7fffffffd0c0 "reefer86speca", mask=0x7fffffffd140 "") at ../vendor/librw/src/texture.cpp:339
#2  0x0000555555906175 in rw::Texture::streamRead (stream=stream@entry=0x55555b8fced0) at ../vendor/librw/src/texture.cpp:407
#3  0x00005555558f33c9 in rw::readMaterialMatFX (stream=0x55555b8fced0, object=<optimized out>, offset=<optimized out>) at ../vendor/librw/src/matfx.cpp:461
#4  0x00005555558f5bf0 in rw::PluginList::streamRead (this=this@entry=0x555555e93c30 <rw::Material::s_plglist>, stream=stream@entry=0x55555b8fced0, object=object@entry=0x555556ef0140)
    at ../vendor/librw/src/plg.cpp:89
#5  0x00005555558d9aab in rw::Material::streamRead (stream=stream@entry=0x55555b8fced0) at ../vendor/librw/src/geometry.cpp:956
#6  0x00005555558d9e0e in rw::MaterialList::streamRead (stream=stream@entry=0x55555b8fced0, matlist=matlist@entry=0x55555abc99a0) at ../vendor/librw/src/geometry.cpp:796
#7  0x00005555558da0d2 in rw::Geometry::streamRead (stream=stream@entry=0x55555b8fced0) at ../vendor/librw/src/geometry.cpp:189
#8  0x000055555589a969 in RpGeometryStreamRead (stream=stream@entry=0x55555b8fced0) at ../src/fakerw/fake.cpp:717
#9  0x000055555563bd40 in GeometryListStreamRead1 (stream=stream@entry=0x55555b8fced0, geomlist=geomlist@entry=0x555555a1b5d0 <gGeomList>) at ../src/rw/ClumpRead.cpp:50
#10 0x000055555563c207 in RpClumpGtaStreamRead1 (stream=stream@entry=0x55555b8fced0) at ../src/rw/ClumpRead.cpp:162
#11 0x0000555555695831 in CFileLoader::StartLoadClumpFile (stream=stream@entry=0x55555b8fced0, id=id@entry=183) at ../src/core/FileLoader.cpp:495
#12 0x000055555583113c in CStreaming::ConvertBufferToObject (buf=<optimized out>, streamId=streamId@entry=183) at ../src/core/Streaming.cpp:559
#13 0x0000555555835e9c in CStreaming::ProcessLoadingChannel (ch=ch@entry=0) at ../src/core/Streaming.cpp:2230
#14 0x0000555555837bd3 in CStreaming::ProcessLoadingChannel (ch=<optimized out>) at ../src/core/Streaming.cpp:2195
#15 CStreaming::LoadRequestedModels () at ../src/core/Streaming.cpp:2304
#16 CStreaming::Update () at ../src/core/Streaming.cpp:353
#17 0x00005555556cb8e0 in CGame::Process () at ../src/core/Game.cpp:868
#18 0x00005555558a174c in Idle (arg=0x1) at ../src/core/main.cpp:1540
#19 0x00005555558a20f0 in AppEventHandler (event=<optimized out>, param=<optimized out>) at ../src/core/main.cpp:1784
#20 0x00005555558bff77 in RsEventHandler (event=rsIDLE, param=0x1) at ../src/skel/skeleton.cpp:210
#21 0x0000555555584c09 in main (argc=<optimized out>, argv=<optimized out>) at ../src/skel/glfw/glfw.cpp:2347
(gdb) print defaultFindCB
$1 = (rw::Texture *(*)(const char *)) 0x46004600210021
(gdb) disassemble
Dump of assembler code for function CustomPipes::customFindCB(char const*):
   0x000055555588d270 <+0>: endbr64
   0x000055555588d274 <+4>: push   %rbp
   0x000055555588d275 <+5>: mov    %rsp,%rbp
   0x000055555588d278 <+8>: push   %rbx
   0x000055555588d279 <+9>: mov    %rdi,%rbx
   0x000055555588d27c <+12>: sub    $0x8,%rsp
=> 0x000055555588d280 <+16>: call   *0x52d25a(%rip)        # 0x555555dba4e0 <_ZN11CustomPipes13defaultFindCBE>
   0x000055555588d286 <+22>: test   %rax,%rax
   0x000055555588d289 <+25>: je     0x55555588d298 <CustomPipes::customFindCB(char const*)+40>
   0x000055555588d28b <+27>: mov    -0x8(%rbp),%rbx
   0x000055555588d28f <+31>: leave
   0x000055555588d290 <+32>: ret
   0x000055555588d291 <+33>: nopl   0x0(%rax)
   0x000055555588d298 <+40>: mov    0x52d249(%rip),%rdi        # 0x555555dba4e8 <_ZN11CustomPipes10genericTxdE>
   0x000055555588d29f <+47>: mov    %rbx,%rsi
   0x000055555588d2a2 <+50>: mov    -0x8(%rbp),%rbx
   0x000055555588d2a6 <+54>: leave
   0x000055555588d2a7 <+55>: jmp    0x555555905ad0 <_ZN2rw13TexDictionary4findEPKc>
End of assembler dump.
(gdb) x/10i defaultFindCB
   0x46004600210021: ❌️ Cannot access memory at address 0x46004600210021

Поки збирав, спробував ще порівняти набори Толоки з іншою версією Steam (1.1 / Build 2745) - відрізняються тільки файли:
modified:   app/models/fonts.txd
modified:   app/models/fronten1.txd
modified:   app/models/hud.txd
modified:   app/txd/INTRO3.TXD
modified:   app/txd/LOADSC0.TXD
modified:   app/txd/SPLASH1.TXD
modified:   app/txd/SPLASH2.TXD
modified:   app/txd/intro1.txd
modified:   app/txd/intro2.txd
modified:   app/txd/intro4.txd
* тобто набір виглядає повноцінним, все інше - кастомізації локалізованої збірки; загублених моделей немає.

Згадав, що нативно я грав на Debug з вимкненою оптимізацією! А потім робив маніфест і побачив це, вирішив що варто зробити Release (та з досвіду лікнутого Source engine це має велике значення)
« Змінено: 2026-07-27 01:51:12 від ps »

Відсутній BeSiDa

  • Письменник
  • *****
  • дописів: 512
  • Карма: +7/-0
Цитата
0x46004600210021
Схоже на якийсь колір з текстури бо числа повторюються
0x 0046 0046 0021 0021
Може пошукати цю послідовність у тих файлах? Здається якісь дані були завеликі та перезаписали дані вказівника.
Ще можна надрукувати частину пам'яті навколо того вказівника функції та визначити що зберігалося у пам'яті поруч з ним.

Відсутній ps

  • Графоман
  • ****
  • дописів: 261
  • Карма: +4/-0
    • Мої дописи на DevZone
Схоже причина таки виявилась в збірці Debug

але ще додав деякі опції компілятора, бо якщо залізти в згенерований Makefile (що у .flatpak-builder) то для Debug там немає явного відключення оптимізацій "-O0" а збірка відбувається на іншому середовищі Freedesktop замість Fedora 44. опція "-fno-strict-aliasing" ймовірно теж має значення, вже втомився тестуючи перепроходити один і той само глючний шматок місії, хай поки буде так.

Підсумовуючи:

readonly CF="-O0 -fno-strict-aliasing"
CFLAGS="${CF}" CXXFLAGS="${CF}" make config=debug_linux-amd64-librw_gl3_glfw-oal

Обидва маніфести оновив, .flatpak перезібрав, буду тестить.

Відсутній ps

  • Графоман
  • ****
  • дописів: 261
  • Карма: +4/-0
    • Мої дописи на DevZone
Можу підтвердити, що тепер гра працює стабільно. Вирішив ще зробити локалізоване лого для релізу і анонсів (вкладення)

Також перезібрав .flatpak за посиланням і наведу приклад поточного маніфесту окремо бо переніс десктоп-набори в окремий неймспейс і їх не буде видно у прикладі. В ньому видалив зайвий зайвий cflags -fno-strict-aliasing, додав лого, вніс деякі оптимізації типу заміни cp/chmod на install а ще додав хеші в RELEASE на випадок якщо захочете звірити інсталятор старої версії (дублюю нижче)

ps.GTA.VC-Andrulko-SkynetUA

app-id: ps.GTA.VC-Andrulko-SkynetUA
runtime: org.freedesktop.Platform
runtime-version: '25.08'
sdk: org.freedesktop.Sdk
command: ps.GTA.VC-Andrulko-SkynetUA
separate-locales: false

finish-args:
  - --device=dri
  - --device=input
  - --share=ipc
  - --socket=pulseaudio
  - --socket=wayland
  - --socket=x11

modules:
  - name: premake5
    buildsystem: simple
    build-commands:
      - |
        make -f Bootstrap.mak linux
        mkdir -p "${FLATPAK_DEST}/bin"
        install "bin/release/premake5" "${FLATPAK_DEST}/bin"
    sources:
      - type: git
        url: rad://z43kgaxLn8Fc2sb7R3VgZZ7ccUe5p
        commit: 2ca338a25ed5f6e62d36c9cd70e5f313953c630d #v5.0.0-beta8

  - name: glfw
    buildsystem: cmake
    config-opts:
      - -DCMAKE_BUILD_TYPE=Release
      - -DBUILD_SHARED_LIBS=ON
      - -DGLFW_BUILD_EXAMPLES=OFF
      - -DGLFW_BUILD_TESTS=OFF
      - -DGLFW_BUILD_DOCS=OFF
    sources:
      - type: git
        url: rad://z3FCk347V5ASZ87ur2sMnmmTp4P9Q
        commit: 7b6aead9fb88b3623e3b3725ebb42670cbe4c579 #v3.4

  - name: game
    buildsystem: simple
    build-commands:
      - |
        mkdir -p "${FLATPAK_DEST}/gamefiles/TEXT"
        rm "app/GTA Vice City Trainer (v1.0).exe" "app/gta-vc.exe"
        rm "app/models/generic.txd" "app/models/particle.txd"
        rm "app/TEXT/american.gxt"
        mv "app/TEXT/ukrainian.gxt" "${FLATPAK_DEST}/gamefiles/TEXT/american.gxt"
        cp -r "app/." "${FLATPAK_DEST}/gamefiles"
    sources:
      - type: git
        url: rad://z22sMx8VdL7YSDaCdbpo5X2TMuZ1z
        branch: master

  - name: dub
    buildsystem: simple
    build-commands:
      - |
        cp -r "Audio/." "${FLATPAK_DEST}/gamefiles/Audio/"
    sources:
      - type: git
        url: rad://z2aNJ1EcoPbEaRTxsuVQXaofrEVn2
        branch: master

  - name: re3
    buildsystem: simple
    build-commands:
      - |
        mkdir -p "${FLATPAK_DEST}/share/applications"
        mkdir -p "${FLATPAK_DEST}/share/icons/hicolor/scalable/apps"

        install "ps.GTA.VC-Andrulko-SkynetUA.desktop" "${FLATPAK_DEST}/share/applications"
        install "ps.GTA.VC-Andrulko-SkynetUA.svg" "${FLATPAK_DEST}/share/icons/hicolor/scalable/apps"
        install "ps.GTA.VC-Andrulko-SkynetUA" "${FLATPAK_DEST}/bin"

        rm -r "gamefiles/TEXT"
        cp -r "gamefiles/." "${FLATPAK_DEST}/gamefiles"

        premake5 --with-librw gmake
        cd build
        CFLAGS="-O0" CXXFLAGS="-O0" make config=debug_linux-amd64-librw_gl3_glfw-oal
        install ../bin/linux-amd64-librw_gl3_glfw-oal/Debug/reVC "${FLATPAK_DEST}/gamefiles"
        rm "${FLATPAK_DEST}/bin/premake5"
    sources:
      - type: git
        url: rad://z3LPm3fELhq1VGX4tWHRbvP2923mT
        branch: miami-rad-linux
      - type: dir
        path: ps.GTA.VC-Andrulko-SkynetUA

version | md5                              | sha256
--------|----------------------------------|-----------------------------------------------------------------
1       | f198bc8495acbb6aa40c3c09b5d9fddd | c271aec58f9b34f686c761a7561040609c85adf5b96066224c1f92581ebc14f0
2       | b972f1fe7d24fc84014f559ffbf6031c | dcd006ceef729a012c0d1ec8351fe303e874b301e19672979afb5ea1dad8cf5d
3       | bb035daa43ae6dceba733d3c28ae145c | 47f1b339243a8132eb6193680dcf644b23d48a4abf8d2c202d3ae03e1ff0e127
4       | 41d8303cf55a30d35a39b49811928882 | 2fc8d3a8a988e134640a77dfd8031558be78caa9148e89ca0e87bcbd8970192e

ps.GTA.re3 (vanilla)

app-id: ps.GTA.re3
runtime: org.freedesktop.Platform
runtime-version: '25.08'
sdk: org.freedesktop.Sdk
command: ps.GTA.re3
separate-locales: false

finish-args:
  - --device=dri
  - --device=input
  - --share=ipc
  - --socket=pulseaudio
  - --socket=wayland
  - --socket=x11

modules:
  - name: premake5
    buildsystem: simple
    build-commands:
      - |
        make -f Bootstrap.mak linux
        mkdir -p "${FLATPAK_DEST}/bin"
        install "bin/release/premake5" "${FLATPAK_DEST}/bin"
    sources:
      - type: git
        url: rad://z43kgaxLn8Fc2sb7R3VgZZ7ccUe5p
        commit: 2ca338a25ed5f6e62d36c9cd70e5f313953c630d #v5.0.0-beta8

  - name: glfw
    buildsystem: cmake
    config-opts:
      - -DCMAKE_BUILD_TYPE=Release
      - -DBUILD_SHARED_LIBS=ON
      - -DGLFW_BUILD_EXAMPLES=OFF
      - -DGLFW_BUILD_TESTS=OFF
      - -DGLFW_BUILD_DOCS=OFF
    sources:
      - type: git
        url: rad://z3FCk347V5ASZ87ur2sMnmmTp4P9Q
        commit: 7b6aead9fb88b3623e3b3725ebb42670cbe4c579 #v3.4

  - name: re3
    buildsystem: simple
    build-commands:
      - |
        mkdir -p "${FLATPAK_DEST}/gamefiles"
        mkdir -p "${FLATPAK_DEST}/share/applications"
        mkdir -p "${FLATPAK_DEST}/share/icons/hicolor/scalable/apps"

        mv "res/images/logo.svg" "${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/ps.GTA.re3.svg"
        mv "ps.GTA.re3.desktop" "${FLATPAK_DEST}/share/applications"
        install "ps.GTA.re3" "${FLATPAK_DEST}/bin"

        premake5 --with-librw gmake
        cd build
        CFLAGS="-O0" CXXFLAGS="-O0" make config=debug_linux-amd64-librw_gl3_glfw-oal
        install "../bin/linux-amd64-librw_gl3_glfw-oal/Debug/re3" "${FLATPAK_DEST}/gamefiles"
        cp -r "../gamefiles/." "${FLATPAK_DEST}/gamefiles/"
        rm "${FLATPAK_DEST}/bin/premake5"
    sources:
      - type: git
        url: rad://z3LPm3fELhq1VGX4tWHRbvP2923mT
        branch: rad
      - type: dir
        path: ps.GTA.re3

version | md5                              | sha256
--------|----------------------------------|-----------------------------------------------------------------
1       | 9b83b5523df199a33764280c072c7753 | 6103ac43683c5655c556657bd56350314275a8cb1cdd44768ff66e683e9a1535
2       | e9126939e60e4ebe0e72b3dfdbab4d1d | ab0d5447fb2c44c77e3ab525cfd93eee843f9147950a01cc8528c05d202939e4
3       | cdfdf68dce06ecbb11ad4f4e5b6ff195 | 5e97a58c5483c110b5d71e50cc5f5b7a531d822bc2240a8fc07a2fc5a5f9a247
« Змінено: 2026-07-29 00:42:23 від ps »

Відсутній ps

  • Графоман
  • ****
  • дописів: 261
  • Карма: +4/-0
    • Мої дописи на DevZone
Гра знову крашнулась. Поки розбираюсь, вияснив що це стається при використанні кастомної озвучки і якщо повернути до оригінального набору (англійською) то все працює.
Не знаю як реалізовано цей рушій, та деякі треки мають різну довжину, якщо її обробка десь прошита в коді то ймовірно відбувається вихід за межі буферу.

Вирішив порівняти, результати чіпляю у вкладення - як видно там різниця є всюди але гра всюди не крашиться:
#!/bin/bash

find /path/to/EN/ -type f \( -name "*.mp3" -o -name "*.wav" \) -exec sh -c '
  for f; do
    len=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$f")
    echo "${f##*/} $len"
  done
' _ {} + > folder1.txt

find /path/to/UK/ -type f \( -name "*.mp3" -o -name "*.wav" \) -exec sh -c '
  for f; do
    len=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$f")
    echo "${f##*/} $len"
  done
' _ {} + > folder2.txt

join -1 1 -2 1 <(sort en.txt) <(sort uk.txt) | awk '$2 != $3 {printf "%s | en: %s | uk: %s\n", $1, $2, $3}' > diff.txt
* кількість файлів в обох наборах різна але то таке.
* в цій же теці Audio є файл sound.cache - я про нього не забув і пробував чистити після обнови наборів (безрезультатно)

UPD 1. в /Audio ще є два файли SFX, розміри .RAW - 359739094 / 340245502 байт а .SDT - однакові (198820)

UPD 2. для редагування SFX в Linux, зробив форк RockstarAudioTool з однойменною гілкою.

Збірка:
cd source
g++ mhsfx.cpp -o mhsfx

Якщо екстрактувати, то побачимо що розмір деяких файлів перевищує константу #define PED_BLOCKSIZE 79000:
./mhsfx -e -g gtavc -t sfx.SDT -r rebuild.txt sfx.RAW
UPD 3. провів аудит репозиторію засобами Copilot, додаю результати двома файлами у вкладення - вони можуть згодитися для програмного виправлення точок переповнення буферу.

Сам я намагався повиправляти їх усі, утім нічого не допомагало, допоки таки не збільшив ліміт PED_BLOCKSIZE до 256Кб і проблема зникла (патч). Підозрюю, що зсув пам'яті міг переїхати на інші події / текстури але поки це працює а ймовірно - таки вирішує проблему в основі без рекомпресії файлів звуку - виділенням більших шматків пам'яті для буферу.

Маніфест оновив, як ви здогадались, причина була не в Debug / Release, тому перейшов на Release, прибрав додаткові CFLAGS, а також додав ревізії.
.flatpak оновив, додаю хеш-суми поточного релізу де надалі буде прив'язка до конкретного коміта:
Manifest commit                          | .flatpak (md5)                   | .flatpak (sha256)
-----------------------------------------|----------------------------------|-----------------------------------------------------------------
05dd2270b4ac10e0477207b60b9fbabdc00be7e4 | c168a7f78efa4f030a7125e21a5b4044 | e99287f6c2cf32f7e1a95285d7c87ee256264a055dac3c04ef9d99d18318fb68

P.S. що мене насторожує зі збільшенням значення константи, так це те що в оригінальному наборі (з Толоки) розмір деяких англійських шматків теж перевищує 79000 байт але там їх менше і воно якось працює; не виключаю що проблема таки може вилізти знову, і рішення знайдеться таки в перепакуванні SFX :/
P.P.S. в процесі пошуку рішень, наткнувся на ще одну гілку re3 - x87/gta-extended, точніше miami але для вінди (вже архівна та може бути цікавою апдейтами сорсу для Linux)
« Змінено: 2026-08-01 00:28:06 від ps »