Mythfall Devlog: A bullet-hell browser MMO

Поділитися
Вставка
  • Опубліковано 2 жов 2023
  • ⁍ Play: mythfall.com
    ⁍ Discord: / discord
    ⁍ Patreon: / unitoftime
    ⁍ Github: github.com/sponsors/unitoftime
    ⁍ Twitter: / unitoftime
    // Description
    This week I talk about the current state of Mythfall and all the features I've recently added. Mythfall is a bullet hell browser MMO inspired by games like Realm of the Mad God, Archvale, Enter the Gungeon, and Binding of Isaac. My goal is to make a game with interesting build combinations, and fun, replayable dungeons.
  • Наука та технологія

КОМЕНТАРІ • 58

  • @rmt3589
    @rmt3589 Місяць тому +2

    Reminds me a lot o the dungeons in Mabinogi. Each room can be enered while fight is happening, but many have closted one-way doors. With the standard room, there's a chest in the middle, and opening it locks the room and spawned enemies. Kinda like the trap room in SAO that killed his party, except it's required to progress and is so standard you don't even think about it.

  • @NickLanng
    @NickLanng 8 місяців тому +14

    As someone who's been dabbling with MMO dev in Go, I really want to thank you for this series. Its been very inspiring!

    • @UnitOfTimeYT
      @UnitOfTimeYT  8 місяців тому +4

      Glad it's helped! Yeah I think Go's a great language for gamedev and for networked games specifically; I guess just so long as you aren't expecting super high-fidelity graphics. If you're doing a browser game I highly recommend looking at the Pion WebRTC stack. If you're interested, I even wrote a basic net/conn wrapper around Pion WebRTC to make it a bit easier to use for client-server games. Though it's still a bit rough around the edges (I don't consider myself very expert at WebRTC), you can find it here: github.com/unitoftime/rtcnet
      But if you don't need UDP-level latencies then regular websockets would probably be more stable, lol.

    • @nadercarun
      @nadercarun 8 місяців тому +1

      but is it a great language for gamedev? Can't port to all consoles, and it's hard to avoid cgo as the FFI of Golang is horrible. I'm trying to build a fighting game and just moved to plain old C after wanting desperately to use Golang. Love your content. @@UnitOfTimeYT

    • @UnitOfTimeYT
      @UnitOfTimeYT  8 місяців тому +2

      @nadercarun7636 Haha, Yeah there's definitely some downsides to using Go. You almost definitely will have to use CGO, I guess luckily for me, other more smarter people have abstracted all of OpenGL so I dont have to do it myself. But yeah, you'll lose some performance by choosing Go, but I think for most 2D (even some 3D games) the performance lost by the CGO interface won't be a big factor.
      As for consoles, I actually am not sure. I've never really done console development, so in my head I figured it would be close to PC development. From some research it looks like you have to license SDKs from console providers which seems like it could actually be pretty difficult. It even looks like Godot (And even Raylib) doesn't support console exports out of the box. I guess the biggest concern is wrapping OS calls for things like FS, networking, and rendering. I actually spent an a little bit of time looking into it but its really hard to research. Everything is "You have to sign our NDA". Now I'm even more confused than I started. Curious to know what C libraries you are using that support consoles? I kind of just thought that as long as I could compile an x86 binary I could somehow get it to run on a console, but now I'm not so sure lol

    • @nadercarun
      @nadercarun 8 місяців тому

      @@UnitOfTimeYT Yeah, I'm not sure about the console process, I just know that the Console SDK's are C/C++, so I figured that if I have to call those API's, then using CGO to call them is going to slow me down. With C, you don't have any of those worries, you can call Win32 freely, which is necessary for the genre of game I'm interested in (fighting games), which becomes important when you want to reduce things like input lag and even sound playback; not using abstractions like GLFW/SDL will help to get more fine-grained control over these things which affect my genre. As an example, there's a famous fighting game engine called Ikemen Go, which I was hoping to use, but it suffers from Input Lag and Dropped Frames, whereas the engine it was built off of (Mugen), was written in C and doesn't suffer from these things. Godot doesn't support consoles out of the box because of its open source nature, consoles don't let open source projects have access right out of the gate, so you have to go through these companies. I'm not a fan of Godot at all though, I think it's an object oriented mess, and so I've been following Handmade Hero to write my game from scratch. It's been great (also tedious).

    • @UnitOfTimeYT
      @UnitOfTimeYT  8 місяців тому +3

      Ah yeah. I also found this interesting article about porting ebitengine to switch: ebitengine.org/en/blog/native_compiling_for_nintendo_switch.html
      It does end up looking like a fairly involved process lol

  • @Skeldoor
    @Skeldoor 5 місяців тому +2

    Hey just wanted to drop in and say ive binged your entire series for this game and I'm looking forward to more updates in the future, hope to see you continue! Very cool to see this game evolve. I've always wanted to create an MMO where there's only 1 world and everyone's on it together, might be a balance nightmare but I bet you could parallel process stuff on different servers and then combine it all together in some clever way to have like 20k people all in one world. Add in an osrs style leveling and xp system to this game and I'll be there instantly!

    • @UnitOfTimeYT
      @UnitOfTimeYT  5 місяців тому

      Thanks! Glad to hear you are liking the series! I'm definitely still working on Mythfall, and continually pushing updates to a demo you can play in your browser at mythfall.com/
      1. Yeah 20k would be a lot of people to have in one world. I'm trying to scale to as many as I reasonably can, we'll have to see how far I can get :)
      2. Right now I'm trying to improve and add new progression mechanics. Always happy to hear ideas. Mythfall is a perma-death game, so you do lose some of your progression/items when you die, which makes it hard to do exactly what OSRS does for XP/levelling. I'm a huge fan of OSRS though!

  • @garyadamos
    @garyadamos 8 місяців тому +4

    Dude I loved rotmg but hate how it’s not on the browser anymore, I’m so happy you’re making this!!

    • @UnitOfTimeYT
      @UnitOfTimeYT  8 місяців тому +3

      Haha thanks! Yeah browser games are cool because its just so easy for people to pop in and join. I feel like we're at a great point in technology for online browser-based games to re-emerge. I'm kind of surprised more people don't do it, but maybe there's a reason that I have yet to find out lol

  • @kapoukapoioskapote
    @kapoukapoioskapote 8 місяців тому +2

    Just played a few runs, you are definitely into something here!

    • @UnitOfTimeYT
      @UnitOfTimeYT  8 місяців тому +1

      Thanks! Glad you enjoyed it!

  • @dipereira0123
    @dipereira0123 Місяць тому

    Reminds me of Tibia, damn the nostalgia just kicked in =,)

  • @lucasvieira0101
    @lucasvieira0101 8 місяців тому +3

    Reminds me of Realm of The Mad God, really liked the style!

    • @UnitOfTimeYT
      @UnitOfTimeYT  8 місяців тому +1

      Yeah, its definitely inspired by rotmg in some places!

  • @KegaB3
    @KegaB3 11 днів тому

    Feels like 2D top down dark and darker

  • @nadercarun
    @nadercarun 8 місяців тому +1

    Game was really cool to play. My only gripe was that I didn't know how to pick up items, but overall was superrr cool. My friend LOVED playing Realm of the Mad God

    • @UnitOfTimeYT
      @UnitOfTimeYT  8 місяців тому +2

      Ah thanks for letting me know, I appreciate the feedback. Maybe I'll try and show a little mini tutorial the first time players have a chance to pick things up, just so people know how it works.

  • @moonsteroid
    @moonsteroid 8 місяців тому +2

    very cool!

  • @isengrim_
    @isengrim_ 8 місяців тому

    That's really cool, looking forward to updates!
    I'm wondering, how did you learn the networking aspects to make such a game? There's plenty of resources available to learn how to make games, but multiplayer ones are scarce, specially action games like this that cannot feel laggy.

    • @UnitOfTimeYT
      @UnitOfTimeYT  8 місяців тому

      Thanks! Glad you liked it. Yeah if you want to learn networking for games I'd highly recommend this resource: gafferongames.com/categories/game-networking/
      There's also this article: www.gabrielgambetta.com/client-server-game-architecture.html

  • @ToonedMinecraft
    @ToonedMinecraft Місяць тому

    While the damage percentage loot system makes sense, what might become a problem (this was in RotMG as well) is higher level players just going through low level dungeons and getting all the kills. They deal so much damage so fast that the lower level players cannot hope to reach that threshold.
    To avoid this, you might be able to scale this percentage by relative lvl (for example, a lvl36 player and 2 lvl2s, the lvl40 needs to do 90% of the damage to qualify and the lvl2s only need to do 5%. Of course the numbers would prob be lower already as you probably don't want people to count, you just want them to participate.

    • @UnitOfTimeYT
      @UnitOfTimeYT  Місяць тому

      Yeah this is already a problem in the game right now. I like your idea. I've though about doing something similar so that lower level players can still get drops as long as they try to help. It's a weird balance in games like these where the stronger you are the easier it is to get drops, which makes it harder for newer players to get drops. Then they lose the ability to close the gap

  • @Robbit_
    @Robbit_ 7 місяців тому

    If you don't like The Pits, The Catacombs might be a good option, also its looking great!

    • @UnitOfTimeYT
      @UnitOfTimeYT  7 місяців тому

      Thanks! I actually like that suggestion a lot! Catacombs sounds super cool!

  • @EightSixx
    @EightSixx 8 місяців тому

    nice!

  • @zZGzHD
    @zZGzHD 7 місяців тому

    How do you have a Go game running in the web browser? Is the frontend Javascript or is it exported via WebAssembly or something?

    • @UnitOfTimeYT
      @UnitOfTimeYT  7 місяців тому

      Yeah I compile the game to webassembly. Then I use webgl2 for rendering on an html canvas. Then for networking I use webrtc.

    • @zZGzHD
      @zZGzHD 7 місяців тому

      ​@@UnitOfTimeYTI wasn't even aware Go had web asm, let alone libraries to do games that work in it!

  • @bits360wastaken
    @bits360wastaken 7 місяців тому

    2:20, What format are you using for audio?

    • @UnitOfTimeYT
      @UnitOfTimeYT  7 місяців тому

      I'm using the ogg vorbis format currently. I would use ogg opus but nobody has written a high quality decoder for it yet.

  • @21506ash
    @21506ash Місяць тому

    pog

  • @neuro5261
    @neuro5261 8 місяців тому +1

    can you make a video talking about your server and pricing and how you set it up?

    • @UnitOfTimeYT
      @UnitOfTimeYT  8 місяців тому +2

      Yeah I definitely might do that in the future. But I can give you the high level right now. I basically just use a single node right now. I kind of double my development box as my production box, so the one people play on at mythfall.com is actually the one I test on too (aka, testing in production). Eventually I'll scale outwards so I have at least one proper "test box" in between me and the box that players play on. Because I don't need crazy scale (Less than 100 players over a day, with a peak player count of 3), I decided to stick with something super basic for now: So I all I do is deploy a docker-compose (which is just a collection of docker images each holding a different part of my game) to my single node. Then I use hosthatch for hosting. They had the best CPU / Dollar that I could find out of every other web host out there. Then I just use the $6/month option, and they include 1TB egress bandwidth too which I never have gotten close to.
      Then I host my actual web page (HTML, WASM, and large asset files like music) on firebase. But I actually might need to change because I'm getting close to the 10GB/month download limit (ever since I added music files). Firebase charges a lot for egress bandwidth so I might change to a proper CDN for that. I'm not super sure yet though.
      Happy to answer any other specific question that you have though!

    • @neuro5261
      @neuro5261 8 місяців тому

      @@UnitOfTimeYT can you explain ur process for making a new release and shipping it? am curious what has to be updated each release

    • @UnitOfTimeYT
      @UnitOfTimeYT  8 місяців тому +2

      Sure. Basically:
      1. I have a github action that constantly builds my game server and proxy server docker images. It also builds my wasm/webgl client, my linux client, and my windows client. All assets (minus music files) are embedded in the clients
      2. I have a docker compose script that I manually run which pulls and restarts all of the docker images on the host
      3. After the docker compose script runs I upload my client binaries to my firebase host so that my webpage updates. Then I redeploy that.
      4. For big music files, when I add them I have a separate script to upload them to firebase too. I'll probably formalize that better into my one big mega script eventually though

    • @neuro5261
      @neuro5261 8 місяців тому

      @@UnitOfTimeYT ah okay that's really cool. thank you for being so open

  • @realmoftheminone
    @realmoftheminone 8 місяців тому +1

    Are there reasons to rewrite game to Go-gl, which benefits? I mean why not ebitengine?

    • @UnitOfTimeYT
      @UnitOfTimeYT  8 місяців тому +4

      I actually tried a few gamedev libs when I first started making games in Go: Ebiten, Engo, and Pixel. Stylistically, I preferred Pixel the most, but it didn't have webgl so I ended up writing my own rendering library which was kinda similar to pixel, kinda similar to raylib, but overall not as good as either. But its the one that I use today. Whenever people ask me to recommend them a library for gamedev in Go I almost always recommend Ebitengine, because I feel like that one is probably the best supported and stable (and it's overall pretty great)
      All that said, the only problems I have with ebitengine are mostly preference, and I could maybe work around if I tried enough:
      1. I don't like that it captures my runtime into a separate Update and Render function that gets called. I guess in my game specifically I have kind of tight timing requirements that I want to meet (from server to client and back), so it's really hard for me to give up the control of my game loop. Though If ebiten had some way to be used where I can use it in a more "immediate mode" way, I'd love to know about that.
      2. Minor, but I run relatively slow physics ticks, I don't recall if ebitengine has an easy way to know the render "interpolation value" that the current render tick needs to be executed at to smoothly interpolate multiple render frames inside one physics tick block.
      3. This one I'm not sure if ebiten has a solve for, but I tend to render a lot of geometry that updates frequently (lots of tiles, lots of projectiles, and hopefully lots of players). So I rely heavily on batched and unbatched world geometry, and in that batched world geometry I precalculate depths and render everything to 3D so that I don't have to depth sort everything in my game on the CPU. So essentially I use the depth buffer to do all my sprite sorting. From what I remember this wasn't possible in ebiten, but things may have changed.
      Sorry for the long one. Hope it helped answer your question!

    • @realmoftheminone
      @realmoftheminone 8 місяців тому +2

      @@UnitOfTimeYT Thanks for the detailed answer.

  • @minecraftmotivation9269
    @minecraftmotivation9269 Місяць тому

    Instantly thoughtof realm, this looks cool tho

    • @UnitOfTimeYT
      @UnitOfTimeYT  Місяць тому

      Thanks! Yeah, Mythfall is very inspired by ROTMG. But I'm doing things a bit differently

  • @mayedalshamsi
    @mayedalshamsi 15 днів тому

    I'm new to game dev, and everyone keeps telling me not to try to make an mmo. Is it as hard as people say, or are they exaggerating?

    • @UnitOfTimeYT
      @UnitOfTimeYT  14 днів тому +1

      If you don't understand programming and don't know how computers work, then making an MMO will be incredibly difficult. I'd give this advice: If you haven't yet made a big project, then make a small project first. Don't care about quality, or making anything perfect. Just make it and ship it. Learn from your mistakes, document them and move onto the next game
      Obviously, if you want to see how hard some of the portions are, you can watch the videos on my channel to see how I struggled through them. If you really want to make an MMO, then I'd recommend starting by making simple games and building up to it. What you learn is invaluable to reaching your final goal.

    • @KegaB3
      @KegaB3 11 днів тому +1

      Yeah agreed, I'd say pick two or three core mechanics you'd like to play with and get those working and call it good, then do it again with 3 different mechanics in a new projects, then get those 6 working together in ANOTHER fresh project.
      Keep doing that progression and eventually you'll be ready to take on the behemoth that is multiplayer coding.

  • @casketchan
    @casketchan 2 місяці тому

    Guilds ?

    • @UnitOfTimeYT
      @UnitOfTimeYT  2 місяці тому +1

      There's no guilds in the game right now. but I think it'd be a cool feature to add eventually!

    • @casketchan
      @casketchan Місяць тому

      Hello played the game rn i enjoy it

  • @KegaB3
    @KegaB3 11 днів тому

    Rename the pits to Tartarus

  • @nahfamimgood
    @nahfamimgood 7 місяців тому

    $6 digital ocean droplet?

    • @UnitOfTimeYT
      @UnitOfTimeYT  7 місяців тому

      I'm actually using hosthatch for my hosting currently. They seemed to be a pretty good price for performance

  • @eyden-ty5it
    @eyden-ty5it 6 місяців тому

    Mobil?

    • @UnitOfTimeYT
      @UnitOfTimeYT  6 місяців тому

      Sorry. The game doesn't work well on mobile. Though some phones might be able to load the website, none of the controls and buttons get rescaled to work on mobile. Maybe one day though!

  • @protn-ct1ms
    @protn-ct1ms 7 місяців тому

    I don't understand how my computer runs gta 5 but this game is slow in the browser.

    • @UnitOfTimeYT
      @UnitOfTimeYT  7 місяців тому

      Lol, yeah there's definitely some more optimizing I can do. It's likely a combination of things: 1. I could do a better job optimizing the rendering loop. 2. Browsers tabs can get deprioritized if you have other apps running 3. Browser games have to run in a single thread where desktop games can use multiple threads. But I'll keep working on it. Thanks for letting me know!

    • @protn-ct1ms
      @protn-ct1ms 7 місяців тому

      @@UnitOfTimeYT The things that most affected my experience in the game were that the main character walks laggy (in jumps), and that the sound is very distorted. And a detail that is a bit annoying is that the interface (the map and inventory take up a lot of space).
      Here is a video of my perspective, I hope my feedback is helpful.
      drive.google.com/file/d/1ieQpqjKFFZfCtluvG4-G4zdwT_s22cyZ/view?usp=sharing