Integrate Godot and Moralis for NFT Games
Tags: godot, moralis, web3
Published: 2021-12-16 05:23:43



Recently, I found the [ChainSafe Gaming SDK for Unity](https://github.com/ChainSafe/web3.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](https://moralis.io/) (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

* **[Install the Godot Engine](https://godotengine.org/)**
* **[Create a Moralis account and server](https://docs.moralis.io/moralis-server/getting-started/create-a-moralis-server)**
* **[Install MetaMask](https://metamask.io/)**

## 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](https://blog.hdks.org/images/Integrate-Godot-and-Moralis-for-NFT-Games/screenshot_1.jpg)  

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](https://blog.hdks.org/images/Integrate-Godot-and-Moralis-for-NFT-Games/screenshot_2.jpg)  

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

![screenshot_3](https://blog.hdks.org/images/Integrate-Godot-and-Moralis-for-NFT-Games/screenshot_3.jpg)  

## 2. Import the Moralis SDK on Godot

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

Add the following code to the **"Head Include"**.

```html
<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](https://blog.hdks.org/images/Integrate-Godot-and-Moralis-for-NFT-Games/screenshot_4.jpg)  

## 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*

```py
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](https://docs.godotengine.org/en/stable/classes/class_javascript.html), 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](https://blog.hdks.org/images/Integrate-Godot-and-Moralis-for-NFT-Games/screenshot_5.jpg)  

You can see the above values in the [Moralis Server Details](https://admin.moralis.io/servers). If you can't see, you need to create the Moralis account and server.

![screenshot_6](https://blog.hdks.org/images/Integrate-Godot-and-Moralis-for-NFT-Games/screenshot_6.jpg)  


## 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](https://blog.hdks.org/images/Integrate-Godot-and-Moralis-for-NFT-Games/screenshot_7.jpg)  

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

![screenshot_8](https://blog.hdks.org/images/Integrate-Godot-and-Moralis-for-NFT-Games/screenshot_8.jpg)  


## 5. Debug

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

```sh
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](https://blog.hdks.org/images/Integrate-Godot-and-Moralis-for-NFT-Games/screenshot_9.jpg)  

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.