Moja dva dana Fable 5 blaženstva…

Znate kako sa svakim novim „frontier“ LLM-om ispadne da su lagali i pretjerivali s tvrdnjama? Izlaskom Fablea 5, okljaštrene verzije Mythosa „za raju“, taj začarani krug se nakratko prekinuo. Fable 5 je dok je bio dostupan bio i softverski arhitekt, koder, vođa razvoja i prvi LLM sa stvarno inženjerskim sposobnostima

Drago Galić ponedjeljak, 15. lipnja 2026. u 17:05

Kao što znate, Fable 5 – okljaštrena, odnosno „cenzurirana“ verzija navodno prestrašno moćnog Mythosa, Anthropicovog novog LLM-a, trebala je postati javno dostupna prošli tjedan. Ona to i jest bila, ali vrlo kratko vrijeme. Bizarnom administrativnom odlukom američke vlade, Anthropic je natjeran da i Fable 5 povuče s tržišta zbog prilično idiotskog razloga (koji je razlog i zašto je idiotski u okviru uz ovaj tekst).

Tako smo mi korisnici Claude Codea imali priliku liznuti nakratko što sve Fable 5 može i sad jednostavno više ne možemo natrag.

Riječima Martina Luthera Kinga: „Vidio sam Obećanu Zemlju.“ („I've Been to the Mountaintop“).

Cesta duga godinu dana (i još malo)

Oni koji redovitije prate ove stranice možda se sjećaju našeg ranijeg teksta na temu LLM-ova i kodiranja – Kompjuter koji nije znao brojati i druge pripovijetke u kojem je ovdje potpisani dijelom spomenuo i svoje iskustvo prebacivanja Knight Lorea na neo-retro platformu Agon Light 2.

Usput, otada je prošlo niti puna dva mjeseca, a već sada Fable 5 rješava probleme koje nismo mogli ni zamisliti da će LLM-ovi riješiti u idućih pet godina.

Da sumiramo – prebacivanje Knight Lorea (verzije sa ZX Spectruma) iz 80-tih na Agon Light 2 je kućni, hobistički projekt. Rad je započet prije više od dvije godine korištenjem ChatGPT-a (kao aplikacije, tada se još nije ni pričalo o agentskom korištenju LLM-ova) i bio je vrlo mukotrpan. Osnovni kostur prebacivanja samo jedne lokacije („sobe“) Knight Lorea na Agon Lite trajao je mjesecima. S dolaskom Claude Codea i njegovim agentskim sposobnostima ovo se nešto ubrzalo.

Dijelom je pored samog Claude za to zaslužan i AgonDev repozitorij za Agon koji koristi prepravljeni C toolkit (VSC u wsl-u) za Texas Instrumentsove kalkulatore koji koriste Z80 i eZ80 procesore čime je prestalo ranije batrganje u assembleru za Z80.

Usprkos divotama VSC-a i suvremenih razvojnih alata, pokazalo se da je čak i prebacivanje više od 40 godina stare igre i dalje zahtjevan zadatak. Dapače, rekli bismo da se po opsegu radi o poslu s punim radnim vremenom prije nego hobističkom projektu.

Iako je Claude Code još početkom godine odnosu na mučenje s ChatGPT-om, DeepSeekom, Manusom i drugim alatima koje smo koristili bio kvantni skok, istina je da je naše iskustvo i dalje bilo mukotrpno.
Netko bi pomislio da postojanje kompletne dokumentacije igre (Knight Lore) sa svim pravilima, te svih grafičkih i zvukovnih podataka, kompletno disassembliranog i komentiranog izvornog koda, sa svim mapama i detaljnom razradom dovoljno da LLM u 2026. iz toga napravi port s jednog računala na drugo. Tim prije što oba koriste dvije verzije zapravo istog procesora – legendarnog Zilogovog Z80.

U stvarnosti smo se na svakom koraku susretali s neočekivanim preprekama koje su prvenstveno dolazile od naših golemih očekivanja i stvarnih granica LLM-ova kao tehnologije.

Jednostavno, LLM-ovi su donedavna bili u rangu kombinacije s jedne strane savanta, a s druge strane samouvjerenog kolege poluidiota koji nonšalantno juri kroz greške koje bi i malo dijete uočilo.

S Fableom se to posve promijenilo.

Godine rada u 24 sata

Kroz tri lipanjska dana, model Fable 5 napravio ono što prije njega nijedan alat nije: pročitao original, shvatio ga i pretvorio u živu igru na novom hardveru. Ovo nije tekst o tome kako je "AI napisao igru". Ovo je tehnički presjek kako je jedan jezični model odradio posao reverznog inženjeringa za koji bi čovjeku trebali tjedni i što to znači kad realno pogledamo brojke ispod toga.

Zašto je prije stalo?

Raniji pokušaji - i moji ručni i oni s prethodnim modelima - svi su se spoticali na istom mjestu: pokušavali su rekonstruirati raspored soba parsiranjem slike mape. Ispostavilo se da je to nepouzdan put - računalo "gleda" sliku i nagađa gdje je što. Stari pokušaj porta oslanjao se na asemblerski sloj kompatibilnosti (zxspec_compat iz starog tar.gz arhiva) - taj pristup je Fable promptno umirovio jer je shvatio prednosti C AgonDeva te je originalni Z80 disassembly koristio samo kao specifikaciju – bez da mu je to eksplicitno rečeno!

Upute (prompt i to dosta veliki) su bile da „razmišlja kao softverski arhitekt“ i pogleda sve materijale koje imam na računalu o projektu i unutar radne mape u VSC-u i da dade prijedlog kako se maknuti s mrtve točke.

Fableova prva odluka bila je ključna: nema parsiranja slika. Sve što treba za determinističku ekstrakciju već postoji u materijalima - dokumentacija formata podataka (blažene bile Icemark stranice na kojima su detaljno zapisane specifikacije, a spremljene lokalno kao HTML) i .sna snapshot originalne igre, odnosno doslovna kopija Spectrumove radne memorije. Iz te kombinacije mogao je izvući točne podatke, bajt po bajt, bez ijednog nagađanja.

Ekstraktor koji čita memoriju Spectruma

Srce cijelog projekta je alat koji je sam, bez ikakvog pitanja, napravio Fable: ekstraktor pisan u Pythonu koji uzima .sna snapshot i iz njega dekodira svih 128 soba igre u dvije datoteke: rooms.bin (binarni podaci za igru) i rooms.h (C zaglavlje).

Da bi to napravio, Fable je morao razumjeti kako Knight Lore interno pohranjuje sobu.

Logika je sljedeća. Svaka soba u memoriji opisana je tablicom blokova - svaki blok ima svoj tip (block-type) i koordinate. Tipovi blokova referenciraju grafičke teksture preko indeksa u tablici grafike. Zidovi i pod nisu nacrtani piksel po piksel u podacima sobe, nego se biraju preko tilesa (pločica) sa svojim indeksom: 0x0C je zid tipa 1, 0x0D zid tipa 2, 0x0E zid tipa 3 itd.

Najljepši dio je raspored soba. Igra drži 128 soba u matrici 16x16. Susjedstvo je čisto aritmetičko: soba istočno od trenutne ima ID veći za 1, soba sjeverno ima ID veći za 16. Čim je Fable to pročitao iz podataka, cijela mapa svijeta složila se sama od sebe - bez ijedne parsirane slike. Četiri startne sobe (0x2F, 0x44, 0xB3, 0x8F) prepoznaju se po posebnoj oznaci u podacima.

Karta koju je Fable sam izgradio iz podataka originalne igre - svih 128 soba posloženih u mrežu 16x16, svaka sa svojim hex-brojem i obojena prema tipu: zeleno = pune kvadratne sobe, narančasto = plitke, plavo = uske, ljubičasto = šumske. Nijedna slika nije parsirana; sve je izračunato iz .sna snapshota. Različite boje kvadratića u sobi predstavljaju različite tipove objekata 📷 Claude Code: Fable 5
Karta koju je Fable sam izgradio iz podataka originalne igre - svih 128 soba posloženih u mrežu 16x16, svaka sa svojim hex-brojem i obojena prema tipu: zeleno = pune kvadratne sobe, narančasto = plitke, plavo = uske, ljubičasto = šumske. Nijedna slika nije parsirana; sve je izračunato iz .sna snapshota. Različite boje kvadratića u sobi predstavljaju različite tipove objekata Claude Code: Fable 5

Izometrija bez decimala

Knight Lore je izometrijska igra, a eZ80 procesor u Agonu nema FPU. Rješenje je elegantno: sva logika - kretanje, kolizija, pozicije - živi u cjelobrojnom "world" prostoru (u kojem se likovi kreću), a na ekran se preslikava jednostavnom 2:1 projekcijom. Funkcija world_to_screen() računa ekransku poziciju kao sx = (wx - wy) i sy = (wx + wy) - wz, gdje su wx, wy, wz „world“ koordinate. Nikakve decimale, nikakav FPU - samo zbrajanje i oduzimanje, točno onako kako je radio i original.

Ovo spominjemo jer je prvotno zbog načina na koji je prebačena prva prototipska soba (screenshot s Amstrad CPC emulatora u rezoluciji 320*200 skaliranoj na ciljnih 1024*768 piksela je korišten kao predložak za slaganje sobe) dobili omjer 1,89:1 za izometrijsku projekciju umjesto uobičajenih 2:1. To je dovelo do toga da je prethodno „vibe kodirana“ rutina za micanje robotski precizno to uzimala u obzir i baratala sa stvarnim omjerima objekata na ekranu, umjesto da to apstrahira i koristi uobičajenu formulu za kretanje u izometrijskoj projekciji.

Fable 5 je odmah shvatio ovaj problem i riješio ga u prvom prolazu.

Renderiranje ide u tri sloja: prvo bitmape sobe (zidovi, pod, blokovi), pa likovi, pa vrata kao objekti koji se crtaju iznad likova (kvazi z-sortiranje u izometrijskom „prostoru“).

Soba generirana iz pravih podataka igre: dijamantni pod i četvora kamena vrata-luka, Sabreman (maska za potrebe debugiranja) u sredini. Gornji ispis pokazuje koliko traje build i upload sprajtova na Agon - 8,12 sekundi.
Soba generirana iz pravih podataka igre: dijamantni pod i četvora kamena vrata-luka, Sabreman (maska za potrebe debugiranja) u sredini. Gornji ispis pokazuje koliko traje build i upload sprajtova na Agon - 8,12 sekundi.

Ovdje smo riješili i veliki bug koji se jednom ispravljen stalno iznova javljao u svakoj novoj verziji koda - bljeskanje (flash) cijele scene. Uzrok je bio u tome što je kod od VDP-a (grafički čip na Agonu)  tražio na svaki refresh ponovno iscrtavanje svih hardverskih sprajtova neusklađeno s vertikalnim osvježavanjem ekrana.

Rješenje je bilo da se stupovi lukova vrata crtaju kao statične bitmape, a kao pravi hardverski sprajtovi ostaju samo Sabreman (kanonsko ime junaka u Knight Loreu, za one koji ne znaju… I'm surprised you didn't know that, bro…) i one polovice lukova koje se moraju paliti i gasiti radi okluzije (da igrač prirodno prolazi iza ili ispred luka).

Zidovi, dijamanti i piksel-matematika

Agonov ekran je točno četiri puta veći od Spectrumovog, što je ispala sretna okolnost: grafički asseti pripremljeni na desktopu već su bili u 4x rezoluciji i s pravim alfa kanalom. Fable ih konvertira u Agonov format argb2222 - jedan bajt po pikselu, gdje dva najjača bita nose prozirnost (A=3 neprozirno, A=0 posve prozirno).

Budući da su originalne pločice-teksture (tiles) zidova bile nacrtane za jednu konkretnu sobu, zidove smo riješili ručno po tipu: za svaki od četiri tipa sobe (wall1, wall2, wall3, tree) složili smo u GIMP-u predložak s pozicijama zidnih tekstura, a generator ga aplicira prema indeksu pozadine svake sobe. Za to je Fable napisao i GIMP plugin (export_tiles, vidljiv pod Filters -> Agon) koji izvozi vidljive tileove u C zaglavlje sa ekranskim koordinatama.

Kad je Fable pokušao aplicirati teksture… Stare navike teško umiru.
Kad je Fable pokušao aplicirati teksture… Stare navike teško umiru.

Inače, sukladno ranije spomenutom problemu u tekstu o kompjuteru koji nije znao brojati, ni Fable se ne snalazi najbolje s prepoznavanjem prostornih odnosa na slikama iako je multimodalni LLM – ni on nije bio u stanju razumjeti gdje što ide, koje teksture vise u zraku, a koje su na zidu i slično. Iako posve „razumije“ izometrijsku projekciju u matematičkoj teoriji, slika mu znači jako malo – s nje je u stanju pročitati tekst (OCR, dakle), ali odnose, u prostoru tek nagađa i to uglavnom pogrešno.

Tri tlocrta proizlaze izravno iz podataka: wall1 i tree su puni kvadrat, wall2 je plitka soba (pola dubine), wall3 je uska (pola širine). Generator za svaki tip koristi svoju geometriju, pa kolizija i granice kretanja odgovaraju obliku sobe - u uskoj sobi ne možete više zaobići prepreku sa strane kao da ima prazan prostor.

Prije kalibracije: zidovi nasumično razbacani, lukovi lebde u zraku. "Užas" faza prije nego su geometrija i predlošci sjeli na mjesto.
Prije kalibracije: zidovi nasumično razbacani, lukovi lebde u zraku. "Užas" faza prije nego su geometrija i predlošci sjeli na mjesto.

Pod sobe iscrtava se kao dijamant (romb) za potrebe debugiranja. Ovo je bilo ključno za rješavanje poravnanja lukova vrata i točki kolizije točno na bridove dijamanta. Pošto bitmap luka vrata raste prema gore od svoje sidrene točke, svaki od četiri zida tražio je drugačiju korekciju; rješenje je bilo crtati svaki luk tako da mu pola bitmape ide izvan, a pola unutar ruba dijamanta.

(To što ne vidite tu navodnu polovicu luka koja ide unutar brida romba je stoga jer je ova prozirna, ali kako su lukovi definirani u pravokutnoj matrici, a projekcija je izometrijska, logično je da uglovi lukova, koji su teksture, moraju zagaziti preko kosog ruba romba.)

Kolizija je zatim stavljena na vizualne linije poda da Sabremanove noge sjednu točno na rub.

Karta, koordinate i debug

Da bismo uopće mogli komunicirati o 128 soba, Fable je generirao kartu (vidjeli ste je na početku teksta) i pripadni map_coords_to_roomid.json - prijevod između ljudski čitljive koordinate (stupac i redak) i internog broja sobe. Ja gledam kartu i kažem "soba 4A", model interno zna o kojoj sobi pričamo.

Inače, iako genijalan u odnosu na svu svoju LLM braću, Fable je inzistirao da sobe imenujemo njihovim heksadecimalnim „imenima“, odnosno indeksima koji se koriste za pristup sobama u originalnom kodu za ZX Spectrum.

Pristao je i to s neočekivanim entuzijazmom da sobe na karti označimo heksadecimalnim brojevima po stupcima i recima kada samo mu objasnio da je karta Knight Lorea isto što i ljudske mape koje koristimo da jedan drugome objasnimo gdje smo i gdje idemo. Analogija s GPS-om koji možda te iste koordinate ima zapisane u nekom svom formatu koji nema veze s imenima ulica i gradova uvjerila ga je da sam u pravu.

Do tada je izgledalo kao da se izgubio u mrtvoj petlji gdje sam sebi i meni pokušava objasniti zašto je idealno ime sobe „0x4d“, a ne oznaka po stupcu i retku naše mape.

Inače na screenshotima vidite i dio debug sloja: ispis „svjetskih“ (world) i ekranskih koordinata, tip sobe, oznaku Room# s koordinatom, tipku M za prikaz cijele mape svih soba i tipku J za skok u željenu sobu. To je projekt iz "nadam se da radi" pretvorilo u "reci mi broj sobe i točno znam što popraviti".

Usput,i ovdje je inzistirao da prikaz mape koristi „fog of war“ tehniku (iako se koristi isključivo za debugiranje!), odnosno da ne vidim sobe u kojima nisam bio. Iako razumije riječ debug i zna da smo ovo dodali radi debugiranja, prva verzija mape je imala famozni „fog-of-war“ – odnosno „zabrijao“ je da to mapa za igru, a ne za debugiranje, iako mu je bilo jasno objašnjeno čemu to služi.

Poznati preostali bug "noge" - grafički artefakt ispod Sabremana u pojedinim sobama (označeno crveno). Jedna od stavki za sljedeći krug. Vjerojatno se radi o koruptiranoj memoriji u .sna snapshotu iz kojeg se Fable napajao.  Predmeti u sobama također su pogrešno postavljeni i tu će biti još hrpa posla…
Poznati preostali bug "noge" - grafički artefakt ispod Sabremana u pojedinim sobama (označeno crveno). Jedna od stavki za sljedeći krug. Vjerojatno se radi o koruptiranoj memoriji u .sna snapshotu iz kojeg se Fable napajao.  Predmeti u sobama također su pogrešno postavljeni i tu će biti još hrpa posla…

Na kraju treće večeri svih 128 soba je u igri, generiranih iz ekstrahiranih podataka: tip zida, vrata, susjedi (postojanje sobe i otvorenost vrata) i blokovi u svjetskim koordinatama. Hoda se kroz cijeli dvorac, ulazi u šumske sobe, prolazi kroz vrata u sva četiri smjera. Ostaju poznati zadaci za dalje (fino namještanje uskih i plitkih soba, bug "noge", pa onda entiteti, vukodlak i pravila igre), ali kostur svijeta - ono na čemu je projekt godinama stajao - sada postoji.

Neugodna istina: koliko to stvarno košta?

Lako je zanijeti se. Zato evo brojki iz alata ccusage, koji mjeri stvarnu potrošnju tokena i preračunava je po službenom API cjeniku (cijena koju bi platila tvrtka koja ne koristi pretplatu, nego plaća po tokenu).

POTROŠNJA PO DANIMA (Knight Lore maraton)

Datum Model(i) Tokeni Cache-read API cijena
11.6. Fable 5 7,32 M 6,83 M $19,21
12.6. Fable 5 50,09 M 48,84 M $81,24
13.6. Fable 5 + Opus 4.8 + Sonnet 4.6 108,24 M 105,27 M $82,62
UKUPNO 165,65 M 160,94 M $183,07  

Samo Fable, dok je bio dostupan: oko $108. Trinaestog je Fable tijekom dana nestao iz ponude, pa je posao nastavljen na Opus 4.8 i Sonnet 4.6 (dodatnih ~$75). Čak 97 posto svih tokena je cache-read - ponovno čitanje već pripremljenog konteksta, najjeftinija kategorija. Da nije bilo toga, račun bi bio drastično veći.

Sada usporedba koja boli. Moja Pro pretplata košta ~22 eura mjesečno. Ovaj jedan vikend, po stvarnom API cjeniku, "potrošio" je preko 180 dolara - dakle više od osam mjeseci moje pretplate, u tri dana. Da plaćam po tokenu kako plaćaju tvrtke, samo ovaj jedan projekt pojeo bi godišnju pretplatu.

Kako smanjiti račun: pluginovi koji čuvaju kontekst

Jedan razlog zašto je ovaj maraton uopće bio izvediv u jednoj dugačkoj sesiji jest što velik dio sirovih podataka nikad nije ušao u "radnu memoriju" modela. Plugin context-mode obavlja težak posao (dekodiranje .sna, čitanje HTML dokumentacije, analize manifesta, preview renderi) u izoliranom okruženju i modelu vraća samo izveden zaključak. U jednoj sedmosatnoj sesiji tako je zadržano oko 99 posto podataka izvan konteksta (11,8 MB svedeno na 97,7 KB). Manje tokena u kontekstu znači jeftiniju i dužu sesiju.

Slično koristi i plugin semble za brzu pretragu koda bez učitavanja cijelih datoteka. Za svakoga tko ozbiljno radi s ovim alatima, ovakvi su pluginovi izravna ušteda - i na računu i na živcima.

Posve su besplatni i lako ih skinete s Githuba.

Zaključak

Netko je napisao da "vibe coding" zvuči kao da čovjek mlatara rukama dok model radi čuda. Istina je suptilnija. Pola posla bila je priprema. U ovom slučaju je pripremljen disassembly originalnog koda, Icemark dokumentacija, snapshot na disku, BMP-ovi i PNG-ovi s pravim alfa kanalom.

Sam Fable je to priznao u jednom trenutku: "pola pameti bilo je u tvojoj pripremi." (Usput, kad mi je to rekao osjećao sam se kao „good boi“ – pseto kad ga gazda pohvali…)

Ali drugu polovicu - čitanje memorijskih struktura, izometrijsku matematiku, generiranje 128 soba, vlastiti alatni lanac - odradio je model i to za vikend.

Projekt koji je godinama stajao na disku, sad - radi. Pohvala modelu, „pozdrav posadi broda“, rječnikom radijske emisije za pomorce.

A brojke ispod toga su podsjetnik da takvo čudo zasad plaća netko drugi - i da to neće trajati vječno.