diff --git a/.github/workflows/build_3ds.yml b/.github/workflows/build_3ds.yml index dbb37d682..79b38fdcd 100644 --- a/.github/workflows/build_3ds.yml +++ b/.github/workflows/build_3ds.yml @@ -26,6 +26,12 @@ jobs: WEBHOOK_URL: '${{ secrets.WEBHOOK_URL }}' + - uses: ./.github/actions/upload_build + if: ${{ always() && steps.compile.outcome == 'success' }} + with: + SOURCE_FILE: 'ClassiCube-3ds.cia' + DEST_NAME: 'ClassiCube-3ds.cia' + - uses: ./.github/actions/upload_build if: ${{ always() && steps.compile.outcome == 'success' }} with: diff --git a/misc/3ds/Makefile b/misc/3ds/Makefile index 901cd841a..118600984 100644 --- a/misc/3ds/Makefile +++ b/misc/3ds/Makefile @@ -28,6 +28,10 @@ BUILD := build-3ds SOURCES := src misc/3ds third_party/bearssl/src INCLUDES := third_party/bearssl/inc +CIA_BANNER_BIN := $(TOPDIR)/misc/3ds/banner.bin +CIA_ICON_BIN := $(TOPDIR)/misc/3ds/icon.bin +CIA_SPEC_RSF := $(TOPDIR)/misc/3ds/spec.rsf + #--------------------------------------------------------------------------------- # options for code generation #--------------------------------------------------------------------------------- @@ -93,7 +97,7 @@ $(BUILD): #--------------------------------------------------------------------------------- clean: echo clean ... - rm -fr $(BUILD) $(TARGET).3dsx $(OUTPUT).smdh $(TARGET).elf + rm -fr $(BUILD) $(TARGET).cia $(TARGET).3dsx $(OUTPUT).smdh $(TARGET).elf #--------------------------------------------------------------------------------- else @@ -101,6 +105,14 @@ else #--------------------------------------------------------------------------------- # main targets #--------------------------------------------------------------------------------- +$(OUTPUT).cia : $(OUTPUT).3dsx makerom + $(BUILD)/makerom -f cia -o "$(OUTPUT).cia" -elf "$(OUTPUT).elf" -rsf "$(CIA_SPEC_RSF)" -icon "$(CIA_ICON_BIN)" -banner "$(CIA_BANNER_BIN)" -exefslogo -target t + +makerom: + wget https://github.com/3DSGuy/Project_CTR/releases/download/makerom-v0.18.4/makerom-v0.18.4-ubuntu_x86_64.zip + unzip makerom-v0.18.4-ubuntu_x86_64.zip + chmod +x makerom + $(OUTPUT).3dsx : $(OUTPUT).elf $(OUTPUT).smdh $(OUTPUT).elf : $(OFILES) diff --git a/misc/3ds/audio.wav b/misc/3ds/audio.wav new file mode 100644 index 000000000..02f3d15da Binary files /dev/null and b/misc/3ds/audio.wav differ diff --git a/misc/3ds/banner.bin b/misc/3ds/banner.bin new file mode 100644 index 000000000..d93f93064 Binary files /dev/null and b/misc/3ds/banner.bin differ diff --git a/misc/3ds/icon.bin b/misc/3ds/icon.bin new file mode 100644 index 000000000..09941bcec Binary files /dev/null and b/misc/3ds/icon.bin differ diff --git a/misc/3ds/readme.md b/misc/3ds/readme.md new file mode 100644 index 000000000..85bc067e0 --- /dev/null +++ b/misc/3ds/readme.md @@ -0,0 +1,5 @@ +Commands used to generate the .bin files: + +`bannertool makebanner -i banner.png -a audio.wav -o banner.bin` + +`bannertool makesmdh -s ClassiCube -l ClassiCube -p UnknownShadow200 -i icon.png -o icon.bin` \ No newline at end of file diff --git a/src/Graphics_3DS.c b/src/Graphics_3DS.c index f9a500a6e..ace95e3d0 100644 --- a/src/Graphics_3DS.c +++ b/src/Graphics_3DS.c @@ -129,7 +129,7 @@ static void SetDefaultState(void) { } static void InitCitro3D(void) { - C3D_Init(C3D_DEFAULT_CMDBUF_SIZE * 2); + C3D_Init(C3D_DEFAULT_CMDBUF_SIZE * 4); topTarget = C3D_RenderTargetCreate(240, 400, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8); C3D_RenderTargetSetOutput(topTarget, GFX_TOP, GFX_LEFT, DISPLAY_TRANSFER_FLAGS); diff --git a/src/Platform_Posix.c b/src/Platform_Posix.c index 751b99ddd..b5bc9f114 100644 --- a/src/Platform_Posix.c +++ b/src/Platform_Posix.c @@ -351,7 +351,6 @@ void Thread_Run(void** handle, Thread_StartFunc func, int stackSize, const char* extern int pthread_set_name_np(pthread_t thread, const char* name); pthread_set_name_np(*ptr, name); #elif defined CC_BUILD_NETBSD - extern int pthread_setname_np(pthread_t thread, const char* fmt, const char* arg); pthread_setname_np(*ptr, "%s", name); #endif } diff --git a/src/Window_3DS.c b/src/Window_3DS.c index 11e25a565..00bb7f16b 100644 --- a/src/Window_3DS.c +++ b/src/Window_3DS.c @@ -112,8 +112,8 @@ static void HandleButtons(u32 mods) { #define AXIS_SCALE 8.0f static void ProcessCircleInput(int axis, circlePosition* pos, double delta) { // May not be exactly 0 on actual hardware - if (Math_AbsI(pos->dx) <= 16) pos->dx = 0; - if (Math_AbsI(pos->dy) <= 16) pos->dy = 0; + if (Math_AbsI(pos->dx) <= 32) pos->dx = 0; + if (Math_AbsI(pos->dy) <= 32) pos->dy = 0; Gamepad_SetAxis(axis, pos->dx / AXIS_SCALE, -pos->dy / AXIS_SCALE, delta); } @@ -145,13 +145,16 @@ void Window_ProcessEvents(double delta) { circlePosition hid_pos; hidCircleRead(&hid_pos); - ProcessCircleInput(PAD_AXIS_RIGHT, &hid_pos, delta); if (irrst_result == 0) { circlePosition stk_pos; irrstScanInput(); irrstCstickRead(&stk_pos); - ProcessCircleInput(PAD_AXIS_LEFT, &stk_pos, delta); + + ProcessCircleInput(PAD_AXIS_RIGHT, &stk_pos, delta); + ProcessCircleInput(PAD_AXIS_LEFT, &hid_pos, delta); + } else { + ProcessCircleInput(PAD_AXIS_RIGHT, &hid_pos, delta); } } diff --git a/src/Window_X11.c b/src/Window_X11.c index 6bb0c01a1..85e716fac 100644 --- a/src/Window_X11.c +++ b/src/Window_X11.c @@ -279,7 +279,9 @@ void Window_Free(void) { } static void ApplyIcon(void) { Atom net_wm_icon = XInternAtom(win_display, "_NET_WM_ICON", false); Atom xa_cardinal = XInternAtom(win_display, "CARDINAL", false); - XChangeProperty(win_display, win_handle, net_wm_icon, xa_cardinal, 32, PropModeReplace, CCIcon_Data, CCIcon_Size); + + XChangeProperty(win_display, win_handle, net_wm_icon, xa_cardinal, 32, PropModeReplace, + (unsigned char*)CCIcon_Data, CCIcon_Size); } #else static void ApplyIcon(void) { }