Jump to content
    1. Past hour
    2. Danny Burkhart

      Empire Smash

      Album for Empire Smash
    3. Danny Burkhart

      Empire Smash

      Album for Empire Smash
    4. Danny Burkhart

      Empire Smash

      Album for Empire Smash
    5. Danny Burkhart

      Empire Smash

      Album for Empire Smash
    6. Today
    7. Typically this gets implemented as a long chain of functions. Every structure you write would begin with a version number, the object's ID, and typically the size of the block that was written. Then when you decode it, it often works something like this: bool ConvertToV13( int version, const unsigned char* data ) { if(version == 12 || ConvertToV12( version, data )) { // Convert from 12 to 13. } } } bool ConvertToV12( int version, const unsigned char* data ) { if(version == 11 || ConvertToV11( version, data ) { // Convert from 11 to 12 } } } bool ConvertToV11( int version, const unsigned char* data ) { if(version == 10 || ConvertToV10( version, data ) { // Convert from 10 to 11 } } } ... It doesn't need to be a raw pointer to the data, there are a wide range of systems. Key/value pairs are fairly common, as are objects with bit packing and compression functionality. Even so, the code needs to handle migrating data from the earliest version of the structure up to the current form. In some games I've worked on, there are also failsafe objects that are part of the root data structure. For example, on The Sims, if an object no longer exists in the database (perhaps they uninstalled a downloadable object) then it gets converted into the failsafe object instead that is part of the base game and guaranteed to exist. For example, a 1x2 DLC shop door object might have a failsafe of a basic door. A 2x2 DLC blackjack table object might have a failsafe object of a basic 2x2 wooden table. Since the failsafe object is part of the common root data structure, the failsafe could be used even if the object or the decoder for the object aren't available. Serialization is mostly a solved problem, but just because it is solved doesn't mean there isn't work to do. Even when you use a great serialization library you still need to migrate between data versions.
    8. y2kiah

      Engine Design Questions

      My response does not fundamentally change. I would not consider a wrapper, but instead a boundary layer that is informed from the engine side of the code. The boundary layer can be very thin, like a set of helper functions to interface your engine components and types with the physics library types and APIs. As for why, so you have a divide between the code that is aware of the physics library, and the code that is not. If you have no boundary layer, then really you have an absence of architecture. Allowing library-specific code to proliferate through your engine's code will make it hard to swap out in the future. I do agree with @Randy Gaul that choosing wisely and sticking with it is the better solution overall.
    9. frob

      Engine Design Questions

      Not really a problem, it's more about having a deep understanding of what you're doing. Decisions need to be based on that knowledge, and those fundamental assumptions are not part of the posts. Smart pointers transmit not just the address of an object, but also the semantics of who owns the object. They are part of the design of the lifetime of objects. For most tools and libraries, the library itself doesn't actually own the objects nor do they do anything with their lifetimes. Objects are created outside of the system, they are passed to the system for use, then at a later point objects are destroyed outside the system. In this scenario the tool or library interface should not use smart pointers. That doesn't mean the user's code shouldn't use it, only that it doesn't belong in the library's API. For some tools and libraries, they DO own the objects, serving both as the source that generates them and the sink that destroys them. In this scenario it also usually isn't appropriate because the ownership of the object cannot change, the source is also the sink. The only potential problem is holding a reference after it has been destroyed, which usually indicates a software defect rather than the need for a ref-counted smart pointer in the design. Typically it is a bad idea to mix memory across APIs or libraries. As a simple example, one might be using the OS's standard heap, another might be using a debug heap, and still another may be expecting customized heaps for memory pools. Libraries might accept an allocator object when they're constructed so memory can rely on the proper pool, but even that tends to be troublesome when they come from outside sources because every organization tends to have and use slightly different functionality. As a result, when it comes to libraries the most universally consistent method is to only expose raw pointers or handles. Either they accept raw pointers which the code guarantees have a suitable lifetime, or the library itself manages the memory and exposes either pointers or handles to the outside world. Neither of those scenarios is a smart pointer. The ownership semantics that are the primary benefit of smart pointers don't exist in the scenario, in no case do the objects shift ownership.
    10. JimmieJohnsson84

      Full asteroid game tutorial

      Hi All, I've made a small update that is posted to the tutorial, the beginning of the particle system. It covers geometry instancing and explains a way to create a sort of "explosion" particle system. It is still pretty "early" and not finished yet, but I would love to hear any feedback on it. Is there something that is unclear? Have I made some misstake? Perhaps I could have done something in a better way. Let me know
    11. I'm working on a hockey fight simulator, text based. Players are rated in categories that pertain to fighting, aggression, defense, punching power, balance, etc. Pick two fighters and the game will simulate a fight with play by play, give full details of the result of the fight (who won, how many punches landed, any damage like blood or knockdowns, how long did it last, etc.) At this point, what I have is a bunch of ideas written down, and a programmer to work with who's started a bit (mostly with the GUI). I'm having a hard time ironing out the basic formula for the actual fight engine...how to determine how many punches a guy throws, whether they land, etc. I've got a lot of ideas but at this point it needs some work, and I feel like what I really need is someone with experience in this area (obviously not a hockey fighting game, but a sports game or fighting game of any type), fresh eyes to look at it and see if they've got any ideas how I can tie it all together. If you're willing to take a look, let me know and I'll send you my notes. Thanks for looking!
    12. mattkw80

      My decade long search for a game engine

      No all good. I have jumped around alot. But I think I've been playing with Toy languages. Pygame and Python Arcade for example - won't have any AAA games out anytime soon - not that that is my goal... but they don't even come close. I have been reading / watching video on NOT using OOP as well... I've got this far without it - but it seemed to be something you need to do - to write games. I will look into Data Oriented Design, see if I can figure out how to tie a game together that way. I'm fine with instances, classes, encapsulation, inheritance, etc. - done many books on it - but I get stumped when trying to make the whole thing come together. Seems like the long way around to get the scopes to 'see' each other when needed in game. I'll look into Data Oriented Design and maybe skip the OOP. Thanks
    13. Gnollrunner

      Engine Design Questions

      Isn't it great when everyone gives you conflicting advice? 😀
    14. Just wanting to know for performance purposes.
    15. Schzophr

      Mon Card( ! )

      Recent change removed TOON and ELEMENTAL added ELEMENTAL material card play. Example cards... Starry Blue Shadow/ELE/5 Attack 10 Defence 10 If this card is on the field with Starry Red Shadow, you may summon one MAN type monster of level up to 7. Starry Red Shadow/ELE/5 Attack 10 Defence 10 If this card is on the field with Starry Blue Shadow, you may summon one MAN type monster of level up to 7. Mystery Man/MAN/7 Attack 16 Defence 16 If this card is summoned by effect of Starry Red Shadow and Starry Blue Shadow, it gains 4 attack; while this card is face-up on the field, you may send from your hand to the graveyard any Starry Red Shadow or Starry Blue Shadow to gain 2 attack. Grandmaster Martial Artist/MAN/8 Attack 20 Defence 25 If this card is special summoned by way of Master Martial Artist it has this effect: inflict piercing damage to your opponent 's LP when battling defence position mon cards. Master Martial Artist/MAN/6 Attack 14 Defence 18 If this card is on the field, wait for your opponent's next turn to finish and then you can tribute this card to summon Grandmaster Martial Artist.
    16. You mean -1.00020003 value, that'd be [4,3] value, it is the actual tz value, you are seeing the transposed version of the matrix in the output spectation .
    17. CTGames

      Schedule of Tournament

      Ex. We have two divisions (A + B) with 5 teams in each of them. Each year all teams in division A will have to meet one team from division B on a rotating basis. Year 1: TeamA1 - TeamB1, TeamA2 - TeamB2, TeamA3 - TeamB3, TeamA4 - TeamB4, TeamA5 - TeamB5 Year 2: TeamA1 - TeamB2, TeamA2 - TeamB3, TeamA3 - TeamB4, TeamA4 - TeamB5, TeamA5 - TeamB1 Etc. That is easy enough to build. The issue is if each team will need to meet two teams from the other division where one of the games are "fixed". With fixed I mean that they will always meet that team. So if TeamA1 - TeamB1 is fixed then TeamA1 needs to meet TeamB2 year 1, TeamB3 year 2 and TeamB4 year 3 Let us then say that TeamA2 - TeamB2 is also fixed then TeamB2 will meet TeamA1 year1 etc. I hope this makes sense
    18. Randy Gaul

      Engine Design Questions

      No, don't use smart pointers in your API. This is a beginner mistake in terms of API design. I don't recommend wrapping your physics up. Creating a good physics wrapper is quite difficult, and you'll end up just wasting time unless you make it fairly high level. If you create higher level wrappers this increases your chance of success. The worst case scenario is you create a low level wrapper that shrink wraps the physics API you are trying to hide, unable to generalize to other physics engines. This is much worse than simply using a physics API directly. Yes, there are downsides to creating higher level wrappers. The biggest downside is these wrappers are never going to be strong representations of the underlying API without a lot of competence going into the implementation and design. Typically pieces of the underlying technology break off and disappear, such as error reporting or special case features only available for a certain technology but not others. In my opinion picking a single good third party technology is much more important than trying to create an abstraction layer over them. Typically people try making abstraction layers without the skill to make a good one, and end up wrapping poorly chosen libraries under poorly thought through abstraction layers, resulting in a terrible game engine. If you wanted an example of a good engine implementation with wisely chosen 3rd party libraries I suggest looking into the source and design of Love2D.
    19. Here's the code I use: glLoadIdentity() glOrtho(-1,1,-1,1,0.01,100.0) print(glGetFloatv(GL_PROJECTION_MATRIX)) Here is the output: [[ 1. 0. 0. 0. ] [ 0. 1. 0. 0. ] [-0. -0. -0.020002 -0. ] [ 0. 0. -1.00020003 1. ]] Where does the value for [3][2] come from, when https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glOrtho.xml explains the value should be 0?
    20. turanszkij

      My decade long search for a game engine

      Just skimmed through the post quickly, what comes to my mind is that in 10 years, you could have already built a game engine and a terraria clone along with it (since you say that 10 years ago you already had 10 years of programming experience which is a lot). And why put so much emphasis on OOP? These days it is getting less and less popular, look into data oriented design instead. Anyhow, what matters more than anything is that you stick to one thing and finish making the game instead of coming up with excuses. (Sorry I didn't want to sound rude)
    21. turanszkij

      What GI is usable right now?

      There is a virtual point lights method that Naughty Dog used on Last of Us (I think). Works something like shadow maps, but save the color buffer from the light perspective along the shadow map and each pixel acts as a small point light.
    22. There have been some recent changes, but I might have found the problem and made some further changes. Let me know if you continue to see the issue.
    23. Vilem Otte

      What GI is usable right now?

      My own game engine uses Voxel Octree based GI. If I'm not mistaken some other available engines do support it (Lumberyard and Cryengine). Each implementation I have seen differs a bit though... (including mine). The solution is somewhat *scalable*, allows for fully dynamic objects and fully dynamic lights. Small shameless self promotion (results): Now, few notes for voxel based global illumination: While it allows for static and dynamic geometry, you still have to voxelize it ... and generate interior nodes for voxel octree - and while this gives huge advantages (speed of cone tracing, lack of noise compared to path tracing among others), it has some problems (you can have details only as small as big are your voxels). Handling large scale scenes is not easy (there are some approaches - having 'cascaded voxels', or just simply having only some area around camera voxelized), so ... possible, but with some pitfalls While sparse voxel octrees sound nice (and could possibly scale even to HUGE scenes), using 3D texture with mipmaps (which is an octree!) outperforms it by a lot ... the only drawback is higher memory usage Using it for sharp reflections or caustics is not feasible - even at high resolutions sharp reflections will look bad (especially on spheres and smooth surfaces), additionally it is more heavy on performance than GI, on the other hand it is awesome for smooth reflections Without using of temporal filtering, it is not possible to use dynamic objects without flickering - see the following 2 videos: Due to re-voxelization of objects flickering appears due to limited resolution of voxels. This can be solved by doing temporal filtering, although can start ghosting for faster moving objects Additional notes on performance: Resolution of your voxel data matters - increasing it doesn't just increase memory usage, but also increases performance required for traversal Using GI with MSAA can be overkill (I've used it in those 2 images) ... you may consider having GI calculated in half resolution buffer, and doing bilateral upsampling As for implementations - there are multiple papers you can find (original one is https://research.nvidia.com/sites/default/files/pubs/2011-09_Interactive-Indirect-Illumination/GIVoxels-pg2011-authors.pdf), a nice description was also done by @turanszkij (here - https://wickedengine.net/2017/08/30/voxel-based-global-illumination/) Time for real performance numbers - so here is an example with timing information: So, to explain the numbers you are concerned about: Voxelization - is done every frame for whole scene (in editor I don't flag static voxels, in runtime you can) GlobalIllumination - is voxel cone tracing step for calculating GI (you trace multiple cones per each pixel) Reflection - is a voxel cone tracing step for calculating reflections (one cone per each pixel) AmbientOcclusion - is voxel cone tracing step calculating AO (not necessary - I was just experimenting with it, multiple cones per each pixel) This one was with 256 x 256 x 256 voxels, and Crytek's Sponza atrium model (whole was inside the voxelization box). So - if you would dynamically voxelize and compute GI - you can get under 7.5ms (GPU used for this was AMD Radeon Rx 590).
    24. atri

      Particles demo

      Source code on my github https://github.com/danilw/godot-utils-and-other Control: Use Mouse in game windows, click and hold Left Mouse to move(left right in game windows). Use Right Click when bar on right side 100% full. Gameplay: Points(timer) on right top goes to 0 when "HP bar"(left) is 0, so gameplay is - dodge objects that come on you, by controlling this ball to get maximum points. (this is small just demo, gameplay is very minimal, fly is endless) Web version: You can launch web version of this demo only using Firefox web-browser Click this link to launch bw_game_win64.zip
    25. You could interpolate the position from the tile position to the basket position. That's the only method I can think of.
    26. SephireX

      Engine Design Questions

      @y2kiah The engine api would only expose physics components and nothing about the physics engine or a wrapper. The components are themselves a wrapper for the user. The physics components would be written to suit the game programmer. My question is should the engine code talk to the physics engine or a physics engine wrapper and why?
    27. Schzophr

      Mon Card( ! )

      Hi - thanks for your interest. Would you like to be part of a community project, where we will design and create Mon trading card(s). I have a good idea about our objective(s) and I will be a great asset to the squad. We will build the card game on paper, search for investors(I am one) and perhaps start a Kickstarter after we've finished a prototype. We will definitely ask the community to contribute card artwork.(I can draw.) Project Desc Designing game logic in a word processor and drawing correlate pictures. Leave a message here or Schzophr@protonmail.com My idea of Mon Card is the perfection of monster card games. It will be like YuGiOh game logic with art similar to Pokemon, but darker and more adult orientated. At the moment I have decided the game board will be 4x4. I have designed types as follows: FISH field orientated effects. BIRD summoning orientated effects. MAN hand playing. INSECT special summoning. FAIRY support and suppression. ELEMENTAL charge and chaotic effect. MACHINE type and card number effects. TOON material card play. FIEND grave play. I have implemented mix summoning between any combination monsters on the field if all cards are in the hand. The game will play like YGOTCG with one type of non monster card called a material card, with 100 LP and cards that attack for around 5 on average (without effect); this gives players time to place down greater cards and justifies high LP cost cards. Thanks for reading!
    28. Ah right sorry, thats me misunderstanding.
    29. The only point I'm trying to make is that you can use std::vector for the second approach as well - you don't have to use a raw array or clean up the memory manually yourself.
    30. Ah right so its me not being clear, I have Texture data it can have n number of face and each face can have n number of mips. First approach: Was to use a std::vector<std::vector<Byte> > note that the vector contains a vector of bytes. This means each surface and each mip gets its own vector. So i can quickly jump into it using some arithmatic: return (face * (mFileInfo.mArraySize - 1)) + mipLevel; The problem with a vector of vectors, is i have to load up a raw blob then extract each surface and set each vector individually, its not that bad but its still a double loop that doesnt need to be. Second Approach: Just store a single Byte* blob; this means i can load from a binary file in one huge chunk, the problem is accessing individual surface or mip information quickly. I would need to skip a byteOffset into the array to get the starting pointer of the surface, this means doing some math to calculate the size of each surface and each surfaces mip chain to skip to get to the surface i need + the mipByte offset into the individual mip chain for that surface. That requires a loop to accumulate the bytes for the level which sucks. Clarity Note: All of this is contained in a class that does it all for you, it has release methods and cleans its self up regardless of the method used. The focous is mainly just on the effecient access to individual surfaces levels.
    31. As someone who works better with books, https://www.manning.com/books/unity-in-action-second-edition has been my choice. Following Rutin's comment above, because everyone seems to want to get you making cool things ASAP, some topics get the short shrift because they're not as sexy. The three things that I wish I had known well enough much much earlier: 1. The GameObject, gameObject, component relationship and hierarchy. 2. World space, local space--especially, primarily how they relate to cameras, canvases. 3. When you get have a reference to something and when you're just dealing with a copy that the engine has created for you. (Just for perspective, I'm a self-taught C, Java programmer who spent most of my career not writing code. A terminal amateur, but not a total newbie.)
    32. Hey everybody, Was looking for some advice... I've found myself trying to find a game engine I like, and 10 years later, still have not found it. My goals in this: 1. To build a Terraria style 2d crafting game - only because I want to. (Not looking to go commercial). 2. To finally learn OOP properly. 3. To do all of this within notepad or a light weight IDE. I've been programming for 20 some years, (business apps) - have a ton of working business/forms software out in the world - but I've always avoided OOP - and have never been able to wrap my head around it - specifically - the part I don't get / don't like - is I seem to have to create every single instance of an object there will ever be - in a main loop - and then bend over backwards getting all the other instances to interact with all the other instances. But I'd like to finally 'get this'. Pygame helped me come close. If anyone has a book or resource they can recommend - that gave them an 'Ah-ha!' moment, please suggest it and I will read it. I can program in C, C# (though my OOP skills suck), Python, VB, and LUA. Here's a small sample of the engines I have tried: Pygame: I've had the most success with this - but eventually hit a performance wall. I like that you can use notepad or something light weight, and get alot done in a short time - but as far as I know - 'Super Potatoe Bruh' seems to be as high as you can fly with this engine. Python Arcade: Also had alot of luck with this - but then my Linux version broke - and with it being a one man show, it doesn't seem to be the direction to head long term. Unity: I don't like that it's controlled by a company via login - looking for something I know will be around for a long time for certain, where I can't be locked out someday. GoDot: Seriously considering this - but worried I will be missing out on concepts that they hide from the user... pretty sure this is not an engine for someone wanting to finally learn OOP done properly. Don't super like that it's in an IDE, would prefer to be working in flat files. Lua Love: Also had alot of good times here - but eventually hit a wall. I don't particularily like the language and would prefer to be working in something closer to what I see at work... ie: C#, Python, etc. Monogame / C#: Got pretty far here too. Then hit a wall trying to create a button, lol. Yes a button. Seemed to me at the time - hard things we're easy and really easy things we're undocumented, and hard. Though terraria was made in this as far as I know - so I know then engine's more than I really need. Python Panda3d: Was able to get pretty far in this too - but the limited content pipeline made it tough, and I'm more interested in 2D. Python Pyglet: Found the support to be lacking, harder to find examples and community help at the time. Anyway - TLDR: Can anyone suggest an engine something else I may not have tried? I am willing to learn C++ or Java if need be.
    33. For the moment at least I'm only referring to how the raw memory is managed. In your original post you mentioned no manual memory cleanup as an advantage of the first approach. Further, you have this: mData = new Byte[mFileInfo.mByteCount]; Which suggests that what you have in mind for the second approach is a raw array requiring manual cleanup. The only question I'm asking (at the moment at least) is why not use e.g. std::vector for the second approach as well. Everything else could be functionally the same, so it's not a matter of changing the overall approach. It's just that there doesn't seem to be anything about the second approach that would prevent you from using RAII. Another way to put it is that the issue of memory management appears to be orthogonal to how the data is stored functionally, so I'm not sure why you wouldn't use RAII for both approaches. Apologies if that's still unclear.
    34. Do you mean pre-fill a vector with pointers into the array when i initialize the image? if so yes that would work. So ill go do that now ha.
    35. Other issues aside, why not use std::vector for the second approach as well?
    36. Something similar to this was done back in 1991 by Omnitrend Software with it's "Interlocking Game System". The first game "Rules of Engagement" had you flying around in your starship and doing starship captain-y things. Squad based tactical battles were then auto-calculated if you sent your away team to fight on another ship. However, if you owned Breach 2, instead it would fire up Breach 2 and let you fight out the squad based mission. After the Breach 2 scenario was completed, the results were reported back to Rules of Engagement where you continued playing. It's not quite the same thing, but I thought it was super cool at the time and relevant to the discussion. Right now your question is a bit too general to give any meaningful answer. Basically the companies would agree on an API for what data to communicate and how to communicate it. But the problems to solve would be very different for say two First Person Shooter games. Or one is a first person shooter while the other is an amusement park sim.
    37. It could be done, but it would need to be a special circumstance: I could almost see it as an eSport where players from one game compete in the with some special analogous features created just for the event. As for the business side, I think of the Marvel vs. DC event where each company was responsible for publishing for 1/2 of the issues, in a way that was transparent to the readers. Artistically? This could be blast.
    38. Whoops, sorry i fixed that, i mostly copy and pasted the vector version and re-wrote it on game dev for the examples. I have been messing with 2 versions one that is a raw memory blob, and one that uses a vector, i go both to a stage where they work fine, but a raw array would be prefferable if i can get rid of that mip offset loop.
    39. I didn't dig into the details, but I'm wondering if you have a reason for not considering an RAII wrapper (e.g. std::vector) for the second option ('Byte* mData'). Actually, I guess I'm a little confused, because you have: mData = new Byte[mFileInfo.mByteCount]; But also: if (mData.size() == 0) { return nullptr; } What is the type of mData? You mention no manual memory cleanup as a pro for the first approach, which suggests you have a raw array in mind for the second approach, but the use of 'mData.size()' seems to conflict with that. Apologies if I'm misunderstanding or misreading your example code.
    40. DrDeath3191

      Projectile Motion not behaving as expected

      RK4 seems to get me to the same result as well. That settles it; integration is the issue. I think I'll stick with semi-implicit Euler with the subtraction for now; RK4 is kind of excessive, and with that initial subtraction I get similar results anyway. I will reevaluate my decision if I continue to have physics issues. Thank you very much for your help!
    41. Stalker_Fox


      Lootworld - a voxel indie game with roguelike and old school FPS elements. Started out as a Minecraft clone, but without the emphasis on mining, building or crafting. The game does include this sort of mechanics, but only as an optional feature. The gameplay is primarily focused on exploration, fighting monsters and - of course - sweet, sweet loot. Other features included in the current version of the game are: - random room generation; - classic FPS combat mechanics (no need to reload, cover behind corners or aim down the sights); - permadeath. This project is WIP and gets updates periodically. My Patreon page: https://www.patreon.com/cstalker
    42. Howdy, So ive nearly finished my image libary for loading and converting textures, but im wonderingabout a more effecient way to get surface data. These are the 2 storage methods that come to mind: std::vector<std::vector<Byte> > mData; Byte* mData; Vector Pros: -Can access any surface/mip easily: Uint32 Image::GetSurfaceIndex(Uint32 face, Uint32 mipLevel)const { return (face * (mFileInfo.mArraySize - 1)) + mipLevel; } -No manually memory clean up etc. Cons: -Cannot load Blob data in single call, must run loop such as: for (size_t f = 0; f < mFileInfo.mArraySize; f++) { Uint32 w = mFileInfo.mWidth; Uint32 h = mFileInfo.mHeight; for (size_t i = 0; i < mFileInfo.mMipCount; i++) { numBytes = GetSurfaceByteCount(w, h, mFileInfo.mSurfaceFormat); std::vector<Byte> cpyData = std::vector<Byte>(data, data + numBytes); mData[GetSurfaceIndex(f, i)] = cpyData; } if (src + numBytes > end) { Reset(); return; } src += numBytes; w = SF::Max(w >> 1, 1); h = SF::Max(h >> 1, 1); } Byte array Pros: -Loading is simple: mData = new Byte[mFileInfo.mByteCount]; memcpy(mData, ptr, mFileInfo.mByteCount); Cons: -Getting ptr to start of a surface becomes inefficient, especilaly with mips as it requires a loop. Byte* Image::GetPixelPtr(Uint32 face, Uint32 mipLevel, Uint32 x, Uint32 y) { if (face > mFileInfo.mArraySize) { return nullptr; } if (mipLevel > mFileInfo.mMipCount) { return nullptr; } int w = mFileInfo.mWidth; int h = mFileInfo.mHeight; int mipBytes = 0; for(int i = 1; i < mipLevel, i++) { w = SF::Max(w >> 1,1 ); h = SF::Max(h >> 1, 1); mipBytes += GetSurfacebytes(w, h, mFileInfo.mSurfaceFormat); } return &mData[GetSurfaceOffset(face) + mipBytes + ((y * w) + x) * mPixelByteSize]; } Note that GetSurfaceOffset() calculates the offset to the start of a surface, includeing the offset of the previous surfaces mips. Does anyone know of a better way to store surface arrays with there mips in a single blob thats effecient to access? Thanks
    43. Hello, and welcome to this weeks Dev Diary This week I have some more feature reveals for the upcoming RTS-Citybuilder. This update was pre-written on Tuesday last week, as I have been on vacation since 20th of June (20.06.2019) and had to prepare several non-project related things for it, before I could relax at all. But First though, a little recap from the 23rd Dev Diary; Multi Tiered Leveling System - a semi-balanced leveling system, which makes leveling feel more rewarding. Comprehensive Item Upgrades - Any sword, shield, or armor piece can be upgraded through various means. No more useless low level armors. Multi Tiered Spells and Abilities - Even the lowest level abilities can be upgraded to have meaning in late game. No more nearly useless low level spells. Improving Enchantments - Any item can be further improved by enchantments and existing enchantments can be re-imbued to upgrade the effect to match your level. a Very Rare and Hard To Get OP:d Character Class - This needs a combination of luck and skill to gain. Though even the OP:d character does have it's cryptonite. Tiered Weapon Levels - Just like in MMOs and RPG games in general, Weapons and Armor will come in many tiers, from common to rare/unique. In this game, Unique really means Unique, in that it literally has only 1 piece existing in the game, with no possibility for anyone else to have one like it, unless the founder of such item decides to sell it. This will be really hard to balance, but I will still try this out in practice. As the above list might have hinted, i wish to try and make an RTS game that has similar RPG elements that Starcraft and Warcraft 3 has, as those had leveling heroes and additional items for them to use and improve their stats. In addition to the above list, I would like to see these features and mechanics in the final product; Units consist of multiple characters - I will start at the simple structure of one unit = one model, but eventually I would like to make it look similar to "Lord Of The Rings; Battle For Middle-Earth 2", where units consisted of 8 - 24 or more soldier models, to make the battles feel more immersive and be easier to control. Leveling Units - Not just leveling heroes, but also leveling units. This has been around for a long time and can be found from many RTS titles. Heroes are Born, not Trained - Like I mentioned earlier, it would be neat that from the ranks of your soldiers, heroes rise from your ranks according to their achievements. I'm still torn abut how this should function, but most likely a probability mechanic could make this work the best - a degree of luck and skillful use of units would both be a factor then, instead of the player just being a skillful tactician to pull it off. I also have more flavor ideas for how to make this an even more interesting mechanic, that I will not be revealing any time soon (or maybe I will) a Guild System for Hero Units - For an example, lets you make balanced or unbalanced Hero units to either use in your PvP skirmishes or making quests that earns them gold and increases their fame for every completed mission. a Fame System - Eventually, this will include a Score Board, where players can see what rank they them self and others are. Also additional sub features for this mechanic are on the planning paper. a Living City - just like in City Builder -games, you must have a functional village to finance your campaigns. This means that there are to be several vocations, housing types and sizes and infrastructure choices. At first this mechanic will most likely be just static buildings generating money on specific intervals, with no need to assign a worker for them. I think this is just about enough for feature plans for this time. keep in mind, that even though I plan big like this, I do realize, that as a first timer I need to start simple and build it up one feature at a time - just as a disclaimer. Also a note about my project's YouTube channel; when I continue releasing footage about the production of any of the games (and possibly even vlogs at some point), I will be adding their links to the following weeks Dev Diary, as well as continue making LinkedIn, Twitter and Facebook posts for every released video, as soon as they are uploaded. This is it for this weeks Dev Diary - Thank you for reading and I'll see you on the next one And as always, you can check out every possible mid week announcements about the project on these official channels; • YouTube • Facebook • Twitter • Discord • Reddit • Pinterest • SoundCloud • LinkedIn •
    44. RoKabium Games

      Something Ate My Alien

      You are the AI of a very skilled mining ship called Antalasia, currently cruising the remote solar system Bitiax looking for mining opportunities. While peacefully scanning for elements on the nearest planet Metis, Antalasias systems are suddenly taken offline and the ship turns dark for a second before being booted up again with all computer screens flashing “Intrusion detected”. Under control of a pirate ship, you must send down your faithful aliens to the planets below and battle to find the loot that the pirate is demanding! More In-depth: A 2D digging, adventure puzzle game with some retro feel reminding us of the amazing first digger games such as BoulderDash that we knew when we were younger. That is the type of game me and my partner wanted to create as our very first joint project for our studio “RoKabium Games”. Both being avid gamers we hadn’t seen many games in that genre that focused more on the actual digging being the main element rather than being an action plat former or survival and crafting sandbox with the occasional digging part. So last year we started working and planning for our game “Something Ate My Alien”. We knew early on that for a 2-person team to pull of creating a whole video game we had to have a planning structure for a game that wasn’t too large or complicated. So early ideas of making a full blown 3D, interactive, huge sandbox with multiplayer alternatives was just not gonna be a good starting point. We scaled down the idea of a huge concept and decided to rely more on our existing skill set in the game industry. We decided to focus on a more manageable core of that we ourselves would like to play and what we believed other people would also enjoy to play. A finite game story of about 10 hours game play from start to finish, something fun and charming with just the right amount of action/digging/puzzles ratio. We also knew that our game would show quality and engaging graphics being hand painted by myself and it would all be done in a style that would ooze retro, hand painted, uniform and a beautiful game with easy to navigate and clear game mechanics and graphics. We wanted it to be a lighthearted but a addictive little gem suitable for a both younger and a more adult audience. Our game would be exactly how we envisioned it since it would be the labor of our own vision, not working for anybody else. As a digital artist with several years experience in working for game studios and painting game assets, backgrounds, icons, characters etc and being part a team of other game developers, I did have some much needed experience in understanding just how much art is needed for a complete game. Even the smallest game contains more art pieces than you might think. For example, for every animation you do in 2D graphics you have to paint a new image and each animation can have anything from a very basic 5 frames up to 30-40 frames. So for each enemy you draw for example you need to also draw that enemy having an idle position, a walking cycle, a running cycle, an attack cycle, a dying cycle, a jumping cycle etc. So for one single enemy in a game you might have to produce up to around 100 images. Add to that, our game would have at least 10 different enemies for each level and we have designed our game to have a total of 4 levels. Each game level or planet as it is represented in SAMA is built up with a set of ground tiles that has seamless tiling for a smooth and more realistic look. For each tile-set I’m designing 6 variants so the illusion of random and unique ground that looks like it is not repeating. Each world has 4 unique tile types to add variation for the digging mechanics and giving the player more varied game play. On top of normal ground tiles we have variants of 20 unique decals and edges created to blend different types of ground together better and adding even more realism. Inside the ground tiles you can as a player find all kinds of loot. So far I’ve designed 25 unique minerals, 9 different type of gemstones, 8 different kind of gases (each with animation cycles), 28 types of artefacts, 12 different types of complete fossilized animals which consists of 62 separate type of bones to find. There are teleporters, oxygen stations, health hearts, energy boosts, lamps to light up the dark caves, secret doors with puzzle areas to solve to get rare loot or upgrades. There are icons for every item and enemy you can find. All of these visual elements are hand painted by myself and still this is just the bare base of each planet level. When designing the UI for the game we both wanted it very neat and tidy look, using our main colour scheme of blue-green-warm yellow that I first came up with during the conceptual art at the beginning of the project. I also wanted some elements to have somewhat of a computer screen/electronic look with glowing outlines to emphasize that you as the player are the actual AI of the ship and the UI you see is the computer interior. While continuing painting and designing the artwork for SAMA we are getting closer to a first Alpha of the game and we are hoping that with the help of feedback from gamers around us and people interested in our game we can develop a game that is incredibly fun and beautiful to play. See more over at our website: Somethingatemyalien.com or Steam page at https://store.steampowered.com/app/1047870
    45. RoKabium Games


      Images & screenshots from "Something Ate My Alien" game by RoKabium Games.
    46. Makusik Fedakusik

      What GI is usable right now?

      @Frantic PonE, thanks. I know all this stuff. Here is good overview too @Tessellator, I read this week ago. Slow camera, no "far away" cutscenes, bad things with geometry smaller than voxel cell. Well, finaly, I see that Tatarchuk's RPT and there variations by Ubisoft and Treyarch works once.
    47. Tessellator

      What GI is usable right now?

      I had a quick read through this when the GDC 2019 papers appeared online: https://www.gdcvault.com/play/1026469/Scalable-Real-Time-Global-Illumination They seem to have taken a pragmatic approach to dynamic GI and have to deal with large levels (64km x 64km). There's also a blog post about the same on the developer's web page: https://enlisted.net/en/news/show/25-gdc-talk-scalable-real-time-global-illumination-for-large-scenes-en/#!/ Some food for thought! T
    48. akshayMore

      Side-Scroller Movement in a Tile-Based Game

      I am working on this game: I assume that this is the type of character movement and the side scrolling is what you want. I hope I am right. There is character position and there is world(map) position. Let us say that at the beginning the character and the map is at origin (0,0). When character moves left , the map moves right by the amount at which character has displaced from origin. Similarly , when character moves right , the map moves left. when character moves up , the map moves down. This gives an illusion of scrolling in a tile-based environment. Try keeping tile objects under one class (say Map). Now give the map a position vector variable. Now let all the tile objects use the map position as reference point(or origin). Also, It is better to keep a track of player position on screen and player position on map. It will help.
    49. At this point it's no longer two games. Instead it is one game that contains both games within it. It is highly unlikely (I would even say "impossible") that two games from two different companies are compatible enough that they can be combined into one game like that. One viable scenario that I can think of is that the first game has a feature (the portal, for example) that shuts down the game and runs the other one, possibly with some server to server magic that causes the other game to acknowledge that you came from the first game when it starts. But you would still have to wait for the game to shut down, return to desktop, loading of the second game, possibly logging in to it, it wouldn't be as immersive as "step into a portal and end up in another game".
    50. Hello. I'm creating a Match3 game in Unity and I have some question about it. When player deletes some tiles from the board they should fly into a bascket. Can I create ONE animation clip such that initial value of animation (tile position) will vary but the destination value (bascket position) will stay the same. This is screenshot of the similar game
    51. LorenzoGatti

      Ideas for RTS resource generation?

      Fair placement usually means requiring each player to make a similar effort to get the same resources. This can be easily achieved with an exactly or approximately symmetrical map; how symmetrical depends on the details of what's needed to get resources. For example, with some kind of unattended mine you might need to balance the sum of the time required for a flying scout to see the resource site and the time required for a builder to walk there and begin construction (since the difference between players is how soon they start getting the resource) while with workers that transport little parcels you might need to balance the size, throughput and latency of their queues, which depend on details of terrain and obstacles along the way.
    52. I can confirm this. I am using Firefox Quantum 67.0.3 (64 bit). A version diff off 0.0.1 @Gnollrunner. Maybe this is just a Firefox issue? Greetings
  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!