cbEnchanted - uudelleenkirjoitettu runtime
Re: cbEnchanted - uudelleenkirjoitettu runtime
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Re: cbEnchanted - uudelleenkirjoitettu runtime
Kiva kuullaVesQ wrote: Nyt olen varma siitä että oli hyvä ajatus uhrata paljon aikaa cbE:lle.
Vaikka tämä esitteleekin cbe:n ominaisuuksia hyvin, koodia lukevalle se myös esittelee cbe:n bugeja...
Listaan tähän huvin vuoksi bugeja, jotka aiheuttivat päänvaivaa eniten:
- 86: tämä aiheutti ihan kivasti päänvaivaa, että sain sen ukon kohdalleen. Tämän takia en jaksanut ruveta lisäämään vihuja ym. ihmeellisyyksiä. Käytännössä itse objekti piilotetaan ja ruutuun piirretään toinen kuva, josta seuraa yhdessä Smooth2D:n kanssa...
- 83: ruudun taustaväri on valkoinen muutamia efektejä varten, ja etenkin yöllä ukon reunoista "näkyy läpi", tuloksena valkoinen rajaus hahmolle (tämän olisi tietty voinut kiertää piirtämällä ukon jälkikäteen, mutta se idea tuli liian myöhään ). Tämä aiheutti myös paljon päänvaivaa osaksi läpinäkyvien kuvien tekemisessä, kunnes keksin, että kuvan voi alustaa läpinäkyväksi cbeClsColor(0, 0, 0, 0).
- 88: onnistuin laatimaan kuitenkin CurveAnglelle toimivan korvikkeen, vaikka miettimistä se kyllä vaati
Re: cbEnchanted - uudelleenkirjoitettu runtime
Vau. Tämä lienee hienointa, mitä pitkiin aikoihin olen tällä foorumilla nähnyt ("tähän" kokonaisuuteen kuuluu siis cbEnchanted + tämä koodinpätkä yhdessä).axu wrote:Tulipa taas päivä hukattua... mutta tervetuloa tulevaisuuteen! (tai ehkä nykyaikaan )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 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.
Re: cbEnchanted - uudelleenkirjoitettu runtime
Itselläni näkyy vain musta ruutu.axu wrote:Tulipa taas päivä hukattua... mutta tervetuloa tulevaisuuteen! (tai ehkä nykyaikaan )
Re: cbEnchanted - uudelleenkirjoitettu runtime
Onko käytössä cbEnchanted?Sly_Jack0 wrote:Itselläni näkyy vain musta ruutu.axu wrote:Tulipa taas päivä hukattua... mutta tervetuloa tulevaisuuteen! (tai ehkä nykyaikaan )
Re: cbEnchanted - uudelleenkirjoitettu runtime
EDIT: Olin vain niin laiska etten jaksanut pakata medioita mukaan
- Attachments
-
- axu_owned.zip
- (928.7 KiB) Downloaded 341 times
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Re: cbEnchanted - uudelleenkirjoitettu runtime
- Attachments
-
- cbeTechDemobyaXu.zip
- Tekniikkademo
- (1.06 MiB) Downloaded 343 times
Re: cbEnchanted - uudelleenkirjoitettu runtime
On. Mustaa ruutua pukkaa, mutta testasin tuota valmiiksi käännettyä ja hyvältä näyttää!axu wrote:Onko käytössä cbEnchanted?
Re: cbEnchanted - uudelleenkirjoitettu runtime
Joko sinulla on vanha versio cbE:stä koska valmiiksi käännetty ei eroa kun itse käännät. (Ellei sitten sinulla ole vanha versio) 0.2.0 taitaisi olla nyt uusin ja sillä ainakin itselläni toimii mainiosti.Sly_Jack0 wrote:On. Mustaa ruutua pukkaa, mutta testasin tuota valmiiksi käännettyä ja hyvältä näyttää!axu wrote:Onko käytössä cbEnchanted?
Re: cbEnchanted - uudelleenkirjoitettu runtime
Re: cbEnchanted - uudelleenkirjoitettu runtime
Se täytyy vain kääntää cbE:llä. Ei muuta eroa. Ja cbE:n saa kait dropattua ihan normikääntäjän tilalle jos oikein ymmärsin.ItzRaines wrote:Hemmetin hyvännäköistä tuotosta :D Eli jos haluan tehdä pelini cbE:llä niin se täytyy vain ladata ja koodailla sille? :roll:
Re: cbEnchanted - uudelleenkirjoitettu runtime
Ihannetapauksessa vanhat koodit voidaan sellaisenaan kääntää cbe:lle - mutta mitä isompi projekti on, sitä todennäköisemmin törmää toteuttamattomaan ominaisuuteen, cbe:n ja cb:n välisiin eroihin tai erinäisiin bugeihin. Itselläni yleisimmäksi ongelmaksi on tullut yllättäen puuttuvat fontit (tosin nehän on helppo joko korvata tai pudottaa .ttf-tiedosto pelin kansioon) sekä liian suuri suorituskyky, jolloin FPS-riippuvaiset pelit pyörivät järjettömän nopeaa ja FPS-riippumattomat yleensä näyttävät jäätyvän (onneksi tämä ongelma on helppo ratkaista)
- Konstaduck
- Advanced Member
- Posts: 267
- Joined: Sat Dec 17, 2011 3:09 pm
- Location: Nurmijärvi, Finland
- Contact:
Re: cbEnchanted - uudelleenkirjoitettu runtime
Code: Select all
setwindow "testiohjelma"
Re: cbEnchanted - uudelleenkirjoitettu runtime
Niin ja ohjelman voi sulkea escistä tai rastista vain silloin, kun saavutaan DrawScreeniin... tai painamalla Ctrl+C konsolissa.
- Konstaduck
- Advanced Member
- Posts: 267
- Joined: Sat Dec 17, 2011 3:09 pm
- Location: Nurmijärvi, Finland
- Contact:
Re: cbEnchanted - uudelleenkirjoitettu runtime
Tiedä sitten, katsooko kukaan enää näitä, mutta ongelma tosiaankin ilmenee useimmillakin riveillä.
Re: cbEnchanted - uudelleenkirjoitettu runtime
Ohjeeksi voisin antaa sellaisen että älä tee tuollaisia yhden rivin ohjelmia.
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
- Konstaduck
- Advanced Member
- Posts: 267
- Joined: Sat Dec 17, 2011 3:09 pm
- Location: Nurmijärvi, Finland
- Contact:
Re: cbEnchanted - uudelleenkirjoitettu runtime
Erittäin varteenotettava idea , Sillä eihän nuo yhden rivin ohjelmat mihinkään sovellu, pitää vain kokeilla kaikkea uudella runtimellaVesQ wrote: Ohjeeksi voisin antaa sellaisen että älä tee tuollaisia yhden rivin ohjelmia.
No, jatkan bugien etsintää...
Re: cbEnchanted - uudelleenkirjoitettu runtime
En tätä laita issue trackeriin, kun en tiedä onko kyseessä vain minun kone, mutta minulla ohjelma kaatuu, kun Smooth2D on päällä ja yritetään mennä kokoruutuun. Ikkunoidulla ohjelmalla tätä ei tapahdu. Smooth2D:n voi kuitenkin kutsua toimivasti SCREENin jälkeen, mikä kummastuttaa - Wikissähän sanotaan, että Smooth2D pitää kutsua ennen SCREENiä jos haluaa multisamplauksen päälle.
Onko tiedossa vielä seuraavaa versiota milloin? Ja jos saa toivoa, niin tämä tai jokin muu tapa vaikuttaa suoraan kuvan alphakanavaan olisi toivelistalla ylimpänä (muistin juuri, että cbeSetBlendModeAdvanced(CBE_BLEND_ADD, CBE_BLEND_ONE, CBE_BLEND_ZERO) kopioi suoraan sen mitä piirretään - alphan mukaanlukien. Ikävänä sivuvaikutuksena muuta blendausta ei sitten tapahdu tuo päällä, joten tuo toive on edelleen voimassa ). Se nimittäin lisäisi erinäisiä -ilkeää naurua tähän väliin- mahdollisuuksia. Odottakaas vain seuraavaa tekniikkademoa
Re: cbEnchanted - uudelleenkirjoitettu runtime
EDIT: Nyt siellä pitäisi olla oikein sanottu asiasta.
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Re: cbEnchanted - uudelleenkirjoitettu runtime
Aloin miettimään, mikä tarkoitus on jokaisessa kustomfunktiossa olevalla pätkällä "group = CBE_CUSTOM_FUNCTION_GROUP"? Aiotaanko niitä funktioita tulevaisuudessa järjestellä eri ryhmiin (esim. grafiikka, matikka ym.) vai onko taustalla jokin muu idea?