Jump to content
  • Advertisement
Sign in to follow this  
  • entries
    7
  • comments
    0
  • views
    437

Project: Project Taival

Dev Diary #003

ProjectTaival

655 views

Re-Release from 21th of January 2019 Dev Diary;

Hi, and welcome again for the weekly dev diary of Project Taival!

I have been busy with the marketing side of things, which has left less time to the game it self, but I managed to get two things done at once - recorded a video while I was doing the details for one room of the apartment building.

The Timelapse

jkv03v2adtb21.png

I'm currently editing the #timelapse video, but are having a hard time learning the scripting side of AviSynth. This would be a good thing to learn to automate much of the video processing work in a lossless manner. The problem is, that what first seemed to be working, now appears to be too much for my computer to handle, as the plugin I need to use is old and doesn't handle big files well. More precisely, the plugin fills the entire RAM and throws a fatal error after over 22000 processed frames.

I'm currently looking for ways to automate video segmenting to smaller files, which should get around this error. I'll be updating the #progress on either the next Dev Diary or before, if I get the problem solved earlier.

 

Detailing the Room

 

md13tdn5ftb21.png

Kitchen counters and cupboards.

I decided that I would first try to finish one room, so that the end results are seen faster. This should also streamline the progress a bit, as the generic cupboards are found in every house in this apartment building. There will be more individual assets to every house, so that none of the interior decorations are the same, but it's good to start with assets that are to be used most often.

I'm also exploring how it will affect the size of the game, if I integrate some assets with the underlying architecture. For example, if I make the baseboards/skirtings integral to the floor. This would save very much time when I need to put the assets to right places in the Game Editor.

There has also been many videos, that give great lessons on how a starting game developer can maximize the efficiency of the workloads. I especially like to watch the Game Dev Underground and Atmos Games for reference on how to be a successful indie game developer. If you have any interest in being a Game Developer or have interest in Indie Games in general, I would warmly recommend these channels.

 

Situation on #YouTube in general

Since it would take time off from my game development, doing comprehensive talking videos might not be the best choice at this point - including the lack of suitable space to do recordings. Most efficient way that I have thus far come up with is to record timelapses and possibly record my speech either for the entirety or part of the video, if I'm not using music in the videos.

Second topic on this issue is the teaser, which I would like to complete as soon as possible. After doing some research, it seems that doing it in Blender might actually be the best way to make it, so back to learning blender for me. The learning experience has been really sporadic for me, as I need to try and handle everything at this point on development and building a audience base is one of the more important things even at early on, to show where you come and what have you learned. Most important thing to show here is how willing are you to learn new things.

 

Website planning

I'm also planning on the style for a website for the game and I think I have found a suitable style for both, desktop and mobile users. I'll be releasing more details about this on the next weeks Dev Diary. If you have any recommendations on the layout or graphics for the theme (dark, snowy winter), please feel free to make suggestions :)

That's it for this weeks Dev Diary, thank you for your continued support.




0 Comments


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
  • What is your GameDev Story?

    In 2019 we are celebrating 20 years of GameDev.net! Share your GameDev Story with us.

    (You must login to your GameDev.net account.)

  • Blog Entries

  • Similar Content

    • By Awoken
      Just throwing an idea out there, as I currently don't have the time to participate in challenges, but what do you all think of members partnering up and co-operating together to participate in a challenge?  Maybe a challenge that is for teams of two?
    • By Cool Racoon
      Hey, i'm new to the game developing, i have this idea of a basic fighting game, looking for a platform or an application where i can create this. The idea of the game is simple, but i don't know where can i develop this game.
      The game would be a 1vs1, 2vs2 or 3vs3. Every character will have its own HP stat, Movement Speed stat and Jump Speed stat, the game is based on turns, so if it is your turn you can move freely depending on your movement speed and jump speed, and you can also use 4 attacks per turn. 
      The game is based on squares, like playing chess, the range of the attacks is calculated by squares and the movement speed of the characters is calculated by squares which can be horizontal, vertical or diagonal depending on the character. For example this is an idea of what movement speed should be like, if player 1 has 5 speed points and player 2 has 6 speed points. Jump Speed works as an additional movement speed, but you can use specific attacks while jumping. If you want to face another direction you will lose 1 movement speed point.

      Now with the movement speed explained, i will explain how attacks will work. Attacks are also based on squares, the range of the attack to be precise. Every character will have 5 types of attacks, which are, Charged Attacks, Special Attacks, Tilt Attacks, Aerial Attacks and Grab Attacks. Each attack will have its own range, damage, knockback and launch direction. If the opponent has 10 HP and your attack has 3 damage points, your opponent will lose 3 of its HP, and the game won't finish untill the opponent loses all of its HP.
      Charged Attacks are the strongest attacks, usually they have an average or high knockback. Special Attacks have neutral damage, and can also include movement speed while using them. Tilt Attacks are weak attacks that usually have low knockback so you can combo on them if you are close to the opponent. Aerial Attacks have neutral damage, and can only be used while performing a jump. And finally Grab Attacks, drags your opponent in front o you and it will perform an attack, you can add extra damage to your Grab Attacks, but you will lose your attack turns.
      This is the list of attacks available per category:
      - Charged Attacks: Forward Charged Attack, Up Charged Attack, Down Charged Attack.
      - Special Attacks: Forward Special Attack, Up Special Attack, Down Special Attack.
      - Tilt Attacks: Forward Tilt Attack, Back Tilt Attack, Neutral Tilt Attack, Up Tilt Attack, Down Tilt Attack.
      - Aerial Attacks: Forward Aerial Attack, Back Aerial Attack, Neutral Aerial Attack, Up Aerial Attack, Down Aerial Attack.
      - Grab Attacks: Forward Grab Attack, Back Grab Attack, Up Grab Attack, Down Grab Attack.
      Each of this attacks will be different on each character. If your opponent is behind you and you dont have any movement speed to change your position, you can perform a Back Attack, because the hitbox usually is behind you. Up Attacks usually launches the opponent vertically, if the Up Attack with vertical launch has low knockback, you can combo with other moves without moving, but if the Up Attack has high knockback, the opponent can perform an air dodge, to any direction, but vertical launching moves with high knockback can early K.O the opponent even if the opponent hasnt lost all of its HP.
      There are different types of hit boxes, each of them works differently.
      - Hit Box: Causes damage.
      - Additional Hit Box: Causes additional damage. (Only certain attacks have additional hit boxes)
      - Character Hit Box: Causes damage also in the player box.
      -  Air Hit Box: Causes damage only when your opponent is in the air.
      - Alternate Hit Box: Causes damage if you choose to. (Only certain attack can have alternative hit boxes, like blasting attacks)
      - Trip Box: The squares your character is moving while performing an attack.
      - Drag Trip Box: The same as Trip Box but it drags your opponent with you while you are using the attack.
      - Alternate Trip Box: The squares your character will move if you choose to.
      - Grab Box: The range of the grab, to perform a Grab Attacks, works almost like a Hit Box. (But will have a special animation)
      This is the idea of how the hit box will work, of two different attacks. In which the Player 1 uses an attack with 2x6 squares hit box and Player 2 uses an attack with 1x4 squares hit box.

      This is an example of Player 1 using a Charged Attack with 2x6 squares hitbox on Player 2 that has 5 knockback squares.

      This is an example of Player 1 using an Special Attack on Player 2, that has a Trip Box and a 1x6 square hitbox that has 4 knockback squares.

      This is an example of Player 1 using an Special Attack on Player 2, that has a Dragging Trip Box and a 1x6 square hitbox that has 4 knockback squares.

      This is an example of Player 1 using an Up Tilt Attack on Player 2, that has a 1x1 hitbox with very low knockback, and causes a vertical launch to the opponent.

      This is an example of Player 1 using an Up Tilt Attack on Player 2, that has a 1x1 hitbox with high knockback, and causes a vertical launch to the opponent. But the high knockback let the opponent to air dodge to the right. (Air dodge has 3 movement squares) (If Player 2 had less than the half of its HP it would instanlty K.O it)

      This is an example of Player 1 using a Back Grab on Player 2, with a 1x2 Grab Box and 7 knockback squares.

      This is an example of Final Fantasy Brave Exvius, that's similar of what i plan the game to look like.

      But with a more cartoon look like this, it's just an idea. I accept suggestions.

      Thanks for reading my post, that's the basic idea of the game, i tried to be very simple with the explanation, but if someone its interested on more details i can give them by message. Which platform i can use to develop this game, that works with squares, and damage, HP, attacks, etc.
    • By lolanto lu
      I'm new to DirectX12. I've read document about DirectX12 for some days and now I just want to use it to draw a triangle. But it's not work! I used PIX to debug the program and I found that my pixel shader has no output!. I don't know if there's something wrong with my Pipeline State Object settings.
      this is the function that create the PSO
      /** vs and ps are indices of shader resource which have been compiled with dxc.exe in sm6 and stored in a map called shaders */ void Renderer::CreatePSO(uint32_t vs, uint32_t ps) { D3D12_INPUT_LAYOUT_DESC inputDesc; D3D12_INPUT_ELEMENT_DESC pos; pos.SemanticName = "POSITION"; pos.SemanticIndex = 0; pos.Format = DXGI_FORMAT_R32G32B32_FLOAT; pos.InputSlot = 0; pos.InputSlotClass = D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA; pos.AlignedByteOffset = D3D12_APPEND_ALIGNED_ELEMENT; pos.InstanceDataStepRate = 0; inputDesc.NumElements = 1; inputDesc.pInputElementDescs = &pos; D3D12_RASTERIZER_DESC rasterDesc = {}; /**< use default value */ rasterDesc.FillMode = D3D12_FILL_MODE_SOLID; rasterDesc.CullMode = D3D12_CULL_MODE_NONE; /**< disable cull */ rasterDesc.DepthClipEnable = false; D3D12_GRAPHICS_PIPELINE_STATE_DESC desc = {}; desc.pRootSignature = mRootSignature.Get(); ID3DBlob* const vsb = shaders[vs].Get(); ID3DBlob* const psb = shaders[ps].Get(); desc.VS.BytecodeLength = vsb->GetBufferSize(); desc.VS.pShaderBytecode = vsb->GetBufferPointer(); desc.PS.BytecodeLength = psb->GetBufferSize(); desc.PS.pShaderBytecode = psb->GetBufferPointer(); desc.StreamOutput = {}; desc.BlendState = {}; desc.InputLayout = inputDesc; desc.SampleMask = 0; desc.RasterizerState = rasterDesc; desc.DepthStencilState = {}; /**< use the default value */ desc.DepthStencilState.DepthEnable = false; /**< disable depth testing */ desc.DepthStencilState.StencilEnable = false; /**< disable stencil testing */ desc.IBStripCutValue = D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED; desc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE; desc.NumRenderTargets = 1; desc.RTVFormats[0] = DXGI_FORMAT_R8G8B8A8_UNORM; desc.DSVFormat = DXGI_FORMAT_UNKNOWN; /**< since there is no depth stencil buffer */ desc.SampleDesc.Count = 1; desc.SampleDesc.Quality = 0; desc.NodeMask = 0; desc.CachedPSO = {}; desc.Flags = D3D12_PIPELINE_STATE_FLAG_NONE; if (FAILED(mDevice->CreateGraphicsPipelineState(&desc, IID_PPV_ARGS(&mPSO)))) throw("create pipeline state failed"); } And this is the function that setting command list for each frame
      void Renderer::Run() { WindowBase::MainLoop = [this](float) { /** Command List setting for each frame */ mCmdList->Reset(mCmdAloc.Get(), nullptr); mCmdList->SetPipelineState(mPSO.Get()); /**< Which is created throgh Function CreatePSO */ /** A constant buffer in the heap that I never use within my shaders */ D3D12_GPU_DESCRIPTOR_HANDLE gpuHandle = mBufDescHeap->GetGPUDescriptorHandleForHeapStart(); ID3D12DescriptorHeap* heaps[] = { mBufDescHeap.Get() }; mCmdList->SetDescriptorHeaps(1, heaps); mCmdList->SetGraphicsRootSignature(mRootSignature.Get()); mCmdList->SetGraphicsRootDescriptorTable(0, gpuHandle); /** Vertex And Index Buffers setting */ mCmdList->IASetVertexBuffers(0, 1, &mVtxBufView); mCmdList->IASetIndexBuffer(&mIdxBufView); mCmdList->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); /** Viewport and Scissor Rect settings. mWidth = 300 and mHeight = 300. */ D3D12_VIEWPORT viewport = {}; viewport.Height = mHeight; viewport.Width = mWidth; viewport.MaxDepth = 1.0f; viewport.MinDepth = 0.0f; viewport.TopLeftX = 0; viewport.TopLeftY = 0; mCmdList->RSSetViewports(1, &viewport); D3D12_RECT scissorRect; scissorRect.bottom = mHeight; scissorRect.right = mWidth; scissorRect.top = scissorRect.left = 0; mCmdList->RSSetScissorRects(1, &scissorRect); D3D12_RESOURCE_BARRIER barrier; barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; barrier.Transition.pResource = mRtvs[mSwapChain->GetCurrentBackBufferIndex()].Get(); barrier.Transition.Subresource = 0; barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_PRESENT; barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET; mCmdList->ResourceBarrier(1, &barrier); D3D12_CPU_DESCRIPTOR_HANDLE rtvHandle = mRtvDescHeap->GetCPUDescriptorHandleForHeapStart(); rtvHandle.ptr += mRtvDescHeapSize * mSwapChain->GetCurrentBackBufferIndex(); static float clearColor[] = { 0.2f, 0.4f, 0.6f, 1.0f }; mCmdList->ClearRenderTargetView(rtvHandle, clearColor, 0, nullptr); /** no depth stencil buffer here, since i don't want to use depth testing */ mCmdList->OMSetRenderTargets(1, &rtvHandle, false, nullptr); mCmdList->DrawIndexedInstanced(3, 1, 0, 0, 0); barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET; barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_PRESENT; mCmdList->ResourceBarrier(1, &barrier); mCmdList->Close(); ID3D12CommandList* list[] = { mCmdList.Get() }; mCmdQue->ExecuteCommandLists(1, list); mSwapChain->Present(1, 0); /** Waiting until above commands were executed */ synchronizationCPU(mCmdQue.Get(), mFence.Get(), mNextFenceValue, mFenceEventHandle); }; win->Run(); /** start window's main loop */ } And here is my simplest vertex shader and pixel shader(I used dxc.exe to compile it in Shader Model 6_0)
      ///////////////////////////////// // VERTEX SHADER ///////////////////////////////// float4 main( float3 pos : POSITION ) : SV_POSITION { return float4(pos, 1.0f); } ///////////////////////////////// // PIXEL SHADER ///////////////////////////////// float4 main() : SV_TARGET { return float4(1.0f, 1.0f, 1.0f, 1.0f); } Vertex buffer and Index buffer are also very simple
      std::array<float, 9> VtxData = { -.5f, 0.0f, 0.0f, 0.0f, .5f, 0.0f, .5f, 0.0f, 0.0f }; std::array<uint32_t, 3> IdxData = { 0, 1, 2 };  
      By the way, I have used the debug layer and there is no error or warning message. When I try to use PIX to debug the pixel that should be inside the triangle, it warn me that "Shader Debugging returned no invocation records. Check that your selected pixel, vertex, or thread exists and was executed on this draw call". 
      My Vertex Shader has the correct output which should not be culled anymore

      Hope anybody can give me some suggestions to do more test. Thanks!!! (Seriously, DirectX12 is really harder than DirectX11...)
    • By Javi Raijin
      Hey! I feel spam, but I'm doing a project to draw all the gods of Nordic mythology to make an app that collects all the information about them and then add creatures and heroes.  All the images and the interface will be created by me, unlike the other applications that take images of the internet.
      Any support I would appreciate
      PATREON: https://www.patreon.com/raijinsillustrations
      Odin the god of gods

    • By Uttam Kushwah
      i am trying to make a basic rts with 100 vs 100 character, but as in rts we need box selection for picking multiple units, and if we
      are in perspective projection we need to define the frustum against the camera where it is defined by the cursor position.
       
      now my question is i am somehow able to get eight vertices in the 3d world that defines frustum against which collision should be checked
      but i don't know how to put that eight vertices in the bullet physics engine,
      should i use the btConvexHullShape, then how am i supposed to fit this eight vertices as a triangular mesh.
      or 
      is there a thing called btFrustumShape or more like it.
      or
      there is a fully another way to do this thing.
       
      i implemented the single click selection via ray casting with bullet.
      one thing more i am un-projecting the mouse coordinates with depth 1.0f and 0.0f first when it is clicked and released which gives
      topleft and bottomright coordinates of the 2d rectangle(selection box).
      thanks in advance.
      excuse me for poor syntax😁.
×

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!