Salamasysteemi

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
Post Reply
User avatar
Ruuttu
Devoted Member
Posts: 687
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Salamasysteemi

Post by Ruuttu » Sat Feb 09, 2008 2:50 pm

Teinpäs aikani kuluksi yksinkertaisen funktion, jolla saattoi piirtää salaman näköisen viivan pisteestä A pisteeseen B.
Vähän sitä vielä kehittelin, ja sain aikaiseksi tällaisen kohtalaisen hienon salamasysteemin, joka piirtää aikast hienon
salaman hiiren kohdalta. Sopii täydellisesti esim. scifi peleihin. Kokeile myös muuttaa asetuksia!!!

Code: Select all

//  SIISTI SALAMASYSTEEMI

//  PAHOITTELEN KOODIN MAHDOLLISTA VAIKEASELKOISUUTTA

//  HUOMIOITAVAA
'""""""""""""""""""""""""""""""""""
//  SÄHKÖN ASETUKSET KUTEN SALAMOIDEN MÄÄRÄ MUUTTUU SATUNNAISESTI
//  JOKA KLIKKAUKSELLA, JOTEN KOKEILE VÄLILLÄ MYÖS PÄÄSTÄÄ HIIRESTÄ IRTI!

//  KOKEILE PITÄÄ HIIREN NAPPIA POHJASSA JA LIIKUTELLA HIIRTÄ

//  HUOMAATKO ERON JOS MUUTAT MAXLENGHT ARVOKSI VAIKKAPA 700?

//  JOS LASKET MAXLENGHT ARVON LIIAN MATALAKSI SALAMA SYSTEEMISTÄ TULEE
//  EPÄVAKAA, TAI JOPA TOIMIMATON. JOTTA SYSTEEMI TOIMISI PARHAITEN, VARMISTA
//  ETTÄ MAXLENGHT ON VÄHINTÄÄN RUUDUN KORKEUS/2

SCREEN 800,600
SetWindow "Electricity Example"

FrameLimit 55

            //MUUTTUJAT
            //SALAMASYSTEEMIN HELPOIN MUOKKAUSTAPA ON SEURAAVILLA RIVEILLÄ!!!

            mode=1
            maxlenght=280  //VIIVAN MAKSIMIPITUUS
            originalchaos#=1.9  //KAAOKSEN MÄÄRÄ. 0.0 - 4.0
            chaoschaos#=0.5   //SÄÄTÄÄ KAAOKSEN KAAOKSELLISUUTTA, ELI KUINKA PALJON KAAOSARVO VAIHTELEE
            
            viivoja#=4
            
            quality=2  //SÄÄTÄÄ VIIVOJEN PÄÄTEPISTEIDEN TARKKUUTTA. ISOMMAT ARVOT NOPEUTTAVAT
            //SYSTEEMIÄ, MUTTA SALAMAT SAATTAVAT MENNÄ HIEMAN RAJOJEN YLI.
            // (VAIKKA QUALITYN LAITTAISI PARHAIMMALLE (1), SALAMAT MENEVÄT SILTI JOSKUS HIEMAN YLI)
            
            drawdots=0  //KÄYTETÄÄNKÖ "SCATTER" EFEKTIÄ 
            //(PIIRRETÄÄN PIENIÄ "HIUKKASIA" VIIVAN YMPÄRILLE)
            
            //MONTAKO SALAMAA SAA OLLA VÄHINTÄÄN JA KORKEINTAAN
            minpoints=3
            maxpoints=7
            
        Dim points(100,2)

        //VARSINAINEN LOOPPI ALKAA
        Repeat
        
        Text 700,15,"FPS: "+FPS()
        
        Gosub mainmenu
        
        Text 40,15,"Click the left mouse button to make electricity"
        Text 40,570,"Press F1 to show control panel"

                    //ALUKSI VALITAAN SATUNNAISIA PÄÄTEPISTEITÄ SÄHKÖLLE
                    //TOISIN SANOEN: KUN KLIKATAAN HIIRTÄ, LASKETAAN MINNE SALAMAT
                    //HIIRESTÄ KULKEVAT
                    If mouse1hit=1 Then
                        Gosub etsipisteet  //ETSITÄÄN SALAMILLE PÄÄTEPISTEET
                    End If
                    
                    //SALAMOIDEN PIIRTÄMINEN JA PÄÄTEPISTEIDEN MUUTTAMINEN REAALIAJASSA
                    If mouse1=1 Then
                        Gosub updatepisteet
                    End If
        
        Color 255,255,255
        Box 40,40,720,520,0
        Box 39,39,722,522,0
        
        DrawScreen
        Forever

Function drawelectricline(x1#,y1#,x2#,y2#,kaaos#,r,g,b,scatter,lines)

//SALAMA/SÄHKÖ MUODOSTETAAN PIENISTÄ VIIVOISTA. TÄSSÄ SÄÄDETÄÄN
//VIIVOJEN MÄÄRÄ VASTAAMAAN PUOLTA MATKAN PIKSELEISTÄ
parts#=Distance(x1#,y1#,x2#,y2#)/lines

xx1#=x1#
yy1#=y1#
xx2#=xx1#
yy2#=yy1#

move#=Distance(x1#,y1#,x2#,y2#)/parts#

xx2#=xx2#+Cos(   GetAngle(xx1#,yy1#,xx2#,yy2#)   )*move#
yy2#=yy2#-Sin(   GetAngle(xx1#,yy1#,xx2#,yy2#)   )*move#

    For i=1 To parts
    
        xx1#=xx1#+Cos(   GetAngle(xx1#,yy1#,xx2#,yy2#)   )*move#
        yy1#=yy1#-Sin(   GetAngle(xx1#,yy1#,xx2#,yy2#)   )*move#
        
        xx2#=xx2#+Cos(   GetAngle(xx1#,yy1#,x2#,y2#)   )*move#
        yy2#=yy2#-Sin(   GetAngle(xx1#,yy1#,x2#,y2#)   )*move#
        
        xx2#=xx2#+Rnd(-kaaos#,kaaos#)
        yy2#=yy2#+Rnd(-kaaos#,kaaos#)
        
        cRED=r+Rand(-45,45)
        cGREEN=g+Rand(-45,45)
        cBLUE=b+Rand(-45,45)
        
        If cRED<0 Then cRED=0
        If cRED>255 Then cRED=255
        
        If cGREEN<0 Then cGREEN=0
        If cGREEN>255 Then cGREEN=255
        
        If cBLUE<0 Then cBLUE=0
        If cBLUE>255 Then cBLUE=255
        
                Color cRED,cGREEN,cBLUE
                Line xx1#,yy1#,xx2#,yy2#
        
        If scatter=1 Then Dot xx1+Rand(-2,2),yy1+Rand(-2,2)
    
    Next i

End Function


etsipisteet:

            tries=0
            
                pointteja=Rand(minpoints,maxpoints)
                
                //MUUTETAAN KAAOSARVOA, MUTTEI ANNETA SEN KUITENKAAN KOSKAAN
                //MENNÄ LIIAN PITKÄLLE ALKUPERÄISESTÄ
                chaos#=originalchaos#+Rnd(-chaoschaos#,chaoschaos#)
                
                For pointti=1 To pointteja
    
                retry:
                tries+1
                If tries=10 Then Goto seuraava
    
                pistex#=MouseX()
                pistey#=MouseY()
            
                angle#=Rnd(360.0)
                
                
                
                    //LUODAAN NÄKYMÄTÖN PISTE, SIJOITETAAN SE HIIREN KOHDALLE, JA
                    //ALETAAN LIIKUTTAA SITÄ SATUNNAISEEN SUUNTAAN.
                    //KUN TÖRMÄTÄÄN SEINÄÄN TALLENNETAAN SALAMAN PÄÄTEPISTEEN
                    //KORDINAATIT. JOS HALUAISIT TEHDÄ TÄMÄN SAMAN SALAMASYSTEEMIN
                    //TOIMIMAAN TILEMAPIN KANSSA, SINUN PITÄISI LAITTAA PISTEEN TILALLE
                    //NÄKYMÄTÖN OBJEKTI, JA KORVATA... 
                    
                    //If pistex#=<40 Or pistex#=>760 Then törmäys=1
                    
                    //...RIVIT TAVALLISELLA COUNTCOLLISIONS KOMENNOLLA
                    
                    
                
                    For i=1 To Int(maxlenght/quality)
                    pistex#=pistex#+Cos(angle#)*quality
                    pistey#=pistey#-Sin(angle#)*quality
                    
                    törmäys=0
                    
                                //TÄSSÄ TÖRMÄYS VARSINAISESTI MÄÄRITELLÄÄN
                                If pistex#=<40 Or pistex#=>760 Then törmäys=1
                                If pistey#=<40 Or pistey#=>560 Then törmäys=1
                                
                                //JOS PISTE OLI LIIAN KAUKANA, KOKEILLAAN UUDELLEEN ERI ASTEIN
                                
                                //TOISIN SANOEN LASKETTU SALAMAN PÄÄTEPISTE OLI LIIAN KAUKANA
                                //HIIRESTÄ, JA KOSKA EMME HALUA ÄLYTTÖMÄN PITKIÄ SALAMOITA
                                //KOKEILEMME MUODOSTAA SALAMAN PÄÄTEPISTEEN ERI PAIKKAAN
                                If Distance(MouseX(),MouseY(),pistex#,pistey#)=>maxlenght Then Goto retry
                    
                    If törmäys=1 Then 
                    points(pointti,1)=pistex#
                    points(pointti,2)=pistey#
                    
                    //LAKATAAN TUTKIMASTA TÄTÄ PISTETTÄ JA HYPÄTÄÄN SEURAAVAAN
                    Goto seuraava
                    End If

                    
                    Next i
                
                seuraava:
                
                Next pointti
                
Return

updatepisteet:

For pointti=1 To pointteja
            
            hiirix=MouseX()
            hiiriy=MouseY()




            
            //TÄSSÄ KOHTAA VARSINAISESTI PIIRRETÄÄN SE SALAMA
            drawelectricline(   hiirix,hiiriy,points(pointti,1),points(pointti,2),chaos#,Rand(0,10),Rand(160,180),Rand(240,255),drawdots,viivoja# )

            //PARAMETRIT OVAT:
            //  SALAMAN ALOITUSPISTE X, SALAMAN ALOITUSPISTE Y, SALAMAN LOPETUSPISTE X, SALAMAN LOPETUSPISTE Y, KAAOKSEN MÄÄRÄ,
            //  SALAMAN VÄRI RED, SALAMAN VÄRI GREEN, SALAMAN VÄRI BLUE, SCATTER EFEKTI (VIIVAN YMPÄRILLE PIIRRETÄÄN PISTEITÄ)
            //  JA LOPUKSI LUKU, JOKA KERTOO MONESTAKO PALASTA SALAMA KOOSTUU. JOS LAITAT LUVUKSI 2 NIIN 100 PIKSELIN PITUINEN SALAMA
            //  KOOSTUU 50 PALASTA (100/2=50), JA JOS LAITAT LUVUKSI 4, 100 PIKSELIN PITUINEN SALAMA KOOSTUU 25 VIIVASTA (100/4=25)
            
            
            
            
            
            tries=0
            
            //JOS HIIRI ON LIIKKUNUT LIIAN KAUAS PÄÄTEPISTEESTÄ ETSITÄÄN PISTEELLE UUSI
            //SIJAINTI.
            
            //JOSKUS SÄHKÖN PÄÄTEPISTEIDEN SIJAINTI VOI MUUTTUA MUUTEN VAIN
            sattuma=Rand(100)
            
                If (Distance(MouseX(),MouseY(),points(pointti,1),points(pointti,2))=>maxlenght+Rand(-50,50)) Or sattuma=1 Then
                
                retry2:
                tries+1
                
                
                //JOS JOSTAIN SYYSTÄ KYMMENENKIN YRITYKSEN PÄÄSTÄ EI OLE LÖYDETTY SOPIVAA
                //PISTETTÄ UUDELLE SALAMALLE  (ELI MAXLENGHT ON LIIAN PIENI) HYLÄTÄÄN YRITYS
                If tries=10 Then Goto exit1
                pistex#=MouseX()
                pistey#=MouseY()
                angle#=Rnd(360.0)
                
                           
                          //PÄÄTEPISTETTÄ LIIKUTETAAN ETEENPÄIN 220 KERTAA
                          //JOS 220 KERRAN AIKANA PISTE EI TÖRMÄÄ KOKEILLAAN UUDELLEEN
                          //ERI LÄHTÖKULMALLA
                          For i=1 To Int(maxlenght/quality)
                            pistex#=pistex#+Cos(angle#)*quality
                            pistey#=pistey#-Sin(angle#)*quality
                            
                            törmäys=0
                            
                            //TÄSSÄ TÖRMÄYS VARSINAISESTI MÄÄRITELLÄÄN
                            If pistex#=<40 Or pistex#=>760 Then törmäys=1
                            If pistey#=<40 Or pistey#=>560 Then törmäys=1
                            
                            //JOS PISTE OLI LIIAN KAUKANA, KOKEILLAAN UUDELLEEN ERI ASTEIN
                            If Distance(MouseX(),MouseY(),pistex#,pistey#)=>maxlenght+Rand(-40,40) Then Goto retry2
                            
                                //JOS PISTE ON VIHDOINKIN TÖRMÄNNYT, TALLENNETAAN KOORDINAATIT
                                //JA HYPÄTÄÄN SEURAAVAAN SALAMAN PÄÄTEPISTEESEEN
                                If törmäys=1 Then 
                                points(pointti,1)=pistex#
                                points(pointti,2)=pistey#
                                Goto Exit1
                                End If
        
                            
                            Next i
                    
                End If
                
                exit1:
            
            Next pointti
            
Return

// HALLINTAPANEELI
mainmenu:

mouse1=MouseDown(1)
mouse1hit=MouseHit(1)

If KeyHit(cbkeyf1) Then menu+1
If menu=2 Then menu=0

    If menu=1 Then
    Text 50,50,"Q / A   Increase / decrease amount of chaos  ( "+originalchaos#+" )"
    Text 50,80,"W / S   Increase / decrease minium number of lightnings  ( "+minpoints+" )"
    Text 50,110,"E / D   Increase / decrease maximum number of lightnings  ( "+maxpoints+" )"
    Text 50,140,"R / F   Increase / decrease maximum lenght of lightning  ( "+maxlenght+" )"
    Text 50,170,"T / G   Enable / disable ''scatter'' effect  ( "+drawdots+" )"
    End If
    
    If KeyHit(cbkeyq) Then originalchaos#+0.2
    If KeyHit(cbkeya) Then originalchaos#-0.2
    
    If KeyHit(cbkeyw) Then minpoints+2
    If KeyHit(cbkeys) Then minpoints-2
    
    If KeyHit(cbkeye) Then maxpoints+2
    If KeyHit(cbkeyd) Then maxpoints-2
    
    If KeyDown(cbkeyr) Then maxlenght+2
    If KeyDown(cbkeyf) Then maxlenght-2
    
    If KeyHit(cbkeyt) Then drawdots=1
    If KeyHit(cbkeyg) Then drawdots=0
    
Return

Koodi on sitten aika vaikeaselkoista, vaikka yritinkin tehdä siitä selkeän.

Tästä systeemistä on mahdollista tehdä tilemappia tukeva versio.
Lainaus koodista:

LUODAAN NÄKYMÄTÖN PISTE, SIJOITETAAN SE HIIREN KOHDALLE, JA
ALETAAN LIIKUTTAA SITÄ SATUNNAISEEN SUUNTAAN.
KUN TÖRMÄTÄÄN SEINÄÄN TALLENNETAAN SALAMAN PÄÄTEPISTEEN
KORDINAATIT. JOS HALUAISIT TEHDÄ TÄMÄN SAMAN SALAMASYSTEEMIN
TOIMIMAAN TILEMAPIN KANSSA, SINUN PITÄISI LAITTAA PISTEEN TILALLE
NÄKYMÄTÖN OBJEKTI, LIIKUTTAA SITÄ [pistex#=pistex#+Cos(angle#)*quality]
RIVIEN KOHDALLA JA KORVATA...

If pistex#=<40 Or pistex#=>760 Then törmäys=1

...RIVIT TAVALLISELLA COUNTCOLLISIONS KOMENNOLLA

Toivottavasti joku ymmärsi mitä tarkoitin. :D
Last edited by Ruuttu on Sun Jan 02, 2011 1:10 pm, edited 3 times in total.

User avatar
KilledWhale
Tech Developer
Tech Developer
Posts: 543
Joined: Sun Aug 26, 2007 2:43 pm
Location: Liminka

Re: Salamasysteemi

Post by KilledWhale » Sat Feb 09, 2008 3:21 pm

Hienon näköistä salamointia oli. Mukava efekti pelien taustalle.
CoolBasic henkilökuntaa
Kehittäjä

cbFUN Kello
cbSDL
Whale.dy.fi

<@cce> miltäs tuntuu olla suomen paras

User avatar
CCE
Artist
Artist
Posts: 650
Joined: Mon Aug 27, 2007 9:53 pm

Re: Salamasysteemi

Post by CCE » Sat Feb 09, 2008 3:59 pm

Hyvin toimii, ja kivan näköinenkin on.

Oli muuten asiallista kommentointia :D

Code: Select all

//SÄÄTÄÄ KAAOKSEN KAAOKSELLISUUTTA, ELI KUINKA PALJON KAAOSARVO VAIHTELEE
Edit: Ja tosiaan, noita capseja kannattaa rajoittaa hieman, oli osa koodista hieman vaikelukuista.

Petse
Newcomer
Posts: 36
Joined: Thu Dec 20, 2007 8:29 am

Re: Salamasysteemi

Post by Petse » Sat Feb 09, 2008 5:05 pm

Image

Ihan kiva syteemi
Auta minun kaupunkiani: http://timppacity.myminicity.com/ind. Et menetä mitään

User avatar
Ruuttu
Devoted Member
Posts: 687
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Re: Salamasysteemi

Post by Ruuttu » Sat Feb 09, 2008 5:42 pm

Petse wrote:Image

Ihan kiva syteemi
Minä en saanut MAV ia aikaiseksi edes näillä asetuksilla:
Chaos:25
Minimum/Maximum number of lightnings:40

Elikkäs en ihan pysty ymmärtämään miten olet tuon mavin saanut aikaan.


PS: kaaosarvoa ei kyllä ollut tarkoitus laittaa ihan noin korkeaksi:

Lainaus koodista
//KAAOKSEN MÄÄRÄ. 0.0 - 4.0

User avatar
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Salamasysteemi

Post by koodaaja » Sat Feb 09, 2008 5:54 pm

Kuten salamoiden takaa näkyy, on min/max -arvoksi laitettu 169, jota kokeilemalla sain itsekin mavin. Yli sataa ei siis ainakaan kannata laittaa ;D Mutta kaikenkaikkiaan hieno efekti. Tulee ihan sähkön näköistä sähköä, ja vielä hauskasti "takertuu" seinämiin. GJ.

User avatar
Pate5
Artist
Artist
Posts: 551
Joined: Tue Aug 28, 2007 4:53 pm
Location: Vantaa

Re: Salamasysteemi

Post by Pate5 » Sat Feb 09, 2008 6:51 pm

Hienohan tämä on, mukava katsella tämmöisiä.
CoolBasic henkilökuntaa
Graafikko

BulletStorm

Re: Salamasysteemi

Post by BulletStorm » Sat Feb 09, 2008 6:56 pm

koodaaja wrote:Kuten salamoiden takaa näkyy, on min/max -arvoksi laitettu 169, jota kokeilemalla sain itsekin mavin. Yli sataa ei siis ainakaan kannata laittaa ;D Mutta kaikenkaikkiaan hieno efekti. Tulee ihan sähkön näköistä sähköä, ja vielä hauskasti "takertuu" seinämiin. GJ.
Eh ei mitään.
Last edited by BulletStorm on Sat Feb 09, 2008 7:42 pm, edited 1 time in total.

User avatar
Ruuttu
Devoted Member
Posts: 687
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Re: Salamasysteemi

Post by Ruuttu » Sat Feb 09, 2008 7:18 pm

Katos perhana, systeemi tosiaan kaatuu kun mennään yli 102 salaman. Outo ilmiö sinänsä, kun ottaa huomioon, ettei salamoille ole varattu mitään rajatun kokoista taulukkoa tai vastaavaa, joten periaatteessa minkään ei pitäisi mennä pieleen. No, kenelläkään ei varmaan ole tarvetta yli 100 salamalle (esimerkissähän on oletuksena 3-7, ja jo 50 alkaa näyttää liialta), mutta onko kenelläkään hajua, miksi systeemi kaatuu yli 102:n salaman kohdalla? Sinänsä turha asia, mutta olisi hauska tietää.

User avatar
Marcoder
Active Member
Posts: 120
Joined: Tue Aug 28, 2007 8:21 am

Re: Salamasysteemi

Post by Marcoder » Mon Feb 11, 2008 3:29 pm

Ruuttu wrote:...mutta onko kenelläkään hajua, miksi systeemi kaatuu yli 102:n salaman kohdalla? Sinänsä turha asia, mutta olisi hauska tietää.
Rivillä 49 alustat taulukon

Code: Select all

Dim points(100,2)
Sitten muualla koodissa...

Code: Select all

pointteja=Rand(minpoints,maxpoints)
...
For pointti=1 To pointteja
    ...
    points(pointti,1)=pistex#
    ...
Next pointti
Kuten huomataan niin jos maxpoints on suurempi kuin 100 niin homma kusee jossain vaiheessa koska taulukkoa kirjoitetaan yli.
Aina ei välttämättä tuohon kaadu vaan se riippuu siitä mitä tuossa yli menevässä muistipaikassa sattuu olemaan.

User avatar
Ruuttu
Devoted Member
Posts: 687
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Re: Salamasysteemi

Post by Ruuttu » Mon Feb 11, 2008 6:24 pm

No katos perhana, niinpäs onkin!
No, tuo virhe on helppo korjata (jos joku hullu nyt tarvitsee yli 100 salamaa).
En selvästi ole ajatellut hommaa ihan loppuun asti. :roll:
No joo, selvisipä sitten sekin.

Pystyisikö joku minua koodaustaitoisempi kehittämään tuosta tilemapin kanssa toimivan version? Eli sen sijaan että siirrellään näkymätöntä pistettä sin ja cos komennoilla ja katsotaan onko piste reunojen ulkopuolella liikutettaisiinkin näkymätöntä objektia moveobjectin avulla, ja katsottaisiin countcollisions komennolla törmääkö objekti. Itse yritin tehdä sellaisen, ja se toimikin, mutta kun hiirtä sitten liikutti, salamat menivät seinien läpi, ja koko viritys oli ihan p########.

User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Salamasysteemi

Post by Jonez » Tue Feb 12, 2008 1:12 pm

Ruuttu: käytännöllisin tapa soveltaa toi tilemappiin on varmaankin ObjectPick()

Tyyliin:

Code: Select all

PositionObject pikkeri, MouseWX(), MouseWY()
RotateObject pikkeri, rand( 360 )
ObjectPick pikkeri
näkymätönPisteX = PickedX()
näkymätönPisteY = PickedY()
Edit.. Yritin soveltaa tohon sun systeemiin, mutta en onnistunut ja kehitin oman :)

Code: Select all

SCREEN 1024, 768

Const flashAmount = 5
Const maxDist = 300
Const distortion = 50
Const length = 2
    
Type tLightning
    Field cX
    Field cY
    Field cId
End Type

Global map
map = LoadMap( "media\cdm2.til", "media\tileset.bmp" )
ObjectPickable map, ON

Global picker
picker = MakeObject()

Repeat

    DrawGame
    
    TranslateCamera MouseMoveX(), -MouseMoveY()
    PositionMouse ScreenWidth() / 2, ScreenHeight() / 2
    PositionObject picker, CameraX(), CameraY()

    If MouseDown( 1 ) Then
        GetTarget( CameraX(), CameraY() )
    EndIf

    For il.tLightning = Each tLightning
        If il <> Last( tLightning ) Then
            al.tLightning = After( il ) 
            
            If il\cId = al\cId Then
                Color Rand( 100, 150 ), Rand( 200, 220 ), Rand( 200, 255 )
                
                DrawToWorld ON
                Line il\cX, il\cY, al\cX, al\cY
                DrawToWorld OFF
            EndIf
        Else
            Delete il
            Exit
        EndIf
        Delete il
    Next il
    
DrawScreen
Forever

Function GetTarget( _x, _y )
    If GetMap( 2, _x, _y ) <> 1 Then   

        For i = 1 To flashAmount   
            RotateObject picker, Rand( 360 )
            ObjectPick picker

            If Distance( _x, _y, PickedX(), PickedY() ) < maxDist Then  
                lastX = _x
                lastY = _y
                
                While Distance( x, y, PickedX(), PickedY() ) > 5
                    
                    kulma# = GetAngle( PickedX(), PickedY(), lastX, lastY )
    
                    x = lastX - Cos( Rand( kulma# - distortion, kulma# + distortion ) ) * Rand( length - 3, length + 3 )
                    y = lastY + Sin( Rand( kulma# - distortion, kulma# + distortion ) ) * Rand( length - 3, length + 3 )
    
                    nl.tLightning = New( tLightning )
                    nl\cId = i 
                    nl\cX = x
                    nl\cY = y
    
                    lastX = x
                    lastY = y
                    
                Wend
            EndIf
        Next i
        
    EndIf
End Function
Se olis paljon hienompi jos ne salamat pysyttelis lähes paikallaan niinku sun systeemissä, mutta en tajunnu kehitellä tästä semmosta. Saa nähä jaksanko muuttaa tätä.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War

User avatar
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 5:53 pm

Re: Salamasysteemi

Post by Jani » Fri Nov 28, 2008 5:35 pm

Vai ei yli 100? Vai ei yli 4.0? Minä ttas käytän tämmösiä arvoja :D

Code: Select all

            mode=1000
            maxlenght=2800  //VIIVAN MAKSIMIPITUUS
            originalchaos#=10000  //KAAOKSEN MÄÄRÄ. 0.0 - 4.0
            chaoschaos#=1000
kanttii testata. (Pahoittelen nostosta)

EDIT: fps on siellä 60 tienoilla ;)
EDIT2: VIVA! todella hieno taivas animaatio näkyy kun laitatte

Code: Select all

           mode=100000
            maxlenght=2800  //VIIVAN MAKSIMIPITUUS
            originalchaos#=10000  //KAAOKSEN MÄÄRÄ. 0.0 - 4.0
            chaoschaos#=1000   //SÄÄTÄÄ KAAOKSEN KAAOKSELLISUUTTA, ELI KUINKA PALJON KAAOSARVO VAIHTELEE
            
            viivoja#=4
            
            quality=10  //SÄÄTÄÄ VIIVOJEN PÄÄTEPISTEIDEN TARKKUUTTA. ISOMMAT ARVOT NOPEUTTAVAT
            //SYSTEEMIÄ, MUTTA SALAMAT SAATTAVAT MENNÄ HIEMAN RAJOJEN YLI.
            // (VAIKKA QUALITYN LAITTAISI PARHAIMMALLE (1), SALAMAT MENEVÄT SILTI JOSKUS HIEMAN YLI)
            
            drawdots=0  //KÄYTETÄÄNKÖ "SCATTER" EFEKTIÄ 
            //(PIIRRETÄÄN PIENIÄ "HIUKKASIA" VIIVAN YMPÄRILLE)
            
            //MONTAKO SALAMAA SAA OLLA VÄHINTÄÄN JA KORKEINTAAN
            minpoints=3
            maxpoints=700
(saattaa tarvita hieman tehoja :) )
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition

User avatar
Ilmuri
Developer
Developer
Posts: 277
Joined: Sun Aug 26, 2007 2:46 pm
Location: \o

Re: Salamasysteemi

Post by Ilmuri » Fri Nov 28, 2008 6:44 pm

Code: Select all

SCREEN 480,480,32,1
Function salama(num, x1#,y1#,x2#,y2#)
	If num=0 Then Return 1
	If num=1 Then Line x1,y1,x2,y2
	If num=1 Then Return 1
	x = Float(x2-x1)*Rnd(0.3,0.7)
	y = Float(y2-y1)*Rnd(0.3,0.7)
	xx = Float(x2-x1)*Rnd(0.4,0.6)
	yy = Float(y2-y1)*Rnd(0.4,0.6)
	salama(num-1,x1,y1,xx+x1,yy+y1)
	Line xx+x1,yy+y1,x+x1,y+y1
	salama(num-1,x+x1,y+y1,x2,y2)
End Function
alku# = Timer()
Repeat
	t# = (Timer()-alku#)*0.1
	If t<2700 And t# Mod 50 < 25 Then salama(3,t*0.177,124,240+Cos(t)*240,376)
	
	DrawScreen
Forever
Tässäpä on enemmän tai vähemmän kuuluisan introni salamaefektin koodi. Hieman yksinkertaisempi (ja pöljempi) systeemi. (huomatkaa että kilpailussa oli rivirajoitus)
CoolBasic henkilökuntaa
Kehittäjä
CoolBasic Classic

Arzka
Newcomer
Posts: 18
Joined: Sun Dec 14, 2008 1:49 pm

Re: Salamasysteemi

Post by Arzka » Sun Dec 14, 2008 2:09 pm

Mikä on tämän systeemin tarkoitus????



t. Arzka

User avatar
Ruuttu
Devoted Member
Posts: 687
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Re: Salamasysteemi

Post by Ruuttu » Sun Dec 14, 2008 4:12 pm

Arzka wrote:Mikä on tämän systeemin tarkoitus????
Mielestäni hieman turha kysymys... Systeemillä voi luoda salamaa muistuttavan efektin. Sitä voi käyttää scifi pelissä jonkin aseen tehosteena tai vaikkapa ihan vain salamana ulkoilmakohtauksissa. Koodihan sisältää funktion, jolla voi piirtää salaman pisteestä A pisteeseen B, ja kyseisellä funktiollahan saa sitten melkein mitä tahansa aikaan.

Post Reply