Olen kirjoitellut vuodesta 2006 alkaen, varsin hitaasti ja satunnaisesti, lähinnä omaksi ilokseni ja ohjelmointiharjoituksena tekstipohjaista roolipeliä.
Koodirivejä on tällä erää n. 6 700 ja pelin perusrunko alkaa olla kunnossa.
Ferment - Revenge of the Post-Apocalyptic Communist Ninjas on kunnianosoitus fantasiaropejen genrelle ja vähän kaikelle muullekin, tekee popkulttuuriviittauksista taidetta ja on muutenkin varsin erinomainen pieni peli. Pelin perustiedot löytyvät
esittelysivulta.
On toki myönnettävä, että vajaan kolmen vuoden kehitystyön jälkeenkään peli ei ole aivan täydellinen. C++-taitoni kun rajoittuvat noin kymmeneen funktioon, joita väärinkäytän surutta. Switch-case ja do-while esiintyvät tiheään. Koodi ei ole ehkä kaunista, mutta useimmiten se toimii.
Tämän ketjun tarkoitus ei niinkään ole markkinoida tuotetta, vaan toimia interaktiivisena ohjelmointipäiväkirjana, jota satunnaisesti päivittelen, ja jossa kokeneemmat voivat joskus neuvoa ongelmissa. Tästä syystä en laittanut ketjua Pelit-alueelle.
Juoni ei ole vielä valmis, eikä pelitasapainoa ole hiottu kuin alkuvaiheen osalta. Tällä hetkellä kehityksessä prioriteettina on vapaamman liikkumismallin keksiminen - suunnitelmissa on roguelike-peleistä tuttu ascii-kartalla suunnistaminen ja tähän liittyen vielä erilliset luolastot. Ja vaikka Fermentin peruslähtökohta onkin olla teksti-RPG, pitkän tähtäimen jatkosuunnitelmiin kuuluu myös GUI:n liimaaminen päälle, kunhan joskus saan aikaiseksi opetella GUI-ohjelmointia.
Eilen "julkaistu" versio 0.0.0.29 on pikkupäivitys joka lähinnä helpottaa hieman peliä. Viimeisimmät suuret muutokset liittyvät tallennusten hallintaan ja talousjärjestelmään.
Tässä vielä työn alla olevan uuden liikkumisfunktion raakaversio, joka löytyy kyllä lähdekoodista mutta ei ole vielä käytössä. Idea on se, että kursorin paikka siirtyy numeroa painamalla tiettyyn suuntaan, johon piirretään pelaajan hahmoa osoittava kirjain. Taustagrafiikka piirretään myös joka päivityksellä uusiksi. Typerä idea, kenties? Toimii kuitenkin jotenkuten.
int mapAlt()
{
int currentchoice;
int fightornot, fightresult, fightlevel, hunterspecial=1;
int posx, posy;
system("clear");
showstats();
ruler();
cout << " \n";
cout << " :::::::::PI:: \n";
cout << " SE::::::::: : : :: \n";
cout << " : :: ::: :::::: \n";
cout << " : :::: : : :: \n";
cout << " : ::: :: : :: \n";
cout << " : CK::::::::::::::::::::::KR \n";
cout << " : :: :: : \n";
cout << " : ::: :::::::LE \n";
cout << " : ::: : :: \n";
cout << " : :: :NA \n";
cout << " ES::::::::: \n";
cout << " \n";
if (cityid == 2)
{
posx = 21;
posy = 10;
printf("\033[%d;%dH", posy, posx);
cout << "P";
printf("\033[%d;%dH", posy, posx);
}
do
{
currentchoice = mygetch()-'0';
updateinfla();
switch (currentchoice)
{
case 1:
posy++;
posx--;
drawMap();
printf("\033[%d;%dH", posy, posx);
cout << "P";
printf("\033[%d;%dH", posy, posx);
break;
case 2:
posy++;
drawMap();
printf("\033[%d;%dH", posy, posx);
cout << "P";
printf("\033[%d;%dH", posy, posx);
break;
case 3:
posy++;
posx++;
drawMap();
printf("\033[%d;%dH", posy, posx);
cout << "P";
printf("\033[%d;%dH", posy, posx);
break;
case 4:
posx--;
drawMap();
printf("\033[%d;%dH", posy, posx);
cout << "P";
printf("\033[%d;%dH", posy, posx);
break;
case 5:
break;
case 6:
posx++;
drawMap();
printf("\033[%d;%dH", posy, posx);
cout << "P";
printf("\033[%d;%dH", posy, posx);
break;
case 7:
posy--;
posx--;
drawMap();
printf("\033[%d;%dH", posy, posx);
cout << "P";
printf("\033[%d;%dH", posy, posx);
break;
case 8:
posy--;
drawMap();
printf("\033[%d;%dH", posy, posx);
cout << "P";
printf("\033[%d;%dH", posy, posx);
break;
case 9:
posy--;
posx++;
drawMap();
printf("\033[%d;%dH", posy, posx);
cout << "P";
printf("\033[%d;%dH", posy, posx);
break;
case 0:
break;
}
fightornot=(rand()%20)+1;
if (fightornot <= 3)
{
EPÄOLENNAISTA KOODIA LEIKATTU TÄSTÄ
}
else
{
EPÄOLENNAISTA KOODIA LEIKATTU TÄSTÄ
}
}while (currentchoice != 0);
mygetch();
return 0;
}
void drawMap()
{
system("clear");
showstats();
ruler();
cout << " \n";
cout << " :::::::::PI:: \n";
cout << " SE::::::::: : : :: \n";
cout << " : :: ::: :::::: \n";
cout << " : :::: : : :: \n";
cout << " : ::: :: : :: \n";
cout << " : CK::::::::::::::::::::::KR \n";
cout << " : :: :: : \n";
cout << " : ::: :::::::LE \n";
cout << " : ::: : :: \n";
cout << " : :: :NA \n";
cout << " ES::::::::: \n";
cout << " \n";
}
Jos jotakuta kiinnostaa testailla tämänhetkistä tuotetta, palaute tietysti kelpaa. Lähdekoodit löytyvät osoitteesta
http://www.vaihtoehto.org/ferment.
Pelihän näyttää suurin piirtein seuraavalta: