Vanha koodihöpötti tutustuu agentic sw-tuotantoon

  • Keskustelun aloittaja Keskustelun aloittaja xanaki
  • Aloitettu Aloitettu
Liittynyt
30.10.2019
Viestejä
53
...

Miten vanha koodariparta oppii uutta? (Pohjustus, elämänfilosofiaa ja pelimoottoriprojekti)​

Mitäs veikkaatte, mitä tapahtuu, kun vanha koodariparta päättää loikata kunnolla ulos omalta turva-alueeltaan – eli siitä perinteisestä, manuaalisesta ohjelmistokehityksestä?

Se tekee tismalleen niin kuin on tehnyt aina ennenkin 80-luvulta asti uutta opetellessaan: lasketaan kädet suoraan saveen ja aloitetaan käytännön projekti nollapisteestä. Toisinsanottuna hypätään altaan syvään päätyyn ja joko uidaan tai upotaan...

Mulla on aina ollut tapana, että pitkän etukäteistyön, tutorial-videoiden ja loputtoman kirjalistan sijaan luen ehkä pari sivua ohjeita, jotta pääsen alkuun. Sitten lähden heti tekemään jotain isompaa projektia, sen suuremmin miettimättä, mihin kaikkeen se homma voi matkalla kaatua. Teoriaa opiskellaan lennosta lisää vasta sitten, kun seinä tulee vastaan – ei koskaan etukäteen varastoon.

Nobel-palkittu Richard Feynman kiteytti tän aikoinaan täydellisesti:

"Understand. Don't memorize. Learn principles, not formulas.""I learned very early the difference between knowing the name of something and knowing something."

Visio ja tavoite: Agentit testiin​

Sä et tee kaavoilla hevon hittoja jos ei tajua miten homma oikeasti toimii. Harrastusta ohjelmoinnista mulla on takana vuodesta -81 ja softainssin uraa 90-luvun puolivälistä, mutta agenttiavusteisesta sovelluskehityksestä kokemusta oli hyvin vähän. AI-kokemus rajoittui lähinnä chatbotteihin ja kuvageneraattoreihin. Google Pron myötä sain käyttööni Antigravity-kehitystyökalun, ja jokin aika sitten päässä klikkasi taas: päätin testata, mihin nää agentti-poloiset oikeasti pystyvät, kun niitä ohjaa tiukoilla arkkitehtuurisilla raameilla. Mun opiskelumetodin ymmärtää seuraavasta kolmesta bulletista:

Mulla tää tapa ihan kaikessa omatoimisessa opiskelussa aina jostain ala-asteelta lähtien tehdä opettelun yhteydessä jotain konkreettista jonka tekeminen vaatii niitä taitoja joita olet opiskelemassa. Myös työelämässä itseoppimisen mutta myös alaisteni opettamisen ohjausmetodina.

Otin projektille nää selvät askelmerkit:
  1. (visio)Päätavoite: Opetella ja ymmärtää agenttiavusteista softakehitystä dynaamisesti.
  2. (project)Käytännön työkalu: Aloittaa alusta asti oma C++ pelimoottoriprojekti (thengine) tämän tavoitteen saavuttamiseksi. C++ kieltä ei tarvinnut opetella, se on *jotenkin* hallussa..
  3. (method)Metodi: Tehdä sivuprojektia (thengine ja sitä käyttävä testipeli) niin pitkälle kuin pystyy, ja opiskella lisää vasta kun vauhti tyssää.

Koska mulla on aikaisempaa pelikehityskokemusta ja jopa oman pelimoottirinkin rakentelua niin mä päätin lähtee tekemään tyhjistä oman pelienginen SDL3-kirjastoja hyödyntäen. Nykyinen versio tän päivän jäljiltä löytyypi täältä: thengine
Sieltä löytyy tämän päiväisen session lomilta koodit, testiaplikaatio ja jonkin verran jo dokumentaatiotakin josta näkee mihin se pystyy.

Se ei ole kaunein ja kattavin eikä varmaankaan toimivin mutta mutta se on suunniteltu helposti laajennettavaksi, ylläpidettäväksi sekä ymmärrettäväksi. Valitsin hyvin Microsoft XNA Framework-tyylisen arkkitehtuurin koska olin kokenut sen aiemmassa elämässäni hyväksi ja se kantaa nuo kaikki kolme peruspilaria. Yhtään koodiriviä en ole kirjoittanut, olen toiminut arkkitehtina ja pyytänyt Geminiä tekemään.

Lisäksi mainittava on se, että kaikki on tehty Gemini 3.5 Flash (Medium) mallilla, eli sillä nopeimmista tarjotuista. Kun suunnitelmat purkaa arkkitehtuurisiksi ja loogisiksi paloiksi ennenkuin ne antaa agentille niin token-saldoa säilyy pirusti.
Mulla meni varmaan ajallisesti enemmän aikaa tuon CLAUDE.md-tiedoston kirjoittamiseen (omasta päästä!) kuin siihen agentin käskyttämiseen...

Sitten sitä elämäntapafiliosofiaa:

Älä pelkää virheitä – jätä sormenjälkesi​

Moni jättää aloittamatta, koska pelkää tekevänsä virheitä tai epäonnistuvansa. Ongelmien sijaan pitäisi kuitenkin katsoa mahdollisuuksia. Vaikka se sun konkreettinen työn alla oleva projekti (kuten pelimoottori) joskus kaatuisi tai jäisi kesken, se ei tarkoita, että sun alkuperäinen opiskelutavoitteesi epäonnistui.

Onnistui koodiprojekti tai ei, sä saat silti sen kaikkein tärkeimmän: käytännön kokemuksen ja ymmärryksen siitä, mitä olet tehnyt viedäksesi sitä eteenpäin. Lisäksi sulta jää projektista AINA sormenjäljet ja historia – esimerkiksi GitHub-repo kaikkine committeineen. Se commit-historia ja tapa ratkoa dynaamisia ongelmia kertoo tekijästään ihmisenä ja ammattilaisena älyttömän paljon.

Parhaassa tapauksessa onnistut sekä opiskelutavoitteessasi että itse projektissa. Virheet ovat parhaita keinoja oppia, ja niitä tekee jokainen. Virheen tekemisen pelko ei saisi koskaan olla esteenä sille, että edes ALOITTAA jotain uutta ja siistiä.

Mutta jokatapauksessa sulla on näytettäväksi oma sormenjälkesi joka kertoo Commit-by-Commit ne askeleet joita olet maalisi saavuttamiseen joutunut kävelemään.
 
Tänän tapahtui paljon tuon "thengine" kanssa. Sain sinne tehtyä erillisen demopelin nimeltä "Emberborn" joka sauu samassa repositoryssä enginen ja sandbox-projektin kanssa. Emberborn on Roguelike skeleton mutta reaaliaikainen toisin kuin esim Nethack/ADOM/Angband etc.

Tein engineen paljon työtä tänään piirron optimoinnin ja valaistuksen puolella. Siellä on nyt raycast lighting ja varjot, ei vielä täysin valmis tekele.
kuvasta näkyy että pääosin toimii jo.

Git repo: thengine project

Raycast in emberborn game prototype:
raycast_1.png
 
Mielenkiintoine pronjekti sulla , tätä pitää kyllä seurata lähemmin, itse pari pientä korttipeliä ai:n avulla tehneenä aihe kiinnostaa. Toivottavasti jaksat kirjoitaa useasti etenemisestä.
 
Mielenkiintoine pronjekti sulla , tätä pitää kyllä seurata lähemmin, itse pari pientä korttipeliä ai:n avulla tehneenä aihe kiinnostaa. Toivottavasti jaksat kirjoitaa useasti etenemisestä.
Tänään tein pari pidempää rupeamaa. Tuo alkaa jo näyttää pikkuhiljaa peliltä. Tässä vaiheessa peli on vielä top-down tilemap, mutta suunnitelmissa on kääntää se 2.5D Isometrinen. Toisekseen, tää on reaaliaikainen, ei vuoropohjainen. Mutta sen vaihtaminen vuoropohjaiseksi (nethack tyyli) on yhden vivun takana, aika lasketaan jo jokaiselle toiminnolle monsuille sekä pelaajalle. Eli ajatuksena on tehdä tästä isometrinen Diablo-tyylinen hacknslasheri...

Mulla on hyvin eriytetty tuolla palikat joten käyttöliittymän ja rendauksen toiseksi vaihtaminen menee vaihtamalla vaan Renderer-luokkaa. Nyt siellä on vaan TileRenderer mun 'thenginen' graffaominaisuuksien päällä.

Valaistus on nyt kunnossa toisin kuin edellisessä screenshotissa. Pelaajan soihtu jopa välkkyy "liekkimäisesti" ajan kanssa. Pelissä on vihut, loottitaulut, ja muut. Kaikki on Data Driven design tarkoittaen että itemit, eliöt (pelaaja, NPCt, vihut), .. on JSON-tiedostoina ja niistä pelin moottori tekee sitten sopivaa muutettua dataa esim itemien variaatiot.

Kuolema korjaa vielä aika nopeesti mutta se korjaa joten perus gameloop on jo olemassa.

Tässä kaksi videota tältä päivältä:

Emberborn - thengine tech demo #1
Emberborn - thengine tech demo #2

Noista näkee vähän mitä kaikkea mun upouuteen pelimoottoriin nyt on tehty ja mitä kaikkea peli siitä hyödyntää.

Mielenkiintoinen projekti. Koodiin en ole kertaakaan näppejäni pistänyt. Mutta toki nuo JSON-filut joutuu editoimaan kun siellä on vihulaiset, esineet ja muut. Graffat tulee isosta texture-atlas/spritesheet kuvasta jossa on 32x32 kokoisia tekstureita eri asioille.

Tässä näkyy tän päivän Git commit logi. Tuo Antigravity 2 on kyllä aivan pirun hyvä, tykkään kovasti. Muistaa vaan pitää sen arkkitehtuurin mielssä ja palastelee agentille tehtävät sopivan pieniksi loogisiksi kokonaisuuksiksi ja kuvailee taskin yksityiskohtaisesti. Säästää tokeneita ihan helvetisti kun ei visko geneerisiä "Tee mulle Parempi Lumen(TM)" prompteja. :)

---cut---
commit 2afbc2a6cc26af08dcbea753e223ac11e09602a9
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 15:06:42 2026 +0300

feat: add debug console log when player steps on a loot pile

commit 91592aa2039f221f7c6b7123a482f671e4439c30
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 15:03:14 2026 +0300

fix: make LootPile entity walkable and ignore it in bump combat checks

commit b5bf1e922924ca3a0fbbf0f06599989555f49f13
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 14:58:27 2026 +0300

feat: implement monster loot drop sequence and non-collidable LootPile spawning

commit b37a2eee4fbb6c7a01acc50d77cb511d53a4b6bf
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 14:42:39 2026 +0300

change: Updated player_config.json for correct player image

commit 60e076605dc6d40a5f9d2dfa0b905b0914e65e19
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 14:39:15 2026 +0300

feat: implement data-driven PlayerConfig JSON system and procedural spawning

commit 26f61fec434ad84ddb0e26d84a7f975a3453ec5e
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 14:34:45 2026 +0300

feat: implement procedural ItemFactory and dynamic affix stacking damage rolls

commit 8fc7c3219370cf7e35fe38cf2734f6c2ccb6c3b5
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 14:29:55 2026 +0300

refactor: extract common AI wandering logic to EntityAI base class

commit dfb1d8c0a37165cc51849163fced0a6b2ba4e79b
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 14:23:06 2026 +0300

feat: implement entity collision checks and fix CMake asset copying

commit 3312c3e89a53fa6e305bd0a0e6e9bb4ec679ab77
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 11:40:26 2026 +0300

feat: implement player death state freezing and spacebar respawn system

commit a09712e781fd18ea86e82a4aee7ce4f8f1db74d4
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 11:35:23 2026 +0300

feat: implement dual-wield ready EquipmentProfile system and integrated natural/weapon rollDamage combat engine

commit 05b9b60f0f6625ce4af89db9d77d2278fa3eacd8
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 11:22:14 2026 +0300

feat: implement engine-level DiceRoller, componentized item damage affixes, and static layered corpse rendering

commit f5841e1db15d372105eb21330a5520db2b8d6939
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 11:00:36 2026 +0300

feat: implement roguelike bump attack combat mechanic

commit 9e5b62f3495f7c59f2147c135a55369d41580c14
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 10:50:40 2026 +0300

feat: implement HUD overlay displaying player health

commit 26dc57217302a20145b8fe43bd805ff9c72639b3
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 10:45:59 2026 +0300

feat: implement item template system and clean up entity death state behaviors

commit aede00ea443b6ff30edda9d1367ad43941f0c9e8
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 10:33:45 2026 +0300

clean: remove verbose light statistics console logging

commit a8658a152091ac57dc948f23a648699d2a986e6f
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 10:32:21 2026 +0300

feat: implement combat engagement, tactical fleeing, and hierarchical template defaults

commit fb5f7f4c70cd137254e987e71c083e25a747c3ad
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 10:10:43 2026 +0300

feat: invert entity speed math and implement baseline hitpoints/damage bindings

commit 2b1ff897ef6cb6d286cbd457cbecf497d6734ff4
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 09:55:16 2026 +0300

Implement GenericHostileEntityAI using Pathfinder and integrate with JSON templates

commit bf020ed9fee53a45fac1892cd5e6939398ee6043
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 09:55:06 2026 +0300

Implement Pathfinder subsystem, INavigableMap interface, and Bresenham's Line Algorithm

commit 1696357914b8f41a130f5a2417a8601fae1d1ce1
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 07:16:41 2026 +0300

Updated monster and tile json-files

commit 0695595b773480183267b1525261fa1af15c5558
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 06:59:13 2026 +0300

Implement data-driven TileMap rendering, slicing, and config-header schema optimization

commit 550d784b23722f2fc242a323620952db8cf38dbd
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 06:46:50 2026 +0300

Implement data-driven entity system, spritesheet slicing, and Vulkan exit leak fix

commit dba6e7f6aeec0fb10c756c306d9caada346343e0
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 04:56:09 2026 +0300

Reposition test monster spawn to starting player room for easier testing

commit acaaea6988ac91bdc8646bc5a492d15e38f8729f
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 04:51:59 2026 +0300

Filter dynamic entities by player line-of-sight and perception distance during rendering

commit 1b054072503df30577ac4e832ac7752d8769102d
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 04:45:09 2026 +0300

Implement strict distance culling and smooth fading for distant light sources

commit d4cccf35a35c787e7f8a6d9f9ae10f7388bde578
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 04:39:50 2026 +0300

Fix entity lighting by rendering sprites before applying multiplicative lightmap mask

commit 49f638489070045378c58922bc59a4940de7b57d
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 04:29:39 2026 +0300

Updated raycast screenshot to show new lighting system

commit 0818fd58eed08fd4f1ddc69cc40fcb8f8cf07eaf
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 04:20:01 2026 +0300

Implement Fog of War with explored tile tracking and dim ambient memory rendering

commit e1a2c6c6473b207b2fad070da81264d33f27ef63
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 04:06:14 2026 +0300

Implement Light Penetration / Wall Extrusion inside walls for smooth illumination

commit 79669bca8f5c687b1abb42623840808f15df0f71
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 04:02:53 2026 +0300

Perfect lighting attenuation curve and expand LightSource structure for spells and magic types

commit 2ba4dbe1caf3ec0bf574c1a1b1f4ee9aee9df980
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 03:57:23 2026 +0300

Recalibrate torch light color to warm white and adjust ambient shadow level

commit 3eb0507f8a020642a993bec3f3760896315bd984
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 03:54:46 2026 +0300

Implement Multiplicative Lightmap Architecture using custom render targets and blend modes

commit aa4b3657b71e237a95f4403f506ed1019c766cd8
Author: Erno Pakarinen <erpakari@gmail.com>
Date: Wed Jul 1 01:07:28 2026 +0300

Implement Multi-Light System with precalculated vertex attenuation and player line-of-sight culling
 
Viimeksi muokattu:
Mielenkiintoine pronjekti sulla , tätä pitää kyllä seurata lähemmin, itse pari pientä korttipeliä ai:n avulla tehneenä aihe kiinnostaa. Toivottavasti jaksat kirjoitaa useasti etenemisestä.
Muuten, jos haluut pelihommia tehdä yhteistyössä niin mua kiinnostaa. Se on vähän mun juttu ollu vuosikymmeniä, eri tavoin <3
 
Muuten, jos haluut pelihommia tehdä yhteistyössä niin mua kiinnostaa. Se on vähän mun juttu ollu vuosikymmeniä, eri tavoin <3
Tällähetkellä aika niin kortilla että siksi juuri mielenkiinnosta luen mitä saat aikaan. Syksyllä voisi katsoa kun kiireet helpottaa.
 
Tänään tein 3D-rendaajan tuohon ja paljon kaikenlaista pientä. Videosta näkyy. Iso osa semmoisia asioita jotka ei päällepäin näy. GameStateManager, C# tyylinen eventtien hallinta (ei pollausta enää), UI, ja mitä muuta. Tosta videosta näkyy.

tää on aika hauskaa.

Uusin techdemo
ja seuraava

tässä jo jotkut asiat toimii

Niin tein myös äänisysteemin, taustamusa mikä soi on itse sävelletty. Neljä eri variaatiota samasta kappaleesta. Ääniefektit lainattu paikasta mistä saa ilmaisia efektejä.

Eventti systeemistä mun blogissa
 
Viimeksi muokattu:

Statistiikka

Viestiketjuista
312 905
Viestejä
5 309 632
Jäsenet
84 390
Uusin jäsen
Lehtipihvi

Hinta.fi

Back
Ylös Bottom