Mine Runner (Open Source)

Mine runner ready for test :partying_face: :partying_face: :partying_face: :running_man: :running_man: :running_man:
Looking for feedback:)

Now i am working on level balance i promise it will be better that now :grin:

Web: https://game-mine-runner.web.app/
Android: https://play.google.com/store/apps/details?id=com.d954mas.game.minerunner


Add vignette or not?


Looks nicer without IMO

1 Like

I agree, much better without.

1 Like

Thanks, i also think so, but there were doubts😅

1 Like

Maybe this little guy’s shirt could do with a slightly stronger colour:
Screenshot 2022-12-27 at 19.13.00

1 Like

This is guy from old version)
In current version I changed light direction and power. Also he now wear blue shirt😅


On a contrary, I like the vignette one more :grin:

1 Like

Me too :eyes:

Ohhh :sweat_smile: :sweat:

1 Like


vignette +1 :slight_smile:
This games gets better and better maybe you should consider working with an design artist.


I worked with designer) all ui, icon and loading was drawn by designer👌

1 Like

All 3d models by me😅
Textures from paid assets)

1 Like

I need to improve some texture,for example obstacle block)
It use texture from jam version,and too much pixelated😅

All other art and ui, looks good) I think👌

I like the game very much :grin::ok_hand:

I would also suggest some revamps, especially for GUI - some nice buttons really influence, how I see mobile games :wink:

But most importantly - the visual info about having some useful abilities is shown in a corner but I’m focusing on character and rather a center of the screen - what do you think about showing some kind of visual shield for example, when I can run through obstacles? There is a yellow glow, but with this I sometimes have problems noticing, when it disappears :sweat_smile: And what do you think about making obstacles explode on contact? Be destroyed like some super hero running through wall? :grin:

I also play on mobile, but I also checked game on your website, on mobile phone - the ads are not working there (nothing is displayed), but I immediately get rewards (so immediate restart after fail, but most importantly - I can add 400 gems in shop with just clicking the button)


Thanks for feedback)

1)What revamps?
-I don’t like run button) I think I will change it later, and add some animation for it.

2)About shield.
I will think. Mb I need to make glow bigger or change effect) Also you have about 1s of immortal after glow dissaepeared)

3)About Web version.
This version is only for tests.It is ok that ads not worked) I will release a version with ads on some web portal(mb poki)

1 Like

Release on crazygames:)


Mine Runner now OPEN SOURCE


This is an example of how can look small game made in defold. I think my defold looks a little bit different than you defold, but maybe you find something usefull in my project:)

Open source version same as release. But i removed all sounds/music and change some textures. Because i use paid assets.

Some facts about the game and its architecture:
1)Small 3D runner game. 2.23mb(gzipped)
1.86mb resources:
-636kb textures
-543kb meshes
-340kb sounds
-184kb lua
-64kb fonts

2. Single branch multiple platform
You can build it for this platforms from master branch. Playmarket, yandex, vk, gamedistribution (declined), crazygames, poki (declined), dev build. I use bob --settings to change dependencies and configs for platforms.

java -jar bob/bob.jar --settings bob/settings/release_game.project_settings --settings bob/settings/crazy_games_game.project_settings --archive --with-symbols --variant release --platform=js-web --bo bob/releases/crazy_games clean resolve build bundle

3)A lot of useful modules:)
-custom scene manager (inspired by early version of monarch)
-storage (save, load,migrations,encrypt)
-lua tween animations. Support parallel, sequence, and changing script_instance

local action_2 = ACTIONS.Sequence()
		gui.set_color(self.vh.start_timer_lbl_2, COLOR_EMPTY)
		gui.set_scale(self.vh.start_timer_lbl_2, SCALE_NUMBER)
		gui.set_enabled(self.vh.start_timer_lbl_2, true)
	action_2:add_action(ACTIONS.TweenGui { object = self.vh.start_timer_lbl_2, property = "color", v4 = true,
										   from = COLOR_EMPTY, to = COLOR_WHITE, time = 0.25,
										   easing = TWEEN.easing.inQuad })

-and a lot of other modules

4)Lua modules better than scripts:)
In game, I have only 4 .script files. All logic in lua modules.
Initialize all. Load game scene. Update some modules that should be updated every frame
Update game logic
Need it to update 3D model in shop gui. Yes, I use 3D models in gui;)
Handled all textures for tunnel

go.property("mine_world", resource.texture("/assets/textures/rgb/mip/mine_world.png"))
go.property("dark_world", resource.texture("/assets/textures/rgb/mip/dark_world.png"))
go.property("metal_world", resource.texture("/assets/textures/rgb/mip/metal_world.png"))
go.property("toon_world", resource.texture("/assets/textures/rgb/mip/toon_world.png"))
go.property("grass_world", resource.texture("/assets/textures/rgb/mip/grass_world.png"))

5.N28S(NoMoreGlobalFunctionInScript) inspired by Script wrapper for Defold · GitHub
I made my own implementation. It support multiple n28s scripts per .script file. Also it supports inheritance

6.Debug panel that show only in dev builds.

7.No messages for game logic
I hate messages) They make code async and hard to understand. Also i need to use ctrl+f(find gui in editor) to find where i use this message.
So i use changing script instance where i need it. I can save script instance. Then i can load that script instance when needed. Not recommend if you do not understand what is it and why you need it) Messages is ok when you post something between logic and gui.


9. World and GameWorld
World and GameWorld is lua modules that have all other lua modules that i use in game.
Most of modules have reference to world module. So in module i can get world and from world get all others modules. So why world and not require modules. Because when require, it easy to make cyclic dependencies. But when i use world i can fix this cyclic dependencies, because in world it easy to change order of initialization of other modules. Also i can pass world in constructor or set it as variable of module.

--check in main_menu.gui_script
if (WORLD.sdk.yagames_sdk and COMMON.html5_is_mobile()) then