Jump to content
  • Advertisement

Iltis

Member
  • Content Count

    22
  • Joined

  • Last visited

Community Reputation

13 Neutral

1 Follower

About Iltis

  • Rank
    Member

Personal Information

  • Role
    Programmer
  • Interests
    Education
    Programming

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Iltis

    OOP is dead, long live OOP

    I was under the assumption that the code was meant to be reusable. If you only want to write one game with it, then I agree, it is a bit much. Just to clarify: I meant adding and removing existing components at runtime, not creating completely new ones (although that might be interesting in some cases)
  2. Iltis

    OOP is dead, long live OOP

    A problem with your take on ECS-like in OOP: Refering to this: The implementation of an - let's call it - *entity*: struct RegularObject { PositionComponent pos; SpriteComponent sprite; MoveComponent move; AvoidComponent avoid; RegularObject(const WorldBoundsComponent& bounds) : move(0.5f, 0.7f) // position it within world bounds , pos(RandomFloat(bounds.xMin, bounds.xMax), RandomFloat(bounds.yMin, bounds.yMax)) // setup a sprite for it (random sprite index from first 5), and initial white color , sprite(1.0f, 1.0f, 1.0f, rand() % 5, 1.0f) { } }; The composition of the entity is fixed at compile time. Using pointers or booleans to invalidate a component, it is possible to enable and disable them at runtime. However it is impossible to add or remove components other than those specified -> Runtime Composability is gone. You have to add a member for every component you want your entity to ever have over the course of the game at compile-time - or you fall back on inheritance and add a Component class that every component needs to inherit, leaving you with run-time casts. Some of these components might even only be used at one point under a certain circumstance, though, so that's wasted memory, even if you only use pointers. Furthermore, if you end up implementing a new component later on, you have to revisit every Entity/Object/whatever that should have this component, and add it manually. Some implementations of relational data/"ECS" rely on runtime composability, as they configure systems not by taking entities as input, or - worse - entities working on themselves, but by having e.g. a Storage-Vector (not necessarily a Vector, ... ). This Storage-Vector is coupled with a BitSet, holding all entity ID's that have this component, and when the system runs, it skims through the BitSets of the components it requests and finds those that belong to the same Entity, and ONLY picks them up if every component is present on this entity.
  3. Iltis

    2D Game Programmer Required

    If you want people to be able to find you on Discord, #2717 is not enough, there should also be a Tag -> "SlimShady#2717" or the likes of that. While I'm generally interested in your game idea, there is too little information on it here. As previous replies suggest you might want to draft a GDD (GameDesignDocument), at least very roughly. Otherwise potential programmers cannot know how big your project is (can a solo-dev handle it, or does it need a team?), or what platform you target (not every programming language and tool can target every platform). Is it meant to be a Desktop game on Windows, Linus or Mac, or is it meant for mobile devices on Android, iOs?
  4. May I ask the reason why you would want to make everything from scratch? The reason is very important to make good suggestions! It sounds like you want to learn programming by doing everything, while not having much experience at programming/art to begin with. What you want to do actually has a name: Not invented here syndrome. Let's put aside the typical sarcastical comments about how you'd need to make silicone from sand, create your own chipset and architecture and own programming language, operating system, etc. We are, depending on the quality of game you want to achieve, talking about several months, years, even decades or centuries in man-hours of work for a 3D game. The artistic side, the story telling and all that stuff also takes time. It's not just the programming! A simple mobile game, which uses premade libraries, frameworks and so on, takes a small team several months to create in full-time. I assume you know how little content most of the mobile games actually offer. Take away the premade libraries and frameworks and you already reached at least a year, most likely several, of work. A game like TLoZ Breath of the Wild involves dozens of developers working over several years, leading to dozens of years of man-hours of work. [It should actually be in the regions of several centuries, but i don't know how many people worked for how long, so.... yeah.] For solo-devs you can generally say: The scale of a Zelda game is out of scope. EDIT: Assuming art is also part of the doing yourself stuff ( @Rutin sorry, should've stated that more clearly ) One example of a veteran programmer creating everything from scratch would be Handmade Hero (putting aside controversy about his programming style). 478 videos of on average 1.1 hours length amount to approximately 66 days of 8-hour work to get to the current state, and it's far far far from finished. In case you really do not want to use anything: Since you are only left with the C++ standard library, the Operating System's API (multiple, if you want portability) and maybe a graphics API (OpenGL, DirectX, Vulkan, ...) I would suggest to start with a text-based RPG, on a single platform (maybe unix based, since those can at least easily be ported between different unix distributions later on). Text-based means that the game happens inside a console window using ASCII art, leaving the rendering to the OS, instead of writing one with the graphics API. One of the best known examples might be Rogue [from 1980]. There's a whole branch of game development named after this game on reddit. In case you want to learn game programming: Either grab seperate libraries for different tasks (rendering, input, sound, animation, ...): hard a framework (SDL2, SFML, ...): less hard an engine (Unity, UE4, Godot, ...): medium Even if you use an engine like UE4, and software like Maya for 3D modelling, making a game the size of Ocarine of Time as a solo dev still takes a very long time. You have to compose music, model every mesh, texture every model, animate players and NPC's, write a story, .... As well as creating the game logic of course. (Which I asssume is what you are actually interested in learning)
  5. Iltis

    Professional Game Programming

    No answer yet? That's quite rare. Take the following with a grain of salt. No warranties. As you've already figured out, there is nothing like a universal qualification to get you into AAA game programming. Depending on the programming tier/level/field you want to work on, different experiences are required. Quoting EA (the *insert what you want* development studio) for a Software-Engineer position: "Bachelor degree in Computer Science or related field, or equivalent training and professional experience". If you already study, or have studied, Computer Science: You're good to go. If not, the second part comes into play: "equivalent training or professional experience". The following doesnt care what engine or framework you use, or whether you've written everything yourself. What matters is that you have something to show. This could for example mean that you have already released games, either as a solo, or part of a group (where your work is noticeable), the more successful the better, not necessarily monetized absolved an internship at the same or another game dev studio, including indies contributed source-code to open-source projects (e.g. via merged pull-requests) of significance (only changing variable names or adding comments for readability is not enough) written code in a field closely related to the position you want to join (Should clearly not be a simple rewrite of something already existing like the OpenGL tutorial): a Renderer, or a wrapper API for multi-backend rendering a collision framework platform abstraction layer ... Another very realistic option is having connections to workers in the industry. Those can either come from family and friends, from game-jams or hackathons you've participated in, or something simple like leaving an impression on the online lecturer of a programming tutorial or a professional roaming the forums, visiting an exhibit, .... Should you already have a company in mind that you would like to join, try to find out which programming languages, frameworks or engine they use. The easiest example would be Epic, which uses its own UE4 and mostly C++. Working for a company like square enix or nintendo as a non-japanese might prove more difficult than joining an american contendor such as EA, or the french Ubisoft. There's also companies like Havoc, that do not make games themselves, but provide necessary frameworks used by game companies. Landing a job there could eventually allow you to switch over to a partner company.
  6. I can see what your artist means. Without shadows it's pretty hard to tell at which z-level your red box is currently at, since it could be at the high front, or low back. With shadows it should be much clearer though
  7. The screenshot links appear to be dead (at least for me), which could be Discord's fault. Using a discordapp-link is not a good idea, instead upload them from your PC.
  8. It may or may not be a helpful resource, since it's a beginners introduction, but the very first page already hints at how to avoid this: SPECS It does not have a map in the entity. The entity is just an ID (+generation if the ID was already used but deleted and a new Entity with the same ID gets created). Caveat: It's in Rust, but the basic idea should work in other languages,too. How it works: - Every component type defined ( independent from how often it is used ) has a vector containing all ID's of the entities that have a component of this type. - you can `.join()` different components together (using a BitSet), and for all involved components the vector described above is checked, and if an ID shows up in every ID-vector, the corresponding entity is going to be manipulated by the system (means the Entity has to have ALL of the Components involved, but can have more). EDIT: Fortgot the Link, thanks @SyncViews
  9. Iltis

    where to start pls help

    Learning a new language pretty much starts with this site. It's your biggest friend in programming. Assuming you search for C# beginner tutorials: For absolute beginners in programming and C# LearnCS.org might be a good starting point, although it only teaches the basics and syntax of C#, not how to structure projects, create API's or write a game. Also it's very short, it only takes a few hours. Microsoft's official course on C# is much more in-depth about the basics of C# and includes a variety of small projects emphasizing what you currently learn / already learned. But it's still only a beginner's tutorial and does not cover advanced topics. Youtube is a good choice, too, just search for 'C'# beginner' and you are going to find a bunch of tutorials/playlists to teach you the basics.
  10. Iltis

    where to start pls help

    Hate to be the bearer of bad news, but one month is hardly enough to build up a portfolio if you've never created games before (which i assume from your question), and especially so if you do not have programming experience (which is indicated by your question as well). On the other hand I doubt that a game development school requires a portfolio of games. If you already had a portfolie of multiple games, what would be the point of attending this school anyways? It is reasonable for them to expect you to have some programming experience though, but even that might not be the case. Three questions: Did you select these languages you tagged yourself, or are they prerequisites of the school? Is programming experience required by the school? Do you have programming experience or is this your first contact with programming? If these languages are required by the school: Unless you already have experience in programming, you are not going to be able to learn C++ AND C# AND Java in under a month, not even the basics. The most difficult part is not to learn the syntax of a specific language, but learning how to split a problem into such small parts that a computer can solve them. Instead you should focus on ONE language first, getting accustomed to its syntax just enough to then learn the principles of programming, which apply across multiple languages (e.g. Object-oriented-programming works 'the same' for C++, C#, Java, Python and other languages that support it, nearly the only thing that changes is how you have to type it). As Gnollrunner suggested, give C# a shot (used for example by Unity3D). Java is great for Android-development though, since it's the native language of Android. If you chose these languages yourself: Consider learning a simpler language, e.g. Javascript (programming industries biggest language currently, according to Stockoverflows 2017 survey at least) and use it to write simple web-based games.
  11. Well, you cannot have them completely seperate, there has to exist SOME connetion between the two. It's not necessary to seperate them, either (UE4, Unity, etc, don't do this either). If you really want to, you could of course create two classes, and put them as members inside a "masterclass", that manages the interop between rendering and the gamelogic. As long as you only pass the information needed for rendering to the renderer you are fine. Avoid having your renderer ASK for information, PASS it instead yourself, and tell the renderer "You know everything you need, go render it.".
  12. Iltis

    Survival Notepad Game Update

    This is still not the right forum. This is for 'General and Gameplay Programming'. Your post does not include any code or coding issues, but instead an Announcement (Project or progress related) Therefore it belongs in the Announcement Forum
  13. Iltis

    Finding and Choosing Libraries for C++

    A full list of C++ libraries might not help you at all, since there are so many. I doubt you want to spent weeks of reading every libraries description. You can narrow your scope step by step, though. The first thing to consider when choosing libraries is the operating system you want your game to run on. Not every Library supports every OS, which invalidates the use of some of them right off the bat. Then you have to make a very personal decision: Is your goal the game, or the journey (learning experience)? The former means that you most likely don't intend to spend much time on low-level hardware programming, without significant progress on your game per week. The latter could mean, that you want to know as much as possible of the code required to create a game, including the low-level stuff. In short, how code affin are you? Depending on your code-affinity you can use Libraries: different libraries for different things (e.g. a library for input, one for sound, one for graphics, ....), not necessarily cross-platform friendly Frameworks: a collection of pre-combined libraries, as well as cross-platform compatibility (e.g. SDL, Monogame, SFML, ...) Engines: which have 'pre-connected' libraries for audio, video, input, .... as well as a GUI and tools to aid development, like Source Control or Pick'n'Place Map-editors (e.g. Godot, Unreal Engine, ...) The provided functionality tends to get more abstract with each step down that list. That means you have to do a lot of 'boilerplate' and 'platform'-code yourself when using only libraries, to connect all these services. You'll have much more control over your project like this (and even more, if you use no libraries at all, but that's just nuts). It will most likely take way longer to finish your game, though. An Engine like Godot on the other hand just provides all of these functionalities as a bundle, and you don't have to worry about connecting audio, video, input and Library compatibility.... Engines are potentially easier to learn and shorten development time (unless you have a hard time learning and accepting that the 3rd party doesn't tell you everything that happens). When you've made your choice on HOW you want to program, there's not much left to do. If you want to use e.g. libraries, just google 2D-library, Audio-library, ... and pick one of the top 5 google results. There's a reason they are up there; and pay attention to community activity (a dead community cannot help you in times of need).
  14. Well, it's a form of multiplayer, so there should be a host. Either a server or one of the players has to hold the mainworld, while the others interact with it via internet, seeing only a replication of said mainworld. If you do not require instant updates on those note, you could have the game 'refresh' on start-up or other conditions, loading all changed/added notes to the billboards and removing deleted ones. Then the player's wouldn't need to have a server-connection all the time and could play offline, while occasionally getting 'updates' on the billboards once they enter WLAN again. EDIT: you would still need a server/host to hold the shared information, however.
  15. Well, my opinion (the way i do it) would be to combine both methods, but with emphasis on what @Kylotan said. Data-driven is typically better than using many different functions. Since this is basically about objects you want to hold in your hand, you could create a parent-class 'HandEquippableObject', that holds Data shared between all such items, including bows, shields, 2handed and 1handed, special items and so on. Said data contains for example weight or slot-usage (for weight-based or slot-based inventory), a mesh, thumbnail, name, description, durability, preferred hand, etc.... This would allow to specify that ONLY such Objects can be held in the hands, and you can cast for them, if you want to (some people do not like run-time casting though). Derived from the 'HandEquippableObject' is a 'WeaponBaseClass', that adds common data of weapons, like damage, attack speed and DamageType,... After that either derive different weapon types like bows, swords, and so on, or add an enum to the WeaponBaseClass that the player can switch on, to distinguish different weapons (avoiding a deep hierarchy). It's a choice of preference. Furthermore I typically only create functions for data-getters (since i wrap each layers data in a struct that'd make only 2 getters by now) and animation/presentation purpose (like playing a swing-sound for a sword, spawning flame-particles, Event to play a breaking animation on durability-loss, ...). The character needs a way to access the data, and the rest is handled by him (calculating actual dmg and attack speed, due to buffs, potions and stuff). One exception are bows, since those need to be drawn, and other 'aimed' weapons, but that's not relevant right now.
  • Advertisement
×

Important Information

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

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!