Ideointitopic.
-
- Advanced Member
- Posts: 349
- Joined: Mon Aug 27, 2007 9:00 pm
- Location: Lapinjärvi, Finland
- Contact:
Re: Ideointitopic.
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.
Runoblogi, vuodatusta ja sekoiluja.
Re: Ideointitopic.
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ä.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.
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.
Re: Ideointitopic.
Hyvältä kuulostaa, Jare!
Olisi muuten pieni ehdotus: Kun kuljetetaan öljyä tai polttoainetta, olisi niissäkin omat vaaransa kun jotain tapahtuisi .
Ei tietääkseni tule älyttömän hankalaksi jos koodisi on paloiteltu kunnolla funktioihin.
Olisi muuten pieni ehdotus: Kun kuljetetaan öljyä tai polttoainetta, olisi niissäkin omat vaaransa kun jotain tapahtuisi .
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
Codegolf: 99 bottles of beer (oneliner) - Water map partition
Re: Ideointitopic.
Kaasu kuullostaa hyvältä. Silloin voisi esimerkiksi yhdistää kivennäisvettä tavallisesta vedestä ja hiilidioksidista.
Re: Ideointitopic.
Tämä nestepeli alkaa kuullostamaan jo niin hyvältä, että jonkun kannattaisi alkaa toteuttamaan tätä
[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.
Re: Ideointitopic.
Miä itseasiassa olen jo alkanut tätä toteuttamaan. Homma on vasta suunnitteluvaiheessa, mutta...
- kaneli2000
- Guru
- Posts: 1059
- Joined: Mon Mar 17, 2008 2:40 pm
- Location: Lempäälä
Re: Ideointitopic.
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
-
- Tech Developer
- Posts: 650
- Joined: Mon Aug 27, 2007 9:51 pm
- Location: Helsinki, Finland
- Contact:
Re: Ideointitopic.
Kuulostaa ihan pirulliselta fysiikkapeliltäJare wrote:*Kauhee läjä textiiii*
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
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
CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES
CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX
Tech-kehittäjä
CoolBasic Classic, Cool VES
CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX
Re: Ideointitopic.
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:Tuo "50-150% täysi" putki kuulostaa vähän oudolta.
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.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
Olisi kiva kuulla, miten ainetta käytönnössä käsiteltäisiin "jatkuvana".
Re: Ideointitopic.
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ä?
VesQ tuntee nämä nettiasiat loistavasti, niinkuin hän on antanut ymmärtää. Joten olisiko tämmoinen peli mahdollista tehdä?
Solar Eclipse
We're in a simulation, and God is trying to debug us.
Re: Ideointitopic.
Hmm, musta tuntuu ettei nykyisen CB:n tehokkuudella saisi oikein minkäänmoista pelikokemusta irti, mutta saatanhan toki olla aivan väärässäkin :pprogrammer 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ä?
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
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Re: Ideointitopic.
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..VesQ wrote:Hmm, musta tuntuu ettei nykyisen CB:n tehokkuudella saisi oikein minkäänmoista pelikokemusta irti, mutta saatanhan toki olla aivan väärässäkin :pprogrammer 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ä?
Solar Eclipse
We're in a simulation, and God is trying to debug us.
Re: Ideointitopic.
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ä):
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:
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?
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.
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
Kysymyksiä, kommentteja, kritiikkiä, ideoita?
Re: Ideointitopic.
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 (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ä
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ä
-
- Devoted Member
- Posts: 594
- Joined: Tue Sep 30, 2008 4:30 pm
- Location: Ruudun toisella puolella
Re: Ideointitopic.
hyvä idea, itse olen niin huono koodaamaan että tuskin saisin motään järkevää aikaan, mutta odotan kyllä jos joku vaikka tekisiSPuntte 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 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..
Re: Ideointitopic.
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.
No, aikaa on harjoitella.
Keksisikö joku jonkun tavan millä saisin laskettua ilmanvastuskertoimen auton sivukuvasta?
Tietenkään en tarvitse tarkkaa lukua, mutta jotain siihen suuntaan.
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.
No, aikaa on harjoitella.
Keksisikö joku jonkun tavan millä saisin laskettua ilmanvastuskertoimen auton sivukuvasta?
Tietenkään en tarvitse tarkkaa lukua, mutta jotain siihen suuntaan.
Re: Ideointitopic.
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.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.
No, aikaa on harjoitella.
Keksisikö joku jonkun tavan millä saisin laskettua ilmanvastuskertoimen auton sivukuvasta?
Tietenkään en tarvitse tarkkaa lukua, mutta jotain siihen suuntaan.
"Baby," I said. "I'm a genius but nobody knows it but me."
Re: Ideointitopic.
Jos suurin painoarvo olisi toisten pelaajien antamilla pisteillä, auton menetys riippuisi liikaa sen ulkonäöstä(ja hevosvoimista). Pelistä tulisi suurimmaksi osaksi piirrustuspeli.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.
Kovin harva pelaaja tutkisi auton sisuskaluja ja mukavuutta.
Pelin on tarkoitus olla suunnittelupeli.
Tuo ehdottamasi "huijausestin" olisi ihan kätevä.
Re: Ideointitopic.
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
pelissä oisi päähahmona pallo
ja pitää piirtää rata että pallo pääsee maaliin
mutta pitää väistää esteitä radalla tai pallo jää jumiin
...
Re: Ideointitopic.
Tuollainenhan peli tulee Windows Vistan mukana...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
Code: Select all
#aha. @ IRCNet
<Grandi> Voit laittaa jo valmiiks hailaittiin "Amis-Mikko", koska alan kutsua sua sillä nimellä.