- 18
- 40 697
Undermountain Dev
Poland
Приєднався 15 лют 2022
Game design videos and devlogs.
This bug haunted me for 7 months | devlog
Want to support me?
Check out Pumpkinman Demo on Steam : store.steampowered.com/app/2564870/Pumpkinman/
Thanks!
Join discord: discord.gg/7Wz4bw258t
socials:
twitter: undermnt_pj
twitch: www.twitch.tv/under_mountain_
github: github.com/jakubpodgorniak
icon used in thumbnail: www.svgrepo.com/svg/491547/arrow-shape-turn-left?edit=true
#gamedev #indie #indiegame #indiegames #gamedesign #imgui #interfacedesign #pixelart
Check out Pumpkinman Demo on Steam : store.steampowered.com/app/2564870/Pumpkinman/
Thanks!
Join discord: discord.gg/7Wz4bw258t
socials:
twitter: undermnt_pj
twitch: www.twitch.tv/under_mountain_
github: github.com/jakubpodgorniak
icon used in thumbnail: www.svgrepo.com/svg/491547/arrow-shape-turn-left?edit=true
#gamedev #indie #indiegame #indiegames #gamedesign #imgui #interfacedesign #pixelart
Переглядів: 1 618
Відео
How games manage references between objects?
Переглядів 688Місяць тому
Want to support me? Play Pumpkinman Demo on Steam and check out the full version if You liked it! store.steampowered.com/app/2564870/Pumpkinman/ Thanks! Join discord: discord.gg/7Wz4bw258t socials: twitter: undermnt_pj twitch: www.twitch.tv/under_mountain_ github: github.com/jakubpodgorniak #gamedev #indie #indiegame #indiegames #gamedesign #imgui #interfacedesign #pixelart
I'm making custom sprite editor | devlog
Переглядів 5572 місяці тому
Pumpkinman Demo will be released at 12.09.2024. This time, a shorter video where I mainly talk about progress I managed to made in my game & engine. Hope You like it. Want to support me? Buy Pumpkinman on Steam : store.steampowered.com/app/2564870/Pumpkinman/ Thanks! Join discord: discord.gg/7Wz4bw258t socials: twitter: undermnt_pj twitch: www.twitch.tv/under_mountain_ github: githu...
What is texture packing?
Переглядів 1,5 тис.3 місяці тому
Pumpkinman Demo will be released at 12.09.2024. Want to support me? Buy Pumpkinman on Steam : store.steampowered.com/app/2564870/Pumpkinman/ Thanks! Join discord: discord.gg/7Wz4bw258t socials: twitter: undermnt_pj twitch: www.twitch.tv/under_mountain_ github: github.com/jakubpodgorniak icons used: uxwing.com/graphic-card-icon/ uxwing.com/microchip-icon/ #gamedevlopment #indie #indi...
I integrated Aseprite with my game engine | devlog
Переглядів 8 тис.3 місяці тому
Want to support me? Buy Pumpkinman on Steam : store.steampowered.com/app/2564870/Pumpkinman/ Thanks! Join discord: discord.gg/7Wz4bw258t socials: twitter: undermnt_pj twitch: www.twitch.tv/under_mountain_ github: github.com/jakubpodgorniak icons used: uxwing.com/image-file-icon/ uxwing.com/writing-pad-line-icon/ uxwing.com/cube-icon/ uxwing.com/steam-icon/ #gamedevlopment #indie #in...
How do modern games handle pixel art?
Переглядів 17 тис.4 місяці тому
Want to support me? Buy Pumpkinman on Steam : store.steampowered.com/app/2564870/Pumpkinman/ Thanks! Join discord: discord.gg/7Wz4bw258t socials: twitter: undermnt_pj twitch: www.twitch.tv/under_mountain_ github: github.com/jakubpodgorniak icon used in thumbnail: www.svgrepo.com/svg/491547/arrow-shape-turn-left?edit=true #gamedev #indie #indiegame #indiegames #gamedesign #imgui #int...
Creating image viewer for my game engine | devlog
Переглядів 4754 місяці тому
Want to support me? Buy Pumpkinman on Steam : store.steampowered.com/app/2564870/Pumpkinman/ Thanks! Join discord: discord.gg/7Wz4bw258t socials: twitter: undermnt_pj twitch: www.twitch.tv/under_mountain_ github: github.com/jakubpodgorniak #gamedev #indie #indiegame #indiegames #gamedesign #imgui #interfacedesign
Types of movement in games
Переглядів 8834 місяці тому
Hi! This weeks video is bit shorter and less technical as I had pretty tight schedule lately, still I hope You like it! Want to support me? Buy Pumpkinman on Steam : store.steampowered.com/app/2564870/Pumpkinman/ Thanks! Join discord: discord.gg/7Wz4bw258t socials: twitter: undermnt_pj twitch: www.twitch.tv/under_mountain_ github: github.com/jakubpodgorniak #gamedev #indie #indiegam...
I made text editor inside my game from scratch | devlog
Переглядів 5015 місяців тому
Want to support me? Buy Pumpkinman on Steam : store.steampowered.com/app/2564870/Pumpkinman/ Thanks! Join discord: discord.gg/7Wz4bw258t socials: twitter: undermnt_pj twitch: www.twitch.tv/under_mountain_ github: github.com/jakubpodgorniak #devlog #gamedev #indie #indiegame #indiegames #gamedesign #zig #gapbuffer #programming
Editing code while game is already running | devlog
Переглядів 3,4 тис.5 місяців тому
Want to support me? Buy Pumpkinman on Steam : store.steampowered.com/app/2564870/Pumpkinman/ Thanks! Join discord: discord.gg/7Wz4bw258t socials: twitter: undermnt_pj twitch: www.twitch.tv/under_mountain_ github: github.com/jakubpodgorniak #gamedev #indie #indiegame #indiegames #gamedesign #imgui #zig Icons used to create animations: uxwing.com/bulb-light-icon/ uxwing.com/cpu-icon/ ...
Making GUI system for my game from scratch | devlog
Переглядів 3,4 тис.6 місяців тому
You can support me by getting Pumpkinman : store.steampowered.com/app/2564870/Pumpkinman/ Join discord: discord.gg/7Wz4bw258t socials: twitter: undermnt_pj twitch: www.twitch.tv/under_mountain_ github: github.com/jakubpodgorniak #gamedev #indie #indiegame #indiegames #gamedesign #imgui #zig
What makes a game engaging? | devlog
Переглядів 1686 місяців тому
You can support me by getting Pumpkinman : store.steampowered.com/app/2564870/Pumpkinman/ Join discord: discord.gg/7Wz4bw258t socials: twitter: undermnt_pj twitch: www.twitch.tv/under_mountain_ github: github.com/jakubpodgorniak #gamedev #indie #indiegame #indiegames #cthulhu #lovecraft #detective #gamedesign
How I designed my game to maximize fun? | devlog
Переглядів 1,4 тис.7 місяців тому
You can support me by getting Pumpkinman : store.steampowered.com/app/2564870/Pumpkinman/ Join discord: discord.gg/7Wz4bw258t socials: twitter: undermnt_pj twitch: www.twitch.tv/under_mountain_ github: github.com/jakubpodgorniak #gamedev #indie #indiegame #indiegames #cthulhu #lovecraft #detective
Become a detective in Lovecraftian 20s | devlog
Переглядів 1707 місяців тому
You can support me by getting Pumpkinman : store.steampowered.com/app/2564870/Pumpkinman/ Join discord: discord.gg/7Wz4bw258t socials: twitter: undermnt_pj twitch: www.twitch.tv/under_mountain_ github: github.com/jakubpodgorniak #gamedev #indie #indiegame #indiegames #cthulhu #lovecraft #detective sources: thumbnail photo: Public Domain Photo of H. P. Lovecraft in 1915 taken for the...
Making new game for the glory of Cthulhu | devlog
Переглядів 6548 місяців тому
You can support me by getting Pumpkinman : store.steampowered.com/app/2564870/Pumpkinman/ Join discord: discord.gg/7Wz4bw258t socials: twitter: undermnt_pj twitch: www.twitch.tv/under_mountain_ github: github.com/jakubpodgorniak #gamedev #indie #indiegame #indiegames
30 hours of programming without sleep | Timelapse
Переглядів 1542 роки тому
30 hours of programming without sleep | Timelapse
Looks good👌
You should try signed distance field (SDF) fonts. They are essentially sprite fonts that are infinitely upscalable and only fail at really small sizes.
I usually use a resolution ratio of 1:1 and then I crop and the rectangle the player can be in that triggers camera movement, camera bounds, is relativ to the screen. or if I do not want different sizes, I render a 3D Console, liek a gameboy and then I place the virtuell screen with a shader on the screen mesh and then I fixed it :3
This is totally worth the extra effort, great work! I actually wrote a parser for the aseprite file spec in my game. The texture atlas, animations, and frame data are also generated/derived directly from imported assprite files. It makes adding assets as simple as saving an aseprite file into a folder without requiring any special UI or manual steps, and I even get autocomplete in my editor for animation names
Sounds great. Maybe someday I'll do the same for my game.
I've been putting off fixing this in my font rendering. I'm glad you solved it for me 😂
Glad, that I could help.
🦔👻
hmmm
First
yey you did it good job
This is more of minimizing the "unfun". Most of which are self-afflicted. So protecting players from themselves, some might say.
What libraries or frameworks are you using in you game engine? I would love to know more about it
It's zig + SDL2 + SDL_image + freetype for font rasterization. Everything else is homemade.
Some interesting approaches, but I predict that localization will be a problem with sprite fonts. Many languages have complex ligatures (multiple characters become one complex character) , composable marks, ... Not sure how this is usually solved for pixel art style game, but I would use a text renderer that correctly handle all the complex rules and post-process it to make it "pixelated"...
Yes, thats true. But that would assume I will support non latin based alphabets (if thats correct term) which I won't do due to lack od resources. If game happens to be success and I can afford proper localiztion, then I will probably also have resources to rework text rendering.
good stuff :P
Thanks!
I'm not sure who your intended audience here is, I'd imagine anyone looking at object interaction isn't really worried about the minutia of RAM allocation. Maybe start the video with some goals, and end with a conclusion, the point you want to get across, i think the subject is interesting but it needs to be tailored to the right audience.
Thanks for the insight. I usually try to keep videos not too technical, so it's not only targeting other game devs. But here I probably get carried out, but on the other hand knowking how allocation works explain some of decision I made in this video, which may be a bit unclear without this knowledge. Maybe this video would work better as fully technical explanation/presentation but I'm explicitly avoiding making such videos.
@@undermountain_dev it's all good, it really depends what you want to get out of your channel, I'm a dev I like the content because of the deep dive stuff but this video felt like it was trying to cater to both sides of the opposite coin
@undermountain_dev For me *personally,* this video is great _because_ of its depth. Surface level videos are already dime a dozen, after all.
@@ultimaxkom8728 I agree, so many dev's just play with engines and don't really get into the weeds of problem solving that we all face, especially when building things without the common engines. I want more of the complex problems and less of the surface level stuff.
Shadow sigma 😮
Indeed
They use a program called pixel renderer
I agree with the other comment, this is very underrated, keep up!
Thanks!
That's the better tool than Unity. You are mrocznaSigma
Now this is a real underrated devlog, is weird to see tools in the own game
Thanks!
Hey! I read the same article, and eventually decided to use the guillotine algorithm, cause it was relatively simple. Also why not use instancing instead of batching?
Yeah, maybe in future I'll improve my approach too, but right now - anything that works. About instancing - that's from my understanding how SDL works, maybe there are ways to easily costumize it and improve performance, but I'm quite certain it won't be neccessary for my game.
Aseprite has a texture packing export option for sprite sheets built in! There's a lot of options for exporting different json metadata too. You just need to put all your art in one file on different layers and animation frames.
That's interesting. I'm not sure if managing all game's graphic in single .aseprite file would be convenient after some time. But that's helpful knowledge. Thanks :)
@@undermountain_dev yeah yours is definitely way more flexible and all kinds of cool features. Still some of the aseprite export options might be helpful for you at the beginning of your process. And most of it works with cli. Like I'm using the trim frames options since my characters have hundreds of frames of all different sizes.
How *do* modern games handle pixel art? ftfy
Idol w końcu nagrał sigma
In general, is a packed texture referenced by ‘indices’ in the code, such as (xtop, xbottom, ytop, ybottom) for a game character? Also, was texture packing the reason why Minecraft’s earlier versions stored all textures in a single file?
1. Kind of like that. I my code I've list of sprites. Sprite have 3 different properties: reference to texture atlas, indices (xtop etc.) - I call this 'clip', and pivot 2. I don't know details about minecraft, but most likely it's true. Also it's simplest solution if there's not that much graphic content in the game. Just load single texture and that's all what's needed.
Im a pixel purist. I cant stand seeing pixel rotate or slip in a game x_x
Understandable. Personally this doesn't bother me so I allow this in my game.
This is very cool, but I am not sure I understand - Does this command constantly output changes to a file - and that fiile is loaded into your engine - and ur engine looks for when that file changed? - What about the layers? Are they lost? It would be amazing to have engine level control of the layers, which would allow for frames of animation generated by tuning layers on and off, but I guess this could also just be another full image in the png sheet. - Not sure I got it all - would be cool to see another vid with more detail.
Yes, layers are unfortunately lost. About updating, right now I have to click 'refresh' or 'f5'. Engine will go through the directory and if the modification timestamp was updated since the last refresh, the new sprite sheet will be exported and loaded into memory. But it's possible to detect those changes in separate thread and update sprite sheets without the need to click anything. Idea with with having access to layers is nice, and maybe Aseprite already have export option to keep layers separated.
Nice workflow improvement! I've seen in Rust that there are some libraries (known as crates) for directly reading the .aseprite file. I'd like to try implementing that and see how it goes. It'd remove the need for the spritesheet step entirely. Could be something worth exploring for your codebase and language!
Yeah, it would be nice. Right now I'm planning to edit animations inside my engine using those sprite sheets, but definitely, I could load them directly from .aseprite.
Ohhh man, i was expecting a real time aseprite parser XD. Basicly all i wanted is be able to change indexes colors on the go to be able to simulate old game hardware. Maybe i'l give it a go someday. But nice solution for fast exporting 👍👍
Thanks and sorry to disappoint ;) maybe someday I'll write a pareser, but right now that's all I need.
W jaki sposób działa oświetlenie w tej grze?
Postaram się mniej więcej wyjaśnić, ale jest tutaj kilka mechanizmów. Nie jest też to idealne rozwiązanie, ale takie, które uznałem, że jest wystarczające. Najpewniej istnieją inne lepsze, ale wolałem też zostać przy takim, które w miarę rozumiem, a nie brać gotowy shader, którego nie mam pojęcia jak mogę zmodyfikować. 1. Kod shadera tutaj: gist.github.com/jakubpodgorniak/f27e90d1706ff0504d7b18175b378142 2. Do shadera przekazuje kolor, który nadaje barwę całej scenie (ambientColor) 3. Przekazywana jest też tablica świateł (max 48), dla każdego ze świateł określana jest pozycja, promień, barwa oraz intensywność. 4. Przekazywana jest też tekstura, na której wyrenderowane są rozmyte inne źródła światła (np. efekty cząsteczkowe) 5. Przekazywana jest kolejna tekstura, na której wyrenderowane jest rozmyte światło z tych widocznych na thumbnail-u zielonych ścianek. 6. Barwy te są kombinowane w jedną (punkt 3 działa dość słabo na zintegrowanych kartach, więc można wyłączyć tą opcję, wtedy wszystkie światła w grze są robione za pomocą pkt 4) Trochę chaotycznie opisane, ale też nie czuję się super mocny jeżeli chodzi o shader-y i to jest jeden z obszarów, w których chcę się mocniej podszkolić.
Oj bratku, leci subik
Dzięki!
I made an aseprite and psd exporter integrated it into my engine too.
I’ve never made a game nor do I plan on making one anytime soon, but I’ve always found it cool how much background thinking and implementing goes on to release a game and have it look good on different screens. I did some web design back in the day and I remember getting stuck on having my webpage fit nicely between pc and phone screens. This was a great video for a small channel like yourself
Thanks! Yeah, it's a topic I was also scratching my head over for quite some time. But after releasing one game I can grasp it pretty well, but still learned I learned a lot just by making this video.
Very smart. These little things end up giving you hundreds of hours to focus on making your game rather than doing repetitive tasks.
Thanks. That's the idea, I hated adding new sprites till the end of Pumpkinman development, so this time I change approach : )
That's very smart.
Thanks! I hope so.
Sounds like you were manually updating the atlas file, how come you are not using texture packer, you should be able to achieve nearly the same workflow
Explain how that would help here please because i just googled what a texture packer is and off the top of my head i'm sure it doesn't solve the issue but i might be wrong just from my quick understanding.
@@ApexJnr This approach is just fine btw, For my workflow use the export function save all selections and frames as pngs, add the texture packer code to my gradle file then in my launch configurations I can choose which folders to include and whether to use the texture packer and that builds the atlas file and loads it in as it boots the game
When working on Pumpkinman I just wasn't planning for the game to grow as it did. So I was doing everything manually, and then didn't want to do revolution in codebase. That's why I wasn't using texture packer, but yes it would save time. For this game I will actually write my own simple texture packer (probably with some naive algorithm - but for my needs it's fine). It will be actually a topic of one of upcoming videos!
The amount of time this must save you. I do everything cave man style.
Nothing wrong with that, I did whole game this way. I just tought this is a cool feature to have.
You’re amazing - +1 sub and I’ll be supporting the journey you’re on! Never give up
Thank You Very Much!
I'm so sorry brother, I love indie devs so much, but please for the love of god research how to say the word "engine", I'm loosing my mind xD
who are you to decide how words are pronounced? let him say engine whichever way he pleases!
Speaks the smooth brained American that only speaks 1 language
I’m sorry brother, I love commenters on indie dev videos so much, but please for the love of god research how to write the word “losing”, I’m losing my mind xD
underrated
Thanks!
how tf do you only have 240 subs???
Thanks! I guess it will take some time to gain momentum.
@@undermountain_dev I saw this vid and subbed! So thats 1 more ^_^
Thanks :)
This is a cliché comment, but I was actually shocked when I finished the video and realized it didn't even have 200 views. Keep up the good work!
Thank You! Glad to hear that.
nice video and good luck on your game👍👍👍👍👍👍👍
Thank You!
great video, i enjoyed watching and i have to say your channel is so underrated!
Thank You Very Much! And good luck with Your dream game!
@@undermountain_dev thank you!
Spooky scary skeleton💀
Yo man that looks like great work! Keep it going!
Thank You Very Much!
Problem with discrete movement on a square grid is is that it creates an eternal question: how many neigbours cell has?
Another useful classification you can make is discrete angle vs continous angle. Like shooting in Dead Cells (2 directions) vs Super Metroid (8 directions) vs Terraria (any angle) is significantly different.
I have seen another nice solution for interpolation - exponentially interpolation. Iirc the formula is newSpritePos = fieldPos + (oldSpritePos - fieldPos) * exp(-speed*deltaTime) Basically, you just multiply distance between sprite position ad field position by factor < 1 and adjust that factor because of variable frame rate. Nice thing about it is that you only need to store sprite position and field position and it's execatlywat you want to access.
Hmm, haven't seen that, but looking at formula it should work nicely, no conversions needed. Maybe I will find chance to test it. Thanks!
🎉🎉
That was insightful to watch, I liked the (current) final implementation especially the part where stuff like collision is handled on the discreet plane level, I feel it make things much easier to code and for performance wise. Would love to hear about benchmark comparison
Thanks!. It's much easier implementation wise, but I don't have any data about performance, unfortunately. The entities movement wasn't bottleneck at any point, so I didn't bother improving it's performance. This change was only driven by how painful it was to work with previous solution. From my experience, I would say second solution is more performant, but without proper tests it's hard to say.