-
Notifications
You must be signed in to change notification settings - Fork 52
Making Games
This is an small guide to start making games for RetroFW (not for beginners). Thanks to Jonathan Holmes (crait#2411) for this guide.
Since we're working with Linux-based devices, you're going to need to run Linux. So, if you're on Windows, you'll need to install a Virtual Machine or Cyqwin or something like that. I installed VirtualBox and Xubuntu 18.04. I am terrible with Linux, so I'm not sure how compatible this would be for other Linux
The LDK Game uses the RetroFW firmware, so to build games for this firmware, we'll need to install the RetroFW buildroot in your /opt/ folder. The pre-compiled buildroot can be found, here: https://github.com/retrofw/buildroot/releases
Create a folder for your project with your game's source code and create a makefile for it. Here's the one we used for Midnight Wild game:
CHAINPREFIX := /opt/mipsel-linux-uclibc
CROSS_COMPILE := $(CHAINPREFIX)/usr/bin/mipsel-linux-
CC = $(CROSS_COMPILE)gcc
CXX = $(CROSS_COMPILE)g++
STRIP = $(CROSS_COMPILE)strip
SYSROOT := $(shell $(CC) --print-sysroot)
SDL_CFLAGS := $(shell $(SYSROOT)/usr/bin/sdl-config --cflags)
SDL_LIBS := $(shell $(SYSROOT)/usr/bin/sdl-config --libs)
OUTPUTNAME = midnightwild/midnightwild.elf
DEFINES = -DHAVE_STDINT_H -DVERSION_RETROGAME
INCLUDES = -Iinclude $(SDL_CFLAGS)
OPT_FLAGS = -Ofast -fdata-sections -fdata-sections -fno-common -fno-PIC -flto
EXTRA_LDFLAGS = -Wl,--as-needed -Wl,--gc-sections -flto -s
CFLAGS = $(DEFINES) $(INCLUDES) $(OPT_FLAGS) -std=gnu11
CXXFLAGS = $(DEFINES) $(INCLUDES) $(OPT_FLAGS) -std=gnu++11
LDFLAGS = $(SDL_LIBS) -lSDL_mixer -Wl,--start-group -lm -pthread -lz -lstdc++ $(EXTRA_LDFLAGS) -Wl,--end-group
# Redream (main engine)
OBJS = \
src/main.o
.c.o:
$(CC) $(CFLAGS) -c -o $@ $<
.cpp.o:
$(CXX) $(CXXFLAGS) -c -o $@ $<
all: $(OBJS)
$(CC) -o $(OUTPUTNAME) $(OBJS) $(CFLAGS) $(LDFLAGS)
clean:
rm -f $(OBJS) $(OUTPUTNAME)
Build your software with make in the terminal and you should be good to go!
People can make a shortcut and run the game through the Explorer program on the LDK, but, let's talk about a distribution file. To summarize how to make an IPK (the distribution file), do this:
- Make a folder path of home/retrofw/ and make a config file called control.
- In that folder toss the binaries into the folder as if it was being put onto the actual system, so /games/ - 3. Then compress both, individually, along with a debian-binary file that you need to make, which is a simple text file, then compress that all together with some commands like these:
tar -czvf control.tar.gz control postinst
tar -czvf data.tar.gz home
ar rv MidnightWild.ipk control.tar.gz data.tar.gz debian-binary
This is just a summary, so skim through this document if you are not familiar with this kind of process to fill in the gaps: https://docs.google.com/document/d/19kJXO3EZ8XCoeporuUUgV_S93AaPbSagza3sAgBILu8/edit#heading=h.nihpsh12f0fu
Okay, so, you still have questions, right?
To learn more about the toolchain, you can read through this doc: https://docs.google.com/document/d/19kJXO3EZ8XCoeporuUUgV_S93AaPbSagza3sAgBILu8/edit
Do you want to find a good example of some source code for the LDK Game? Check out pingflood's IOTester: https://github.com/pingflood/iotester
Random thread that may be worth the read if you have more specialized questions: https://boards.dingoonity.org/ingenic-jz4760-devices/retrofw-developer-support-thread/
If you want more support or questions join our Discord chat server here
This wiki was made for RetroFW usage and tools. If we missed something or if you have a question/suggestion, please send us a message in our Discord server here.
RetroFW
- Home
- Install Firmware
- Emulators and Apps
- Bug Reporting
- USB Networking
- Button mapping and combos
- Changelog
Emulators
- Arcade
- GameBoy
- Java Games
- Nintendo NES, Famicom Disk System
- PlayStation
- Sega Genesis/Megadrive
Devices
- RetroArcade Mini (RS07)
- RG300
Themes
Development
- Configuring a Toolchain
- Making Games
- How to build IPK packages
- How to build OPK packages
- Supporting Game Controllers
- GitHub Development Flow
- Building the Kernel
- Building U-Boot
Modding