One shot - Head shot

Jaa meneillään olevat projektisi tai valmiit pelit muun yhteisön kanssa täällä.
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

One shot - Head shot

Post by MaGetzUb »

Tämän pelin koodaamisen aloitin viimme kesänä kunnolla, mutta sehän jäätyi syksyllä uhoamisesta huolimatta.
Menneenä keväänä muistelin, kuinka kivaa oli tätä koodatessa, joten päätinpä koodata koko systeemin uudelleen.

Grafiikoita olen parannellut.

Tarinan päähenkilön vaihdoin kuvitteelliseen Eero Lehtoseen, joka on Suojelu Poliisi. Tarinaa ei kannata ottaa tosissaan, vaikka sen pitäisi olla todenmukainen, sillä se ihan pakolla laittaa virneen naamalle. :D


Tarina itse:
----

En sitten tiedä sopiiko tuo juonen pätkä pelin ulkoasuun, mutta sovelletaan. ;)

Pelimekaniikasta: Pelistä olen yrittänyt saada täysin Dynaamisen ja muokattavan. Peliin tulee erinlaisia Editoreita, joilla voi muokata tehtäviä aseita, räjähdyksiä jne.
Dynaamisen hahmojen -ja aseiden hallinnan myötä ehkä teen Nettipeli ominaisuudet, kunhan saan pelimoottorin kunnolla kasaan. :)

Pelimoottorilla saan laitettua jo kartan ja tilesetin, waypointtejä, sekä hahmoja.

Kommentteja ja ehdotuksia saa jo antaa. :)

Uutta kuvaa:
Image

PS. Jouduin vähän muokkailemaan viestiä, aina jäi jotain tärkeää sanomatta. :D

HUOM! Alla on vanhempi versio pelistä, uutta versiota pelistä saattekin vielä odottaa.
Attachments
One Shot - Head Shot.rar
(3.42 MiB) Downloaded 714 times
Last edited by MaGetzUb on Sun Feb 27, 2011 6:01 pm, edited 11 times in total.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 8:25 am

Re: One shot - Head shot.

Post by Sly_Jack0 »

Hienoltahan tuo näyttää.... Grafiikat on mielestäni tosi hienot ja, radar, ai että...

Toivottavasti ei jäädy kokonaan. Onnea projektille!
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: One shot - Head shot.

Post by MaGetzUb »

Ei tämä projekti menee kyllä läpitse, mutta on pari ongelmaa, yritin tehdä ase pickuppeja typeillä ja pistää niitä kartalle niin se ei ees kopioiunt asetta. Ja eikä siirtänyt sitä. Saman se teki ovien kanssa. Radarista otin tuon valo homman pois se tuntui vievän niin paljon tehoja... Tilesettiin on lisättyjä tekstuureja. Mutta kakikki muut grafiikat on 100% itse tehtyjä... Aseissa oli kova homma piirtää niitä.. Peli moottorin kanssa on paljon tekemistä, hioa tekoälyä, aseita, ääniä + ää pistää lisää. Kaikki muut 13 asetta paitsi kranaatinheitin on valmiita... Tehtävä moottoria pitää hioa. Räjähteet pitää tehdä..
Et on siinä vielä pikkuisen yhdelle ihmiselle tekemistä.. Ase droppi moottori toimii, mutta se ei pistä aseita paikoilleen (eikä näytä niitä :x)...
EDIT:

Tänään yritän saada räjähteet valmiiksi, mutta en tiedä nyt sitten, en lupaa mitään.

Last edited by MaGetzUb on Sat Aug 23, 2008 3:50 pm, edited 1 time in total.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
Bajaxo
Newcomer
Posts: 47
Joined: Fri Aug 01, 2008 3:49 pm
Contact:

Re: One shot - Head shot.

Post by Bajaxo »

Wau! Todella hienot grafiikat! Älä vaan anna näin hienon pelin jäätyä. Ja muuten yks terroristiryhmä joka on venäläinen niin semmonen ku Phoenix Connexion. Neuvostoliiton aikaan perustettu, joka viettää hiljaiseloa nykyäänkin.
Bajaxo Productions -CoolBasic games from year 2008!

Image
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: One shot - Head shot.

Post by MaGetzUb »

En nyt viitsi pistää aitoja terroristiliittoja, voi tulla rakkaudella rajan takaa terveisiä. :) :D
EDIT:

Pelissä on jo yli 2000 riviä koodia, joten eiköhän, moottori tule valmiiksi tämän syksyn aikana..

:)
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
=Joku=
Active Member
Posts: 184
Joined: Mon Aug 04, 2008 2:26 am

Re: One shot - Head shot.

Post by =Joku= »

Jos tämän lopetat niin... Ismo tulee kotiisi!
Kivat grafiikat!
Jatka!
*Poistunut foorumilta*
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: One shot - Head shot.

Post by MaGetzUb »

Meinaa vähän tossa mennä miinus asteitten puolelle, kun en ole saanut minkäänlaista apua pathfinderin luomiseen.. 100 x :(
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
otto90x
Advanced Member
Posts: 349
Joined: Mon Aug 27, 2007 9:00 pm
Location: Lapinjärvi, Finland
Contact:

Re: One shot - Head shot.

Post by otto90x »

No, voisit ehkä käyttää A* reitinetsintä algoritmia, vaikka varmasti optimaalisempiakin löytyy. Tässäpä esimerkki koodi ko. algoritmista. Reitinetsintäsysteemi on tehty tämän pohjalta.

Esimerkissä hiiren vasemalla ja oikealla näppäimellä asetetaan alku ja loppupiste ja enteristä lasketaan reitti. Välilyönti arpoo alku ja loppupisteet satunaisesti, jolloin ne saattavat mennä seinän sisään ja näin ollen reittiä ei arvotuilla pisteillä usein löydy.


Code: Select all

SCREEN 800,600

Global DestinationX, DestinationY, arraywidth, arrayheight

Dim array(arraywidth,arrayheight)

Type openlist
    Field x
    Field y
    Field px
    Field py
    Field g  //distance from start
    Field h  //estimation, manhattan style
    Field f
End Type

Type closedlist 
    Field x
    Field y
    Field px
    Field py
    Field g
    Field h
    Field f
End Type


SetWindow "A* algorithm with help of http://www.policyalmanac.org/games/aStarTutorial.htm"

map=LoadMap("Media\cdm2.til","Media\tileset.bmp")

LoadRouteMap(map)

alku:

startx=Rand(2,arraywidth-1)
starty=Rand(2,arrayheight-1)

endx=Rand(2,arraywidth-1)
endy=Rand(2,arrayheight-1)

DrawToWorld ON

Repeat

    TranslateCamera (-LeftKey()+RightKey())*3,(UpKey()-DownKey())*3

    If MouseHit(1) Then startx=World_to_map(1,MouseWX(),map) : starty=World_to_map(2,MouseWY(),map) 
    If MouseHit(2) Then endx=World_to_map(1,MouseWX(),map)  : endy= World_to_map(2,MouseWY(),map) 

    If KeyHit(cbkeyreturn) Then route$=CalculateRoute(startx,starty,endx,endy,1)

    DrawGame
    
    Color cbwhite
    
    Text 20,30,startx
    Text 20,45,starty
    Text 20,60,endx
    Text 20,75,endy
    
    Box (startx)*32-32-(MapWidth()*32)/2,-starty*32 +(MapHeight()*32)/2 +32,32,32,0
    Box (endx)*32-32-(MapWidth()*32)/2,-endy*32 +(MapHeight()*32)/2 +32,32,32,0

    For i=0 To CountWords(route$," ")
        Color cbmagenta
        word$=GetWord(route$,i," ")
        x=int(GetWord(word$,1,","))-1
        y=int(GetWord(word$,2,","))
        
        If GetWord(route$,1)<>"Error." Then Circle x*32-(MapWidth()*32)/2+16,-y*32 +((MapHeight()*32)/2)-16 +32,8,1
    Next i
    
    Text 10,10,route$
    
    DrawScreen 
    
    If KeyHit(cbkeyspace) Then Goto alku 

Forever

//Ehkä hyödyllinen funktio mikäli reitinetsintää käyttää tilekartoissa

Function LoadRouteMap(_map)
    arraywidth=MapWidth()
    arrayheight=MapHeight()
    ClearArray ON
    ReDim array(arraywidth,arrayheight)
    ClearArray OFF
    For x=0 To arraywidth
        For y=0 To arrayheight
            array(x,y)=GetMap2(2,x,y)
        Next y
    Next x
End Function 


//Reitinetsintään pakolliset funktiot
Function OpenToClosed(_id,_diagon)
    o.openlist=ConvertToType(_id)
    
    tempclosed=0
    
    For x=Max(o\x-1,0) To Min(o\x+1,arraywidth)
        For y=Max(o\y-1,0) To Min(o\y+1,arrayheight)
            If x<>o\x Or y<>o\y Then
                prevent=0
                For oo.openlist=Each openlist
                    If oo\x=x And oo\y=y Then
                        'If oo\g
                        prevent=1    
                    EndIf
                Next oo
                
                For cc.closedlist=Each closedlist
                    If cc\x=x And cc\y=y Then prevent=1
                Next cc
                
                If Not prevent Then 
                
                    If x<>o\x And y<>o\y Then
                        If _diagon=True Then AddOpenlist(x,y,o\g+Distance(x,y,o\x,o\y)*10,o\x,o\y)
                    Else
                        AddOpenlist(x,y,o\g+10,o\x,o\y)
                    EndIf
                EndIf
            EndIf
        Next y
    Next x
    
    c.closedlist=New(Closedlist)
    c\x=o\x
    c\y=o\y
    c\px=o\px
    c\py=o\py
    c\g=o\g
    c\h=o\h
    c\f=o\f
    
    Delete o

    Return ConvertToInteger(c)
End Function 

Function AddOpenlist(_x,_y,_g,_px,_py)
    If array(_x,_y)=0 Then
        o.openlist=New(openlist)
        o\x=_x
        o\y=_y
        o\h=(Abs(_x-destinationX)+Abs(_y-destinationy))*10
        o\g=_g
        o\f=o\g+o\h
        o\px=_px
        o\py=_py
        Return ConvertToInteger(o)
    End If
End Function

Function CalculateRoute(_x,_y,_dx,_dy,_diagon=0)

    AddOpenlist(_x,_y,0,_x,_y)
    
    destinationX=_dx
    DestinationY=_dy
    
    finished=0
    
    If _x=_dx And _y=_dy Then finished=1 : temp$="Error. Start and End are the same."
    
    Repeat 
    
        minf=-1
        minfid=0
        
        For o.openlist=Each openlist
            o\f=o\g+o\h
            If minf=-1 Xor minf>o\g Then minfid=ConvertToInteger(o) : minf=o\g
        Next o
        
        If minfid<>0 Then 
            OpenToClosed(minfid,_diagon)
        Else
            finished=1
            temp$= "Error. There isn't route available."
        EndIf
        
        
        If Not finished
            For c.closedlist=Each closedlist
                If c\x=destinationX And c\y=DestinationY Then
                    temp$=destinationX+","+DestinationY+" "
                    
                    vx=c\px
                    vy=c\py
                    
                    nextone:
                    temp$=temp$+vx+","+vy+" "
                    If vx<>_x Or vy<>_y Then
                        For cc.closedlist=Each closedlist
                            If cc\x=vx And cc\y=vy Then
                                vx=cc\px
                                vy=cc\py
                                
                                Goto nextone
                            EndIf
                        Next cc
                    Else 
                        temp$=Left(temp$,Len(temp$)-1)
                        finished=1
                    EndIf
    
                EndIf
            Next c
        EndIf
        
    
    Until finished
    
    For o.openlist=Each openlist
        Delete o
    Next o
    
    For c.closedlist=Each closedlist
        Delete c
    Next c
    
    destinationX=0
    destinationy=0

    If finished=1 Then Return temp$
    
End Function 

//esimerkkiä varten tarvittava funktio

Function World_to_map(kumpi,arvo,map)//x=1 y=2,karttamuuttuja
   tilew=Int(ObjectSizeX(map)/MapWidth())
   tileh=Int(ObjectSizeY(map)/MapHeight())
   Select kumpi
       Case 1
           wx=arvo
           palautus=Int((wx+(MapWidth()*tilew)/2)/tilew)+1
           If palautus>(MapWidth()) Then palautus=(MapWidth())
       Case 2
           wy=arvo
           palautus=Int((-wy+(MapHeight()*tileh)/2)/tileh)+1
           If palautus>(MapHeight()) Then palautus=(MapHeight())
   End Select
   If palautus<1 Then palautus=1
   Return palautus
End Function
Niin ja kameraa voi tosiaan liikutella nuolinäppäimistä.
Otto Martikainen a.k.a. MetalRain, otto90x, kAATOSade.
Runoblogi, vuodatusta ja sekoiluja.
mato1223
Member
Posts: 69
Joined: Sat Aug 16, 2008 12:04 pm
Location: Rääkkylä

Re: One shot - Head shot.

Post by mato1223 »

Tosi hienolta näyttää kun taas oma pelini ei kovin hyvältä näytä :mrgreen: Se onkin vasta tekovaiheessa eikä piirtäminen suju. Juonesi on tosi hieno jos sen osaa toteuttaa. ;)
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: One shot - Head shot.

Post by MaGetzUb »

Kiitos, Tuosta voi ollakkin todella paljon hyötyä. :) Mutta sevain tossa AStar algoritmissa häiritsee, että kun on seinä, se ei kierrä sitä, vaan hyppää tavallaan yhden alas ja yhden sivulle, eikä yhden alas ja sitten sivulle... Ja on vähän hidas myös, Mutta pelissäni viholliset vain tarkistavat 1000pikselin etäisyydellä 'äänet' eli, jos ampuu 1000pikselin etäisyydellä niin vihu käy tarkistamassa niistä ukon koordinaateista, ja sitten menee takaisin sinne, missä se oli ennemmin. Ai niin, jos vihu seuraa ukkoa ja sitten vihu kadottaa ukon, niin pitäisikö vihun mennä takaisin vanhaansa vartiointi paikkaan? :? Siinä voisi tulla hidastus, kun kone selvittää ensin liikkumis waypointtien sioittelun..
Last edited by MaGetzUb on Mon Aug 18, 2008 5:25 pm, edited 1 time in total.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: One shot - Head shot.

Post by esa94 »

Öh, A* etsii lyhimmän reitin kohteeseen, se siis kiertää kaikki esteet tehokkaimmalla mahdollisella tavalla. Mistä hyppäämisestä oikein puhut?
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: One shot - Head shot.

Post by MaGetzUb »

Kun pelissä pistetään waypointit, ja sen jälkeen liikutetaan ukkoa, niin voipi ukko jäädä seinään kiinni, jossei ukko ole sopivan suuri. ;)
Tässä kuva selventää asiaa:
Attachments
nettiin.jpg
nettiin.jpg (121.95 KiB) Viewed 12993 times
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: One shot - Head shot.

Post by esa94 »

Niin, koska tuo tuntuisi laskevan kulmittain liikkumisen mukaan, eikö? Kulmittain liikkumisesta saattaa olla haittaa tilekartoissa, ainakin joissakin, sillä ahtaat kolot tosiaan jumittavat hahmoja. Toisaalta palikkamaisempi liikkuminen olisi epäaitoa. Mikä siis neuvoksi?
EDIT:

Keksinpäs yhden idean, entä jos navigaatiojärjestelmää muokkaisi niin, että datakerroksen tietyt numerot muuttaisivat niihin sijoitettua waypointtia niin, että matka siitä viereiseen ruutuunkin olisi jo 10 yksikköä, jolloin navigaatiojärjestelmä välttelisi paikkoja, joihin hahmo jumittaa.

Astigma
Moderator
Moderator
Posts: 195
Joined: Sun Aug 26, 2007 5:56 pm
Location: Kuopio, Finland
Contact:

Re: One shot - Head shot.

Post by Astigma »

Ihan vain vinkkinä: jos tekoälyäijä kävelee aina kartalla siten, että se etsii reitin ilman, että se menee seinän sisään, tarvitseeko tekoälyäijää silloin laittaa reagoimaan seinien kanssa?

Toisin sanoen, voinet ottaa SetupCollisionit vihujen ja kartan väliltä pois, jolloin ne eivät jumitu kulmiin.

A* on melko tehokas algoritmi sitä paitsi.
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: One shot - Head shot.

Post by MaGetzUb »

Tuo olikin ihan hyvä vinkkinä. Kiitos, pistetäänpä muistiin. :)
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
otto90x
Advanced Member
Posts: 349
Joined: Mon Aug 27, 2007 9:00 pm
Location: Lapinjärvi, Finland
Contact:

Re: One shot - Head shot.

Post by otto90x »

programmer of DSG wrote:Kun pelissä pistetään waypointit, ja sen jälkeen liikutetaan ukkoa, niin voipi ukko jäädä seinään kiinni, jossei ukko ole sopivan suuri. ;)
Tässä kuva selventää asiaa:
Niin no taisin unohtaa mainita että tein tuohon valinnaiseksi asetukseksi myös tuon "neliöliikkumisen", eli ei tee reittiä kulmittain. Jos funktion viides parametri _diagon on 1 niin menee myös kulmittain, jos 0 niin menee vain välittömästi viereisiin ruutuihin.

Ja sitten sellainen vinkki että jos huomaa laskevansa samoja (tai lähes samoja) reittejä uudelleen ja uudelleen niin on kenties tehokkaampaa tehdä jo etsityistä reiteistä taulukko tai vastaava ja katsoa josko reitti on jo etsitty. Ja jos tarvitaan vain hieman erilainen reitti kuin mitä on jo etsitty niin voipi olla tehokkaampaa etsiä reitti sen lähellä olevan tallennetun reitin alkupisteeseen ja loppupisteestä haluttuun pisteeseen. Nämä hommat on vähän ongelmallisia kun on niin monia käyttötarkoituksia, mutta tosiaan kannattaa miettiä kuinka usein reittiä oikeasti tarvitaan etsiä ja voisiko niitä tarvittavia reittejä etsiä ennen pelin alkua muistiin.

Varmaankin myös tuossa reitinetsintä funktiossa on paljon vielä optimoitavaa. Ja sen voisi pistää palauttamaan muistipalan merkkijonon sijaan.
Otto Martikainen a.k.a. MetalRain, otto90x, kAATOSade.
Runoblogi, vuodatusta ja sekoiluja.
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: One shot - Head shot. ALPHAA TARJOLLA!

Post by MaGetzUb »

Joo, eli nyt olis Aplha tullu ulos. Itse peli on suoraan sanottuna aika p*ska, koska siinä ei voi muutakuin tappaa vihollisia, pistää hälyytyksen päälle.
Pelissä on niin paljon bugeja, että toivoisin että kerrotte kaikki bugit. Ei sellaisia jotka liittyy vihuihin ja aseisiin. :) Mutta testakkaapa ja sanokaa mitä olette miältä. No eipä tässä tän kummempaa.
EDIT:

Kommentteja saa tulla tuutin täydeltä. :)

Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
User avatar
kaneli2000
Guru
Posts: 1059
Joined: Mon Mar 17, 2008 2:40 pm
Location: Lempäälä

Re: One shot - Head shot. ALPHAA TARJOLLA!

Post by kaneli2000 »

Oujee, aika siisti! (mutta h*ton vaikea (tosin itse en tuommoista voi väittää, kun kaikki ovat moittineent Second Primen toista tasoa ^^))

Pelin fps on ehkä hiukan hidas, mutta onhan se loppujen lopuksi CoolBasicilla tehty, tai sitten olet vain tehnyt ukot hitaiksi, tai koneeni on jotenkin rikki (toivottavasti ei :roll:).

En ala arvostella enempää, kahdestakin syystä:
a) ei jaksa ennen kuin olet tehnyt menut ja kenttiä lisää ja vaikeustasoa alemmaksi (=elkkua lisää)
b) ei vaan jaksa ^^

Sanotaanko että CB asteikolla 8 ½.
I see the rainbow rising
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: One shot - Head shot. ALPHAA TARJOLLA!

Post by MaGetzUb »

Niin kuten tossa ennemminkin mainitsin että peli on vielä kovan työn alla. Valikko on 5:ttä vaille valmis. Kenttiä ei ole muuta kuin tua 1 vasta. Tehtävä sysyteemin on pakko saada toimimaan. Viholliset on turhan vaikeita, mutta tämän pitäisi olla vähän taktinen, eikä mikään Medal of honor, jossa rätkitään sinne sun tänne konsulla ja käyrään suorittamassa tehtäviä. Kenttiä on tulossa, ja lisää räjähteitä. Ase systeemi toimii muuten, mutta kun otat esim pistoolin tilalle aseen, se pistooli ei vaihdu tilalle. :( Eli hiottavaa on niin paljon etten uskalla oiken ajankohtaa määritellä. :P Yhden hengen projuhan tämä on. ;)
Last edited by MaGetzUb on Mon Aug 25, 2008 9:07 pm, edited 1 time in total.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
shapuska

Re: One shot - Head shot. ALPHAA TARJOLLA!

Post by shapuska »

saanko laittaa tän pelin mun nettisivuille
Locked