cbEnchanted - uudelleenkirjoitettu runtime

Jaa meneillään olevat projektisi tai valmiit pelit muun yhteisön kanssa täällä.
Post Reply
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: cbEnchanted - uudelleenkirjoitettu runtime

Post by valscion »

Konstaduck wrote:Milloin olisi seuraava versiota tulossa?
Haluan niin päästä piilottamaan sen komentorivin sieltä takaa... :lol:
Saisinkohan tänään julkaistuksi uutta... siinä on kuitenkin aina oma työnsä kun tekee julkaisupaketin enkä aina ole kotona sopivasti niitä paketteja tekemässä. Julkaisujen välillä tehdyt uudet ominaisuudet myös halutaan mielellään saada toimimaan hyvin etteivät ne jäisi pakettiin keskeneräisinä. Nämäkin osaltaan hidastavat julkaisutahtia.

Ensi versiossa onkin sitten paljon mukavaa tulossa ;). Mm. DLL-ominaisuudet, GetKey() ja GetMouse(), datalistat, CRC32 joka oikeasti toimii sekä se konsoli-ikkunan piilotus :). Sitten tietenkin näitä bugikorjauksia on. Merkistöongelmat kaikkien muiden komentojen paitsi tiedostokomentojen kanssa pitäisi olla jo historiaa (paitsi vahvistusviestin otsikossa ei vielä näy ääkköset oikein, mutta sen korjaus ei ole kauhean isolla prioriteetilla).

Release-version CBCompilerilla tehdyt exet muuten piilottavat automaattisesti nyt sen konsoli-ikkunan, mutta sen voi saada esille uudella erikoisfunktiolla. Kaikki muut versiot näyttävät sen konsoli-ikkunan siellä taustalla oletuksena, sillä se on aika kätevä väline debuggailuun.

EDIT: Tuohon KillBurnin ongelmaan liittyen, en oikein usko että varsinaisesti ongelma on siinä että käytät tyyppejä. Pitää tutkailla jossain vaiheessa, tällä hetkellä on kovat debuggailut käynnissä että NetMatchia saisi pyöriteltyä cbE:llä ;)

EDIT2: Näköjään ObjectOrderissa on bugi, tarkistelen että millainen ja teen bugiraportin kaiken kansan nähtäville...

EDIT3: ObjectOrderin logiikka on viallinen ja se kaatuilee.
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: cbEnchanted - uudelleenkirjoitettu runtime

Post by MaGetzUb »

Konstaduck wrote:Milloin olisi seuraava versiota tulossa?

<spoileri> Haluan niin päästä piilottamaan sen komentorivin sieltä takaa... :lol: </spoileri>
Mitä se komentorivi sinua häiritsee sielä prosessin takana? Oletko julkistamassa projektia vai? Sen nyt ei pitäisi paljoa häiritä jos testailet omia koodejasi. Mutta kyllä tuo piilotus tulee ominaisuudeksi että älä hätäile.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
User avatar
Nameless_One
Member
Posts: 63
Joined: Fri Mar 26, 2010 4:05 pm

Re: cbEnchanted - uudelleenkirjoitettu runtime

Post by Nameless_One »

Itselläni cbEnchanted pyörii 59-60 FPS:n lukemissa.

Koneeni käyttöjärjestelmänä on Windows XP Professional Service Pack 3, näytönohjain Radeon 9600 series ja prosessori AMD Sempron 2300+ 1,58 GHz.
FPS vain 59...
FPS vain 59...
screenini.PNG (12.52 KiB) Viewed 14440 times
Projektit:
Semmonen jännä tasoloikka

Youtube-kanavani
Uusin video: Pelataas LoZ Oracle of Seasons - Osa 14 - Tarm Rauniot
User avatar
Konstaduck
Advanced Member
Posts: 267
Joined: Sat Dec 17, 2011 3:09 pm
Location: Nurmijärvi, Finland
Contact:

Re: cbEnchanted - uudelleenkirjoitettu runtime

Post by Konstaduck »

MaGetzUb wrote: Mitä se komentorivi sinua häiritsee sielä prosessin takana? Oletko julkistamassa projektia vai? Sen nyt ei pitäisi paljoa häiritä jos testailet omia koodejasi. Mutta kyllä tuo piilotus tulee ominaisuudeksi että älä hätäile.
No, julkista versiota olen tekemässä lähinnä kavereille päin, joten kyllä se siistimpi olisi ilman sitä komentokehotetta. Onneksi sen saa sitten seuraavassa versiossa pois :)
Nameless_One wrote:Itselläni cbEnchanted pyörii 59-60 FPS:n lukemissa.

Koneeni käyttöjärjestelmänä on Windows XP Professional Service Pack 3, näytönohjain Radeon 9600 series ja prosessori AMD Sempron 2300+ 1,58 GHz.
Erikoista... Minulla on Windows XP Home Edition Service Pack 3, ja näytönohjaimeni on Intel(R) Pentium(R) M processor 1.60GHz... Ja silti minulla on FPS siinä 900-1400, ellei jopa 1700 välillä... Ettet vain olisi unohtanut Framelimit 60:piä sinne jonnekkin...? ;)
Konstaduck.net
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: cbEnchanted - uudelleenkirjoitettu runtime

Post by Latexi95 »

Konstaduck wrote:
Nameless_One wrote:Itselläni cbEnchanted pyörii 59-60 FPS:n lukemissa.
Koneeni käyttöjärjestelmänä on Windows XP Professional Service Pack 3, näytönohjain Radeon 9600 series ja prosessori AMD Sempron 2300+ 1,58 GHz.
Erikoista... Minulla on Windows XP Home Edition Service Pack 3, ja näytönohjaimeni on Intel(R) Pentium(R) M processor 1.60GHz... Ja silti minulla on FPS siinä 900-1400, ellei jopa 1700 välillä... Ettet vain olisi unohtanut Framelimit 60:piä sinne jonnekkin...? ;)
Tai sitten näytönohjaimen asetuksista on vsync pakotettuna käyttöön.
User avatar
Nameless_One
Member
Posts: 63
Joined: Fri Mar 26, 2010 4:05 pm

Re: cbEnchanted - uudelleenkirjoitettu runtime

Post by Nameless_One »

Latexi95 wrote:Tai sitten näytönohjaimen asetuksista on vsync pakotettuna käyttöön.
Kiitti avusta. Otin sen nyt pois päältä ja FPS huitelee 1700 lukemissa. :)
Projektit:
Semmonen jännä tasoloikka

Youtube-kanavani
Uusin video: Pelataas LoZ Oracle of Seasons - Osa 14 - Tarm Rauniot
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: cbEnchanted - uudelleenkirjoitettu runtime

Post by valscion »

Kävikin niin että elämä tuli eteen enkä kerkiä tänään käydä koneella kotona. Uusi julkaisu siis jää tulevaisuuteen
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
User avatar
Konstaduck
Advanced Member
Posts: 267
Joined: Sat Dec 17, 2011 3:09 pm
Location: Nurmijärvi, Finland
Contact:

Re: cbEnchanted - uudelleenkirjoitettu runtime

Post by Konstaduck »

Joo, huomasin Setwindowsissa bugin. Tai oikeastaan kaksikin. Kuvat selventävät varmasti asiaa.
EDIT:

JA tuo toinen bugihan aiheutuu, jos raahataan ikkunaa

Setwindow - jokin mättää.png
Eli tässä virheilmoitus ei veny teksti mittoihin jättäen tekstistä osan ulkopuolelle :o
Setwindow - huooh!.png
Tässä taas ruutu ei päivity, aiheuttaen ruman jäljen ):
Last edited by Konstaduck on Fri Jun 08, 2012 11:51 am, edited 1 time in total.
Konstaduck.net
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: cbEnchanted - uudelleenkirjoitettu runtime

Post by valscion »

Konstaduck wrote:Joo, huomasin Setwindowsissa bugin. Tai oikeastaan kaksikin. Kuvat selventävät varmasti asiaa.
Jepjep. Se eka virhe johtuu siitä että vahvistusviesti katkeaa ääkkösten kohdalla, koska ääkköset eivät ole vielä tuossa tuettuina. Toinen virhe johtuu vaan siitä että koneesi on huono. Emme voi tehdä asialle mitään. Ohjelman suoritus katkeaa tuossa virheviestin kohdalla emmekä voi koodissa ruutua päivittää sen aikana, järjestelmäsi pitäisi pitää huolen siitä ettei ikkunalle käy juuri niinkuin sinun kohdallasi käy.
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
User avatar
Konstaduck
Advanced Member
Posts: 267
Joined: Sat Dec 17, 2011 3:09 pm
Location: Nurmijärvi, Finland
Contact:

Re: cbEnchanted - uudelleenkirjoitettu runtime

Post by Konstaduck »

VesQ wrote:Toinen virhe johtuu vaan siitä että koneesi on huono. Emme voi tehdä asialle mitään. Ohjelman suoritus katkeaa tuossa virheviestin kohdalla emmekä voi koodissa ruutua päivittää sen aikana, järjestelmäsi pitäisi pitää huolen siitä ettei ikkunalle käy juuri niinkuin sinun kohdallasi käy.
Miten tuo sitten toimi täydellisesti ennen cbE:tä, ja ihan yhtä huono se oli silloinkin...?
Konstaduck.net
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: cbEnchanted - uudelleenkirjoitettu runtime

Post by valscion »

Konstaduck wrote:Miten tuo sitten toimi täydellisesti ennen cbE:tä, ja ihan yhtä huono se oli silloinkin...?
Koska CB käyttää ruudun piirtoon wanhaa DirectX:ää ja cbE käyttää OpenGL:ää. CB:n ja cbE:n kaikki grafiikkaominaisuudet muutenkin eroavat toisistaan sisäisesti sen verran että eroja on turha edes alkaa listaamaan.
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
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: cbEnchanted - uudelleenkirjoitettu runtime

Post by koodaaja »

En ole tätä kokeillut, mutta eikö MessageBoxia voisi kutsua omassa threadissaan ja jatkaa samalla ainakin ohjelman grafiikanpiirtolooppia?
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: cbEnchanted - uudelleenkirjoitettu runtime

Post by axu »

koodaaja wrote:En ole tätä kokeillut, mutta eikö MessageBoxia voisi kutsua omassa threadissaan ja jatkaa samalla ainakin ohjelman grafiikanpiirtolooppia?
Josta tuli mieleen, messageboxi olisi aika kiva lisä *menee lisäämään issue trackeriin*
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: cbEnchanted - uudelleenkirjoitettu runtime

Post by valscion »

koodaaja wrote:En ole tätä kokeillut, mutta eikö MessageBoxia voisi kutsua omassa threadissaan ja jatkaa samalla ainakin ohjelman grafiikanpiirtolooppia?
Kaipa sitä voisi mutta mielestäni allegron pitäisi hoitaa se ihan itsekin. En ole muilla koneilla törmännyt tuohon ruudun bugisuuteen.
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
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: cbEnchanted - uudelleenkirjoitettu runtime

Post by axu »

VesQ wrote:Kaipa sitä voisi mutta mielestäni allegron pitäisi hoitaa se ihan itsekin. En ole muilla koneilla törmännyt tuohon ruudun bugisuuteen.
Luullakseni Win7 (ja ehkä myös Vista) osaavat välttää tämän.
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: cbEnchanted - uudelleenkirjoitettu runtime

Post by esa94 »

axu wrote:
VesQ wrote:Kaipa sitä voisi mutta mielestäni allegron pitäisi hoitaa se ihan itsekin. En ole muilla koneilla törmännyt tuohon ruudun bugisuuteen.
Luullakseni Win7 (ja ehkä myös Vista) osaavat välttää tämän.
Kompositio korjaa tuon, juu.
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: cbEnchanted - uudelleenkirjoitettu runtime

Post by valscion »

Versio 0.2.0 julkaistu!

Lataa alta itsellesi sopivin paketti: cbEnchantedin Windows-versio vaatii, että Microsoft Visual C++ 2010 Redistributable Package (x86) on asennettuna koneella.
Windows-paketti sisältää kaksi eri 32-bittistä julkaisuversiota cbEnchantedista:
  1. testable kansiossa on exet, joiden avulla voit testata jo käännettyjä CB-exe tiedostoja. Käytä komentoriviä ja kutsu kyseistä exeä niin että ensimmäisenä parametrina on testattavan ohjelman exen tiedostopolku TAI tiputa testattava exe cbEnchantedin exe-tiedostoon. Tiedostopolussa ei saa olla välilyöntejä.
  2. compiler kansiossa on muokatut versiot CBCompiler.exe-tiedostosta, joissa on korvattu wanhan CB:n runtimet cbEnchantedilla. Kun vaihdat tämän CoolBasicin asennuskansiosta löytyvän IDE\CBCompiler.exe tiedoston paikalle, saat heti käännettyä cbEnchanted-ohjelmia.
Lukekaa cbEnchantedin GitHub-wikiä, josta löytyy yleistä tietoa projektista. Katsokaa etenkin sivu Erikoisuuksia ja eroavaisuuksia.

Muutokset edelliseen versioon: Tämän julkaisun tunnetut bugit
Last edited by valscion on Tue Jun 26, 2012 3:18 pm, edited 3 times in total.
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
Kumiankka
Member
Posts: 65
Joined: Wed May 18, 2011 5:17 pm
Location: Artjärvi

Re: cbEnchanted - uudelleenkirjoitettu runtime

Post by Kumiankka »

GetKey tuntuu bugaavan melkolailla raskaasti. Manuaalin GetKey():n kohdalta löytyvällä esimerkilläkin kokeillessa se jätti todella usein huomioimatta näppäimien painalluksia.
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: cbEnchanted - uudelleenkirjoitettu runtime

Post by Latexi95 »

Kumiankka wrote:GetKey tuntuu bugaavan melkolailla raskaasti. Manuaalin GetKey():n kohdalta löytyvällä esimerkilläkin kokeillessa se jätti todella usein huomioimatta näppäimien painalluksia.
Joo. Se ei vielä vaikuta toimivan aivan oikein. Se kaipaa vielä hieman laittoa samoin kuin GetMousekin.
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: cbEnchanted - uudelleenkirjoitettu runtime

Post by axu »

Tulipa taas päivä hukattua... mutta tervetuloa tulevaisuuteen! (tai ehkä nykyaikaan :D)

Code: Select all

Const SW = 800
Const SH = 600
Const SpyOverlayQ = 32      //Kiikarikuvan laatu, suurempi huonompi (eroa ei juurikaan huomaa, kun Smooth2D on päällä)
Const NightOverlayQ = 2     //Yökiikarikuvan laatu, tässä eron huomaa selvemmin

Const MaxZoom = 2           //Tämä määrää, kuinka kauaksi voidaan zoomata (2 = ruudulla voi näkyä 2x tavalliseen nähden)
Const NormZoom = 1          //Kuinka zoomattu ruutu on tavallisesti
Const SpyZoom = 2           //Kuinka zoomattu ruutu on kiikareilla

Const NormLookForward = 100 //Kuinka kauaksi eteenpäin katsotaan tavallisesti
Const SpyLookForward = 500  //Kuinka kauaksi eteenpäin katsotaan kiikareilla

Const DayLenght = 90000     //Päivän pituus millisekunneissa (90000 = puolitoista minuuttia)

Smooth2D ON
SCREEN SW, SH
SetWindow "cbe Tech Demo by aXu"
Print "Screen size: " + SW + "x" + SH


Font = LoadFont("Arial", 20, True)
SetFont Font

Map = LoadMap("Media/cdm2.til", "Media/tileset.bmp")
PlayObject Map, 0, 0, 0.5
ObjectPickable Map, ON

Guy = LoadObject("Media/soldier.bmp")
TurnObject Guy, 90
SetupCollision Guy, map, 2, 4, 2

GuyImg = LoadImage("Media/soldier.bmp")

Crosshair = LoadImage("Media/target.bmp")

DefaultMask OFF
sx = RoundUp(Float(SW) / SpyOverlayQ)
sy = RoundUp(Float(SH) / SpyOverlayQ)
SpyOverlay = MakeImage(sx, sy)

Print "SpyOverlay size: " + sx + "x" + sy
DrawToImage SpyOverLay
	cbeClsColor(0, 0, 0, 0)
	Cls
	For x = 0 To SW - 1
		For y = 0 To SH - 1
			dst1# = Distance(x, y, SW / 2 - 150 * (SW / 800.0), SH / 2)
			dst2# = Distance(x, y, SW / 2 + 150 * (SW / 800.0), SH / 2)
			gamma = Min(255, Min(dst1, dst2) / (SW / 800.0))
			cbeColor(255 - gamma, 255 - gamma, 255 - gamma, gamma)
			Dot x / SpyOverlayQ, y / SpyOverlayQ
			
			y = Min(SH - 1, y + SpyOverlayQ - 1)
		Next y
		x = Min(SW - 1, x + SpyOverlayQ - 1)
	Next x
DrawToScreen

sx = RoundUp(Float(SW) / NightOverlayQ)
sy = RoundUp(Float(SH) / NightOverlayQ)
NightOverlay = MakeImage(sx, sy)
Print "NightOverlay size: " + sx + "x" + sy
DrawToImage NightOverlay
	cbeClsColor(0, 0, 0, 0)
	Cls
	For x = 0 To SW - 1
		For y = 0 To SH - 1
			gamma = y Mod 10
			ran = Rand(70)
			cbeColor(gamma * 10 + ran, gamma * 25 + ran, gamma * 10 + ran, 40 + gamma * 10 + ran / 2)
			Dot x / NightOverlayQ, y / NightOverlayQ
			
			y = Min(SH - 1, y + NightOverlayQ - 1)
		Next y
		x = Min(SW - 1, x + NightOverlayQ - 1)
	Next x
DrawToScreen


ScreenSize = Sqrt(SW^2 + SH^2) * MaxZoom
Buffer = MakeImage(ScreenSize, ScreenSize)
Print "Image buffer size: " + ScreenSize + "x" + ScreenSize + " (maximum scaling: " + MaxZoom + ")"

Dim NewCamX#, NewCamY#, NewCamA#, NewCamZ#, SpyingOpacity#
Global Zoom#
Zoom = 0.5
DrawRotated = True

CurrentFrame = Timer()
Repeat
	Color 64, 64, 64
	cbeColor(0, 0, 0, 0)
	CenterText SW/2, SH/2, "Use cbEnchanted to see this demo properly"
	Repeat
		//Pelimekaniikka:
		If KeyHit(cbKeyZ) Then OldAngle# = ObjectAngle(Guy)
		If KeyDown(cbKeyZ) Then //Kiikarit
			vx# = Max(-150, Min(150, vx + (KeyDown(cbKeyRight) - KeyDown(cbKeyLeft)) * 2))
			vy# = Max(-150, Min(150, vy + (KeyDown(cbKeyUp) - KeyDown(cbKeyDown)) * 2))
			CamOffSetX = Cos(CameraAngle()) * vx - Sin(CameraAngle()) * vy
			CamOffSetY = Sin(CameraAngle()) * vx + Cos(CameraAngle()) * vy
			
			RotateObject Guy, GetAngle(ObjectX(Guy), -ObjectY(Guy), CameraX(), -CameraY())
			ObjectPick Guy
			If PickedObject() Then
				TargetX = WToSX(PickedX(), PickedY())
				TargetY = WToSY(PickedX(), PickedY())
				ShowLaser = True
			EndIf
			
			SpyingOpacity = CurveValue(255, SpyingOpacity, 30)
			
			NewCamX = ObjectX(Guy) + Cos(OldAngle) * SpyLookForward + CamOffSetX
			NewCamY = ObjectY(Guy) + Sin(OldAngle) * SpyLookForward + CamOffSetY
			NewCamA = OldAngle - 90
			NewCamZ = SpyZoom
		ElseIf KeyDown(cbKeyX) //Uloszoomaaminen
			vx# = (KeyDown(cbKeyRight) - KeyDown(cbKeyLeft))
			vy# = (KeyDown(cbKeyUp) - KeyDown(cbKeyDown))
			an# = GetAngle(0, 0, vx, -vy)
			sp# = Min(0.4, Distance(0, 0, vx, vy))
			TranslateObject guy, Cos(an) * sp, Sin(an) * sp
			
			ObjectPick Guy
			If PickedObject() Then
				TargetX = WToSX(PickedX(), PickedY())
				TargetY = WToSY(PickedX(), PickedY())
				ShowLaser = False
			EndIf
			
			SpyingOpacity = CurveValue(0, SpyingOpacity, 30)
			
			NewCamX = ObjectX(Guy)
			NewCamY = ObjectY(Guy)
			NewCamA = 0
			NewCamZ = 1.0 / MaxZoom
		Else //Tavallinen
			vx# = 0
			vy# = 0
			
			TurnObject guy, (KeyDown(cbKeyLeft) - KeyDown(cbKeyRight)) * 1
			MoveObject guy, KeyDown(cbKeyUp) - KeyDown(cbKeyDown) * 0.7
			
			ObjectPick Guy
			If PickedObject() Then
				TargetX = WToSX(PickedX(), PickedY())
				TargetY = WToSY(PickedX(), PickedY())
				ShowLaser = False
			EndIf
			
			SpyingOpacity = CurveValue(0, SpyingOpacity, 30)
			
			NewCamX = ObjectX(Guy) + Cos(ObjectAngle(Guy)) * NormLookForward
			NewCamY = ObjectY(Guy) + Sin(ObjectAngle(Guy)) * NormLookForward
			NewCamA = ObjectAngle(Guy) - 90
			NewCamZ = NormZoom
		EndIf
		
		
		PositionCamera CurveValue(NewCamX, CameraX(), 40), CurveValue(NewCamY, CameraY(), 40)
		RotateCamera CurveAngle2(NewCamA, CameraAngle(), 20)
		Zoom = CurveValue(NewCamZ, Zoom, 50)
		
		CurrentFrame = CurrentFrame + 5
	Until CurrentFrame > Timer()
	
	TimeOfDay# = Float((Timer() + DayLenght / 2) Mod DayLenght) / DayLenght * 24
	
	DrawToImage Buffer
		ClsColor 0, 0, 0
		Cls
		GhostObject Guy, 0
		DrawGame
		cbeColor(255, 255, 255, 255)
		cbeDrawTintedScaledRotatedImage(GuyImg, ScreenSize/2 + ObjectX(Guy) - CameraX(), ScreenSize/2 + CameraY() - ObjectY(Guy), 1, 1, -ObjectAngle(Guy))
	DrawToScreen
	
	
	//Taustavalaistus, riippuu vuorokaudenajasta:
	AmbiR = 255
	AmbiG = 255
	AmbiB = 255
	AmbiA = 255
	//Yön pimeys (ilta 6 - aamu 6)
	If Abs(TimeOfDay - 12) > 6 Then
		tmp = 100 + Cos((12 - Abs(TimeOfDay - 12)) * 30) * 100
		AmbiR = AmbiR - tmp
		AmbiG = AmbiG - tmp
		AmbiB = AmbiB - tmp / 1.5
	EndIf
	
	//Illankajo (ilta 5 - ilta 11)
	If Abs(TimeOfDay - 20) < 3 Then
		tmp = 50 + Cos(Abs(TimeOfDay - 20) * 60) * 50
		AmbiR = AmbiR + tmp / 4
		AmbiG = AmbiG - tmp / 2
		AmbiB = AmbiB - tmp
	EndIf
	
	//Aamuhämärä (aamu 6 - aamu 12)
	If Abs(TimeOfDay - 9) < 3 Then
		tmp = 20 + Cos(Abs(TimeOfDay - 9) * 60) * 20
		AmbiR = AmbiR - tmp
		AmbiG = AmbiG - tmp
		AmbiB = AmbiB - tmp
		AmbiA = AmbiA - tmp
	EndIf
	
	NightLook# = CurveValue((SpyingOpacity > 200) * Abs(TimeOfDay - 12) > 9, NightLook, 20)
	AmbiG = AmbiG + NightLook * 100
	AmbiA = AmbiA - NightLook * 100
	
	//Piirretään maailma värjättynä ambientilla valolla (läpinäkyvyys aiheuttaa valkoista, tausta on valkoinen
	cbeColor(AmbiR, AmbiG, AmbiB, AmbiA)
	cbeDrawTintedScaledRotatedImage(Buffer, SW/2, SH/2, Zoom, Zoom, CameraAngle())
	
	//Laser
	cbeColor(255, 0, 0, 32)
	FatLine(WToSX(ObjectX(Guy), ObjectY(Guy)), WToSY(ObjectX(Guy), ObjectY(Guy)), TargetX, TargetY, Zoom + .5)
	//Tähtäin
	cbeColor(255, 255, 255, 192)
	cbeDrawTintedScaledRotatedImage(Crosshair, TargetX, TargetY, 1, 1, Timer() / 10)
	
	//Yökiikarin raidat
	cbeColor(0, NightLook * 255, 0, SpyingOpacity * NightLook)
	cbeDrawTintedScaledRotatedImage(NightOverlay, SW/2, SH/2, NightOverlayQ)
	//Kiikari
	cbeColor(0, NightLook * 255, 0, SpyingOpacity)
	cbeDrawTintedScaledRotatedImage(SpyOverlay, SW/2, SH/2, SpyOverlayQ)
	
	
	
	cbeColor(255, 255, 255, 192)
	Text 0, 0, "Use arrows to move around, Z to spy, X to zoom out."
	Text 0, 20, "FPS: " + FPS() + " (max 200)"
	Text 0, 40, "Clock: " + RoundDown(TimeOfDay) + ":" + RoundDown(TimeOfDay Mod 1 * 60)
	ClsColor 255, 255, 255
	Wait CurrentFrame - Timer()
	DrawScreen
Forever

Function WToSX(X#, Y#)
	X = (X - CameraX()) * Zoom
	Y =-(Y - CameraY()) * Zoom
	A# = GetAngle(0, 0, X, Y) - CameraAngle()
	D# = Distance(0, 0, X, Y)
	
	Return Cos(A) * D + SW/2
EndFunction

Function WToSY(X#, Y#)
	X = (X - CameraX()) * Zoom
	Y =-(Y - CameraY()) * Zoom
	A# = GetAngle(0, 0, X, Y) - CameraAngle()
	D# = Distance(0, 0, X, Y)
	
	Return -Sin(A) * D + SH/2
EndFunction

Function CurveAngle2(newA#, oldA#, smooth#)
	newA = WrapAngle(newA + 180)
	ADiff# = oldA - newA + 180
	While ADiff > 180
		ADiff - 360
	Wend
	While ADiff < -180
		ADiff + 360
	Wend
	Return (oldA - ADiff / smooth)
EndFunction

Function FatLine(X1#, Y1#, X2#, Y2#, Thickness#)
	For x = -RoundDown(Thickness / 2) To RoundUp(Thickness / 2)
		For y = -RoundDown(Thickness / 2) To RoundUp(Thickness / 2)
			Line X1 + x, Y1 + y, X2 + x, Y2 + y
		Next y
	Next x
EndFunction


Function cbeColor(r, g, b, a)
    group = 1
    funcId = 2
EndFunction

Function cbeClsColor(r, g, b, a)
    group = 1
    funcId = 3
EndFunction

Function cbeDrawTintedScaledRotatedImage(img, toX#, toY#, scaleX# = 1, scaleY# = 0, angle# = 0)
	If scaleY = 0 Then scaleY = scaleX
	cbeDrawTintedScaledRotatedImageBox(img, 0, 0, ImageWidth(img), ImageHeight(img), toX, toY, scaleX, scaleY, angle)
EndFunction

Function cbeDrawTintedScaledRotatedImageBox(img, startX As Float, startY As Float, width As Float, height As Float, toX As Float, toY As Float, scaleX As Float, scaleY As Float, angle As Float)
    group = 1
    funcId = 6
End Function
EDIT:

Pieni muutos, pyörii sulavammin. Niin ja tässä tosiaan löytyy myös yökiikarit, kun painaa Z:aa yön aikana.

Last edited by axu on Mon Jun 11, 2012 9:16 pm, edited 5 times in total.
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
Post Reply