Ideointitopic.

Muu yhteisön välinen keskustelu.
otto90x
Advanced Member
Posts: 349
Joined: Mon Aug 27, 2007 9:00 pm
Location: Lapinjärvi, Finland
Contact:

Re: Ideointitopic.

Post by otto90x »

Jare, jännä idea kieltämättä. Mietin vähän että miten nuo nesteet tuolla putkessa mallinnettaisiin, onko ne pistemäisiä, sykäyksittäin lähtettäviä paketteja vai jatkuvaa virtaa, mahdollisesti vain pidetään muistissa kuinka suuri osa putken poikkipinta-alasta on nesteen peitossa, mikäli neste nyt koko putken peittäisi tasaisesti. Jaetaanko putki pätkiin? Oletettavasti myös putken nousut ja laskut vaikuttavat nesteen virtausnopeuteen. Putkista tulisi tehdä niin kalliita että sekakäyttöä rohkaistaisiin. Jonkinlaista ohjelmoitavaa putkiautomatiikkaa tarvittaisiin, jottei kaikkia venttilejä, pumppuja ja muita tarvitsisi käsin operoida. Ja toki kaasua voisi myös putkissa kuljettaa.
Otto Martikainen a.k.a. MetalRain, otto90x, kAATOSade.
Runoblogi, vuodatusta ja sekoiluja.
User avatar
Jare
Devoted Member
Posts: 877
Joined: Mon Aug 27, 2007 10:18 pm
Location: Pori
Contact:

Re: Ideointitopic.

Post by Jare »

otto90x wrote:Jare, jännä idea kieltämättä. Mietin vähän että miten nuo nesteet tuolla putkessa mallinnettaisiin, onko ne pistemäisiä, sykäyksittäin lähtettäviä paketteja vai jatkuvaa virtaa, mahdollisesti vain pidetään muistissa kuinka suuri osa putken poikkipinta-alasta on nesteen peitossa, mikäli neste nyt koko putken peittäisi tasaisesti. Jaetaanko putki pätkiin? Oletettavasti myös putken nousut ja laskut vaikuttavat nesteen virtausnopeuteen. Putkista tulisi tehdä niin kalliita että sekakäyttöä rohkaistaisiin. Jonkinlaista ohjelmoitavaa putkiautomatiikkaa tarvittaisiin, jottei kaikkia venttilejä, pumppuja ja muita tarvitsisi käsin operoida. Ja toki kaasua voisi myös putkissa kuljettaa.
No nesteet olisivat periaatteessa paketteja (joskaan niille ei varsinaisesti varattaisi muistia). Putki jaetaan pieniin osiin. Jokaisessa osassa voi olla yhtä nestetyyppiä - jos sinne puskee toista tyyppiä, suoritetaan nesteiden yhdistäminen, mikäli mahdollista. Jokaisella osalla on paksuudesta riippuen tietty maksimi nesteen määrälle. Tämä maksimi voidaan toki ylittää esim. 150%:iin asti, jolloin paine tulee erittäin suureksi. Tämän prosentin ylittyessä osa hajoaa. Osan kohdalla on myös merkintä sen sisältämästä nestetyypistä ja -määrästä.

Nesteen liikkuminen toteutetaan yksinkertaisesti käymällä kaikki osat läpi ja tasaamalla nesteen määrää aina viereisten osien kanssa. Nesteen määrä ei kuitenkaan mene osien kohdalla ihan tasan, jos jossakin osassa on alipainetta (esim. nestettä alle 50% maksimista). Alipaineellinen osa ei luovuta nestettä juuri lainkaan. Tai jos jossakin osassa on ylipaine, ei sinne voi mennä nestettä kuin erittäin pieni määrä kerrallaan. Jossain vaiheessa ylipaineinen osa joko hieman tyhjenee nesteen mennessä eteenpäin, tai poksahtaa, jos paine kasvaa liikaa (kuten jo mainitsin).

Nousut ja laskut voisi toki huomioida. ylös-/alaspäin tasattavalle nesteelle voisi tehdä samantapaiset poikkeukset kuin yli-/alipaineen kanssa. Eli ylhäällä oleva osa käyttäytyisi alempaan nähden vähän samaan tapaan kuin ylipaineessa oleva osa. Alhaalla oleva osa vaikuttaisi ylempänä olevaan osaan nähden alipaineiselta, joten siihen voidaan tasata helposti suurempikin määrä nestettä.

Venttiilissähän ei sinäänsä liene muuta operoitavaa kuin suunta ja lukko. Suunta säädettäisiin yleensä vain silloin, kun venttiili asennetaan. Lukkoa taas käytettäisiin vain erikoistilanteissa, joita tulee kuitenkin harvoin, jos putkisto toimii yleensä kunnolla.

Pumppuihin voisi toki jonkin automaattisen säätömahdollisuuden tehdä. Kentis pumput voisi laittaa ryhmiin, ja yhden ryhmän kaikkia pumppuja hallittaisiin muokkaamalla kyseisen ryhmän asetuksia. Asetuksissa voisi olla ainakin pumpun aikaansaama paine vieressä olevaa osaa kohtaan. Paineen kasvattamainen lisää pumpun käyttökustannuksia.

Tuli myös mieleen että tavallisten venttiilien lisäksi voisi olla varoventtiileitä. Näiden avulla voisi rakentaa varaputkistoja, joihin tulee nestettä silloin, jos tavalliseen putkistoon meinaa tulla ylipainetta. Varaputkisto voisi johtaa nesteen vaikkapa säiliöön, josta sen voi myöhemmin johtaa takaisin muuhun putkistoon.

Kaasun ottaminen mukaan on hyvä idea. En kuitenkaan haluaisi moottorissa mitenkään erottaa nestettä ja kaasua, joten näille pitäisi vain keksiä yhteinen termi. Kenties aine? Aineen tyyppi sitten määrittelisi samalla, onko kyseessä neste vai kaasu.
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Ideointitopic.

Post by Jani »

Hyvältä kuulostaa, Jare!
Olisi muuten pieni ehdotus: Kun kuljetetaan öljyä tai polttoainetta, olisi niissäkin omat vaaransa kun jotain tapahtuisi :P .
Ei tietääkseni tule älyttömän hankalaksi jos koodisi on paloiteltu kunnolla funktioihin.
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 8:25 am

Re: Ideointitopic.

Post by Sly_Jack0 »

Kaasu kuullostaa hyvältä. Silloin voisi esimerkiksi yhdistää kivennäisvettä tavallisesta vedestä ja hiilidioksidista.
Taatero
Advanced Member
Posts: 384
Joined: Tue May 27, 2008 6:06 pm

Re: Ideointitopic.

Post by Taatero »

Tämä nestepeli alkaa kuullostamaan jo niin hyvältä, että jonkun kannattaisi alkaa toteuttamaan tätä :D
[color=#40BF00][u]koodaaja[/u][/color] wrote:Täyden turvan takaamiseksi avain olisi myös kuljetettava offlinenä suoraan tulevien viestien lähettäjältä niiden vastaanottajalle laitakaupungin hämärissä yöneljältä ja varmistettava, ettei kumpaakaan osapuolta seurata. Popliinitakkia suositellaan.
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 8:25 am

Re: Ideointitopic.

Post by Sly_Jack0 »

Miä itseasiassa olen jo alkanut tätä toteuttamaan. Homma on vasta suunnitteluvaiheessa, mutta...
User avatar
kaneli2000
Guru
Posts: 1059
Joined: Mon Mar 17, 2008 2:40 pm
Location: Lempäälä

Re: Ideointitopic.

Post by kaneli2000 »

Yksinkertainen open world-peli, jossa sidequestit ovat ainoa tavaramerkki ja päätarinaa ei ole, vaan se rakentuu muiden asioiden kuten tekojen, paikoissa olemisen yms. ympärille. Siis Oblivion sijoitettuna toiseen aikaan, paikkaan ja tapahtumiin, sekä kivasti ideaa muokattuna.
I see the rainbow rising
SPuntte
Tech Developer
Tech Developer
Posts: 650
Joined: Mon Aug 27, 2007 9:51 pm
Location: Helsinki, Finland
Contact:

Re: Ideointitopic.

Post by SPuntte »

Jare wrote:*Kauhee läjä textiiii*
Kuulostaa ihan pirulliselta fysiikkapeliltä :mrgreen:

Tuo "50-150% täysi" putki kuulostaa vähän oudolta. Jos kyseessä on nestettä, se ei ole edes mahdollista, sillä neste puristuu paineen vaikutuksesta kokoon todella vähän. "Suuren" alipaineen (eli itse asiassa hyvin pienen paineen) tapauksessa neste taas alkaa "kiehua" ei muodostaa putkeen kuplia, kuten käy vereen liuenneille kaasuille sukeltajan noustessa liian nopeasti pintaan. Em. tapaus kuten myös ilman päästäminen putkeen varsinaisen kuljetettavan aineen lisäksi on harvoin toivottua, sillä se saattaa aiheuttaa erinäistä erroria sun muuta damagea aineen vastaanottopäässä.

Putket toki täytyy jakaa helposti hallittaviksi pätkiksi, esimerkiksi karttaneliöiden mukaan. Putken sisällön -mitä ihme pilveä siellä sitten ikinä kuljetetaankin- "kvantittaminen" kuitenkin kuulostaa vähän hullulta. Luulenpa, että hommasta selviäisi kohtuullisesti myös käsittelemällä putkistossa olevaa ainetta jatkuvana.

Mielestäni putkessa kulkevaa "ainetta" ei tarvitse tyypiltään määritellä erikseen, vaan sen ominaisuudet sanelee yksikäsitteisesti siihen liittyvät fysikaaliset muuttujat, joita olisi ainakin:
  • tiheys aka ominaispaino eli kuinka suuri massa on tietyllä tilavuudella ainetta, mahdollisesti lämpötilan funktiona, jos lämpötilan vaihtelut sisällytetään peliin.
  • viskositeetti aka "jähmeys" eli kuinka helposti/vaikeasti aine liikkuu (tätä voi havainnollistaa ajattelemalla miltä tuntuisi esimerkiksi juosta a)ilmassa [vastaa mitä tahansa kaasua], b)vedessä [vastaa yleisimpiä nesteitä] tai c)siirapissa [vastaa esimerkiksi raskasta polttoöljyä])
  • puristuvuus eli vakio, joka ilmaisee, kuinka paljon tietty tilavuus pienenee tietyn paineen alaisena
Lisäksi kaasuille täytyisi puristuvuuden sijaan soveltaa ideaalikaasun yleistä tilanyhtälöä, sillä niitä voi nesteisiin verrattuna puristaa huomattavan paljon. Eri aineiden yhdistyminen joksikin tuotteeksi täytyisi tietenkin määritellä etukäteen kullekin erikseen, ja vieläpä siten, että systeemistä ei katoa esimerkiksi kokoonpuristettuun kaasuun sitoutunutta potentiaalienergiaa.

Edellä mainittujen aineen ominaisuuksien, ulkoisen ilmanpaineen, pumppujen syöttöpaineen ja putkenpätkän (joka idealisoitaisiin suoraksi) päiden korkeuden mukaan laskettaisiin putkiston paineet, sen sisältöön kussakin paikassa vaikuttavat voimat ja tästä edelleen eri sisältöjen liike.

Toki aineita ja niiden paikallisia ominaisuuksia (paine, jne..) voi käsitellä myös "pätkinä", mutta tällöin fysiikan osuus täytyy enemmän tai vähemmän heittää päästä realismi unohtaen ja todeta toimivaksi käytännössä.

Tarjoan fysiikan puolesta apuja, jos joku tätä alkaa vääntämään 8-)
CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES

CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX
User avatar
Jare
Devoted Member
Posts: 877
Joined: Mon Aug 27, 2007 10:18 pm
Location: Pori
Contact:

Re: Ideointitopic.

Post by Jare »

SPuntte wrote:Tuo "50-150% täysi" putki kuulostaa vähän oudolta.
50%:n kohdalla minulla oli tosiaan ideana, että loppu osa olisi ilmaa. En vain huomannut sanoa sitä. Ilman aiheuttamat ongelmat kulutuspaikassa voisi mielestäni unohtaa niin kauan kuin itse aineen kulkeminen putkistossa toimii. 150% taas oli kieltämättä varsin ajattelematon heitto. Tässä mielessä putkea ei kenties pitäisi voida ylikuormittaa lainkaan, vaan täynnä oleva putki pyrkisi blokkaamaan siihen pyrkivän aineen, mutta ei kuitenkaan kestäisi tilannetta juurikaan, jos viereinen putki puskee nestettä suurella voimalla.
SPuntte wrote: Toki aineita ja niiden paikallisia ominaisuuksia (paine, jne..) voi käsitellä myös "pätkinä", mutta tällöin fysiikan osuus täytyy enemmän tai vähemmän heittää päästä realismi unohtaen ja todeta toimivaksi käytännössä.

Tarjoan fysiikan puolesta apuja, jos joku tätä alkaa vääntämään 8-)
Uskon, että apusi on tarpeen. Ainakaan minä en ymmärä fysiikasta paljoakaan. Joten jos minä tekisin kyseisen pelin, minulle pitäisi selittää kaikki fysiikkaan liittyvät asiat rautalangasta vääntäen. Ja koska en osaa fysiikkaa, olen tottunut kaikissa projekteissani vain unohtamaan realismin ja kokeilemaan jotain omasta mielestäni yksinkertaista. Ei liene pitkällä tähtäimellä kovin hyvä juttu, joten pitänee joskus opiskella fysiikkaa.

Olisi kiva kuulla, miten ainetta käytönnössä käsiteltäisiin "jatkuvana".
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Ideointitopic.

Post by MaGetzUb »

Mitä jos kokeilisitta tehdä AaveSoturin vanhasta Raycasterista, netti räiskintäpelin. Tosin ne ukot pitäisi olla melko saman tyylisiä, kuin ShadowSquad:issa. (Se ikivanha cb:llä tehty Raycaster)
VesQ tuntee nämä nettiasiat loistavasti, niinkuin hän on antanut ymmärtää. Joten olisiko tämmoinen peli mahdollista tehdä? :)
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Ideointitopic.

Post by valscion »

programmer of DSG wrote:Mitä jos kokeilisitta tehdä AaveSoturin vanhasta Raycasterista, netti räiskintäpelin. Tosin ne ukot pitäisi olla melko saman tyylisiä, kuin ShadowSquad:issa. (Se ikivanha cb:llä tehty Raycaster)
VesQ tuntee nämä nettiasiat loistavasti, niinkuin hän on antanut ymmärtää. Joten olisiko tämmoinen peli mahdollista tehdä? :)
Hmm, musta tuntuu ettei nykyisen CB:n tehokkuudella saisi oikein minkäänmoista pelikokemusta irti, mutta saatanhan toki olla aivan väärässäkin :p
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Ideointitopic.

Post by MaGetzUb »

VesQ wrote:
programmer of DSG wrote:Mitä jos kokeilisitta tehdä AaveSoturin vanhasta Raycasterista, netti räiskintäpelin. Tosin ne ukot pitäisi olla melko saman tyylisiä, kuin ShadowSquad:issa. (Se ikivanha cb:llä tehty Raycaster)
VesQ tuntee nämä nettiasiat loistavasti, niinkuin hän on antanut ymmärtää. Joten olisiko tämmoinen peli mahdollista tehdä? :)
Hmm, musta tuntuu ettei nykyisen CB:n tehokkuudella saisi oikein minkäänmoista pelikokemusta irti, mutta saatanhan toki olla aivan väärässäkin :p
Voishan sitä kokeilla, paitsi itse en oikein ymmärrä ton raycasterin päälle. Ehkä Aavesoturi itse ymmärtää paremmin, miten saisi viholliset laitettua kenttään? Ja jos onnistuu vihollis lauman teko, niin miksei sitten onnistuisi siitä tekemään nettiversiota? :) Mulla ei netti jutut cb:llä hidasta..
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
ezbe
Tech Developer
Tech Developer
Posts: 93
Joined: Fri May 08, 2009 6:53 pm

Re: Ideointitopic.

Post by ezbe »

Kaappaanpa threadia hieman, kun sattui kohdalle ja aihekin on riittävän lähellä... ;)

Eli, olisiko CB-yhteisössä innostuneita koodareita jatkokehittelemään (mihin suuntaan tahansa) yksin tai isompana porukkana vanhaa projektia? Kyseessä on oma kesäkisa-projektini vuodelta 2006, jonka saa täältä:

http://student.labranet.jamk.fi/~c9754/ ... to_101.zip

Eli siis, ideana olisi että julkaisisin kyseisen projektin lähdekoodin avoimena (ylläolevan linkin takaa löytyvä paketti ei sisällä lähdekoodia, ja on normaalien tekijänoikeuksien alainen kaikilta osin), GNU GPL-lisenssin alaisuudessa yhteisölle jatkokehiteltäväksi. GPL-lisenssi pähkinänkuoressa tarkoittaa, että (pääosin copypastea http://linux.fi/wiki/GPL :stä):
  • * Ohjelmaa saa vapaasti käyttää ja tutkia
    * Ohjelmaa saa jakaa edelleen, kunhan lähdekoodi ja lisenssi (gpl.txt) annetaan mukaan
    * Ohjelmaan saa tehdä muutoksia ja näitä muutoksia levittää edelleen, kunhan muutoksista ilmoittaa selvästi (yleensä changelog-tiedostossa), GPL-ilmoituksia ei poista ja muunnettu lähdekoodi ja lisenssi annetaan mukaan, sikäli kuin uutta versiota levitetään
    * Ohjelmasta saa ottaa osia ja käyttää muissa ohjelmissa, jotka käyttävät GPL-lisenssin samaa versiota (eli jos jotain ko. projektin osaa käytetään toisessa projektissa, täytyy toisenkin projektin olla GPL:n alaista avointa lähdekoodia), kunhan tekijät mainitaan asianmukaisesti. Monessa ohjelmassa käyttäjän annetaan valita mitä GPL:n versiota käytetään.
Käytännössä siis, jos joku tekisi muutoksia lähdekoodiin ja haluaisi julkaista muunnellun version, myös muunneltu lähdekoodi olisi julkaistava kokonaisuudessaan mukana edelleen GPL-lisenssin alaisena. Näin vaikka joku kyllästyisi jonkun aikaa projektia kehiteltyään, muut voisivat taas jatkaa siitä mihin se on jäänyt. Projekti voisi mahdollisesti jopa haarautua useammaksi erilliseksi projektiksi, mutta kaikki nämä projektit säilyisivät avoimena lähdekoodina.

Tiettyjä ongelmia tässä tosin tulee esiintymään. Lisenssi koskettaa siis vain lähdekoodia, mutta alleviivataan vielä mitä se käytännössä tarkoittaa:

-Alkuperäisten grafiikoiden tekijänoikeus ei kuulu kokonaisuudessaan minulle (vaikka joitakin malleja olen tuohon tehnyt, mutta niihinkin on tekstuurit tehny toinen henkilö, peli käyttää siis spriteinä esirenderöityjä 3d-objekteja), joten lisenssi ei koskettaisi grafiikoita. Tämä voi tuottaa ongelmia, sillä levitysoikeuden suhteen on alkuperäisen tekijän kanssa sovittu, että niitä saa levittää Suttuprötön "virallisen" version mukana, mutta muista projekteista ei ole keskusteltu. Saattaa siis tarkoittaa sitä, että levitettävät grafiikat pitäisi tehdä uudelleen.
-Äänet ovat public domainia, joten niihin lisenssi ei myöskään koskettaisi, mutta se ei sinänsä haittaa (koska ne ovat public domainia, ja siten vapaasti käytettävissä)

Tämän lisäksi, vaikka koodi on yleisesti kohtuullisen hyvin kommentoitu (ja kokonaan suomeksi) ja noudattaa selkeää rakennetta (jaettu eri tiedostoihin (taisi olla 16kpl), funktioiden nimissä etuliite joka kertoo missä tiedostossa ko. koodinpätkä sijaitsee yms), sitä on n. 6000 riviä, ja se nojaa vahvasti typeihin ja memblockeihin, joten kokemusta molemmista tarvitaan jo pelkästään koodin ymmärtämiseen. Itse en ole projektiin koskenut lähes kolmeen vuoteen, joten minulta ei kovin kummoista teknistä apua voisi eikä saisi odottaa.

Esimerkkinä siitä, minkälaista sorsaa siis olisi tulossa, voisin heittää Main.CB(Edit: Oli huono esimerkki, vaihdoin ;) ) Event.CB -tiedoston sisällön tähän:

Code: Select all

/*
    This file is part of Suttuprötö.

    Suttuprötö is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    Suttuprötö is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with Suttuprötö.  If not, see <http://www.gnu.org/licenses/>.

*/



//Event.cb

//Tapahtumien luonti, päivitys ja poisto

//Riippuvuudet: Partikkeli.cb, PeliObjektit.cb, Esteet.cb

//Changelog:

//Date      Author      Comment
//11.7.     Ezbe        Luonti ja poisto, event-typen raakile
//14.7.     Ezbe        ToteutaEventtiin parametreillä, suhteessa mihin luotavat asiat sijoitetaan (kamera, objekti, maailma)


//Skripteistä luettavat laskuriprototyypit
Type CounterData

    Field Toista%               //Montako kertaa laskuri toistaa itseään, laskee alaspäin,
                                //kun saavutetaan Toista-arvo 0, laskuri tuhoutuu kun raja
                                //seuraavan kerran saavutetaan

    Field AlkuArvo%             //Laskurin alkuarvo

    Field Raja%                 //Missä arvossa laskuri 'laukeaa'

    Field EventBank%            //Laskurin lauetessa ajettavien eventtien id:t (integer)
    
End Type

//Taulukko CounterData-typejen handleille, varataan alkuun iso määrä (ainakin tuntuu vähentävän redim-kaatumisia)
Dim Event_LaskuriDatat(10000)

//Globaali: erilaisten laskurityyppien lukumäärä
Global Event_Laskureita%



//Skripteistä luettavat tapahtumaprotot
Type EventData 

    Field ObjBank%      //Bank, joka sisältää luotavat objektit (integer) (prototyypin numero)
    Field ObjX%         //Bank, joka sisältää luotavien objektien x-sijainnit (integer) !suhteessa kohdeobjektiin!
    Field ObjY%         //Bank, joka sisältää luotavien objektien y-sijainnit (integer) !suhteessa kohdeobjektiin!
    Field ObjAngle%     //Bank, joka sisältää luotavien objektien kulmat (float)
    Field ObjSpeed%     //Bank, joka sisältää luotavien objektien alkunopeudet (float)
    Field ObjState%     //Bank, joka sisältää luotavien objektien alkutilat (byte)
    Field ObjChance%    //Bank, joka sisältää todennäköisyyden (1...100) objektin luonnille
   
    Field ObsBank%      //Bank, joka sisältää luotavat esteet (integer) (prototyypin numero)
    Field ObsX%         //Bank, joka sisältää luotavien esteiden x-sijainnit (integer) !suhteessa kohdeobjektiin!
    Field ObsY%         //Bank, joka sisältää luotavien esteiden y-sijainnit (integer) !suhteessa kohdeobjektiin!
    Field ObsAngle%     //Bank, joka sisältää luotavien esteiden kulmat (float)
    
    Field PartBank%     //Bank, joka sisältää luotavat partikkelit (integer) (prototyypin numero)
    Field PartX%        //Bank, joka sisältää luotavien partikkelien x-sijainnit (integer) !suhteessa kohdeobjektiin!
    Field PartY%        //Bank, joka sisältää luotavien partikkelien y-sijainnit (integer) !suhteessa kohdeobjektiin!
    Field PartAngle%    //Bank, joka sisältää luotavien partikkelien (emitterien) kulmat (float) (globaali)
    
    Field LaskuriBank%  //Bank, joka sisältää luotavien laskurien tyyppinumerot
    
    Field SoundBank%    //Bank, joka sisältää soitettavien äänien numerot
    
    Field KameraVX%     //Näillä muutetaan kameran liikenopeutta (absoluuttisia arvoja, eli kameran nopeus on annettu arvo)
    Field KameraVY%
    
    Field PelaajaEvent% //Lisää pelaajalle ko. eventin triggereihin (ts. aseen)

    Field Life%         //Lisää pelaajalle tämän verran elämiä
    Field HP%           //Lisää pelaajalle tämän verran HP:tä    
    Field LatausNopeutus%   //Vähennetään pelaajan AmmusKestosta (nopeuttaa ampumista)
    Field NopeusLisa#   //Lisätään pelaajan maksiminopeuteen
    
    Field Msg$          //Ruudulla näytettävä viesti
    Field MsgKesto%     //Kauanko viesti näkyy ruudulla
    
    Field VaihdaKentta% //Jos >0, lopettaa nykyisen kentän, ja aloittaa arvona annetun (1...Stage_Total)

    Field EndGame%      //Jos 1, päättää pelin
End Type


//Taulukko EvenData-typejen handleille, varataan alkuun iso määrä (ainakin tuntuu vähentävän redim-kaatumisia)
Dim Event_EventDatat(10000)

//Globaali: erilaisten eventtityyppien lukumäärä
Global Event_Eventteja%


//Varsinainen prototyypin pohjalta luotu laskuri
Type Counter
    
    Field ID%               //Laskurityypin ID
    Field Laskuri%          //Laskurin nykyinen arvo

    Field Toista%

    Field Raja%             //Missä arvossa laskuri 'laukeaa'

    Field Eventteja%        //Montako eventtiä bankissa on
    Field EventBank%        //Laskurin lauetessa ajettavien eventtien id:t (integer)

End Type



Function Event_Alusta()    
End Function


Function Event_Tuhoa()
    //Tuhotaan olemassaolevat laskurit
    For Laskuri.Counter = Each Counter
        DeleteMEMBlock Laskuri\EventBank%
        Delete Laskuri
    Next Laskuri
    
    
End Function




Function Event_LuoLaskuri(Tyyppi%)
    
    //Haetaan proto
    Cntr.CounterData = ConvertToType(Event_LaskuriDatat(Tyyppi% - 1))
    
    //Luodaan uusi laskuri
    Laskuri.Counter = New(Counter)

    //ID talteen
    Laskuri\ID% = ConvertToInteger(Laskuri.Counter)

    //Kopioidaan arvot
    Laskuri\Laskuri% = Cntr\AlkuArvo%
    Laskuri\Raja% = Cntr\Raja%
    
    //Tutkitaan bankin koko
    TavuMaara% = MEMBlockSize( Cntr\EventBank% )
    
    //Eventbankiin tallennetaan event-id:t integereinä = 4 tavua/kpl
    Laskuri\Eventteja% = TavuMaara% / 4
    
    //Luodaan bank (eli CB:ssä MemBlock)
    Laskuri\EventBank% = MakeMEMBlock( MEMBlockSize( Cntr\EventBank% ) )
    
    //Kopioidaan sisältö
    MemCopy Cntr\EventBank, 0, Laskuri\EventBank%, 0, TavuMaara%

    //Toistomäärä
    Laskuri\Toista% = Cntr\Toista%

End Function


Function Event_PaivitaLaskurit()
    
    For Laskuri.Counter = Each Counter
        //Nostetaan arvoa yhdellä
        Laskuri\Laskuri% = Laskuri\Laskuri + 1
        
        //Tarkistetaan raja
        If Laskuri\Laskuri% => Laskuri\Raja% Then
            
            //Toteutetaan eventit
            Eventteja% = MEMBlockSize(Laskuri\EventBank%) / 4

            For i = 0 To Eventteja%-1
                //Luetaan event id
                Sijainti% = (i*4)
                EventID% = PeekInt(Laskuri\EventBank%, Sijainti%)
                Event_ToteutaEvent(EventID%)
            Next i
            
            //Vähennetään toistokertoja
            Laskuri\Toista% = Laskuri\Toista% - 1
            
            //Nollataan laskuri
            Laskuri\Laskuri% = 0
            
            If Laskuri\Toista% <= 0 Then Event_PoistaLaskuri(Laskuri\ID%)
        
        EndIf
        
    Next Laskuri
    
End Function


Function Event_PoistaLaskuri(LaskuriID%)

    //Haetaan instanssi
    Laskuri.Counter = ConvertToType(LaskuriID%)

    //Tuhotaan bank
    DeleteMEMBlock Laskuri\EventBank%
    
    //Tuhotaan instanssi
    Delete Laskuri
    
End Function


//KulmaLisa vaikuttaa vain kohdeobjektin kanssa
Function Event_ToteutaEvent(Tyyppi%, KohdeObj% = 0, X% = 0, Y% = 0, KulmaLisa# = 0)
       
    //Haetaan eventdata
    Ev.EventData = ConvertToType(Event_EventDatat(Tyyppi%-1))

    //KamX ja -Y jäävät nolliksi, jos kohdeobj < 0  (maailmakoordinaatit)
    //Jos > 0, haetaan objekti (luotavat luodaan objektin 'lapsiksi', ja suhteessa sen sijainnin mukaan)
    //Jos 0, käytetään kentän sijaintia
    If KohdeObj% > 0 Then
        Obj.PeliObjekti = ConvertToType(KohdeObj%)
        
        If Obj.PeliObjekti = NULL Then MakeError "Event_ToteutaEvent: KohdeObj = NULL"

        KamX% = Int(Obj\X#) + (Cos(Obj\Kulma) * X%)
        KamY% = Int(Obj\Y#) + (Sin(Obj\Kulma) * Y%)
    
        //Kohdeobjektiin vaikuttavat:  NÄMÄ VAIKUTTAVAT TOISTAISEKSI AINA SUORAAN PELAAJAAN, KTS. FUNKTION LOPPU
        //Hitpointsien lisäys:
        //If Ev\HP% > 0 Then
        //    Obj\HP% = Obj\HP% + Ev\HP%
        //EndIf

        //Aluksen nopeutus
        //If Ev\NopeusLisa# > 0 Then
        //    Obj\MaxNopeus# = Obj\MaxNopeus# + Ev\NopeusLisa#
        //EndIf
        
        //If Ev\LatausNopeutus% > 0 Then
        //    If Obj\AmmusKesto% > 0 Then
        //        Obj\AmmusKesto% = Obj\AmmusKesto% - Ev\LatausNopeutus%
        //        If Obj\AmmusKesto% < 1 Then Obj\AmmusKesto% = 1
        //    EndIf
        //EndIf
    
    ElseIf KohdeObj% = 0 Then
        //Haetaan kentän sijainti
        Kentta.Kentta = ConvertToType(Kentta_ID)
        KamX% = Kentta\X%
        KamY% = Kentta\Y%
    Else
        //Suhteessa annettuihin maailmakoordinaatteihin (kohdeobjektin oltava negatiivinen)
        KamX% = X%
        KamY% = Y%
    EndIf

    //Tutkitaan objektit
    Objekteja% = MEMBlockSize(Ev\ObjBank%) / 4
    
    For i = 0 To Objekteja%-1
        //Luetaan objektin tiedot
        Sijainti% = (i*4)
       

        //Luetaan ensin todennäköisyys
        TodNak% = PeekByte(Ev\ObjChance%, i)
        
        Luodaan% = 0        

        If TodNak% = 100 Then
            Luodaan = 1
        Else
            If Rand(1, 100) <= (TodNak%-1) Then Luodaan = 1
        EndIf
        
        If Luodaan% = 1 Then
            ObjTyyppi% = PeekInt(Ev\ObjBank%, Sijainti%)
            X% = PeekInt(Ev\ObjX%, Sijainti%)
            Y% = PeekInt(Ev\ObjY%, Sijainti%)
    
            //Kulma otetaan kohdeobjektista (laukaisijasta), jos se on annettu, muuten eventin tiedoista
            If KohdeObj > 0 Then 
                Kulma# = Obj\Kulma# + KulmaLisa#
            Else
                Kulma# = PeekFloat(Ev\ObjAngle%, Sijainti%)
            EndIf
            Nopeus# = PeekFloat(Ev\ObjSpeed%, Sijainti%)
            Tila% = PeekByte(Ev\ObjState%, i)
            //Luodaan objekti        
            PeliObjektit_LuoPeliObjekti(ObjTyyppi%, (KamX% + X%), (KamY% + Y%), Kulma#, Nopeus#, Tila%, KohdeObj%)
        EndIf
    Next i    

    //Tutkitaan esteet
    Objekteja% = MEMBlockSize(Ev\ObsBank%) / 4
    
    For i = 0 To Objekteja%-1
        //Luetaan objektin tiedot
        Sijainti% = (i*4)
        
        EsteTyyppi% = PeekInt(Ev\ObsBank%, Sijainti%)
        X% = PeekInt(Ev\ObsX%, Sijainti%)
        Y% = PeekInt(Ev\ObsY%, Sijainti%)
        Kulma# = PeekFloat(Ev\ObsAngle%, Sijainti%)
        
        //Luodaan este
        Esteet_LuoEste(EsteTyyppi%, (KamX% + X%), (KamY% + Y%), Kulma#)
    Next i
    
    
    //Tutkitaan partikkelit
    Objekteja% = MEMBlockSize(Ev\PartBank%) / 4


    For i = 0 To Objekteja%-1
        //Luetaan objektin tiedot
        Sijainti% = (i*4)
        
        PartTyyppi% = PeekInt(Ev\PartBank%, Sijainti%)
        X% = PeekInt(Ev\PartX%, Sijainti%)
        Y% = PeekInt(Ev\PartY%, Sijainti%)
        Kulma# = PeekFloat(Ev\PartAngle%, Sijainti%)
        
        //Luodaan partikkeli
        Partikkeli_LuoEfekti(PartTyyppi%, KohdeObj%, (KamX% + X%), (KamY% + Y%), Kulma#)
    Next i
    
    
    //Tutkitaan laskurit
   
    Laskureita% = MEMBlockSize(Ev\LaskuriBank%) / 4
   
    For i = 0 To Laskureita% - 1
        Sijainti% = (i*4)
        Event_LuoLaskuri( PeekInt(Ev\LaskuriBank%, Sijainti%) )
    Next i
    
    
    //Tutkitaan äänet
   
    Aania% = MEMBlockSize(Ev\SoundBank%) / 4
   
    For i = 0 To Aania% - 1
        Sijainti% = (i*4)
        Num% = PeekInt(Ev\SoundBank%, Sijainti%)
        Sound_SoitaAani( Num% )
    Next i
   
    //Kameran liikemuutokset
    If Ev\KameraVX% > -100 And Ev\KameraVY% > -100 Then
        Kentta.Kentta = ConvertToType(Kentta_ID)
        Kentta\VX% = Ev\KameraVX%
        Kentta\VY% = Ev\KameraVY%
    EndIf
        
    //Pelaajan eventit
    If Ev\PelaajaEvent% > 0 Then
        Pelaaja_LisaaEvent(Ev\PelaajaEvent%)        
    EndIf
    
    
    Obj.PeliObjekti = ConvertToType(Pelaaja_ID)
    PData.PelaajaData = ConvertToType(Pelaaja_DataID)    
    
    //Lisää hp:ta
    If Ev\HP% > 0 Then
        'Pelaaja_LisaaHP(Ev\HP%)
        Obj\HP% = Obj\HP% + Ev\HP%
    EndIf

    //Aluksen nopeutus
    If Ev\NopeusLisa# > 0 Then
        'Pelaaja_LisaaNopeus(Ev\NopeusLisa#)
        Obj\MaxNopeus# = Obj\MaxNopeus# + Ev\NopeusLisa#
    EndIf
        
    //Latauksen nopeutus
    If Ev\LatausNopeutus% > 0 Then
        'Pelaaja_VahennaAmmusKesto(Ev\LatausNopeutus%)
        Obj\AmmusKesto% = Obj\AmmusKesto% - Ev\LatausNopeutus%
    EndIf

    //Lisäelämät
    If Ev\Life% > 0 Then
        'Pelaaja_LisaaElama(Ev\Life%)
        PData\Elamat% = PData\Elamat% + Ev\Life%
    EndIf
    
    If Ev\Msg$ <> "" Then
        Pelaaja_LisaaViesti(Ev\Msg$, Ev\MsgKesto%)
    EndIf
    
    If Ev\EndGame% = 1 Then
        PData\Elamat% = 0
    EndIf
    
    //Tämä täytyy tehdä viimeisenä, koska se hävittää myös kaikki eventit ja laskurit
    If Ev\VaihdaKentta% > 0 Then
        //Statsit?
        //Vaihdetaan Kentta_NykKentta; pääluuppi huomaa tämän ja suorittaa varsinaisen vaihdon
        Kentta_NykKentta = Ev\VaihdaKentta%
    EndIf
    
    
End Function
Minkäänlaisia "sitovia ilmoittautumisia" en odota keneltäkään, koitankin vain kepillä jäätä löytyisikö tähän edes kiinnostusta yhteisöstä. Mikäli ei, tiedänpä olla tuhlaamatta aikaani enempää asian pähkäilyyn, mikäli kyllä, tulen lähiaikoina ihmettelemään lisenssiasiat kuntoon, siirrän paketin jonnekkin saataville ja ilmoitan siitä esimerkiksi Projektit-alueella.

Kysymyksiä, kommentteja, kritiikkiä, ideoita?
Image
Member
Posts: 59
Joined: Sat May 09, 2009 3:28 pm

Re: Ideointitopic.

Post by Image »

Jos tämmöinen idea oli jo täällä niin tästä viestistä älkää välittäkö. Kumminkin olisi sellainen tehtävä että autoilla (mm.rekoilla) saa kuljettaa tavaroita ja kaikkea.. Sitten rahalla voisi ostaa parempia rekkoja isompia trailereita ja muita. Ja jos olisi vaikka "lasilasti" kyydissä ja ajaisi kovaa niin ne särkyisi. Ja sitten ajattelin että voisi vaikka trukilla lastata rekkaan tai jotain sinnepäin, kumminkin tälläinen rekka peli ja sitten jollain Valtzulla oli joku rekka juttu että siinä oli nuppi ja kärry ajattelin siitä jotain paaljon hienompaa :D (ei pahal valtzu)

Edit: Ajattelin itse ruveta tekemään jotain tämän tapaista :) Mutta olis kiva jos muutkin yrittäs ja toivon että tästä ideasta olis edes ollu jollekkin jotain hyötyä :P
Wingman
Devoted Member
Posts: 594
Joined: Tue Sep 30, 2008 4:30 pm
Location: Ruudun toisella puolella

Re: Ideointitopic.

Post by Wingman »

SPuntte wrote:Voisinpa laittaa tänne erään taatusti omaperäisen peli-idean. Fysiikkaan addiktoitunut kun olen, tämäkin idea rakentuu pitkälti sille. Todellisten fysiikan lakien mukaan toteutettavaksi se on todella pirullinen, tosin kahteen ulottuvuuteen rajoittuminen helpottaa tehtävää jossain määrin.

Pelaajalla on ohjattavanaan alus, jossa ei ole minkäänlaista liikemäärän säilymiseen perustuvaa moottoria (esim. rakettimoottori) vaan ainoa tapa ohjata alusta on muuttaa sen sähköisiä ja magneettisia ominaisuuksia siten, että ympäristöään hyväksikäyttämällä päsee liikkumaan pelimaailmassa eteenpäin. Vastaan tulee siis erilaisia sähkö ja magneettikenttiä, joiden avulla alusta ohjataan.

Miljöö voisi olla Matrixmaisen tunnelisokkeloa, jolloin haasteeksi tulee aluksen pitäminen ehjänä. Esteinä voisi toimia seinien lisäksi valokaaret, voimakkaat magneetit ja magneettisuuttaan muuttavat kelasysteemit, aurinkotuuli, irtonaisina (avaruudessa) killuvat sähkö- ja magneettivaraukselliset objektit, kuten metalliasteroidimurikat.

Myös jonkinlaisia älykkäitä vihollisia voisi kehittää. Aluksessa ei ole aseistusta, vaan taas pitää hyödyntää ympäröivää irtaimistoa :mrgreen: Vihuja siis omistettaisiin linkoamalla niitä päin jotain massiivisia kappaleita tai antamalla niille sopivan korkeajännitteinen tärsky..

Juonesta ei ole mitään tietoa, eli mielikuvitusta pitää olla, ettei koko peli menisi ihan fysiikalla kikkailuksi..
hyvä idea, itse olen niin huono koodaamaan että tuskin saisin motään järkevää aikaan, mutta odotan kyllä jos joku vaikka tekisi :P
- - - -
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Ideointitopic.

Post by Latexi95 »

Minulla on omasta mielestäni loistava peli-idea:
Autotehdas simulaatio.
Pelin ideana on johtaa automerkkiä ja suunnitella mahdollisimman myyviä autoja.
Peli toimisi verkkopelinä, kaikilla pelaajilla olisi tunnukset.
Sinun pitäisi ilmoittaa millaiset autot kiinnostavat sinua.
Autoja ostaa ns. virtuaalikansa, jonka mieltymykset vastaavat pelaajien asettamia mieltymyksiä,
joten parhaiten myyvät ne autot, jotka vastaavat suurimman osan pelaajien toiveita.
Autot piirrettäisiin itse, joten piirrustus taidoilla on merkitystä. Toiset pelaajat arvioivat auton ulkonäön pistein.
Voisi olla myös mahdollista tulla esim. öljykriisi, jolloin paljon bensaa syövien autojen kysyntä romahtaisi.
Tienaamallasi rahalla voisit kehittää autojen osia, kuten penkejä tai moottoria.
Myös auto merkin maine vaikuttaa myyntiin. Parempi maineisen automerkin auton
saa myytyä paremmalla hinnalla kuin huonomaineisen automerkin auton.

Kiva idea, mutta vaikea toteuttaa. :(
Taidan yrittää koodata tuon C#:lla. Siinä taitaa kyllä mennä vuosia. :roll:
No, aikaa on harjoitella.


Keksisikö joku jonkun tavan millä saisin laskettua ilmanvastuskertoimen auton sivukuvasta?
Tietenkään en tarvitse tarkkaa lukua, mutta jotain siihen suuntaan.
Hene
Active Member
Posts: 122
Joined: Wed Apr 22, 2009 8:13 pm

Re: Ideointitopic.

Post by Hene »

Latexi95 wrote:Minulla on omasta mielestäni loistava peli-idea:
Autotehdas simulaatio.
Pelin ideana on johtaa automerkkiä ja suunnitella mahdollisimman myyviä autoja.
Peli toimisi verkkopelinä, kaikilla pelaajilla olisi tunnukset.
Sinun pitäisi ilmoittaa millaiset autot kiinnostavat sinua.
Autoja ostaa ns. virtuaalikansa, jonka mieltymykset vastaavat pelaajien asettamia mieltymyksiä,
joten parhaiten myyvät ne autot, jotka vastaavat suurimman osan pelaajien toiveita.
Autot piirrettäisiin itse, joten piirrustus taidoilla on merkitystä. Toiset pelaajat arvioivat auton ulkonäön pistein.
Voisi olla myös mahdollista tulla esim. öljykriisi, jolloin paljon bensaa syövien autojen kysyntä romahtaisi.
Tienaamallasi rahalla voisit kehittää autojen osia, kuten penkejä tai moottoria.
Myös auto merkin maine vaikuttaa myyntiin. Parempi maineisen automerkin auton
saa myytyä paremmalla hinnalla kuin huonomaineisen automerkin auton.

Kiva idea, mutta vaikea toteuttaa. :(
Taidan yrittää koodata tuon C#:lla. Siinä taitaa kyllä mennä vuosia. :roll:
No, aikaa on harjoitella.


Keksisikö joku jonkun tavan millä saisin laskettua ilmanvastuskertoimen auton sivukuvasta?
Tietenkään en tarvitse tarkkaa lukua, mutta jotain siihen suuntaan.
Tee mieluummin niin, että autojen myynti määräytyy pitkälle muiden pelaajien antamien pisteiden mukaan. Tähän pitää tietysti asentaa joku "huijausestin", ettei kilpailijan autoille anneta aina nollaa pistettä. Esimerkiksi 5% huonoimmista & 5% parhaista arvioista pois.
"Baby," I said. "I'm a genius but nobody knows it but me."
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Ideointitopic.

Post by Latexi95 »

Hene wrote: Tee mieluummin niin, että autojen myynti määräytyy pitkälle muiden pelaajien antamien pisteiden mukaan. Tähän pitää tietysti asentaa joku "huijausestin", ettei kilpailijan autoille anneta aina nollaa pistettä. Esimerkiksi 5% huonoimmista & 5% parhaista arvioista pois.
Jos suurin painoarvo olisi toisten pelaajien antamilla pisteillä, auton menetys riippuisi liikaa sen ulkonäöstä(ja hevosvoimista). Pelistä tulisi suurimmaksi osaksi piirrustuspeli.
Kovin harva pelaaja tutkisi auton sisuskaluja ja mukavuutta. :roll:
Pelin on tarkoitus olla suunnittelupeli.

Tuo ehdottamasi "huijausestin" olisi ihan kätevä.
User avatar
ukkeli
Active Member
Posts: 123
Joined: Thu Jan 28, 2010 9:01 pm

Re: Ideointitopic.

Post by ukkeli »

no keksin pienen peli idean:
pelissä oisi päähahmona pallo
ja pitää piirtää rata että pallo pääsee maaliin
mutta pitää väistää esteitä radalla tai pallo jää jumiin :mrgreen:
...
MikkoK
Devoted Member
Posts: 813
Joined: Thu Jun 05, 2008 2:13 pm
Location: City 17

Re: Ideointitopic.

Post by MikkoK »

ukkeli wrote:no keksin pienen peli idean:
pelissä oisi päähahmona pallo
ja pitää piirtää rata että pallo pääsee maaliin
mutta pitää väistää esteitä radalla tai pallo jää jumiin :mrgreen:
Tuollainenhan peli tulee Windows Vistan mukana...

Code: Select all

#aha. @ IRCNet
<Grandi> Voit laittaa jo valmiiks hailaittiin "Amis-Mikko", koska alan kutsua sua sillä nimellä.
Post Reply