# Bowdown is now open source!

**URL:** <https://discourse.threejs.org/t/bowdown-is-now-open-source/12724>\
**Category:** Showcase\
**Tags:** game-dev\
**Created:** [February 13, 2020, 7:33pm UTC](https://discourse.threejs.org/t/bowdown-is-now-open-source/12724 "2020-02-13T19:33:48Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![Snubber](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/snubber/32/7563_2.png) [@Snubber](https://discourse.threejs.org/u/Snubber)\
**Post date:** [February 13, 2020, 7:33pm UTC](https://discourse.threejs.org/t/bowdown-is-now-open-source/12724/1 "2020-02-13T19:33:48Z")

</div>

Hi All!

I’ve been working on a multiplayer archery survival game for the past 7 months called Bowdown. You can play it at [https://bowdown.io](https://bowdown.io)

I recently made the git repo public: [https://github.com/jacklaplante/bowdown](https://github.com/jacklaplante/bowdown)

So please feel free to check out the code. I try and describe the general organization of the game in the README but don’t hesitate to ask me questions or give feedback.

I hope this can help someone. I might be taking the game down soon because the AWS bill is almost 200$ a month at this point and I’m not making any money from this project.

---

<div class="post-metadata">

**Author:** ![makc3d](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/makc3d/32/10452_2.png) [@makc3d](https://discourse.threejs.org/u/makc3d)\
**Post date:** [February 13, 2020, 8:02pm UTC](https://discourse.threejs.org/t/bowdown-is-now-open-source/12724/2 "2020-02-13T20:02:50Z")

</div>

I seem to remember that AWS offers 1 year free package to new users, so if your friend registers… well. If you had single player mode, you could host directly on github ) And I would not have these:

 ![Screen Shot 2020-02-13 at 22.01.43](https://canada1.discourse-cdn.com/flex035/uploads/threejs/original/2X/0/0f4cfbbe97d3844ab3f8425bfc728dda031f551b.png)

---

<div class="post-metadata">

**Author:** ![Snubber](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/snubber/32/7563_2.png) [@Snubber](https://discourse.threejs.org/u/Snubber)\
**Post date:** [February 13, 2020, 8:54pm UTC](https://discourse.threejs.org/t/bowdown-is-now-open-source/12724/3 "2020-02-13T20:54:40Z")

</div>

[fixed](https://github.com/jacklaplante/bowdown/commit/a45a9d88e76c20a4289e94c3194ab2b8007e5246)

---

<div class="post-metadata">

**Author:** ![Fyrestar](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/fyrestar/32/52793_2.png) [@Fyrestar](https://discourse.threejs.org/u/Fyrestar)\
**Post date:** [February 13, 2020, 11:18pm UTC](https://discourse.threejs.org/t/bowdown-is-now-open-source/12724/4 "2020-02-13T23:18:32Z")

</div>

> [@Snubber](#):
>
> because the AWS bill is almost 200$ a month at this point

I’m a bit confused, is it a multiplayer game?

Edit: nevermind, i just didn’t came across anyone yet 😿

---

<div class="post-metadata">

**Author:** ![DolphinIQ](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/dolphiniq/32/3510_2.png) [@DolphinIQ](https://discourse.threejs.org/u/DolphinIQ)\
**Post date:** [February 14, 2020, 12:23am UTC](https://discourse.threejs.org/t/bowdown-is-now-open-source/12724/5 "2020-02-14T00:23:31Z")

</div>

Hi!  
If the game doesn’t meet the intended scale, then why not switch to a cheaper service? Perhaps it wasnt advertised enough to attract a player base?

But to be perfectly honest the game doesn’t really seem ‘finished’ per se. While the style and vibrant colors are really pretty, the collisions and controls feel super clunky. Also I don’t really like the authoritative client. 🧐  
Obviously its completely fine if its meant to be just a fun game for friends and some internet enthusiasts 😁  
However if your aim is to make money with it, then there is lots of room for improvement. Nothing wrong about that though. We’re all learning here. There are TONS of resources on MMO node.js games, so Im sure, with time, its gonna get much better. Keep at it 😊

I like the concept, so I hope it achieves success 🤩

---

<div class="post-metadata">

**Author:** ![Snubber](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/snubber/32/7563_2.png) [@Snubber](https://discourse.threejs.org/u/Snubber)\
**Post date:** [February 14, 2020, 2:56pm UTC](https://discourse.threejs.org/t/bowdown-is-now-open-source/12724/6 "2020-02-14T14:56:31Z")

</div>

Trust me I know there’s lots of room to improve but as I tried to do more complicated things it started to feel like I was really going against the grain with my decision to not use a mainstream game engine. So I’m exploring Unity now (side note: the multiplayer support is surprisingly terrible so maybe I’ll try Unreal).

My breaking point was when I tried to add non player enemies to the game and trying to figure out how to do a server side nav mesh seemed impossible.

---

<div class="post-metadata">

**Author:** ![Usnul](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/usnul/32/2355_2.png) [@Usnul](https://discourse.threejs.org/u/Usnul)\
**Post date:** [February 14, 2020, 3:19pm UTC](https://discourse.threejs.org/t/bowdown-is-now-open-source/12724/7 "2020-02-14T15:19:12Z")

</div>

Thought I’d chime in about server costs. I have factored this into my development plans for every project I have worked on. Usually it’s a trade-off between development costs and up-keep. You can write a super-optimized server in C++ that will run on a 3$/month VPS, or you can write a node.js server that will require you 200$/month in hardware to run.

If you can write a server in that will be very cheap to run, but it will take you a year vs expensive to run, but 1 week to develop - it’s a tough call sometimes. Usually development speed wins.

---

<div class="post-metadata">

**Author:** ![DolphinIQ](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/dolphiniq/32/3510_2.png) [@DolphinIQ](https://discourse.threejs.org/u/DolphinIQ)\
**Post date:** [February 14, 2020, 4:12pm UTC](https://discourse.threejs.org/t/bowdown-is-now-open-source/12724/8 "2020-02-14T16:12:36Z")

</div>

That got me thinking: How would one go about making a Three.js world state in C++. I guess a completely different engine would be used for that, but how compatible would that be? How much more efficient? 🤔

Probably a matter for a different time (or thread) 😅

---

<div class="post-metadata">

**Author:** ![Snubber](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/snubber/32/7563_2.png) [@Snubber](https://discourse.threejs.org/u/Snubber)\
**Post date:** [February 14, 2020, 4:44pm UTC](https://discourse.threejs.org/t/bowdown-is-now-open-source/12724/9 "2020-02-14T16:44:29Z")

</div>

I’ve put a bit of research into that topic and you can checkout my conversation about it [here](https://discourse.threejs.org/t/looking-for-a-good-solution-for-server-side-navmesh/11142/2)

I actually almost got a working solution too, but it was all so hacky and inefficient.

---

<div class="post-metadata">

**Author:** ![makc3d](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/makc3d/32/10452_2.png) [@makc3d](https://discourse.threejs.org/u/makc3d)\
**Post date:** [February 14, 2020, 5:19pm UTC](https://discourse.threejs.org/t/bowdown-is-now-open-source/12724/10 "2020-02-14T17:19:19Z")

</div>

I saw c++ port of three.js a year ago, because someone hired me to compile a demo with it. It is still client side, but I mean, it is easy to do no-op renderer that only updates the matrices.

---

<div class="post-metadata">

**Author:** ![DolphinIQ](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/dolphiniq/32/3510_2.png) [@DolphinIQ](https://discourse.threejs.org/u/DolphinIQ)\
**Post date:** [February 14, 2020, 6:04pm UTC](https://discourse.threejs.org/t/bowdown-is-now-open-source/12724/11 "2020-02-14T18:04:08Z")

</div>

Oh wow, somehow I did not expect a cpp port 😅  
Do you have a link? Is it one of these [GitHub - bergstr11/three.cpp: yet another C++ port of three.js, based on r86+](https://github.com/bergstr11/three.cpp), [GitHub - jdduke/three\_cpp: A port of three.js to C++](https://github.com/jdduke/three_cpp)?

---

<div class="post-metadata">

**Author:** ![makc3d](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/makc3d/32/10452_2.png) [@makc3d](https://discourse.threejs.org/u/makc3d)\
**Post date:** [February 15, 2020, 12:05am UTC](https://discourse.threejs.org/t/bowdown-is-now-open-source/12724/12 "2020-02-15T00:05:22Z")

</div>

yes, it was something off the github. maybe 2nd one, I basically picked the one that had more examples at a time.

---

<div class="post-metadata">

**Author:** ![Snubber](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/snubber/32/7563_2.png) [@Snubber](https://discourse.threejs.org/u/Snubber)\
**Post date:** [February 21, 2020, 2:59pm UTC](https://discourse.threejs.org/t/bowdown-is-now-open-source/12724/13 "2020-02-21T14:59:23Z")

</div>

I just wanted to add that I realized that about half my server costs were due to the fact that my message size was way bigger than it needed to be. Each client was sending JSON messages every frame to the server. And the server was sending JSON messages to every client, 10 times per second. My messages could have been wayyy smaller if I made packets with a byte array.

Something worth thinking about!

---

<div class="post-metadata">

**Author:** ![makc3d](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/makc3d/32/10452_2.png) [@makc3d](https://discourse.threejs.org/u/makc3d)\
**Post date:** [February 21, 2020, 4:42pm UTC](https://discourse.threejs.org/t/bowdown-is-now-open-source/12724/14 "2020-02-21T16:42:55Z")

</div>

or you can try to use RTCPeerConnection API to exchange the data (yes, it is not only for VOIP or streaming videos (no, I could not find a single working example :))

---

<div class="post-metadata">

**Author:** ![Fyrestar](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/fyrestar/32/52793_2.png) [@Fyrestar](https://discourse.threejs.org/u/Fyrestar)\
**Post date:** [February 21, 2020, 5:22pm UTC](https://discourse.threejs.org/t/bowdown-is-now-open-source/12724/15 "2020-02-21T17:22:22Z")

</div>

There are large scale projects out there working just fine, porting to c++ is really not required at all. I would rather recommend focusing on a reasonable optimized code and solving the actual problems, they don’t lie in js, websockets nor in THREE.

---

<div class="post-metadata">

**Author:** ![makc3d](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/makc3d/32/10452_2.png) [@makc3d](https://discourse.threejs.org/u/makc3d)\
**Post date:** [February 21, 2020, 6:06pm UTC](https://discourse.threejs.org/t/bowdown-is-now-open-source/12724/16 "2020-02-21T18:06:43Z")

</div>

as I understood this, it was not much about porting (to make a desktop c++ client) but running the same (or very similar) logic on the server - and c++ port could help with that
