SlideShare a Scribd company logo
Real-world game development
with Ebitengine
- How to make the best-selling Go game
Daigo Sato
All of our games are
made with Ebitengine.
https://ebiten.org/
It works on Nintendo Switch™!
Compiling a Go program into a native binary for Nintendo Switch™
https://ebiten.org/blog/native_compiling_for_nintendo_switch.html
Why Go?
?
Go Gopher by Renee French is
licensed under the Creative
Commons Attribution 3.0 License.
Number of reasons NOT to use
Go for Game Development
Back then (2017)
● No widely used game engines for Go existed
● No IDE like Unity3D/Unreal was available
● Not many 3rd party libraries were available for game development
● There were only small communities
● There is no official Go support on any console
● Daigo had professional experience in Unity3D and had no clue about
Go
Hi, Daigo!
Why don’t you use my
OSS game library
written in Go for your
new games!?
Dude,
It does not make
sense to use Go
for Game
Development
Hajime Hoshi Daigo Sato
You can learn Go
quickly, you are a
smart man!!
I’ll help writing the RPG
engine as well, deal?
Hmm?
It sounds good
actually... And you are
right, a smart person
should learn Go!
Hajime Hoshi Daigo Sato
I decided to use Go
So many challenges
● The game library (Ebitengine) did not have any multi-platform
support yet, it needed to be ported to every platform we wanted to
sell our game.
● The OSS was still immature, unstable, performance problems
○ Not reaching 30 FPS for a simple 2D game
○ No support for mp3, ogg
○ QA in production (Using our players as QA)
● If Hajime is bored with Ebiten, my business is over
※ all info above is based on the situation of the year of 2016
All of them above are unnecessary if you used Unity3D or Unreal
Was it worth it?
?
Hajime is Happy
Hajime Hoshi
● Used Odencat games to test Ebitengine
● Odencat games being the Demo for Ebitengine
● Bear’s Restaurant proves Ebitengine runs on
Nintendo Switch™
● Someone is Dogfooding your OSS
● Fun and comfortable working experience with Go
● Gives energy to his life
Daigo is ...
Daigo Sato
Daigo is Happy
Daigo Sato
● Very fast iteration with very short compile time.
● The limitation rather gave the power
● Being able to borrow the super talented engineer’s
power
● Have the feeling of full-control
○ Closer to native
○ High Maintainability / Portability
○ Dedication for crash-free
● Homebrew game engine is good for mental health
Chicken Egg Problem
We’ve grown together
How we make games
We have to make many games
In a meaningful way
Evolve games
Clock of Atonement
Ported the existing RPGMaker2000 game
Bluebird of Happiness
Prove if we can make an escape room game / implemented sponsor system
Bear’s Restaurant
Support edge to edge experience for all devices / Ads Minigame System
Fishing Paradiso
Prove we can make more non-RPG games
Write once,
Run Everywhere
Odencat Game Runtime
Native Layer
IAP / Ads / Analytics / Storage / ...
Game Data
Odencat RPG Runtime
Common Logic / Game Logic
ObjC/Java/C++
Go + Ebitengine
msgpack
per platform
one
per game
For each game, we are just swapping the game data
♫
Game Data
Music
Graphics
Scripts
.ogg
.png
.json
RPG Editor
● ReactJS + Electron
● Very similar to RPG Maker
series
● Build a game only with
commands
● Non-engineers can make
games
Animation Tool
● Pure Go tool
● Make keyframe animations
● Let artist make animations
without using the RPG
Editor
Switch target to make different builds.
The same Go code runs for
every game & every platform
One improvement for All
New Feature / Optimization / Crash fix / SDK Update
Test in Production
Sharing the codebase enabled us to use
our less popular games to test new features/updates.
OK OK
Wrap up
Take away
● Solve the Chicken-Egg Problem if you build OSS
● I you develop everything from scratch, you should
have a good reason to do so.
● Making a game with Go is fun
Add to Wishlist NOW!
@daigo
Follow me on Twitter!

More Related Content

What's hot

ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
 
RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装
Koji Morikawa
 
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリングなぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリング
Satoshi Kodaira
 
Epic Online Services でできること
Epic Online Services でできることEpic Online Services でできること
Epic Online Services でできること
エピック・ゲームズ・ジャパン Epic Games Japan
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメYoji Kanno
 
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かすドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
増田 亨
 
ゲーム制作初心者が知るべき8つのこと
ゲーム制作初心者が知るべき8つのことゲーム制作初心者が知るべき8つのこと
ゲーム制作初心者が知るべき8つのこと
MASA_T_O
 
Riderはいいぞ!
Riderはいいぞ!Riderはいいぞ!
Riderはいいぞ!
UnityTechnologiesJapan002
 
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
SEGADevTech
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
UnityTechnologiesJapan002
 
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
エピック・ゲームズ・ジャパン Epic Games Japan
 
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTipsUnityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
Unity Technologies Japan K.K.
 
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
torisoup
 
UE4 MultiPlayer Online Deep Dive 基礎編1 -Getting Started- (historia様ご講演) #UE4DD
UE4 MultiPlayer Online Deep Dive 基礎編1 -Getting Started-  (historia様ご講演) #UE4DDUE4 MultiPlayer Online Deep Dive 基礎編1 -Getting Started-  (historia様ご講演) #UE4DD
UE4 MultiPlayer Online Deep Dive 基礎編1 -Getting Started- (historia様ご講演) #UE4DD
エピック・ゲームズ・ジャパン Epic Games Japan
 
実践イカパケット解析
実践イカパケット解析実践イカパケット解析
実践イカパケット解析
Yuki Mizuno
 
コールバックと戦う話
コールバックと戦う話コールバックと戦う話
コールバックと戦う話
torisoup
 
GPU最適化入門
GPU最適化入門GPU最適化入門
GPU最適化入門
Takahiro KOGUCHI
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
Fixstars Corporation
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
 
RustによるGPUプログラミング環境
RustによるGPUプログラミング環境RustによるGPUプログラミング環境
RustによるGPUプログラミング環境
KiyotomoHiroyasu
 

What's hot (20)

ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装
 
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリングなぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリング
 
Epic Online Services でできること
Epic Online Services でできることEpic Online Services でできること
Epic Online Services でできること
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
 
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かすドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
 
ゲーム制作初心者が知るべき8つのこと
ゲーム制作初心者が知るべき8つのことゲーム制作初心者が知るべき8つのこと
ゲーム制作初心者が知るべき8つのこと
 
Riderはいいぞ!
Riderはいいぞ!Riderはいいぞ!
Riderはいいぞ!
 
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
 
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
 
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTipsUnityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
 
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
 
UE4 MultiPlayer Online Deep Dive 基礎編1 -Getting Started- (historia様ご講演) #UE4DD
UE4 MultiPlayer Online Deep Dive 基礎編1 -Getting Started-  (historia様ご講演) #UE4DDUE4 MultiPlayer Online Deep Dive 基礎編1 -Getting Started-  (historia様ご講演) #UE4DD
UE4 MultiPlayer Online Deep Dive 基礎編1 -Getting Started- (historia様ご講演) #UE4DD
 
実践イカパケット解析
実践イカパケット解析実践イカパケット解析
実践イカパケット解析
 
コールバックと戦う話
コールバックと戦う話コールバックと戦う話
コールバックと戦う話
 
GPU最適化入門
GPU最適化入門GPU最適化入門
GPU最適化入門
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
RustによるGPUプログラミング環境
RustによるGPUプログラミング環境RustによるGPUプログラミング環境
RustによるGPUプログラミング環境
 

Similar to Real-world game development with Ebitengine - How to make the best-selling Go game

How We Won Gamedev By Rolling Our Own Tech (no notes)
How We Won Gamedev By Rolling Our Own Tech (no notes)How We Won Gamedev By Rolling Our Own Tech (no notes)
How We Won Gamedev By Rolling Our Own Tech (no notes)
Mihai Gosa
 
So you (think you) want to work in video games
So you (think you) want to work in video gamesSo you (think you) want to work in video games
So you (think you) want to work in video games
Sven Charleer
 
I Develop Videogames
I Develop VideogamesI Develop Videogames
I Develop Videogames
Christian Chomiak
 
DSC RNGPIT - Getting Started with Game Development Day 1
DSC RNGPIT - Getting Started with Game Development Day 1DSC RNGPIT - Getting Started with Game Development Day 1
DSC RNGPIT - Getting Started with Game Development Day 1
DeepMevada1
 
Swarming Zombies
Swarming ZombiesSwarming Zombies
Swarming Zombies
pratik_tofanyou
 
Brass Monkey Couch Multiplayer
Brass Monkey Couch MultiplayerBrass Monkey Couch Multiplayer
Brass Monkey Couch Multiplayer
Francois Laberge
 
Getting Started with Python Workshop Part 1
Getting Started with Python Workshop Part 1Getting Started with Python Workshop Part 1
Getting Started with Python Workshop Part 1
CEGD
 
Mobile game design: What makes it different?
Mobile game design: What makes it different?Mobile game design: What makes it different?
Mobile game design: What makes it different?
Devin Becker
 
The 8 steps to create a board game on Board Game Arena
The 8 steps to create a board game on Board Game ArenaThe 8 steps to create a board game on Board Game Arena
The 8 steps to create a board game on Board Game Arena
Board Game Arena
 
BGA Studio Guidelines
BGA Studio GuidelinesBGA Studio Guidelines
BGA Studio Guidelines
Board Game Arena
 
Jakarta XR Meetup 13 | Digital Happiness deck
Jakarta XR Meetup 13 | Digital Happiness deckJakarta XR Meetup 13 | Digital Happiness deck
Jakarta XR Meetup 13 | Digital Happiness deck
Nico Alyus
 
RfA - Manual
RfA - ManualRfA - Manual
RfA - Manual
Theerasan Tonthongkam
 
Kodu Together: Video Game Programming & Publishing
Kodu Together: Video Game Programming & PublishingKodu Together: Video Game Programming & Publishing
Kodu Together: Video Game Programming & Publishing
Nick Tanzi
 
Insight
InsightInsight
Python games
Python gamesPython games
Python games
molw
 
Street runner final
Street runner finalStreet runner final
Street runner final
Kumar Narayan
 
Introduction to game development
Introduction to game developmentIntroduction to game development
Introduction to game development
Gaetano Bonofiglio
 
The importance of just-in-time operation of social games
The importance of just-in-time operation of social gamesThe importance of just-in-time operation of social games
The importance of just-in-time operation of social games
action.vn
 
OGDC2012 Just-in-time Operation in Social Games_Mr.Eiji Okuda_Glooops
OGDC2012 Just-in-time Operation in Social Games_Mr.Eiji Okuda_GlooopsOGDC2012 Just-in-time Operation in Social Games_Mr.Eiji Okuda_Glooops
OGDC2012 Just-in-time Operation in Social Games_Mr.Eiji Okuda_Glooops
Buff Nguyen
 
iPad Game Design -- Develop Liverpool Dec' 2011
iPad Game Design -- Develop Liverpool Dec' 2011iPad Game Design -- Develop Liverpool Dec' 2011
iPad Game Design -- Develop Liverpool Dec' 2011
garethjenkins
 

Similar to Real-world game development with Ebitengine - How to make the best-selling Go game (20)

How We Won Gamedev By Rolling Our Own Tech (no notes)
How We Won Gamedev By Rolling Our Own Tech (no notes)How We Won Gamedev By Rolling Our Own Tech (no notes)
How We Won Gamedev By Rolling Our Own Tech (no notes)
 
So you (think you) want to work in video games
So you (think you) want to work in video gamesSo you (think you) want to work in video games
So you (think you) want to work in video games
 
I Develop Videogames
I Develop VideogamesI Develop Videogames
I Develop Videogames
 
DSC RNGPIT - Getting Started with Game Development Day 1
DSC RNGPIT - Getting Started with Game Development Day 1DSC RNGPIT - Getting Started with Game Development Day 1
DSC RNGPIT - Getting Started with Game Development Day 1
 
Swarming Zombies
Swarming ZombiesSwarming Zombies
Swarming Zombies
 
Brass Monkey Couch Multiplayer
Brass Monkey Couch MultiplayerBrass Monkey Couch Multiplayer
Brass Monkey Couch Multiplayer
 
Getting Started with Python Workshop Part 1
Getting Started with Python Workshop Part 1Getting Started with Python Workshop Part 1
Getting Started with Python Workshop Part 1
 
Mobile game design: What makes it different?
Mobile game design: What makes it different?Mobile game design: What makes it different?
Mobile game design: What makes it different?
 
The 8 steps to create a board game on Board Game Arena
The 8 steps to create a board game on Board Game ArenaThe 8 steps to create a board game on Board Game Arena
The 8 steps to create a board game on Board Game Arena
 
BGA Studio Guidelines
BGA Studio GuidelinesBGA Studio Guidelines
BGA Studio Guidelines
 
Jakarta XR Meetup 13 | Digital Happiness deck
Jakarta XR Meetup 13 | Digital Happiness deckJakarta XR Meetup 13 | Digital Happiness deck
Jakarta XR Meetup 13 | Digital Happiness deck
 
RfA - Manual
RfA - ManualRfA - Manual
RfA - Manual
 
Kodu Together: Video Game Programming & Publishing
Kodu Together: Video Game Programming & PublishingKodu Together: Video Game Programming & Publishing
Kodu Together: Video Game Programming & Publishing
 
Insight
InsightInsight
Insight
 
Python games
Python gamesPython games
Python games
 
Street runner final
Street runner finalStreet runner final
Street runner final
 
Introduction to game development
Introduction to game developmentIntroduction to game development
Introduction to game development
 
The importance of just-in-time operation of social games
The importance of just-in-time operation of social gamesThe importance of just-in-time operation of social games
The importance of just-in-time operation of social games
 
OGDC2012 Just-in-time Operation in Social Games_Mr.Eiji Okuda_Glooops
OGDC2012 Just-in-time Operation in Social Games_Mr.Eiji Okuda_GlooopsOGDC2012 Just-in-time Operation in Social Games_Mr.Eiji Okuda_Glooops
OGDC2012 Just-in-time Operation in Social Games_Mr.Eiji Okuda_Glooops
 
iPad Game Design -- Develop Liverpool Dec' 2011
iPad Game Design -- Develop Liverpool Dec' 2011iPad Game Design -- Develop Liverpool Dec' 2011
iPad Game Design -- Develop Liverpool Dec' 2011
 

Recently uploaded

UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemUI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
Peter Muessig
 
What next after learning python programming basics
What next after learning python programming basicsWhat next after learning python programming basics
What next after learning python programming basics
Rakesh Kumar R
 
How Can Hiring A Mobile App Development Company Help Your Business Grow?
How Can Hiring A Mobile App Development Company Help Your Business Grow?How Can Hiring A Mobile App Development Company Help Your Business Grow?
How Can Hiring A Mobile App Development Company Help Your Business Grow?
ToXSL Technologies
 
Oracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptxOracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptx
Remote DBA Services
 
Unveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdfUnveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdf
brainerhub1
 
fiscal year variant fiscal year variant.
fiscal year variant fiscal year variant.fiscal year variant fiscal year variant.
fiscal year variant fiscal year variant.
AnkitaPandya11
 
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
kalichargn70th171
 
WWDC 2024 Keynote Review: For CocoaCoders Austin
WWDC 2024 Keynote Review: For CocoaCoders AustinWWDC 2024 Keynote Review: For CocoaCoders Austin
WWDC 2024 Keynote Review: For CocoaCoders Austin
Patrick Weigel
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
Octavian Nadolu
 
YAML crash COURSE how to write yaml file for adding configuring details
YAML crash COURSE how to write yaml file for adding configuring detailsYAML crash COURSE how to write yaml file for adding configuring details
YAML crash COURSE how to write yaml file for adding configuring details
NishanthaBulumulla1
 
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
Bert Jan Schrijver
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
Philip Schwarz
 
E-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet DynamicsE-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet Dynamics
Hornet Dynamics
 
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
XfilesPro
 
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdfTop Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
VALiNTRY360
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
Remote DBA Services
 
UI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design SystemUI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design System
Peter Muessig
 
Microservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we workMicroservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we work
Sven Peters
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
Rakesh Kumar R
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
rodomar2
 

Recently uploaded (20)

UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemUI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
 
What next after learning python programming basics
What next after learning python programming basicsWhat next after learning python programming basics
What next after learning python programming basics
 
How Can Hiring A Mobile App Development Company Help Your Business Grow?
How Can Hiring A Mobile App Development Company Help Your Business Grow?How Can Hiring A Mobile App Development Company Help Your Business Grow?
How Can Hiring A Mobile App Development Company Help Your Business Grow?
 
Oracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptxOracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptx
 
Unveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdfUnveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdf
 
fiscal year variant fiscal year variant.
fiscal year variant fiscal year variant.fiscal year variant fiscal year variant.
fiscal year variant fiscal year variant.
 
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
 
WWDC 2024 Keynote Review: For CocoaCoders Austin
WWDC 2024 Keynote Review: For CocoaCoders AustinWWDC 2024 Keynote Review: For CocoaCoders Austin
WWDC 2024 Keynote Review: For CocoaCoders Austin
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
 
YAML crash COURSE how to write yaml file for adding configuring details
YAML crash COURSE how to write yaml file for adding configuring detailsYAML crash COURSE how to write yaml file for adding configuring details
YAML crash COURSE how to write yaml file for adding configuring details
 
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
 
E-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet DynamicsE-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet Dynamics
 
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
 
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdfTop Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
 
UI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design SystemUI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design System
 
Microservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we workMicroservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we work
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
 

Real-world game development with Ebitengine - How to make the best-selling Go game

  • 1. Real-world game development with Ebitengine - How to make the best-selling Go game Daigo Sato
  • 2.
  • 3. All of our games are made with Ebitengine. https://ebiten.org/
  • 4. It works on Nintendo Switch™!
  • 5. Compiling a Go program into a native binary for Nintendo Switch™ https://ebiten.org/blog/native_compiling_for_nintendo_switch.html
  • 6. Why Go? ? Go Gopher by Renee French is licensed under the Creative Commons Attribution 3.0 License.
  • 7. Number of reasons NOT to use Go for Game Development Back then (2017) ● No widely used game engines for Go existed ● No IDE like Unity3D/Unreal was available ● Not many 3rd party libraries were available for game development ● There were only small communities ● There is no official Go support on any console ● Daigo had professional experience in Unity3D and had no clue about Go
  • 8. Hi, Daigo! Why don’t you use my OSS game library written in Go for your new games!? Dude, It does not make sense to use Go for Game Development Hajime Hoshi Daigo Sato
  • 9. You can learn Go quickly, you are a smart man!! I’ll help writing the RPG engine as well, deal? Hmm? It sounds good actually... And you are right, a smart person should learn Go! Hajime Hoshi Daigo Sato
  • 10. I decided to use Go
  • 11. So many challenges ● The game library (Ebitengine) did not have any multi-platform support yet, it needed to be ported to every platform we wanted to sell our game. ● The OSS was still immature, unstable, performance problems ○ Not reaching 30 FPS for a simple 2D game ○ No support for mp3, ogg ○ QA in production (Using our players as QA) ● If Hajime is bored with Ebiten, my business is over ※ all info above is based on the situation of the year of 2016 All of them above are unnecessary if you used Unity3D or Unreal
  • 12. Was it worth it? ?
  • 13. Hajime is Happy Hajime Hoshi ● Used Odencat games to test Ebitengine ● Odencat games being the Demo for Ebitengine ● Bear’s Restaurant proves Ebitengine runs on Nintendo Switch™ ● Someone is Dogfooding your OSS ● Fun and comfortable working experience with Go ● Gives energy to his life
  • 15. Daigo is Happy Daigo Sato ● Very fast iteration with very short compile time. ● The limitation rather gave the power ● Being able to borrow the super talented engineer’s power ● Have the feeling of full-control ○ Closer to native ○ High Maintainability / Portability ○ Dedication for crash-free ● Homebrew game engine is good for mental health
  • 18. How we make games
  • 19. We have to make many games
  • 21. Evolve games Clock of Atonement Ported the existing RPGMaker2000 game Bluebird of Happiness Prove if we can make an escape room game / implemented sponsor system Bear’s Restaurant Support edge to edge experience for all devices / Ads Minigame System Fishing Paradiso Prove we can make more non-RPG games
  • 23. Odencat Game Runtime Native Layer IAP / Ads / Analytics / Storage / ... Game Data Odencat RPG Runtime Common Logic / Game Logic ObjC/Java/C++ Go + Ebitengine msgpack per platform one per game
  • 24. For each game, we are just swapping the game data ♫ Game Data Music Graphics Scripts .ogg .png .json
  • 25. RPG Editor ● ReactJS + Electron ● Very similar to RPG Maker series ● Build a game only with commands ● Non-engineers can make games
  • 26. Animation Tool ● Pure Go tool ● Make keyframe animations ● Let artist make animations without using the RPG Editor
  • 27. Switch target to make different builds. The same Go code runs for every game & every platform
  • 28. One improvement for All New Feature / Optimization / Crash fix / SDK Update
  • 29. Test in Production Sharing the codebase enabled us to use our less popular games to test new features/updates. OK OK
  • 31. Take away ● Solve the Chicken-Egg Problem if you build OSS ● I you develop everything from scratch, you should have a good reason to do so. ● Making a game with Go is fun

Editor's Notes

  1. In order to develop a successful OSS, it is necessary to solve the Chicken-Egg Problem. Evolving with your customer can be a good strategy. Making a game is hard, if you develop everything from scratch, you’d better have a good reason to do so. Making a game with Go is fun. It is true that I could’ve achieved what I’ve done with other languages, but it is good for your mental health if you use a language with a good philosophy.