Integrate Godot and Moralis for NFT Games

2021-12-16
godot moralis

Recently, I found the ChainSafe Gaming SDK for Unity.
It’s amazing for creating Dapps or NFT games.

However, I personally like Godot not Unity - I think that there are pros and cons, but at least for 2D games, my personal preference - so I decided to integrate Godot and Moralis (an awesome platform for Dapps or NFT Games).

This article is for HTML5 Games Only by the way.
And a detailed explanation of Godot and Moralis is differenct from the main point of here so I’ll omit it. If you’re curious, please see the official website.

0. Requirements

1. Create a new project on Godot

Open the Godot, create a new project. For HTML5 game, recommended the OpenGL ES 2.0.

screenshot_1

Next, create a new scene and add a new Button and Label, then save it.
In addition, enter “Login” to the text field in the Button and “Sample text.” to the Label.

screenshot_2

Then, Assign a new script to the Scene and add pressed() signal in the Button.

screenshot_3

2. Import the Moralis SDK on Godot

In Godot, go to the Project -> Export… -> Add… -> HTML5.

Add the following code to the “Head Include”.

1
2
<script src="https://cdn.jsdelivr.net/npm/web3@latest/dist/web3.min.js"></script>
<script src="https://unpkg.com/moralis/dist/moralis.js"></script>

screenshot_4

3. Implement the Moralis Auth in script

Assign a new script file to the Scene and write code.
The whole code is below.

Sample.gd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
extends Node2D

# Moralis Server settings
export (String) var server_url = ""
export (String) var app_id = ""

# Signals emitting logged-in and logged-out for the Moralis
signal logged_in(user)
signal logged_out

# Moralis object
var moralis = JavaScript.get_interface("Moralis")
# Authenticated User
var current_user = null

# Callbacks
var _callback_login = JavaScript.create_callback(self, "_on_logged_in")
var _callback_logout = JavaScript.create_callback(self, "_on_logged_out")


func _ready():
if OS.has_feature("JavaScript") and !current_user:
# Initialize the Moralis SDK
var options = JavaScript.create_object("Object")
options.serverUrl = server_url
options.appId = app_id

moralis.start(options)


func login():
# Check if user already logged in
current_user = moralis.User.current()

if !current_user:
moralis.authenticate().then(_callback_login)


func logout():
moralis.User.logOut().then(_callback_logout)


func _on_logged_in(args):
current_user = args[0]

$Button.text = "Logout"
$Label.text = "Logged in!\nETH Address: " + args[0].get("ethAddress")


func _on_logged_out(args):
current_user = null

$Button.text = "Login"
$Label.text = "Logged out."


func _on_Button_pressed():
if current_user:
logout()
else:
login()

*The above code uses JavaScript, so it will not work in an environment where JavaScript cannot be used (e.g. iOS, Android, etc).

After that, set the values of the Server Url and App Id of your Moralis Server in the Scene.

screenshot_5

You can see the above values in the Moralis Server Details. If you can’t see, you need to create the Moralis account and server.

screenshot_6

4. Export

Click the Project -> Export… -> Export Project.

Create a new folder named “html5” in the project folder. And the file name should be “index.html”.
Then uncheck “Export With Debug”.

screenshot_7

By the way, set the current scene to the main scene in the project settings as follows:

screenshot_8

5. Debug

Finally, we can run this awesome game which only authenticate the Moralis.
Open the terminal and enter the followings:

1
2
3
cd <GODOT-PROJECT-FOLDER>/html5

python -m http.server 8000

On your favirote browser, enter “localhost:8000” in the URL bar.
Then you should see the login screen.

screenshot_9

When you click the “Login” button, the MetaMask popup will open to login.
If you logged in successfully, the sample text will change to your eth address. And the button’s text will change to “Logout”.

6. Conclusion

This time, I explained about the Moralis authentication only.
If possible, I would like to make a Godot Moralis Addon.
But before that, the intelligent Moralis Team may make it.