Game Making Should Be Easy...
https://www.coolbasic.com/phpBB3/
Kiva kuullaVesQ wrote: Nyt olen varma siitä että oli hyvä ajatus uhrata paljon aikaa cbE:lle.
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.
Itselläni näkyy vain musta ruutu.axu wrote:Tulipa taas päivä hukattua... mutta tervetuloa tulevaisuuteen! (tai ehkä nykyaikaan )
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 )
On. Mustaa ruutua pukkaa, mutta testasin tuota valmiiksi käännettyä ja hyvältä näyttää!axu wrote:Onko käytössä cbEnchanted?
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?
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:
Code: Select all
setwindow "testiohjelma"
Tiedä sitten, katsooko kukaan enää näitä, mutta ongelma tosiaankin ilmenee useimmillakin riveillä.
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.
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