Jump to content
Site Stability Read more... ×
  • Advertisement


  • Content Count

  • Joined

  • Last visited

Everything posted by Finalspace

  1. Finalspace

    What's your opinion on story centric games?

    I found 2015 by accident life is strange and was blown away by it. Since then, i am loving story centric gaming - especially if my choices has consequences. The best game in that region is "Beyond Two Souls" - i never enjoyed any game so much, as this one. So my oppion about this is simple: Interaction and Story-Telling at the same time works just fine.
  2. C#: I use C# at work every day and sure there is a few things to complain about: - new() allocates always on the heap and i havent found a way to allocate on the stack yet - Making a memory arena and just use memory like a stack is impossible, due to the lack of memory access - NuGet is a mess when you need them to make (Configuration, Creation, Publishing, Debugging). - Unit-Tests execution are extraordinary slow - Without unsafe you cannot define a "fixed" length-array -> int[1024] myArray; // Not possible - The industry standard of documenting C# code is really bad (Initializes a new instance of the <see cref="TheClassName"/> class, Gets or sets the value) etc. C++ (I have too much to complain, so i do the opposite: Writing down the stuff that i actually like in C++ instead): - I like operator overloading, so i can use vector/matrix stuff with normal math syntax - I like method overloading, because it can be useful sometimes - Structs and Unions without the need of writing "typedef X" all the time - I like enum class with support for changing the integral type (S8/U8, S16/U16, S32/U32, S64/U64) - I partly like nullptr, because defining something to null explicitly is more safe than just setting it to a zero as a number -> even if the meaning i basically the same - Everything else in C++, i dont like Visual Studio (C# and C++): - The built-in profiler in visual studio 2017/2019 is pretty much useless, because of its horrible not intuitive UI. Also there is no way add manual timining instructions for the profiler yourself. - Unit-Test exporer takes ages to update, after a rebuild - XAML text/visual editor is unstable/slow like hell Java: - Getters or setters are so annoying - Adapting tech from C# into java in the worst possible way
  3. Finalspace

    X11 window black fullscreen bug?

    I fixed it. The error was in the Visual and Colormap request. Also it looks like that XSelectInput requires StructureNotifyMask and ExposureMask, otherwise you will never get a ConfigureNotify event coming in - even though you had both already set in event_mask O_o -> X11 is weird. #if 0 // Wrong? XVisualInfo vinfo = {0}; if (!XMatchVisualInfo(windowState->display, windowState->screen, 32, DirectColor, &vinfo)) { if (!XMatchVisualInfo(windowState->display, windowState->screen, 24, DirectColor, &vinfo)) { Release(windowState); return(false); } } windowState->colorDepth = vinfo.depth; windowState->visual = vinfo.visual; windowState->colorMap = XCreateColormap(windowState->display, windowState->root, windowState->visual, AllocNone); #else windowState->colorDepth = XDefaultDepth(windowState->display, windowState->screen); windowState->visual = XDefaultVisual(windowState->display, windowState->screen); windowState->colorMap = XDefaultColormap(windowState->display, windowState->screen); #endif
  4. Hi there, i am fighting against a weird bug in X11 where i only see a fullscreen black screen with my window behind it - but only when i do software rendering. If you tab switch into another window, or click outside of your actual window area, the desktop are shown - but my window are not. Only when i have a window manager with task icon preview (Linux Mint Cinnamon), i can actually see the window - but only when i hover it over the icon in the taskbar O_o. The last time i had run my x11 application was on my previous ubuntu linux installation. Now i have linux mint with cinnamon - and it does not work anymore. I have no idea why that is the case, nor how to fix it. Can you please have a look at my posted source, maybe i do something horrible wrong? I tried recording the issue with OBS - but weirdly the bug is not present in the OBS recording, the window is just shown just fine O_o. So i did a real screen capture with my iphone and uploaded it: Here is my code (main.c / C99): #if !defined(_XOPEN_SOURCE) # define _XOPEN_SOURCE 600 #endif #if !defined(_DEFAULT_SOURCE) # define _DEFAULT_SOURCE 1 #endif #if !defined(__STDC_FORMAT_MACROS) # define __STDC_FORMAT_MACROS #endif #if !defined(__STDC_LIMIT_MACROS) # define __STDC_LIMIT_MACROS #endif #if !defined(_LARGEFILE_SOURCE) # define _LARGEFILE_SOURCE #endif #if !defined(_LARGEFILE64_SOURCE) # define _LARGEFILE64_SOURCE #endif #if !defined(_FILE_OFFSET_BITS) # define _FILE_OFFSET_BITS 64 #endif #include <stdint.h> // uint32_t, ... #include <stddef.h> // size_t #include <stdbool.h> // bool #include <stdarg.h> // va_start, va_end, va_list, va_arg #include <stdio.h> #include <malloc.h> #include <limits.h> // UINT32_MAX, ... #include <assert.h> #include <sys/time.h> #include <unistd.h> #include <time.h> #include <X11/X.h> // Window #include <X11/Xlib.h> // Display #include <X11/Xutil.h> // XVisualInfo #include <X11/Xatom.h> // XA_CARDINAL #define ArrayCount(arr) (sizeof(arr) / (arr)[0]) typedef struct BackBuffer { uint32_t width; uint32_t height; uint32_t pixelStride; uint32_t lineWidth; uint32_t *pixels; XImage *image; } BackBuffer; typedef struct WindowState { BackBuffer backbuffer; Window root; Window window; Colormap colorMap; GC gc; Display *display; Visual *visual; int colorDepth; int screen; int width; int height; Atom wmProtocols; Atom wmDeleteWindow; Atom netWMPing; Atom netWMPid; bool isRunning; } WindowState; void FillBackbuffer(BackBuffer *backbuffer, uint32_t color) { for (size_t i = 0; i < backbuffer->width * backbuffer->height; ++i) { backbuffer->pixels[i] = color; } } void InitBackBuffer(Display *display, Visual *visual, BackBuffer *backbuffer, uint32_t w, uint32_t h) { backbuffer->width = w; backbuffer->height = h; backbuffer->pixelStride = sizeof(uint32_t); backbuffer->lineWidth = backbuffer->width * backbuffer->pixelStride; size_t size = backbuffer->lineWidth * backbuffer->height; assert(backbuffer->pixels == NULL); backbuffer->pixels = (uint32_t *)malloc(size); FillBackbuffer(backbuffer, 0xFF000000); assert(backbuffer->image == NULL); backbuffer->image = XCreateImage(display, visual, 24, ZPixmap, 0, (char *)backbuffer->pixels, backbuffer->width, backbuffer->height, 32, (int)backbuffer->lineWidth); } void FreeBackBuffer(BackBuffer *backbuffer) { if (backbuffer->image){ XFree(backbuffer->image); backbuffer->image = NULL; } if (backbuffer->pixels){ free(backbuffer->pixels); backbuffer->pixels = NULL; } } void ResizeBackBuffer(Display *display, Visual *visual, BackBuffer *backbuffer, uint32_t w, uint32_t h) { FreeBackBuffer(backbuffer); InitBackBuffer(display, visual, backbuffer, w, h); } void HandleEvent(WindowState *windowState, XEvent *ev) { switch (ev->type) { case ConfigureNotify: { uint32_t w = (uint32_t)ev->xconfigure.width; uint32_t h = (uint32_t)ev->xconfigure.height; windowState->width = w; windowState->height = h; ResizeBackBuffer(windowState->display, windowState->visual, &windowState->backbuffer, w, h); } break; case ClientMessage: { if (ev->xclient.message_type == windowState->wmProtocols) { const Atom protocol = (Atom)ev->xclient.data.l[0]; if (protocol != None) { if (protocol == windowState->wmDeleteWindow) { windowState->isRunning = false; } } else if (protocol == windowState->netWMPing) { XEvent reply = *ev; reply.xclient.window = windowState->root; XSendEvent(windowState->display, windowState->root, False, SubstructureNotifyMask | SubstructureRedirectMask, &reply); } } } break; case Expose: { } break; default: break; } } void Release(WindowState *windowState) { if (windowState->gc) { XFree(windowState->gc); windowState->gc = NULL; } if (windowState->window) { XUnmapWindow(windowState->display, windowState->window); XDestroyWindow(windowState->display, windowState->window); windowState->window = 0; } if (windowState->colorMap) { XFreeColormap(windowState->display, windowState->colorMap); windowState->colorMap = 0; } if (windowState->display) { XCloseDisplay(windowState->display); windowState->display = NULL; } } void ProcessEvents(WindowState *windowState) { XEvent ev; while (XPending(windowState->display)) { XNextEvent(windowState->display, &ev); HandleEvent(windowState, &ev); } } bool Init(WindowState *windowState) { windowState->display = XOpenDisplay(":0"); if (!windowState->display) { printf("ERROR: No display found!\n"); return(false); } windowState->screen = XDefaultScreen(windowState->display); windowState->root = XRootWindow(windowState->display, windowState->screen); // Visual XVisualInfo vinfo = {0}; if (!XMatchVisualInfo(windowState->display, windowState->screen, 32, DirectColor, &vinfo)) { if (!XMatchVisualInfo(windowState->display, windowState->screen, 24, DirectColor, &vinfo)) { Release(windowState); return(false); } } windowState->visual = vinfo.visual; windowState->colorDepth = vinfo.depth; windowState->colorMap = XCreateColormap(windowState->display, windowState->root, windowState->visual, AllocNone); XSetWindowAttributes swa = {0}; swa.colormap = windowState->colorMap; swa.event_mask = StructureNotifyMask | ExposureMask | FocusChangeMask | VisibilityChangeMask | EnterWindowMask | LeaveWindowMask | PropertyChangeMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask | ButtonMotionMask; swa.background_pixel = BlackPixel(windowState->display, windowState->screen); swa.border_pixel = WhitePixel(windowState->display, windowState->screen); swa.bit_gravity = NorthWestGravity; swa.win_gravity = NorthWestGravity; int flags = CWColormap | CWBackPixel | CWBorderPixel | CWEventMask | CWBitGravity | CWWinGravity; int windowX = 0; int windowY = 0; int windowWidth = 400; int windowHeight = 400; windowState->window = XCreateWindow(windowState->display, windowState->root, windowX, windowY, windowWidth, windowHeight, 0, windowState->colorDepth, InputOutput, windowState->visual, flags, &swa); if (!windowState->window) { Release(windowState); return(false); } windowState->width = windowWidth; windowState->height = windowHeight; XSelectInput(windowState->display, windowState->window, KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask | ButtonMotionMask); // Window manager atoms windowState->wmDeleteWindow = XInternAtom(windowState->display, "WM_DELETE_WINDOW", False); windowState->netWMPid = XInternAtom(windowState->display, "_NET_WM_PID", False); windowState->netWMPing = XInternAtom(windowState->display, "_NET_WM_PING", False); windowState->wmProtocols = XInternAtom(windowState->display, "WM_PROTOCOLS", False); Atom protocols[] = { windowState->wmDeleteWindow, windowState->netWMPing }; XSetWMProtocols(windowState->display, windowState->window, protocols, ArrayCount(protocols)); const long pid = getpid(); XChangeProperty(windowState->display, windowState->window, windowState->netWMPid, XA_CARDINAL, 32, PropModeReplace, (unsigned char*)&pid, 1); XMapWindow(windowState->display, windowState->window); XFlush(windowState->display); InitBackBuffer(windowState->display, windowState->visual, &windowState->backbuffer, windowState->width, windowState->height); windowState->gc = XCreateGC(windowState->display, windowState->window, 0, 0); XPutImage(windowState->display, windowState->window, windowState->gc, windowState->backbuffer.image, 0, 0, 0, 0, windowState->backbuffer.width, windowState->backbuffer.height); XSync(windowState->display, False); return(true); } void ColorTimeUpdate(float *t, int *d, const float speed) { *t += (float)*d * speed; if (*t <= 0.0f) { *t = 0.0f; *d = -*d; } else if (*t >= 1.0f) { *t = 1.0f; *d = -*d; } } static long timestamp(void) { struct timeval tv; if (gettimeofday(&tv, NULL) < 0) return 0; return (long)((long)tv.tv_sec * 1000 + (long)tv.tv_usec/1000); } static void sleep_for(long t) { struct timespec req; const time_t sec = (int)(t/1000); const long ms = t - (sec * 1000); req.tv_sec = sec; req.tv_nsec = ms * 1000000L; while(-1 == nanosleep(&req, &req)); } int main() { const long DTIME = 1000 / 60; WindowState windowState = {0}; float tR = 0.0f; float tG = 0.0f; float tB = 0.0f; int dR = 1; int dG = 1; int dB = 1; if (Init(&windowState)) { windowState.isRunning = true; long timeStart = timestamp(); while (windowState.isRunning) { ProcessEvents(&windowState); uint8_t r = (uint32_t)(tR * 255.0f + 0.5f); uint8_t g = (uint32_t)(tG * 255.0f + 0.5f); uint8_t b = (uint32_t)(tB * 255.0f + 0.5f); uint8_t a = 255; uint32_t color = (a << 24) | (r << 16) | (g << 8) | (b << 0); FillBackbuffer(&windowState.backbuffer, color); XPutImage(windowState.display, windowState.window, windowState.gc, windowState.backbuffer.image, 0, 0, 0, 0, windowState.backbuffer.width, windowState.backbuffer.height); XFlush(windowState.display); ColorTimeUpdate(&tR, &dR, 0.1f); ColorTimeUpdate(&tG, &dG, 0.01f); ColorTimeUpdate(&tB, &dB, 0.001f); long timeEnd = timestamp(); long dt = timeEnd - timeStart; timeStart = timeEnd; if (dt < DTIME){ sleep_for(DTIME - dt); } } Release(&windowState); } return 0; }
  5. Finalspace

    X11 window black fullscreen bug?

    Yep, i saw that error too - results in never getting to the event when the window is closed
  6. Finalspace

    X11 window black fullscreen bug?

    Its not. Forgot to copy the break at the end from my actual code. I corrected the source. Thanks for the catch.
  7. OOP and myself, yeah. Its a like and dislike kind of scenario. In 1998 (the saddest year i had so far in my life) i started out programming in borland delphi and was thrown into OOP from the very beginning. I had no one which teached me fundamentals and internet was still too expensive. The Delphi-Helpfile was the only thing which i learned from in the early days. But for some reason, i understood it from the very beginning, classes, inheritance, interfaces, static vs non-static, polymorphism, etc. So i was liking it from the very beginning. For decades i was coding in Delphi, also mixing in other languages like C++/Java, etc. But since i started doing and seeing more and more professional work in the non-game development field, i started to see problems of over-using OOP. There are so many people/experts out there, which abuses OOP to write the worst kind of software you can imagine -> barely working, exceptions everywhere, slow like hell, untestable, impossible to understand or to follow: - Classes which are not classes - Abstractions just for the sake of it - Extendability without a reason - Hiding everything just for the sake of it - Using delegates/callbacks everywhere - Using virtual functions for no reason - Overuse of inheritance - Misuse of polymorphism If they would write it with less OOP´ness, the software would still be garbage - but i could at least understand it. Unfortunatly this kind of shit, you will find all over the place - especially in expensive business software or in the java world. But the main problem is, that those "experts" teach other people. This results in more people writing poor code, which makes me very sad :-( Another problem i often see, is that third party libraries or frameworks may forces you to write bad OOP code, due to its bad api design. I am always surprised, how customers happiely use such software in production environments. Its like a miracle that those things work. But what makes me so angry, that you can actually write good software when you use the proper tools at the right time, but people somehow have forgotten that or simply doesent care. So the conclusion for me is: OOP is totally fine, when well and not over-used. If you easiely can follow the control flow of any kind of source, the chance are much higher that its well written - neitherless of its coding style.
  8. Finalspace

    How i failed the tower defense GD competition

    Thanks! Its my first time critizing myself in a blog like this so i had no idea how this will go. Yeah, writing a editor for such small projects are just overkill - especially if you dont have time for that. But using a existing one which is not suitable for your game is much worse - like in my case. i think it would have been better when i have written it myself - especially because i have a dozens in the past already and i know how this things are implemented. I always have the requirement to write everything myself, not using any engine or thirdparty library. I dont mind fighting against technical issues. Also i normally dont have technical issues, because i already did all those stuff a lot in the past, so i know how it works. The two issues i had was a typo and a too small sized font atlas - thats it. Everything else was just wrong decision making... But maybe i try to make the project with unreal, just to see if this would be a different.
  9. This will be a post mortem explaining how i failed the game dev competition for a tower defense game, so here it goes. In the start of june 2018 i found the tower challenge post by accident, read the description and was really excited. So i decided to apply and started right away - without any planning whatsoever. I created a new visual c++ project and after 3 evenings with a couple of hours i got the basic game mechanics nailed down: Enemies could be spawned and moved from waypoint to waypoint along a direction and randomly placed towers could hit and destroy it. Everything (tiles/enemies/towers) was defined in static int arrays, so i can adjust it however i like. It was going very smoothly and i was very happy with it. The next 2 evenings was a nightmare. I made a new map and suddently everything was broken. All the towers was shooting randomly, the enemies was not following the waypoints anymore, bullets missed all the enemies and so on, even the spawning was behaving weirdly. So it took me 7 hours to find all those bugs and fix them. After that in the next evening i refactored the current code, made it more robust and fixed a few bugs. In addition i added basic HUD rendering to display lives, score, money, current wave, etc. Now it was looking really good so far and the game was already playable. The next day for whatever reason i decided to use the editor "TileD" to setup everything. I have no idea why i wanted that, maybe i thought it would save me time or something but i was wrong. Even after 5 evenings, i still couldnt´t figure out how to get towers/enemies/waves defined in the TMX file. So i partly gave up on that idea and ended up just defining the walkable tiles and the waypoints in the TMX file. In addition i created a shitton of code just to parse a TMX file - including writing a generic xml parser in C99. The only thing useful i made in that 5 evening was that parser 😞 This entire process took me ~20 hours -> 4*8 useless workhours minus 2 hours for writing the xml parser. After that the next 3 evenings i did of lot of refactoring needed to get the TMX loaded in the way i wanted. The result was not that bad. I now could define all the waypoints, the walkable and placeable tiles in the editor and setup as many spawners as i want. This took me about ~6 hours. The next 2 evenings was a blast! I was very productive and added a lot of functionality and fixed a lot of bugs. I now had a fine looking HUD , multliple waves with multiple spawners for each wave. In addition i improved almost every part of the game, even the towers was rotating smoothly against the target now and you could lose or win the game. The "game" finally started to take shape. Of course after a blast, there comes the opposite of that: Destroying and unproductivity! In one evening i broke the tower rotation, the enemy position prediction, the rendering and even the HUD. Why of a sudden did everything brake? It may be that i just wanted to make it "even better" -> Over complicating simple things! In the following evening i reverted everything and simplified a lot of the game mechanics. Now all of a sudden the enemy prediction worked and the tower rotation was correct and very smooth. But the font rendering seems to be totally broken now - after switching to a new font. So i had no choice to still use the old font 😞 Many evenings later with a lot of delays between, i finally fixed the nasty font rendering bug. It took me over 10 hours to find that bug and 5 seconds to fix it... Now the new font or any other font works just fine. In addition i made a few simple functions to render and handle UI buttons - to select the appropriate tower. Now i got sick i could barely do anything, so i was of for over a week. After that i wanted get rid of the ugly dev graphics, so in 2 hours i made a push rendering system + opengl implementation and changed everything to it. It looked exactly the same as it was before, but now it was much more flexible and i finally could add sprites to the game. The next day i successfully added loading and rendering of sprites in just about 30 minutes. Then i searched the net for a free tileset, which i can use to test the sprite rendering. After i found one, i changed the TMX map to use it. The following 4 evenings i have written a lot of code for parsing/converting/rendering the tilesets from the TMX, but with wrong results. All the UV´s was incorrect and even after spending hours of debugging i could not find the bug at all. Now there was a full week where i didn´t do anything. The motivation was gone. The first evening in the following week i was still not motivated at all, but i wanted to get this finally fixed so i forced myself to analyze the code again - searching for the UV bug and after a short amount of time, i finally found the bug... It was just a typo... After fixing that typo now all the UV´s was correct and everything looked fine. In the next evening i added 3 more layers to the TMX map, trying to make it look more prettier. But there was a problem, the fixed map dimension was not sufficient to make use of the tilesheet i was going for. So i decided to change the entire system from a fixed map size to a dynamic one and this was pretty expensive from a time perspective, it took me around 2-3 hours. Now i had just a few days left before the deadline. The following days i moved all the wave/enemy/tower definitions into separated xml files, so i can starting making the actual 20 waves/enemies and a few towers. Of course this required me to change a lot of the internal systems, but the written xml parser now payed of and in an hour it was changed very easialy. Now i started to fiddle around with the data, trying to add more waves, more towers... Such tasks are not my thing, so it took me two hours just to add another wave and another tower 😞 So now i had one day left before the deadline and the game was not even close to be finished. I had one level, two waves, two towers, two enemies and very basic game mechanics working, without upgradable towers. Also i had no final art, no sound or music, not even a menu 😞 The following days i was really depressed about it, so i was not working at the project at all, so i failed and missed the deadline. So now comes my reasons why i failed it: 1.) I didn´t plan anything I had no idea which art style i was going for I had not slicest idea what type of waves/towers/enemies i want I had no idea how the level should look like I didn´t set any goals or milestones or tasks whatsoever 2.) Forcing myself to use the TileD editor was a huge mistake For such a little project, one level should be just fine. So why the heck do i need a editor when i just want to have one level anyway? The only thing i needed to setup in the editor was the visual tiles, the walkable and placable areas and the positions for the spawners and thats it. 3.) I added a lot of complexity without thinking it through At work i always do that, but for some f*cking reason on private projects i never do that and that always kills me. I should have sticked with the simplest solution in all cases, then i may had finished it in time. 4.) I didn´t continously worked on the game There was too many days of me not working on the game at all. I should at least made one little thing each day or something like that. But not everything was bad, at various point i made a lot of progress and the last build i made was not that bad. It was playable, you can win or lose the game - it just lacks content in a all places, so i decided to finish the game to end of september - to have at least one finished game made in my life. Thats almost two month´s from today - counting just the days, that should be doable - even with my limited time budget.
  10. Finalspace


    A simple technical tower defense 2D game
  11. Finalspace

    Final Platform Layer

    About:Final Platform Layer is a Single-Header-File cross-platform C development library designed to abstract the underlying platform to a very simple and easy to use low-level api - providing low level access to (Window, Video, Audio, Keyboard, Mouse, Gamepad, Files, Threads, Memory, Hardware, etc.).The main focus is game/media/simulation development, so the default settings will create a window, setup a OpenGL rendering context and initialize audio playback on any platform.It is written in C99 for simplicity and best portability, but is C++ compatible as well.FPL supports the platforms Windows/Linux/Unix for the architectures x86/x64.It is licensed under the MIT-License. This license allows you to use FPL freely in any software.What makes it different from other platform abstraction libraries, such as SDL/SFML/etc. ?:- FPL is designed to require bare minimum linking to the OS (<i>kernel32.lib</i> / <i>libld.so</i>) only.- It does not require any dependencies or build-systems to get it running.- It has a lightweight feature set (Single window, Graphics api initialization, Raw audio samples playback, Input handling, Multithreading, Path/File IO, Atomics, OS/HW-Infos etc.)- No data hiding -> everything is accessible- It uses a fixed and small memory footprint and handles memory very gracefully.- It can be controlled by a configuration structure in very detail at startup.How do i get started?You download the latest release from the github page:https://github.com/f1nalspace/fin...lob/master/final_platform_layer.hDrop it into your C/C++ project and use it in any place you want.Define FPL_IMPLEMENTATION in at least one translation unit before including the header file.For more details you can check out the official website https://libfpl.org .Current state / Future plans:FPL is not finished yet and just supports a couple of platforms, but more platforms are already in progress or are planned. Also some features are not implemented yet or may be missing.For more details: https://libfpl.org/docs/page_todo.html
  12. Finalspace

    Understanding Constraint Resolution in Physics Engine

    Some of your formulas are shown as text and not as formular, can you double check those?
  13. Finalspace

    Making games is no fun for me?

    First of all this will be a weird post, but i have something to tell you guys which i have in my mind since a long time. Since forever i am trying to make games, but for some reason i never finish a single one. Sure i get some raw prototypes done, but then i fully lose all my motivations and never touch it again - which really depresses me a lot. To give some example, this community have recently started a "Challenges" system, where you can enter some challenge writing some simple games with a fixed set of rules in place - which is very great for learning. So i tried to challenge myself for the october and the november challenge and at the beginning i was very motivated and written a platformer from scratch in no time, but after i got everything working except for enemies i simply lost my motivation again. For the pong challenge its the same deal - i got collisions working and started to put in some CPU movement code and then i lost it again. Why is that? Am i so bad at making games? Why do i lose my motivation all the time, even though i am making steady progress? I dont understand. The best progress i had so far, was my "Leverman" UE4 project where i finished my first MVP - which was fully playable, but even for this project i have no motivation anymore, because it needs a full remake due to the fact that i made a mistake in the 2D Pixel to UE Units scale and i lost pretty much all the progress i made after my MVP. On the other side, i am making tools, applications, libraries all over the place and never have this kind of motivation problems there, especially at work where i write desktop and server applications. For example, i have written a media player called Xenorate from 1999 until 2011 and i mostly never had any motivation problems there. So it seems that normal application development is more suited for me, isnt it? But really i want to make games, not for making money or getting hired. I just want to proove myself that i can do it or something.
  14. Finalspace

    What Makes Old Games Addictive

    I agree, i really miss the old games too and i remember playing very old games like aztec challenge, maniac mansion, zak´mc kracken, summer games, etc. - there was so much fun - especially with friends. A few days i got nostalgic and played all the games i have played on the game boy like mega man, super mario land, kirbys dreamland, r-type, god this are so damn hard... I got really soft in the past years - especially when i reached the 30 and now have family, children, not really time to code... but nice that i am not alone with that feeling.   Games are the main reason, why i started programming, learned basic on C64 and grow from that. Unfortunatly i never ever have created one finished game and with finished game, i mean games which can be beat, have more than developer graphics and make fun to play. I really struggle to finish stuff - one bad thing i hate about myself :-( I cannot count how many prototypes i created, but failed mostly of motivation-less.
  15. Finalspace


    Album for Towadev
  16. Finalspace

    Final Platform Layer

    Album for Final Platform Layer
  • 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!