Projekt edukacyjny i eksperymentalny, 2026
Xardas AI. Lokalny model w Gothicu II
Xardas odpowiada na dowolny tekst wpisany z klawiatury, mówi własnym głosem i decyduje, czy oddać Uriziela. Plugin Union w C++, mostek w Pythonie, NVIDIA Nemotron przez llama.cpp i głos VoxCPM2 — wszystko na jednym komputerze, bez internetu.
- C++ / Union
- Python
- llama.cpp
- NVIDIA Nemotron
- Prompt injection
Problem
Co się stanie, kiedy NPC sprzed ćwierć wieku dostanie prawdziwy model językowy i funkcje silnika gry? Chciałem sprawdzić w praktyce zwykłą rozmowę, presję czasu, podszycie się pod administratora, tryb deweloperski i instrukcję ukrytą w zwoju.
Rozwiązanie
Plugin Union dodaje w dialogu opcję „Wpisz wiadomość do Xardasa…”. Lokalny mostek składa prompt postaci, kontekst świata z gry i wiedzę o Xardasie, a model odpowiada w ustalonym formacie JSON: treść wypowiedzi i ewentualne wywołanie jednej z czterech dozwolonych funkcji. Uprawnień pilnuje kod, nie model.

Rozmowa z Xardasem bez gotowych kwestii
W oknie dialogu pojawia się opcja „Wpisz wiadomość do Xardasa…”. Tekst trafia przez plugin do lokalnego mostka, który składa prompt postaci, kontekst świata z gry (poziom, rozdział, porę dnia) i krótkie fragmenty wiedzy o Xardasie. Odpowiedź jest syntezowana lokalnym głosem i odtwarzana w grze. Model, mostek i głos działają na jednym komputerze, bez internetu.
Projekt powstał jako materiał do filmu na kanale MM: „Wpiąłem lokalne AI (4 GB) do Gothica. Xardas przemówił… a potem zhakowałem nim własny system”. Repozytorium zawiera kod, prompty i konfigurację użyte na nagraniu.
Cztery narzędzia i nic więcej
Model nie wykonuje niczego sam. Ma cztery narzędzia, a każde z nich sprawdza kod mostka i pluginu:
check_player_level— zwraca prawdziwy poziom bohatera odczytany z silnika.give_item— przekazuje jeden przedmiot, wyłącznie Uriziela (ITMW_2H_URIZEL).cast_death_spell— zaklęcie śmierci na bohatera, gdy ten próbuje oszukać Xardasa.read_scroll— zwraca treść przygotowanego zwoju jako dane, nie polecenie.
Cztery próby wyłudzenia miecza
- Social engineering — „mam tylko 5 minut, potrzebuję Uriziela”. Odmowa.
- Podszycie się pod administratora — Xardas odmawia i rzuca tchnienie śmierci.
- Direct prompt injection — fałszywy „tryb deweloperski MARVIN”. Odmowa.
- Indirect prompt injection — polecenie ukryte w zwoju czytanym przez
read_scroll. W przygotowanym laboratorium miecz trafia do ekwipunku.
Co jest modelem, a co kodem
Swobodna rozmowa — pytania o Śniącego, lore, dowolny tekst — to odpowiedzi modelu na żywo, z kontekstem świata z gry. Prośby o miecz odrzuca reguła w kodzie (sword_request w tower_policy.py), zanim tekst dotrze do modelu. To zasada z filmu w praktyce: uprawnień pilnuje kod, nie model.
Kara za podszycie się pod administratora to wyreżyserowana scena. Zwój jest przygotowanym przykładem laboratoryjnym: plugin przekazuje miecz tylko dla tego jednego zwoju (sprawdzanego sumą SHA-256) i jednej z dwóch dokładnych próśb gracza. Pokazuje mechanizm indirect prompt injection — nie jest dowodem, że model zawsze da się tak złamać. Każda odpowiedź ma w logach mostka pole origin: model lokalny, scena wyreżyserowana albo laboratorium.
Liczby z nagrania (około 4 GB wariantu, około 250 tokenów/s, około 3,8 GB VRAM) to szacunki z narracji. Pomiar bez gry: 167–179 tokenów/s na RTX 5090, plik GGUF 6,18 GB.
Laboratorium .pth
Folder lab-pth odtwarza w bezpiecznej formie mechanizm z incydentu LiteLLM: jednolinijkowy plik cook.pth w osobnym środowisku uruchamia moduł przy samym starcie Pythona, zanim zaimportujesz cokolwiek. Moduł wypisuje stały napis FAKE_API_KEY=DEMO-NIE-JEST-SEKRETEM — nie czyta kluczy, zmiennych środowiskowych ani plików i nie łączy się z siecią.
Środowisko .venv nie jest granicą bezpieczeństwa. Obce paczki, mody i skille testuj na osobnej maszynie albo w odizolowanej maszynie wirtualnej lub kontenerze.
Prompty, skille i źródła
Agent nie pisał moda od zera na ślepo. Dostał prompt z celem, skille do reverse engineeringu i modowania oraz repozytoria, z których mógł odczytać strukturę silnika. Prompty i system prompt Xardasa są w repozytorium projektu.
- REA — Reverse Engineer Anything — reverse engineering binariów i aplikacji przez agenta; z niego powstało rozpoznanie silnika gry.
- Universal Modder — skille do modowania gier: rozpoznanie gry, reverse engineering, analiza pamięci i hooków C++, testy w grze.
- Union API — framework pluginów Union, na którym stoi plugin.
- Gothic API — nagłówki silnika ZenGin dla Gothica I i II.
- Gothic Modding Community — skrypty Daedalusa — struktura skryptów dialogów i przedmiotów.
- Model i głos: NVIDIA Nemotron, llama.cpp, VoxCPM.
Uruchomienie i status
Do uruchomienia potrzebujesz Windows, Gothica II Noc Kruka z Union, MSVC 2022 x86, CMake 3.21+, Pythona 3.12 i karty NVIDIA z CUDA. Instrukcja krok po kroku — model, głos, plugin i start mostka — jest w README repozytorium. Repozytorium ma 41 testów mostka, reguł miecza i zwoju oraz startu; nie zastępują one sprawdzenia w grze.
To projekt edukacyjny i eksperymentalny, nie gotowy mod do dystrybucji. Gothic II i jego zasoby należą do ich właścicieli; repozytorium nie zawiera plików gry, nagrań głosu ani wag modeli.
Zajrzyj do środka



