Jump to content
  • Advertisement

Project: Project Taival

Dev Diary #033 - When Mistakes Cost You Time



Hello and welcome to this weeks Dev Diary!

Today I'll explain some of my last weeks ups and downs and explain the importance of setting up your tools properly for your work style, before doing major changes to your graphical works.


The Mistake

On an earlier dev diary, I mentioned about the importance of learning a habit of saving the different versions of your graphical work. For those, who has years of experience, this is a given and those that often have a habit of regimenting things, this comes more or less naturally. As such, because I have a tad different starting point and despite I like to be organized, at first I forgot to do this. Time wen't by and I learned to save different versions of my graphical works more frequently, which made life much easier. How ever - and here comes the importance of shuffling through your image editing software's settings before doing any larger works. Of course, I didn't do this, as I had no prior need to change any settings on editing software to fit my working style, which I considered mostly to be nitpicking of the pro's. I didn't underestimate it's importance to the workflow, but I didn't see it as important to my self. Well, how wrong was I, yet again and learned it the hard way.

As I had no need to change the default settings in Photoshop, I also missed a rather important thing - the autosave function. Basics of the Basics, yet I overlooked that It if I like to fidle with the earlier versions just to see if I find some new way to branch out from that earlier point, the autosave function will overwrite periodically over the old file, effectively erasing the "bookmark" all together. This is why, it seems, that most of my earlier versions of some graphical designs are gone and in cases where you don't like the direction you took at all and just close the file without saving, it's already too late.

Lesson to be learned from this - always make a copy of the original backup, when ever you want to try branching out in a different direction from a certain version of your work. The autosave functionality is important to be left enabled, in case the software or computer crashes for any reason.


The Re-Design

Which leads to, yet again, the Re-Designs of several assets. Here is an example of several different versions of the Sapphire star;


The version history goes from left to right, oldest to newest. I'm still not satisfied of the direction that the re-designs wen't, as the first one might have been the best one overall, but would have required a tad more work on the details. As an example, the outlines should have been colored as sapphire blue to hide the outlines and made it look more gem-like, and a little bit of transparency to the bottom layer, to be able to make more caustic effects to it. The colors used in the first iteration were just white and light teal for the slight lighting effects and Sapphire Blue and Persian Blue, as the base colors. From the second to fourth versions, only 7 different shades of Sapphire Blue were used in all the effects and base colors.

EDIT; Backgrounds matter - go take a look at the Reddit page how these stars look against the black background, compared to white.

The Editing Process

The editing of the Patreon page is coming along fine, although it does take time to re-think my approach, in order to write something that makes more people to want to invest in the project. No marketing text is perfect and it is impossible to write something, that appeals to anyone, which should be always remembered, when designing your Patreon page, or homepage for your project. The first image you give to people about you and the project is important, but I would dare to argue, that it is much more important to be honest about your self and your need to learn and develop your skills in various areas - be true to what you really know and don't know how to do. Be open about the fact, that this is a learning experience to you and just be who you are, that is a much more important factor in marketing. I'd like to call this "Natural Marketing", a way of being honest and straightforward to others, show trustworthiness by your actions and being honest about your own mishaps and successes. No human, alive or long since past, is or has been without any faults. Everyone is a beginner at some point and we all advance in different pace. Accept your self, flaws and all, and do your best to overcome those difficulties. Only you can decide for your self, if this is something you really wan't to achieve.

And, you can always change your marketing text later. Good enough, is often just fine for the first publication. This concludes the pep talk for other starting game developers, artists and entrepreneurs, who would like to earn their living as a CEO of their own life.


The Conclusion

I'll be honest with you, I have been suffering from sleep deprivation lately, which has been slowing down my work progress and influences my rate of mistakes in my work. Last weeks short notice was partly because of this and the fact, that I had been too enticed in a game that I originally played to study it's mechanics more closely. The game in question is Total War: Three Kingdoms. The Total War series is one of those, that has inspired me to attempt creating a RTS game with similar elements. The TW: Three Kingdoms is the closest strategy game to my own visions thus far, but does not contain even nearly everything that I will try to implement in to the RTS Project. I just hope that the ideas work  as well together in practice, as they work together in theory.

Thank you for tuning in, and I'll see you on the next one!

You can check out every possible mid week announcements about the project on these official channels;

• YouTube • Facebook • Twitter • Discord • Reddit • Pinterest • SoundCloud • LinkedIn •


Recommended Comments

There are no comments to display.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Advertisement
  • Advertisement
  • Blog Entries

  • Similar Content

    • By stevenclark
      Hi Guys 
      I need help game this app marvel contest of champion can't run on your pc
    • By Catch_0x16
      Hello Folks,
      I'm writing a plugin for a simulator called 'X-Plane 11'. My plugin essentially calls on a DLL (Which I've written) that makes OpenGL calls to draw graphics onto the active draw target (it does no OpenGL initialization). I want this external DLL to represent the logic behind a computer screen, but not be directly coupled with the OpenGL context that it is being drawn to. In this current instance for example, I am drawing it to the screen in X-Plane, however, I may at some point want to draw it to the screen of a different game engine, or perhaps even just a windows program.
      The way I am trying to achieve this:
      Generate a frame buffer and texture Initialize texture and add it to the framebuffer On the drawcall... Bind to the frame buffer Call the dll's draw method Un-bind the frame buffer Bind to the host applications framebuffer Bind to the associated texture Draw a quad in the corner of the screen with appropriate texture coordinates Un-bind the texture I have the problem though that the output is always just a black square...(See attached image)
      The code goes a little like this (Only showing the relevant bits):

      #include <Windows.h> #include <string> #include "PluginHeader.h" #include <GL\glew.h> #include <gl\GL.h> #include <gl\GLU.h> #include "MFDSim.h" HINSTANCE g_MfdSimLibHandle = 0; XPLMWindowID g_MfdWindowID = 0; GLuint g_FrameBufferID = 0; GLuint g_fbTex = 0; GLuint g_rbo = 0; unsigned int g_MfdScreenWidth = 0; unsigned int g_MfdScreenHeight = 0; ///////////////////////////////////////////////////// // Standard plugin functions ------------------------ PLUGIN_API int XPluginStart( char* outName, char* outSig, char* outDesc) { strcpy(outName,"MFD Sim"); strcpy(outSig, "mfd"); strcpy(outDesc, "); int retVal = TRUE; glewInit(); HINSTANCE g_MfdSimLibHandle = LoadLibrary("./Resources/plugins/MFD_Sim_Plugin/win_x64/MFDSim.dll"); if (g_MfdSimLibHandle != nullptr) { try { MFD::mfdInit("./Resources/plugins/MFD_Sim_Plugin/config/layout.xml"); MFD::mfdGetWidthHeight(g_MfdScreenWidth, g_MfdScreenHeight); } catch (const std::exception& ex) { retVal = FALSE; } } else { retVal = FALSE; } return retVal; } PLUGIN_API void XPluginStop() { FreeLibrary(g_MfdSimLibHandle); } PLUGIN_API int XPluginEnable() { // We need to revert back to the appropriate frame buffer after we're done GLint currentReadFB = 0; GLint currentDrawFB = 0; glGetIntegerv(GL_READ_FRAMEBUFFER, &currentReadFB); glGetIntegerv(GL_DRAW_FRAMEBUFFER, &currentDrawFB); XPLMRegisterDrawCallback(OnDrawCall, xplm_Phase_LastCockpit, TRUE, nullptr); // Generate OPENGL stuff we need glGenFramebuffers(1, &g_FrameBufferID); glBindFramebuffer(GL_FRAMEBUFFER, g_FrameBufferID); glGenTextures(1, &g_fbTex); glBindTexture(GL_TEXTURE_2D, g_fbTex); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, g_MfdScreenWidth, g_MfdScreenHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, nullptr); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glBindTexture(GL_TEXTURE_2D, 0); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, g_fbTex, 0); glGenRenderbuffers(1, &g_rbo); glBindRenderbuffer(GL_RENDERBUFFER, g_rbo); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, g_MfdScreenWidth, g_MfdScreenHeight); glBindRenderbuffer(GL_RENDERBUFFER, 0); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, g_rbo); glBindFramebuffer(GL_READ_FRAMEBUFFER, currentReadFB); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, currentDrawFB); return TRUE; } PLUGIN_API void XPluginDisable() { XPLMUnregisterDrawCallback(OnDrawCall, xplm_Phase_LastCockpit, TRUE, nullptr); glDeleteFramebuffers(1, &g_FrameBufferID); glDeleteTextures(1, &g_fbTex); } PLUGIN_API void XPluginReceiveMessage( XPLMPluginID inFrom, int inMsg, void* inParam) { } // Boilerplate DLL stuff BOOL WINAPI DLLMain( _In_ HINSTANCE hInstance, _In_ DWORD fdwReason, _In_ LPVOID lpvReserved) { return TRUE; } ///////////////////////////////////////////////////// // MFD functions ----------------------------------- void HandleWindowKeyEvent(XPLMWindowID inWindowID, char inKey, XPLMKeyFlags inFlags, char inVirtualKey, void * inRefcon, int losingFocus) { if (inWindowID == g_MfdWindowID) { } } int OnDrawCall(XPLMDrawingPhase inPhase, int inIsBefore, void * refCon) { // We need to revert back to the appropriate frame buffer after we're done GLint currentReadFB = 0; GLint currentDrawFB = 0; glGetIntegerv(GL_READ_FRAMEBUFFER, &currentReadFB); glGetIntegerv(GL_DRAW_FRAMEBUFFER, &currentDrawFB); // Bind to our own frame buffer and draw our MFD glBindFramebuffer(GL_DRAW_FRAMEBUFFER, g_FrameBufferID); glBindFramebuffer(GL_READ_FRAMEBUFFER, g_FrameBufferID); glBindTexture(GL_TEXTURE_2D, g_fbTex); glClear(GL_COLOR_BUFFER_BIT); glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glEnable(GL_TEXTURE_2D); if (!MFD::mfdDraw(1.0f)) { // TODO: Handle failure to draw } glBegin(GL_LINES); glColor4f(1.0f, 0.1f, 0.1f, 1.0f); glVertex2f(0.0f, 0.0f); glVertex2f(100.0f, 100.0f); glEnd(); glBindFramebuffer(GL_READ_FRAMEBUFFER, currentReadFB); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, currentDrawFB); glEnable(GL_TEXTURE_2D); glBegin(GL_QUADS); glVertex2f(0, 0); glTexCoord2f(0.0f, 0.0f); glVertex2f(0, g_MfdScreenHeight); glTexCoord2f(0.0f, 1.0f); glVertex2f(g_MfdScreenWidth, g_MfdScreenHeight); glTexCoord2f(1.0f, 1.0f); glVertex2f(g_MfdScreenWidth, 0); glTexCoord2f(1.0f, 0.0f); glEnd(); glBindTexture(GL_TEXTURE_2D, 0); return 0; }  

    • By viicty
      It's 1993 and you play as a deranged LAPD detective whose colleague got murdered. Get revenge by slaughtering half of the underworld in this retro, ultra-violent, side-scrolling shooter. Aggression and speed are the only elements that will keep you alive. Variety of weapons and an amazing synthwave & vaporwave soundtrack are there to help you.
      - Tons of blood
      - Story
      - 10 challenging levels, 3 bosses
      - 20 weapons, each weapon can be used to execute an enemy
      - Synthwave, vaporwave and dark ambient soundtrack by Catsystem Corp, Daniel Deluxe, Lazerpunk, Ugasanie, and Xerxes the Dark
      - Retro visuals
      Gameplay tips:
      - Combos and executions heal you up
      - Get 5 stars on a level to increase your max health
      - Melee weapons are most efficient against enemies with guns and vice versa
      - Plan all your moves ahead
      - Nearby enemies can hear your gunshots
      - Use shotguns at close range
      - Shotguns can destroy doors
      - A, D - Move left/right
      - W - Use stairs
      - Left mouse button - Attack
      - Right mouse button - Pick up/throw a weapon
      - Space - Execute an enemy
      DOWNLOAD, SCREENSHOTS, MORE INFO: https://viicty.itch.io/onduty
    • By asmit10
      Read this first to not waste time
      Hey everyone! I'm basically brand new to game dev, specifically programming which is what I care to specialize in. Currently i'm working on a 3D Tile-based tower defense game in Unity. The plan is to plan for primary monetization on mobile, but it will come to PC too. I probably lack the most skills in the art department, primarily graphics work, but it's not like my modeling is great either. That being said, my main focus is programming so if you read further below and find yourself interested in the project and have a different interest, please let me know!
      Game Info
      TD Game ala Bloons TD
      Towers are based on tiles pre-placed on a grid (plan to add ability to buy tiles, so that tile scarcity can be more of a part of level design)
      No Russian dolling of enemies, different enemies following a difficulty gradient
       flying enemies that normally follow a different path
      Branching, occasionally choice making upgrade branches for each distinctly unique tower. (thinking something like 15 unique upgrades per turret, though that would be tough to come up with)
      Initially planning for 10 distinct level layouts not including an endless survival 'leaderboard' mode
      Seems like it would be silly to not include easy / medium / hard difficulties, just need to think of a way to reward the player for doing so
      Planning to have some long-term progression system. Maybe related to # of kills with a tower. Every 500 kills = 1% fire rate or something like that.
      All current art and models are place holders, screenshots of the project can be provided if you show interest
    • By RoKabium Games
      Excluding the Minimap you can also use specific background relics and ancient structures as landmarks to keep track where you are. On Metis the background has some ancient Statues, temples, huts and caves that could be useful to remember specific locations.
  • 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!