Isometrisen kartan scrollaus

Saku-foorumi » Classic Amiga » Ohjelmointi » Viestit 2003 » Isometrisen kartan scrollaus « Edellinen Seuraava »

Kirjoittaja Viesti
 

Petteri
Tiistaina, 7. tammikuuta, 2003 - klo 14.53:   
Olen väsäämässä Blitz Basicilla Diablo/UFO-tyyppistä peliä, mutta ruudun vierittäminen tuottaa ongelmia.

Isometrisellä kartallahan osa palikoista piirretään osittain toistensa päälle ja siksi kartta täytyy aina piirtää ylhäältä alaspäin, jotta palikat "limittyisivät" oikein. Mutta koska pelialueen täydellinen uudelleenpiirtäminen vie liikaa aikaa, täytyy kartan vierittäminen hoitaa Scroll-komennolla ja piirtää sitten uudelleen vain ne kohdat, jotka jäävät tyhjiksi. Alas ja oikealle vierittäessä ei ongelmia ole, mutta kun ruutua vieritetään ylös tai vasemmalle, menevät ruudun kyseisiin reunoihin piirretyt palikat vanhojen palikoiden päälle, eikä alle niin kuin pitäisi ja kartan rakenne rikkoontuu.

Osaisiko joku neuvoa?

 

miksuh
Tiistaina, 7. tammikuuta, 2003 - klo 19.31:   
Hmm. Itse en ole koskaan isometrista peliä tehnyt, eli kokemusta tuosta ei ole.. Kerran kyllä suunnittelin UFO-tyylisen pelin tekemistä, mutta se jäi sitten vain suunnittelu asteelle.

Äkkiseltään mulle ei tule oikeen muuta mieleen, kuin kaksi ratkaisua. Eli ainakin paremman ratkasun puutteessa itse lähtisin joko siitä, että kun on kaksi bitmappi blokkia, uusi ja vanha palikka. Niin ensin uusi palikka joko blitataan ruudulle, tai kopioidaan johonkin bufferiin. Sitten se vanhan palikan osa, joka jäisi muuten uuden palikan alle, blitataan takaisin ruudulle tai kopioidaan bufferiin uuden palikan päälle.

Tai toinen tapa olisi käyttää apuna jonkinlaiosta maski-systeemiä, jolla uudesta palikasta "leikataan" pois se alue, joka ei saa peittää vanhaa palikkaa. Eli jokaista palikkaa kohti olisi itse bitmap-blokki ja sitä vastaava maski. Eli käytännössä uudesta palikasta "leikattaisiin" pala pois käyttämällä vanhan palikan maskia. Sitten leikelty uusi palikka blitattaisiin ruudulle niin että maskin määrittelemä alue on läpinäkyvä.

Kummallakin tavalla joudutaan tekemään enemmän työtä, kuin sillonkun scrollataan alas tai oikealle, mutta tuota ylimäärästä työtä tuskin voi välttää, ainakaan äkkiseltään ei tule mieleen mitään keinoa välttää sitä.

Sitä en sitten osaa sanoa, miten tuo Blizbasicilla käytännössä tehdään, kun ei ole Blizbasicilla koodauksesta kokemusta.

 

miksuh
Tiistaina, 7. tammikuuta, 2003 - klo 19.35:   
Tai hmh en nyt tiedä tuleeko siitä juuri enempää työtä kun tarkemmin ajattelee juttua :)

 

tomppa
Keskiviikkona, 8. tammikuuta, 2003 - klo 0.15:   
Kuinka iso alue on kyseessä? Periaatteessa kai koko ruudun uudelleenpiirron pitäisi pystyä tekemään tarpeeksi nopeasti johonkin UFO tyyppiseen peliin jossa ei tarvita mitään 50fps päivitystä. Joskus amos+a500 aikoina noiden kanssa tappelin ja kivaa oli ;-), miksuh:n idea tuntuis kyllä oikeelta nopeaan askel-askeleelta scrolliin.
Jossain diablo tyyppisessä pelissähän joudutaan joka tapauksessa päivittämään aluetta hahmojen liikkuessa, ainakin hahmojen "päällä" olevat osat.

 

Jupp3
Keskiviikkona, 8. tammikuuta, 2003 - klo 8.27:   
Itselläkin on samanlainen peli tekeillä, koodia n. 3000 riviä tällä hetkellä... Suunnitteilla mm. verkkopeliä ym. kivaa...

Ruutu saattaa muuten kannattaa piirtää alhaalta ylöspäin, eikä toisin päin. Eli ensin seinä, ja jos näkyy, sen taakse maata.
Eli tyhjennetään ruutu aluksi taustaväriseksi, ja pastetetaan grafiikkaa siten, että piirretään vain taustavärille; Tällä tavalla ei tule ylikirjoitettua yhtään grafiikkaa.

Vasemmalle oikealle ja alas scrollaus on helppoa, ylöspäin taitaa olla vaikein

 

JPQ
Keskiviikkona, 8. tammikuuta, 2003 - klo 10.41:   
Kivaa kuulla että jollain ns. kunnon peli projekteja itselläkin on muutama
pikkupeli käynyt mielessä. Ne on tosin sitä 8bit kotimikro tasoa josta itse pidän
eikä ole aluksi ainakaan näyttökortti tukea ja jos onkin niin se on ehkä vaikeasti toteutettu...

 

miksuh
Keskiviikkona, 8. tammikuuta, 2003 - klo 17.27:   
Vielä joku aika sitten itsellänikin oli parikin peliprojektia meneillään, mutta ne on nyt jäissä odottamassa uutta AmigaOnea/Pegasosta.

Kaikki vähä käytettävissä oleva aika kuluu nyt muutenkin syksyllä alottamaani yhteen vakavampaan ei-peliprojektiin, jonka ideaa oon pikkuhiljaa kypsytelly mielessäni ja paperilla jo parisen vuotta. #amigafin:llä oon jotain tuosta vihjaillutkin välillä, mutta oon tullu siihen tulokseen et julkisilla foorumeilla en siitä muuten puhu tässävaiheessa.

 

JPQ
Keskiviikkona, 8. tammikuuta, 2003 - klo 19.04:   
miksuh: mulla ne ei odota koskapa itellä ei liene jotenkin varaa niihin ja PPC turbokin hyödyllisyys aste arvelluttaa vieläkin. Mullakin hyötysofta projekti tosin omien tarpeiden mukaan ei voi olla kamala muiden muan mukaan mutta sille ei tehdä mitään jollei tosiaankin löydy ihmisiä jotka oikeasi kiinnostuneita.

 

tomppa
Torstaina, 9. tammikuuta, 2003 - klo 3.59:   
Joitain aikoja sitten kehittelin sellaista isometristä systeemiä AGAlla jossa tehdään paljon erilaisia perpixel opereizoneja chunkymodessa(läpinäkyvyys jne.) ja ympäristön dynaamisuuden vuoksi koko roskaa päivitetään aina uudestaan. Homma toimi muuten suht nopeesti(030/50), mutta c2p konversio lisää tuhottomasti aikaa. Eli sattuisko kukaan tietämään hyvää c2p kirjastoa kun itsellä ei ole oikein kapasiteettia moisen tekoon. Vai unohdanko koko homman ja teen ihan simppelisti blittaillen? Ideoita?

 

tomppa
Torstaina, 9. tammikuuta, 2003 - klo 4.14:   
JPQ: Mikäs projekti se on, jotain kuvankäsittelyä vai?

 

JPQ
Torstaina, 9. tammikuuta, 2003 - klo 11.24:   
Tomppa: Just niin ja lähinnä omia algorytmejä.
Ja Ehkä Photogenics1.2a fraktaalipilvi rutkun kopio ja kohina kuva generaattori.
Mistäs sinä muuten arvasit ? no kyllähän minä siitä ennenkin olen puhunut ei ole vain vielä huvittanut aloitus.
Ja varsinkin kun GUIn vääntö on raskasta.

 

JPQ
Torstaina, 9. tammikuuta, 2003 - klo 11.26:   
Ja tuo FlashColor effekti vain jäi tuostalistasta pois siis tuon mainitun ohjelman hengessä.

 

JPQ
Torstaina, 9. tammikuuta, 2003 - klo 12.14:   
FalseColor eikä FlashColor. Anteeksi virhe ja anteeksi Offtopic josta puhuminen loppuu minun osalta nyt jos ei joku jotain siitä kysy.

 

Petteri
Torstaina, 9. tammikuuta, 2003 - klo 13.38:   
miksuh: Tuota voisikin kokeilla. Blitz Basicissa on nimittäin mahdollista käyttää mm. Deluxe Paintista tuttua Stencil-kikkaa, jolla siis tietyt alueet ruudulla voidaan lukita niin, etteivät piirtotoiminnot vaikuta niihin. En tosin ole vielä käytännössä kokeillut miten paljon tuon kikan käyttäminen hidastaa piirtotoimintoja.

tomppa: pelialue koostuu 48x24-kokoisista palikoista, jotka kattavat noin 500x400-kokoisen alueen. Eli käytännössä vaatii grafiikkakortin toimiakseen, sillä 640x480-resoluution AGA-tila tahmaa hirvittävästi, kun käytössä on täydet 256 väriä. Suunnitteilla on kyllä tuki kevyemmälle 320x200-tilalle mopompia Amigoita varten.

 

tomppa
Perjantaina, 10. tammikuuta, 2003 - klo 2.15:   
Petteri: jep, tarkemmat AGAn resot 256 värillä on kyllä aika tervaa. Mahdolliseen mopoversioon ehkä vois käyttää pienemmän reson sijasta (paljon) vähemmän värejä. Vois olla helpompaa koodin kannalta ja näyttäiskin paremmalta IMHO. 320x200 kuitenkin jostain syystä nykyään hyppii silmille aikalailla. Tarkka vähävärinen kuva vois olla aika tyylikästä oikein tehtynä.

 

Jupp3
Perjantaina, 10. tammikuuta, 2003 - klo 16.50:   
tomppa: Tai sitten vain laitat mahdollisuuden vähentää "animaatiota"

Siis kyllähän strategiapeliä voi vaikka (kärjistetysti) 1fps nopeudella pelata, jos äijät & ammukset ym. liikkuvat 1 ruudun kerrallaan (Näin tällä hetkellä omassa projektissani)

Ei AGA-käyttäjiä kannata estää käyttämästä hires-versiota, oppivatpas ainakin arvostamaan näytönohjainta, jos ei muuta :)

Itse mietin vähän 16bit-tilojen mahdollisuuttakin...


Koodi on siis tällä hetkellä Amosia, mutta RTG-version ongelmien & PPC-tuen puutteen vuoksi olen siirtämässä kehitystä C:lle, Viime aikoina suurin kehitys on tapahtunut Globaalien muuttujien määrän putoamisessa ja proseduurien muuttamisessa käyttämään argumentteja & palautusarvoa, pitäisi helpottaa kääntöä Amos=>C huomattavasti.

Kun sais vain grafiikkasysteemit kehiteltyä C:lle...

Ja pitänee kai peliä vielä vähän viimeistellä, ennen kuin C:lle kääntää, meinaan Amosilla "vähän" helpompaa :)

 

JPQ
Perjantaina, 10. tammikuuta, 2003 - klo 17.37:   
Jupp3: Minkälaista graffa systeemiä C:lle tarttis kehitellä ?
Erittäin kiinnostunut. Itse mietin CGX libran päälle tuleevaa TrueColor graffa apukirjastoa jossa Ympyrän piirrot yms.
Ja jos jaksaisin joskus jopa tekstin kirjoitus halutan systeemin fontilla millä tahansa värillä kun nykyään rajoittuu siihen valepalettiin.
(Tuo fontti homma lienee vaikein siinä tiettyjä ratkaisemattomia pulmia)
Ehkä jopa OpenSourcena...

 

Jon
Perjantaina, 10. tammikuuta, 2003 - klo 18.01:   
Kuvakaappaukset ois mielenkiintoisia...

 

itix
Perjantaina, 10. tammikuuta, 2003 - klo 18.17:   
Jos isometristä karttaa vierittää ylös niin silloin osa ylemmästä tasosta täytyy piirtää uudestaan. Sitä on vaikea selittää.. mutta siis grafiikkaa täytyy piirtää uudestaan laajemmalta alueelta kuin pelkästään reunasta jolloin uudet palikat saadaan limitettyä nätisti. Ei siinä auta muu kuin kokeilla :)

 

Jupp3
Lauantaina, 11. tammikuuta, 2003 - klo 15.41:   
itix: Tiedän, mutta "Ylös" mitä minä tarkoitin on todellakin ylöspäin... Minulla scrollaa jo 8 suuntaan :)

JPQ: No, enpä oikein muuta tarvi, kuin maskausta (1 väri läpinäkyvä) suorastaan pakollinen isometrisella 3D:lla

Sitten tietenkin mahdollisesti vaaka/pystysuorien viivojen piirto, teksti... Mutta tuon ensimmäisen vaiheen kun saisi ensin tehtyä, noita "hienouksia" voisi sen jälkeen alkaa säätämään ;)

Kuva puhuu enemmän kuin tuhat sanaa, ja demo enemmän kuin tuhat kuvaa :)
http://jupp3.amigafin.org/Beta.lha

Ei nyt ole lähellekään uusin versio, ainakin RTG-tuki on kokonaan disabloitu tuosta ongelmien vuoksi. "Pelialue" vain arvotaan täyteen seiniä & jotain objekteja...

Tuossa nyt vielä kuva vielä vanhemmasta versiosta;
http://jupp3.amigafin.org/images/strat.gif

Niin, ja tuo siis piirtää koko ruudun joka kerta uudestaan, yritin aluksi itsekin säätää semmoista systeemiä, joka piirtää vain reunan uudestaan ja scrollaa ruutua. Melko hyvin toimikin, kunnes lisäsin 3 tason näkyvyyden... Eli, nykyään pitäisi päivitellä ruutua vähän mistä sattuu... Reunat eivät enää riittäisi. :(

Niin, ja kommentit & ehdotukset toki kelpaavat :)

Mutta muistutan toki, että toi on vielä beta... Ei pitäisi kaatuilla, mutta monet "featuret" puuttuvat vielä & ovat keskeneräisiä...

Niin, ja ei sitten toimi 68000:lla (Olisi kyllä muutenkin liian hidas...)

 

Jon
Keskiviikkona, 23. huhtikuuta, 2003 - klo 14.44:   
Jupp3...kokeilin tuota demoa jokin aika sitten. Millä mallilla engine nykyään on? Innostuin taas pelaaman UFOa kun Pelit-lehdessä oli hyvä juttu. Tuo Laser Squad Nemesis pitäisi saada kyllä Amigallekin - MacOS ja Linux -portit tehdään in-house.

 

Jupp3
Keskiviikkona, 23. huhtikuuta, 2003 - klo 19.42:   
Jon: Osa koodista käännetty C:lle, 24bit grafiikat, 8bit kirkkaus (vrt vanhan version 3 tasoa...), resoluutio on noin tuplaantunut tuosta vanhemmasta (Eli 640x480, toki voi olla isompikin...)

Mutta "pelillisesti" on vielä pahasti vaiheessa, grafiikkarutiineja lähinnä värkännyt uuteen uskoon... :)

Pitäisi grafiikkojakin jaksaa säätää... :)

 

Jon
Keskiviikkona, 23. huhtikuuta, 2003 - klo 23.19:   
Onko minkälaiset speksit? Valaistus, korkeuserot? Olen tuossa huomannut PC:n XCOMia kokeillessa että siinä on korkeuserot ja jonkinlainen valaistussysteemi - tai ennemmin sellainen dark of war (fog of war) -systeemi joka himmentää alueita jotka eivät näy kunnolla. Amigalla näitä ei muistaakseni ole.

Entäpä vihollisten AI? En muista että oliko siinä vanhassa demossa vihuja...

 

Jupp3
Torstaina, 24. huhtikuuta, 2003 - klo 10.30:   
Jon: Ensisijaisestihan tuosta on tulossa moninpeli (UFO:n pahin puute) eli AI:ta ehkä sitten myöhemmin...

Korkeuseroja ei tällä hetkellä ole, mutta valaistus (tai siis näkyvyyden kuvaus valaistuksella) on.

Vanhassa versiossa tasoja on 3, uudessa 256, tosin vielä mietin, että miten noi "ottaa käyttöön"... Parasta kai olisi, jos olisi kuitenkin näkyvissä selvä raja, jonka toisella puolella olevia vihollisia ei näe (mutta maaston & seinät näkee)

Esikuvana on ehkä enemmän Laser Squad kuin UFO, mutta katsotaan... Nuo korkeuserot ovat olleet alusta asti mielessä, mutta teen kuitenkin ensin "ihan 2D:nä"

Demossahan (siinä vanhassa) on 2 joukkuetta, kummatkin pelaajan ohjaamia.

Toki jos jonkun AI:n teen, pitää se tehdä siten, että se tietää "tasan sen verran, mitä ihmispelaaja tietäisi samassa tilanteessa"

Sitten kun tuon näkyvyyden saisi kuntoon, pitäisi kai alkaa säätämään vähän grafiikkaa, että saisi peliin vähän "edustavuutta" että kehtaisi muillekin kuvia näyttää :)

 

miksuh
Torstaina, 24. huhtikuuta, 2003 - klo 17.06:   
Jon: Kyllä Amigan UFO:ssa on korkeuserot, mut tota valaistuksen himmennys hommaa ei ole.

 

Jon
Torstaina, 24. huhtikuuta, 2003 - klo 21.33:   
miksuh, voit olla oikeassa. En ole pelannut ulkokenttiä vähään aikaan, terror sitea yms. olen taistellut läpi.

Jupp3: itseäkin tuollainen projekti kiinnostaa mutta se on vain ajatusasteella (joka ei jätä rauhaan :)).

 

Jon
Perjantaina, 25. huhtikuuta, 2003 - klo 10.37:   
Mutta pystyykö sitä UFOa promotoimaan? Joku CSAGissa väitti niin, mutta täällä Saku-foorumilla oli vastaisia mielipiteitä jokin aika sitten.

 

miksuh
Perjantaina, 25. huhtikuuta, 2003 - klo 15.21:   
Amigan ufossa mua ärsyttäny eniten ne savu ja liekit. Eli Amigan UFO:ssahan, edes AGA versiossa, ne ei ole animoituja mut PC-versiossa on... Näyttää vähä tyhmältä kun savu ja liekit ei liiku ollenkaa. Mut toi on vähäpätönen puute loistavassa pelissä :)

 

JPQ
Perjantaina, 25. huhtikuuta, 2003 - klo 15.28:   
miksuh: kummalista että just noin päin luulisi amigassa olelvan tuohon enempi vääntöä tuohon aikaan.
Jon: sain minäkin SimCity2000:sen promottua kun on Picasso96 ja ModePro siitä optio Force Planar. Mutta CGXV4:sen kanssa en onnistunut.

Lisää viestisi tähän
Viestisi:
Käyttäjätunnus: Postitus informaatiota:
Tämä on yksityinen keskustelupalsta. Vain rekisteröidyt käyttäjät ja moderaattorit voivat postittaa tänne.
Salasana:
valinnat: Aktivoi URL:t automaattisesti tässä viestissä
Toimenpide: