Latest compatible version of Classicube from the original GitHub repository (https://github.com/ClassiCube/ClassiCube) that can be compiled on Classicube for PowerMac PPC running Mac OS X 10.4.
131
misc/32x/32x.h
Normal file
@@ -0,0 +1,131 @@
|
||||
#ifndef __32X_H__
|
||||
#define __32X_H__
|
||||
|
||||
/* Create a 5:5:5 RGB color */
|
||||
#define COLOR(r,g,b) (((r)&0x1F)|((g)&0x1F)<<5|((b)&0x1F)<<10)
|
||||
|
||||
#define MARS_CRAM (*(volatile unsigned short *)0x20004200)
|
||||
#define MARS_FRAMEBUFFER (*(volatile unsigned short *)0x24000000)
|
||||
#define MARS_OVERWRITE_IMG (*(volatile unsigned short *)0x24020000)
|
||||
#define MARS_SDRAM (*(volatile unsigned short *)0x26000000)
|
||||
|
||||
#define MARS_SYS_INTMSK (*(volatile unsigned short *)0x20004000)
|
||||
#define MARS_SYS_DMACTR (*(volatile unsigned short *)0x20004006)
|
||||
#define MARS_SYS_DMASAR (*(volatile unsigned long *)0x20004008)
|
||||
#define MARS_SYS_DMADAR (*(volatile unsigned long *)0x2000400C)
|
||||
#define MARS_SYS_DMALEN (*(volatile unsigned short *)0x20004010)
|
||||
#define MARS_SYS_DMAFIFO (*(volatile unsigned short *)0x20004012)
|
||||
#define MARS_SYS_VRESI_CLR (*(volatile unsigned short *)0x20004014)
|
||||
#define MARS_SYS_VINT_CLR (*(volatile unsigned short *)0x20004016)
|
||||
#define MARS_SYS_HINT_CLR (*(volatile unsigned short *)0x20004018)
|
||||
#define MARS_SYS_CMDI_CLR (*(volatile unsigned short *)0x2000401A)
|
||||
#define MARS_SYS_PWMI_CLR (*(volatile unsigned short *)0x2000401C)
|
||||
#define MARS_SYS_COMM0 (*(volatile unsigned short *)0x20004020) /* Master SH2 communication */
|
||||
#define MARS_SYS_COMM2 (*(volatile unsigned short *)0x20004022)
|
||||
#define MARS_SYS_COMM4 (*(volatile unsigned short *)0x20004024) /* Slave SH2 communication */
|
||||
#define MARS_SYS_COMM6 (*(volatile unsigned short *)0x20004026)
|
||||
#define MARS_SYS_COMM8 (*(volatile unsigned short *)0x20004028) /* controller 1 current value */
|
||||
#define MARS_SYS_COMM10 (*(volatile unsigned short *)0x2000402A) /* controller 2 current value */
|
||||
#define MARS_SYS_COMM12 (*(volatile unsigned long *)0x2000402C) /* vcount current value */
|
||||
|
||||
#define MARS_PWM_CTRL (*(volatile unsigned short *)0x20004030)
|
||||
#define MARS_PWM_CYCLE (*(volatile unsigned short *)0x20004032)
|
||||
#define MARS_PWM_LEFT (*(volatile unsigned short *)0x20004034)
|
||||
#define MARS_PWM_RIGHT (*(volatile unsigned short *)0x20004036)
|
||||
#define MARS_PWM_MONO (*(volatile unsigned short *)0x20004038)
|
||||
|
||||
#define MARS_VDP_DISPMODE (*(volatile unsigned short *)0x20004100)
|
||||
#define MARS_VDP_FILLEN (*(volatile unsigned short *)0x20004104)
|
||||
#define MARS_VDP_FILADR (*(volatile unsigned short *)0x20004106)
|
||||
#define MARS_VDP_FILDAT (*(volatile unsigned short *)0x20004108)
|
||||
#define MARS_VDP_FBCTL (*(volatile unsigned short *)0x2000410A)
|
||||
|
||||
#define MARS_SH2_ACCESS_VDP 0x8000
|
||||
#define MARS_68K_ACCESS_VDP 0x0000
|
||||
|
||||
#define MARS_PAL_FORMAT 0x0000
|
||||
#define MARS_NTSC_FORMAT 0x8000
|
||||
|
||||
#define MARS_VDP_PRIO_68K 0x0000
|
||||
#define MARS_VDP_PRIO_32X 0x0080
|
||||
|
||||
#define MARS_224_LINES 0x0000
|
||||
#define MARS_240_LINES 0x0040
|
||||
|
||||
#define MARS_VDP_MODE_OFF 0x0000
|
||||
#define MARS_VDP_MODE_256 0x0001
|
||||
#define MARS_VDP_MODE_32K 0x0002
|
||||
#define MARS_VDP_MODE_RLE 0x0003
|
||||
|
||||
#define MARS_VDP_VBLK 0x8000
|
||||
#define MARS_VDP_HBLK 0x4000
|
||||
#define MARS_VDP_PEN 0x2000
|
||||
#define MARS_VDP_FEN 0x0002
|
||||
#define MARS_VDP_FS 0x0001
|
||||
|
||||
#define SH2_CCTL_CP 0x10
|
||||
#define SH2_CCTL_TW 0x08
|
||||
#define SH2_CCTL_CE 0x01
|
||||
|
||||
#define SH2_FRT_TIER (*(volatile unsigned char *)0xFFFFFE10)
|
||||
#define SH2_FRT_FTCSR (*(volatile unsigned char *)0xFFFFFE11)
|
||||
#define SH2_FRT_FRCH (*(volatile unsigned char *)0xFFFFFE12)
|
||||
#define SH2_FRT_FRCL (*(volatile unsigned char *)0xFFFFFE13)
|
||||
#define SH2_FRT_OCRH (*(volatile unsigned char *)0xFFFFFE14)
|
||||
#define SH2_FRT_OCRL (*(volatile unsigned char *)0xFFFFFE15)
|
||||
#define SH2_FRT_TCR (*(volatile unsigned char *)0xFFFFFE16)
|
||||
#define SH2_FRT_TOCR (*(volatile unsigned char *)0xFFFFFE17)
|
||||
#define SH2_FRT_ICRH (*(volatile unsigned char *)0xFFFFFE18)
|
||||
#define SH2_FRT_ICRL (*(volatile unsigned char *)0xFFFFFE19)
|
||||
|
||||
#define SH2_DMA_SAR0 (*(volatile unsigned long *)0xFFFFFF80)
|
||||
#define SH2_DMA_DAR0 (*(volatile unsigned long *)0xFFFFFF84)
|
||||
#define SH2_DMA_TCR0 (*(volatile unsigned long *)0xFFFFFF88)
|
||||
#define SH2_DMA_CHCR0 (*(volatile unsigned long *)0xFFFFFF8C)
|
||||
#define SH2_DMA_VCR0 (*(volatile unsigned long *)0xFFFFFFA0)
|
||||
#define SH2_DMA_DRCR0 (*(volatile unsigned char *)0xFFFFFE71)
|
||||
|
||||
#define SH2_DMA_SAR1 (*(volatile unsigned long *)0xFFFFFF90)
|
||||
#define SH2_DMA_DAR1 (*(volatile unsigned long *)0xFFFFFF94)
|
||||
#define SH2_DMA_TCR1 (*(volatile unsigned long *)0xFFFFFF98)
|
||||
#define SH2_DMA_CHCR1 (*(volatile unsigned long *)0xFFFFFF9C)
|
||||
#define SH2_DMA_VCR1 (*(volatile unsigned long *)0xFFFFFFA8)
|
||||
#define SH2_DMA_DRCR1 (*(volatile unsigned char *)0xFFFFFE72)
|
||||
|
||||
#define SH2_DMA_DMAOR (*(volatile unsigned long *)0xFFFFFFB0)
|
||||
|
||||
#define SH2_INT_IPRA (*(volatile unsigned short *)0xFFFFFEE2)
|
||||
|
||||
#define SEGA_CTRL_UP 0x0001
|
||||
#define SEGA_CTRL_DOWN 0x0002
|
||||
#define SEGA_CTRL_LEFT 0x0004
|
||||
#define SEGA_CTRL_RIGHT 0x0008
|
||||
#define SEGA_CTRL_B 0x0010
|
||||
#define SEGA_CTRL_C 0x0020
|
||||
#define SEGA_CTRL_A 0x0040
|
||||
#define SEGA_CTRL_START 0x0080
|
||||
#define SEGA_CTRL_Z 0x0100
|
||||
#define SEGA_CTRL_Y 0x0200
|
||||
#define SEGA_CTRL_X 0x0400
|
||||
#define SEGA_CTRL_MODE 0x0800
|
||||
|
||||
#define SEGA_CTRL_TYPE 0xF000
|
||||
#define SEGA_CTRL_THREE 0x0000
|
||||
#define SEGA_CTRL_SIX 0x1000
|
||||
#define SEGA_CTRL_NONE 0xF000
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* global functions in sh2_crt0.s */
|
||||
extern void fast_memcpy(void *dst, void *src, int len);
|
||||
extern void CacheControl(int mode);
|
||||
extern void CacheClearLine(void* ptr);
|
||||
extern void ScreenStretch(int src, int width, int height, int interp);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
109
misc/32x/Makefile
Normal file
@@ -0,0 +1,109 @@
|
||||
ifdef $(GENDEV)
|
||||
ROOTDIR = $(GENDEV)
|
||||
else
|
||||
ROOTDIR = /opt/toolchains/sega
|
||||
endif
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Configurable options
|
||||
#---------------------------------------------------------------------------------
|
||||
TARGET = ClassiCube-32x
|
||||
BUILD_DIR = build/32x
|
||||
SOURCE_DIRS = src src/32x misc/32x
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Code generation
|
||||
#---------------------------------------------------------------------------------
|
||||
C_FILES = $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.c))
|
||||
S_FILES = misc/32x/sh2_crt0.s
|
||||
OBJS = $(addprefix $(BUILD_DIR)/, $(notdir $(C_FILES:%.c=%.o) $(S_FILES:%.s=%.o)))
|
||||
|
||||
LDSCRIPTSDIR = $(ROOTDIR)/ldscripts
|
||||
LIBS = $(LIBPATH) -lc -lgcc -lgcc-Os-4-200 -lnosys
|
||||
|
||||
LIBPATH = -L$(ROOTDIR)/sh-elf/lib -L$(ROOTDIR)/sh-elf/lib/gcc/sh-elf/4.6.2 -L$(ROOTDIR)/sh-elf/sh-elf/lib
|
||||
INCPATH = -I$(ROOTDIR)/sh-elf/include -I$(ROOTDIR)/sh-elf/sh-elf/include
|
||||
|
||||
SHCCFLAGS = -m2 -mb -Ofast -Wall -g -c -fomit-frame-pointer -DPLAT_32X -ffunction-sections -fdata-sections
|
||||
SHHWFLAGS = -m2 -mb -O1 -Wall -g -c -fomit-frame-pointer
|
||||
SHLDFLAGS = -T $(LDSCRIPTSDIR)/mars.ld -nostdlib -Wl,--gc-sections
|
||||
SHASFLAGS = --big
|
||||
|
||||
MDLDFLAGS = -T $(LDSCRIPTSDIR)/md.ld --oformat binary
|
||||
MDASFLAGS = -m68000 --register-prefix-optional
|
||||
|
||||
SHPREFIX = $(ROOTDIR)/sh-elf/bin/sh-elf-
|
||||
SHCC = $(SHPREFIX)gcc
|
||||
SHAS = $(SHPREFIX)as
|
||||
SHLD = $(SHPREFIX)ld
|
||||
SHOBJC = $(SHPREFIX)objcopy
|
||||
|
||||
MDPREFIX = $(ROOTDIR)/m68k-elf/bin/m68k-elf-
|
||||
MDAS = $(MDPREFIX)as
|
||||
MDLD = $(MDPREFIX)ld
|
||||
|
||||
# Dependency tracking
|
||||
DEPFLAGS = -MT $@ -MMD -MP -MF $(BUILD_DIR)/$*.d
|
||||
DEPFILES := $(OBJS:%.o=%.d)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# main targets
|
||||
#---------------------------------------------------------------------------------
|
||||
all: $(BUILD_DIR) $(BUILD_DIR)/m68k_crt0.bin $(BUILD_DIR)/m68k_crt1.bin $(TARGET).bin
|
||||
|
||||
clean:
|
||||
rm -f $(BUILD_DIR)/*.o $(BUILD_DIR)/*.bin $(TARGET).bin $(TARGET).elf
|
||||
|
||||
$(BUILD_DIR):
|
||||
mkdir -p $(BUILD_DIR)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# binary generation
|
||||
#---------------------------------------------------------------------------------
|
||||
$(TARGET).bin: $(TARGET).elf
|
||||
$(SHOBJC) -O binary $< $(BUILD_DIR)/temp.bin
|
||||
dd if=$(BUILD_DIR)/temp.bin of=$@ bs=64K conv=sync
|
||||
|
||||
$(TARGET).elf: $(OBJS)
|
||||
$(SHCC) $(SHLDFLAGS) $(OBJS) $(LIBS) -o $(TARGET).elf
|
||||
|
||||
|
||||
$(BUILD_DIR)/m68k_crt0.o: misc/32x/m68k_crt0.s
|
||||
$(MDAS) $(MDASFLAGS) $< -o $@
|
||||
|
||||
$(BUILD_DIR)/m68k_crt0.bin: $(BUILD_DIR)/m68k_crt0.o
|
||||
$(MDLD) $(MDLDFLAGS) $< -o $@
|
||||
|
||||
$(BUILD_DIR)/m68k_crt1.o: misc/32x/m68k_crt1.s
|
||||
$(MDAS) $(MDASFLAGS) $< -o $@
|
||||
|
||||
$(BUILD_DIR)/m68k_crt1.bin: $(BUILD_DIR)/m68k_crt1.o
|
||||
$(MDLD) $(MDLDFLAGS) $< -o $@
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# object generation
|
||||
#---------------------------------------------------------------------------------
|
||||
$(BUILD_DIR)/%.o: src/%.c
|
||||
$(SHCC) $(SHCCFLAGS) $(INCPATH) $(DEPFLAGS) $< -o $@
|
||||
|
||||
$(BUILD_DIR)/%.o: src/32x/%.c
|
||||
$(SHCC) $(SHCCFLAGS) $(INCPATH) $(DEPFLAGS) $< -o $@
|
||||
|
||||
$(BUILD_DIR)/%.o: misc/32x/%.c
|
||||
$(SHCC) $(SHCCFLAGS) $(INCPATH) $(DEPFLAGS) $< -o $@
|
||||
|
||||
$(BUILD_DIR)/%.o: misc/32x/%.s
|
||||
$(SHAS) $(SHASFLAGS) $(INCPATH) $< -o $@
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Dependency tracking
|
||||
#---------------------------------------------------------------------------------
|
||||
$(DEPFILES):
|
||||
|
||||
include $(wildcard $(DEPFILES))
|
||||
256
misc/32x/hw_32x.c
Normal file
@@ -0,0 +1,256 @@
|
||||
/*
|
||||
* Licensed under the BSD license
|
||||
*
|
||||
* debug_32x.c - Debug screen functions.
|
||||
*
|
||||
* Copyright (c) 2005 Marcus R. Brown <mrbrown@ocgnet.org>
|
||||
* Copyright (c) 2005 James Forshaw <tyranid@gmail.com>
|
||||
* Copyright (c) 2005 John Kelley <ps2dev@kelley.ca>
|
||||
*
|
||||
* Altered for 32X by Chilly Willy
|
||||
*/
|
||||
|
||||
#include "32x.h"
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
static int init = 0;
|
||||
static unsigned short fgc = 0, bgc = 0;
|
||||
static unsigned char fgs = 0, bgs = 0;
|
||||
|
||||
static unsigned short currentFB = 0;
|
||||
|
||||
void Hw32xSetFGColor(int s, int r, int g, int b)
|
||||
{
|
||||
volatile unsigned short *palette = &MARS_CRAM;
|
||||
fgs = s;
|
||||
fgc = COLOR(r, g, b);
|
||||
palette[fgs] = fgc;
|
||||
}
|
||||
|
||||
void Hw32xSetBGColor(int s, int r, int g, int b)
|
||||
{
|
||||
volatile unsigned short *palette = &MARS_CRAM;
|
||||
bgs = s;
|
||||
bgc = COLOR(r, g, b);
|
||||
palette[bgs] = bgc;
|
||||
}
|
||||
|
||||
void Hw32xInit(int vmode, int lineskip)
|
||||
{
|
||||
volatile unsigned short *frameBuffer16 = &MARS_FRAMEBUFFER;
|
||||
int i;
|
||||
|
||||
// Wait for the SH2 to gain access to the VDP
|
||||
while ((MARS_SYS_INTMSK & MARS_SH2_ACCESS_VDP) == 0) ;
|
||||
|
||||
if (vmode == MARS_VDP_MODE_32K)
|
||||
{
|
||||
// Set 16-bit direct mode, 224 lines
|
||||
MARS_VDP_DISPMODE = MARS_224_LINES | MARS_VDP_MODE_32K;
|
||||
|
||||
// init both framebuffers
|
||||
|
||||
// Flip the framebuffer selection bit and wait for it to take effect
|
||||
MARS_VDP_FBCTL = currentFB ^ 1;
|
||||
while ((MARS_VDP_FBCTL & MARS_VDP_FS) == currentFB) ;
|
||||
currentFB ^= 1;
|
||||
// rewrite line table
|
||||
for (i=0; i<224/(lineskip+1); i++)
|
||||
{
|
||||
if (lineskip)
|
||||
{
|
||||
int j = lineskip + 1;
|
||||
while (j)
|
||||
{
|
||||
frameBuffer16[i*(lineskip+1) + (lineskip + 1 - j)] = i*320 + 0x100; /* word offset of line */
|
||||
j--;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (i<200)
|
||||
frameBuffer16[i] = i*320 + 0x100; /* word offset of line */
|
||||
else
|
||||
frameBuffer16[i] = 200*320 + 0x100; /* word offset of line */
|
||||
}
|
||||
}
|
||||
// clear screen
|
||||
for (i=0x100; i<0x10000; i++)
|
||||
frameBuffer16[i] = 0;
|
||||
|
||||
// Flip the framebuffer selection bit and wait for it to take effect
|
||||
MARS_VDP_FBCTL = currentFB ^ 1;
|
||||
while ((MARS_VDP_FBCTL & MARS_VDP_FS) == currentFB) ;
|
||||
currentFB ^= 1;
|
||||
// rewrite line table
|
||||
for (i=0; i<224/(lineskip+1); i++)
|
||||
{
|
||||
if (lineskip)
|
||||
{
|
||||
int j = lineskip + 1;
|
||||
while (j)
|
||||
{
|
||||
frameBuffer16[i*(lineskip+1) + (lineskip + 1 - j)] = i*320 + 0x100; /* word offset of line */
|
||||
j--;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (i<200)
|
||||
frameBuffer16[i] = i*320 + 0x100; /* word offset of line */
|
||||
else
|
||||
frameBuffer16[i] = 200*320 + 0x100; /* word offset of line */
|
||||
}
|
||||
}
|
||||
// clear screen
|
||||
for (i=0x100; i<0x10000; i++)
|
||||
frameBuffer16[i] = 0;
|
||||
}
|
||||
|
||||
Hw32xSetFGColor(255,31,31,31);
|
||||
Hw32xSetBGColor(0,0,0,0);
|
||||
init = vmode;
|
||||
}
|
||||
|
||||
void Hw32xScreenClear()
|
||||
{
|
||||
int i;
|
||||
int l = (init == MARS_VDP_MODE_256) ? 320*224/2 + 0x100 : 320*200 + 0x100;
|
||||
volatile unsigned short *frameBuffer16 = &MARS_FRAMEBUFFER;
|
||||
|
||||
// clear screen
|
||||
for (i=0x100; i<l; i++)
|
||||
frameBuffer16[i] = 0;
|
||||
|
||||
// Flip the framebuffer selection bit and wait for it to take effect
|
||||
MARS_VDP_FBCTL = currentFB ^ 1;
|
||||
while ((MARS_VDP_FBCTL & MARS_VDP_FS) == currentFB) ;
|
||||
currentFB ^= 1;
|
||||
|
||||
// clear screen
|
||||
for (i=0x100; i<l; i++)
|
||||
frameBuffer16[i] = 0;
|
||||
|
||||
Hw32xSetFGColor(255,31,31,31);
|
||||
Hw32xSetBGColor(0,0,0,0);
|
||||
}
|
||||
|
||||
void Hw32xDelay(int ticks)
|
||||
{
|
||||
unsigned long ct = MARS_SYS_COMM12 + ticks;
|
||||
while (MARS_SYS_COMM12 < ct) ;
|
||||
}
|
||||
|
||||
void Hw32xScreenFlip(int wait)
|
||||
{
|
||||
// Flip the framebuffer selection bit
|
||||
MARS_VDP_FBCTL = currentFB ^ 1;
|
||||
if (wait)
|
||||
{
|
||||
while ((MARS_VDP_FBCTL & MARS_VDP_FS) == currentFB) ;
|
||||
currentFB ^= 1;
|
||||
}
|
||||
}
|
||||
|
||||
void Hw32xFlipWait()
|
||||
{
|
||||
while ((MARS_VDP_FBCTL & MARS_VDP_FS) == currentFB) ;
|
||||
currentFB ^= 1;
|
||||
}
|
||||
|
||||
|
||||
// MD Command support code ---------------------------------------------
|
||||
|
||||
unsigned short HwMdReadPad(int port)
|
||||
{
|
||||
if (port == 0)
|
||||
return MARS_SYS_COMM8;
|
||||
else if (port == 1)
|
||||
return MARS_SYS_COMM10;
|
||||
else
|
||||
return SEGA_CTRL_NONE;
|
||||
}
|
||||
|
||||
unsigned char HwMdReadSram(unsigned short offset)
|
||||
{
|
||||
while (MARS_SYS_COMM0) ; // wait until 68000 has responded to any earlier requests
|
||||
MARS_SYS_COMM2 = offset;
|
||||
MARS_SYS_COMM0 = 0x0100; // Read SRAM
|
||||
while (MARS_SYS_COMM0) ;
|
||||
return MARS_SYS_COMM2 & 0x00FF;
|
||||
}
|
||||
|
||||
void HwMdWriteSram(unsigned char byte, unsigned short offset)
|
||||
{
|
||||
while (MARS_SYS_COMM0) ; // wait until 68000 has responded to any earlier requests
|
||||
MARS_SYS_COMM2 = offset;
|
||||
MARS_SYS_COMM0 = 0x0200 | byte; // Write SRAM
|
||||
while (MARS_SYS_COMM0) ;
|
||||
}
|
||||
|
||||
int HwMdReadMouse(int port)
|
||||
{
|
||||
unsigned int mouse1, mouse2;
|
||||
while (MARS_SYS_COMM0) ; // wait until 68000 has responded to any earlier requests
|
||||
MARS_SYS_COMM0 = 0x0300|port; // tells 68000 to read mouse
|
||||
while (MARS_SYS_COMM0 == (0x0300|port)) ; // wait for mouse value
|
||||
mouse1 = MARS_SYS_COMM0;
|
||||
mouse2 = MARS_SYS_COMM2;
|
||||
MARS_SYS_COMM0 = 0; // tells 68000 we got the mouse value
|
||||
return (int)((mouse1 << 16) | mouse2);
|
||||
}
|
||||
|
||||
void HwMdClearScreen(void)
|
||||
{
|
||||
while (MARS_SYS_COMM0) ; // wait until 68000 has responded to any earlier requests
|
||||
MARS_SYS_COMM0 = 0x0400; // Clear Screen (Name Table B)
|
||||
while (MARS_SYS_COMM0) ;
|
||||
}
|
||||
|
||||
void HwMdSetOffset(unsigned short offset)
|
||||
{
|
||||
while (MARS_SYS_COMM0) ; // wait until 68000 has responded to any earlier requests
|
||||
MARS_SYS_COMM2 = offset;
|
||||
MARS_SYS_COMM0 = 0x0500; // Set offset (into either Name Table B or VRAM)
|
||||
while (MARS_SYS_COMM0) ;
|
||||
}
|
||||
|
||||
void HwMdSetNTable(unsigned short word)
|
||||
{
|
||||
while (MARS_SYS_COMM0) ; // wait until 68000 has responded to any earlier requests
|
||||
MARS_SYS_COMM2 = word;
|
||||
MARS_SYS_COMM0 = 0x0600; // Set word at offset in Name Table B
|
||||
while (MARS_SYS_COMM0) ;
|
||||
}
|
||||
|
||||
void HwMdSetVram(unsigned short word)
|
||||
{
|
||||
while (MARS_SYS_COMM0) ; // wait until 68000 has responded to any earlier requests
|
||||
MARS_SYS_COMM2 = word;
|
||||
MARS_SYS_COMM0 = 0x0700; // Set word at offset in VRAM
|
||||
while (MARS_SYS_COMM0) ;
|
||||
}
|
||||
|
||||
void HwMdPuts(char *str, int color, int x, int y)
|
||||
{
|
||||
HwMdSetOffset(((y<<6) | x) << 1);
|
||||
while (*str)
|
||||
HwMdSetNTable(((*str++ - 0x20) & 0xFF) | color);
|
||||
}
|
||||
|
||||
void HwMdPutc(char chr, int color, int x, int y)
|
||||
{
|
||||
HwMdSetOffset(((y<<6) | x) << 1);
|
||||
HwMdSetNTable(((chr - 0x20) & 0xFF) | color);
|
||||
}
|
||||
|
||||
|
||||
// Slave SH2 support code ----------------------------------------------
|
||||
|
||||
void slave(void)
|
||||
{
|
||||
while (1) ;
|
||||
}
|
||||
30
misc/32x/hw_32x.h
Normal file
@@ -0,0 +1,30 @@
|
||||
#ifndef HW_32X_H
|
||||
#define HW_32X_H
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
extern void Hw32xSetFGColor(int s, int r, int g, int b);
|
||||
extern void Hw32xSetBGColor(int s, int r, int g, int b);
|
||||
extern void Hw32xInit(int vmode, int lineskip);
|
||||
extern int Hw32xScreenGetX();
|
||||
extern int Hw32xScreenGetY();
|
||||
extern void Hw32xScreenSetXY(int x, int y);
|
||||
extern void Hw32xScreenClear();
|
||||
extern void Hw32xDelay(int ticks);
|
||||
extern void Hw32xScreenFlip(int wait);
|
||||
extern void Hw32xFlipWait();
|
||||
|
||||
extern unsigned short HwMdReadPad(int port);
|
||||
extern unsigned char HwMdReadSram(unsigned short offset);
|
||||
extern void HwMdWriteSram(unsigned char byte, unsigned short offset);
|
||||
extern int HwMdReadMouse(int port);
|
||||
extern void HwMdClearScreen(void);
|
||||
extern void HwMdSetOffset(unsigned short offset);
|
||||
extern void HwMdSetNTable(unsigned short word);
|
||||
extern void HwMdSetVram(unsigned short word);
|
||||
extern void HwMdPuts(char *str, int color, int x, int y);
|
||||
extern void HwMdPutc(char chr, int color, int x, int y);
|
||||
|
||||
#endif
|
||||
98
misc/32x/m68k_crt0.s
Normal file
@@ -0,0 +1,98 @@
|
||||
| SEGA 32X support code for the 68000
|
||||
| by Chilly Willy
|
||||
| First part of rom header
|
||||
|
||||
.text
|
||||
|
||||
| Initial exception vectors. When the console is first turned on, it is
|
||||
| in MegaDrive mode. All vectors just point to the code to start up the
|
||||
| Mars adapter. After the adapter is enabled, none of these vectors will
|
||||
| appear as the adapter uses its own vector table to route exceptions to
|
||||
| the jump table. 0x3F0 is where the 68000 starts at for the 32X.
|
||||
|
||||
.long 0x01000000,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0
|
||||
.long 0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0
|
||||
.long 0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0
|
||||
.long 0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0
|
||||
.long 0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0
|
||||
.long 0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0
|
||||
.long 0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0
|
||||
.long 0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0,0x000003F0
|
||||
|
||||
| Standard MegaDrive ROM header at 0x100
|
||||
|
||||
.ascii "SEGA 32X Example" /* SEGA must be the first four chars for TMSS */
|
||||
.ascii "(C)2024 "
|
||||
.ascii "ClassiCube 32X " /* export name */
|
||||
.ascii " "
|
||||
.ascii " "
|
||||
.ascii "ClassiCube 32X " /* domestic (Japanese) name */
|
||||
.ascii " "
|
||||
.ascii " "
|
||||
.ascii "GM MK-0000 -00"
|
||||
.word 0x0000 /* checksum - not needed */
|
||||
.ascii "J6 "
|
||||
.long 0x00000000,0x0007FFFF /* ROM start, end */
|
||||
.long 0x00FF0000,0x00FFFFFF /* RAM start, end */
|
||||
|
||||
.ifdef HAS_SAVE_RAM
|
||||
.ascii "RA" /* External RAM */
|
||||
.byte 0xF8 /* don't clear + odd bytes */
|
||||
.byte 0x20 /* SRAM */
|
||||
.long 0x00200001,0x0020FFFF /* SRAM start, end */
|
||||
.else
|
||||
.ascii " " /* no SRAM */
|
||||
.endif
|
||||
|
||||
.ascii " "
|
||||
.ascii " "
|
||||
|
||||
.ifdef MYTH_HOMEBREW
|
||||
.ascii "MYTH3900" /* memo indicates Myth native executable */
|
||||
.else
|
||||
.ascii " " /* memo */
|
||||
.endif
|
||||
|
||||
.ascii " "
|
||||
.ascii " "
|
||||
.ascii "F " /* enable any hardware configuration */
|
||||
|
||||
| Mars exception vector jump table at 0x200
|
||||
|
||||
jmp 0x880800.l /* reset = hot start */
|
||||
jsr 0x880806.l /* EX_BusError */
|
||||
jsr 0x880806.l /* EX_AddrError */
|
||||
jsr 0x880806.l /* EX_IllInstr */
|
||||
jsr 0x880806.l /* EX_DivByZero */
|
||||
jsr 0x880806.l /* EX_CHK */
|
||||
jsr 0x880806.l /* EX_TrapV */
|
||||
jsr 0x880806.l /* EX_Priviledge */
|
||||
jsr 0x880806.l /* EX_Trace */
|
||||
jsr 0x880806.l /* EX_LineA */
|
||||
jsr 0x880806.l /* EX_LineF */
|
||||
.space 72 /* reserved */
|
||||
jsr 0x880806.l /* EX_Spurious */
|
||||
jsr 0x880806.l /* EX_Level1 */
|
||||
jsr 0x880806.l /* EX_Level2 */
|
||||
jsr 0x880806.l /* EX_Level3 */
|
||||
jmp 0x88080C.l /* EX_Level4 HBlank */
|
||||
jsr 0x880806.l /* EX_Level5 */
|
||||
jmp 0x880812.l /* EX_Level6 VBlank */
|
||||
jsr 0x880806.l /* EX_Level7 */
|
||||
jsr 0x880806.l /* EX_Trap0 */
|
||||
jsr 0x880806.l /* EX_Trap1 */
|
||||
jsr 0x880806.l /* EX_Trap2 */
|
||||
jsr 0x880806.l /* EX_Trap3 */
|
||||
jsr 0x880806.l /* EX_Trap4 */
|
||||
jsr 0x880806.l /* EX_Trap5 */
|
||||
jsr 0x880806.l /* EX_Trap6 */
|
||||
jsr 0x880806.l /* EX_Trap7 */
|
||||
jsr 0x880806.l /* EX_Trap8 */
|
||||
jsr 0x880806.l /* EX_Trap9 */
|
||||
jsr 0x880806.l /* EX_TrapA */
|
||||
jsr 0x880806.l /* EX_TrapB */
|
||||
jsr 0x880806.l /* EX_TrapC */
|
||||
jsr 0x880806.l /* EX_TrapD */
|
||||
jsr 0x880806.l /* EX_TrapE */
|
||||
jsr 0x880806.l /* EX_TrapF */
|
||||
.space 166 /* reserved */
|
||||
1846
misc/32x/m68k_crt1.s
Normal file
802
misc/32x/sh2_crt0.s
Normal file
@@ -0,0 +1,802 @@
|
||||
! SEGA 32X support code for SH2
|
||||
! by Chilly Willy
|
||||
! Rom header and SH2 init/exception code - must be first in object list
|
||||
|
||||
.text
|
||||
|
||||
! Standard MD Header at 0x000
|
||||
|
||||
.incbin "build/32x/m68k_crt0.bin", 0, 0x3C0
|
||||
|
||||
! Standard Mars Header at 0x3C0
|
||||
|
||||
.ascii "ClassiCube 32X " /* module name (16 chars) */
|
||||
.long 0x00000000 /* version */
|
||||
.long __text_end-0x02000000 /* Source (in ROM) */
|
||||
.long 0x00000000 /* Destination (in SDRAM) */
|
||||
.long __data_size /* Size */
|
||||
.long 0x06000240 /* Master SH2 Jump */
|
||||
.long 0x06000244 /* Slave SH2 Jump */
|
||||
.long 0x06000000 /* Master SH2 VBR */
|
||||
.long 0x06000120 /* Slave SH2 VBR */
|
||||
|
||||
! Standard MD startup code at 0x3F0
|
||||
|
||||
.incbin "build/32x/m68k_crt1.bin"
|
||||
|
||||
|
||||
.data
|
||||
|
||||
! Master Vector Base Table at 0x06000000
|
||||
|
||||
.long mstart /* Cold Start PC */
|
||||
.long 0x0603FC00 /* Cold Start SP */
|
||||
.long mstart /* Manual Reset PC */
|
||||
.long 0x0603FC00 /* Manual Reset SP */
|
||||
.long main_err /* Illegal instruction */
|
||||
.long 0x00000000 /* reserved */
|
||||
.long main_err /* Invalid slot instruction */
|
||||
.long 0x20100400 /* reserved */
|
||||
.long 0x20100420 /* reserved */
|
||||
.long main_err /* CPU address error */
|
||||
.long main_err /* DMA address error */
|
||||
.long main_err /* NMI vector */
|
||||
.long main_err /* User break vector */
|
||||
.space 76 /* reserved */
|
||||
.long main_err /* TRAPA #32 */
|
||||
.long main_err /* TRAPA #33 */
|
||||
.long main_err /* TRAPA #34 */
|
||||
.long main_err /* TRAPA #35 */
|
||||
.long main_err /* TRAPA #36 */
|
||||
.long main_err /* TRAPA #37 */
|
||||
.long main_err /* TRAPA #38 */
|
||||
.long main_err /* TRAPA #39 */
|
||||
.long main_err /* TRAPA #40 */
|
||||
.long main_err /* TRAPA #41 */
|
||||
.long main_err /* TRAPA #42 */
|
||||
.long main_err /* TRAPA #43 */
|
||||
.long main_err /* TRAPA #44 */
|
||||
.long main_err /* TRAPA #45 */
|
||||
.long main_err /* TRAPA #46 */
|
||||
.long main_err /* TRAPA #47 */
|
||||
.long main_err /* TRAPA #48 */
|
||||
.long main_err /* TRAPA #49 */
|
||||
.long main_err /* TRAPA #50 */
|
||||
.long main_err /* TRAPA #51 */
|
||||
.long main_err /* TRAPA #52 */
|
||||
.long main_err /* TRAPA #53 */
|
||||
.long main_err /* TRAPA #54 */
|
||||
.long main_err /* TRAPA #55 */
|
||||
.long main_err /* TRAPA #56 */
|
||||
.long main_err /* TRAPA #57 */
|
||||
.long main_err /* TRAPA #58 */
|
||||
.long main_err /* TRAPA #59 */
|
||||
.long main_err /* TRAPA #60 */
|
||||
.long main_err /* TRAPA #61 */
|
||||
.long main_err /* TRAPA #62 */
|
||||
.long main_err /* TRAPA #63 */
|
||||
.long main_irq /* Level 1 IRQ */
|
||||
.long main_irq /* Level 2 & 3 IRQ's */
|
||||
.long main_irq /* Level 4 & 5 IRQ's */
|
||||
.long main_irq /* PWM interupt */
|
||||
.long main_irq /* Command interupt */
|
||||
.long main_irq /* H Blank interupt */
|
||||
.long main_irq /* V Blank interupt */
|
||||
.long main_irq /* Reset Button */
|
||||
|
||||
! Slave Vector Base Table at 0x06000120
|
||||
|
||||
.long sstart /* Cold Start PC */
|
||||
.long 0x06040000 /* Cold Start SP */
|
||||
.long sstart /* Manual Reset PC */
|
||||
.long 0x06040000 /* Manual Reset SP */
|
||||
.long slav_err /* Illegal instruction */
|
||||
.long 0x00000000 /* reserved */
|
||||
.long slav_err /* Invalid slot instruction */
|
||||
.long 0x20100400 /* reserved */
|
||||
.long 0x20100420 /* reserved */
|
||||
.long slav_err /* CPU address error */
|
||||
.long slav_err /* DMA address error */
|
||||
.long slav_err /* NMI vector */
|
||||
.long slav_err /* User break vector */
|
||||
.space 76 /* reserved */
|
||||
.long slav_err /* TRAPA #32 */
|
||||
.long slav_err /* TRAPA #33 */
|
||||
.long slav_err /* TRAPA #34 */
|
||||
.long slav_err /* TRAPA #35 */
|
||||
.long slav_err /* TRAPA #36 */
|
||||
.long slav_err /* TRAPA #37 */
|
||||
.long slav_err /* TRAPA #38 */
|
||||
.long slav_err /* TRAPA #39 */
|
||||
.long slav_err /* TRAPA #40 */
|
||||
.long slav_err /* TRAPA #41 */
|
||||
.long slav_err /* TRAPA #42 */
|
||||
.long slav_err /* TRAPA #43 */
|
||||
.long slav_err /* TRAPA #44 */
|
||||
.long slav_err /* TRAPA #45 */
|
||||
.long slav_err /* TRAPA #46 */
|
||||
.long slav_err /* TRAPA #47 */
|
||||
.long slav_err /* TRAPA #48 */
|
||||
.long slav_err /* TRAPA #49 */
|
||||
.long slav_err /* TRAPA #50 */
|
||||
.long slav_err /* TRAPA #51 */
|
||||
.long slav_err /* TRAPA #52 */
|
||||
.long slav_err /* TRAPA #53 */
|
||||
.long slav_err /* TRAPA #54 */
|
||||
.long slav_err /* TRAPA #55 */
|
||||
.long slav_err /* TRAPA #56 */
|
||||
.long slav_err /* TRAPA #57 */
|
||||
.long slav_err /* TRAPA #58 */
|
||||
.long slav_err /* TRAPA #59 */
|
||||
.long slav_err /* TRAPA #60 */
|
||||
.long slav_err /* TRAPA #61 */
|
||||
.long slav_err /* TRAPA #62 */
|
||||
.long slav_err /* TRAPA #63 */
|
||||
.long slav_irq /* Level 1 IRQ */
|
||||
.long slav_irq /* Level 2 & 3 IRQ's */
|
||||
.long slav_irq /* Level 4 & 5 IRQ's */
|
||||
.long slav_irq /* PWM interupt */
|
||||
.long slav_irq /* Command interupt */
|
||||
.long slav_irq /* H Blank interupt */
|
||||
.long slav_irq /* V Blank interupt */
|
||||
.long slav_irq /* Reset Button */
|
||||
|
||||
! The main SH2 starts here at 0x06000240
|
||||
|
||||
mstart:
|
||||
bra mcont
|
||||
nop
|
||||
|
||||
! The slave SH2 starts here at 0x06000244
|
||||
|
||||
sstart:
|
||||
bra scont
|
||||
nop
|
||||
|
||||
! Each section of code below has its own data table so that the code
|
||||
! can be extended without worrying about the offsets becoming too big.
|
||||
! This results in duplicate entries, but not so many that we care. :)
|
||||
|
||||
mcont:
|
||||
! clear interrupt flags
|
||||
mov.l _master_int_clr,r1
|
||||
mov.w r0,@-r1 /* PWM INT clear */
|
||||
mov.w r0,@r1
|
||||
mov.w r0,@-r1 /* CMD INT clear */
|
||||
mov.w r0,@r1
|
||||
mov.w r0,@-r1 /* H INT clear */
|
||||
mov.w r0,@r1
|
||||
mov.w r0,@-r1 /* V INT clear */
|
||||
mov.w r0,@r1
|
||||
mov.w r0,@-r1 /* VRES INT clear */
|
||||
mov.w r0,@r1
|
||||
|
||||
mov.l _master_stk,r15
|
||||
! purge cache and turn it off
|
||||
mov.l _master_cctl,r0
|
||||
mov #0x10,r1
|
||||
mov.b r1,@r0
|
||||
|
||||
! clear bss
|
||||
mov #0,r0
|
||||
mov.l _master_bss_start,r1
|
||||
mov.l _master_bss_end,r2
|
||||
0:
|
||||
mov.l r0,@r1
|
||||
cmp/eq r1,r2
|
||||
bf/s 0b
|
||||
add #4,r1
|
||||
|
||||
! wait for 68000 to finish init
|
||||
mov.l _master_sts,r0
|
||||
mov.l _master_ok,r1
|
||||
1:
|
||||
mov.l @r0,r2
|
||||
nop
|
||||
nop
|
||||
cmp/eq r1,r2
|
||||
bt 1b
|
||||
|
||||
! do all initializers
|
||||
mov.l _master_do_init,r0
|
||||
jsr @r0
|
||||
nop
|
||||
|
||||
! let Slave SH2 run
|
||||
mov #0,r1
|
||||
mov.l r1,@(4,r0) /* clear slave status */
|
||||
|
||||
mov #0x80,r0
|
||||
mov.l _master_adapter,r1
|
||||
mov.b r0,@r1 /* set FM */
|
||||
mov #0x00,r0
|
||||
mov.b r0,@(1,r1) /* set int enables */
|
||||
mov #0x20,r0
|
||||
ldc r0,sr /* allow ints */
|
||||
|
||||
! purge cache, turn it on, and run main()
|
||||
mov.l _master_cctl,r0
|
||||
mov #0x11,r1
|
||||
mov.b r1,@r0
|
||||
mov.l _master_go,r0
|
||||
jsr @r0
|
||||
nop
|
||||
|
||||
! do all finishers
|
||||
mov.l _master_do_fini,r0
|
||||
jsr @r0
|
||||
nop
|
||||
2:
|
||||
bra 2b
|
||||
nop
|
||||
|
||||
.align 2
|
||||
_master_int_clr:
|
||||
.long 0x2000401E /* one word passed last int clr reg */
|
||||
_master_stk:
|
||||
.long 0x0603FC00 /* Cold Start SP */
|
||||
_master_sts:
|
||||
.long 0x20004020
|
||||
_master_ok:
|
||||
.ascii "M_OK"
|
||||
_master_adapter:
|
||||
.long 0x20004000
|
||||
_master_cctl:
|
||||
.long 0xFFFFFE92
|
||||
_master_go:
|
||||
.long _main
|
||||
|
||||
_master_bss_start:
|
||||
.long __bss_start
|
||||
_master_bss_end:
|
||||
.long __bss_end
|
||||
_master_do_init:
|
||||
.long __INIT_SECTION__
|
||||
_master_do_fini:
|
||||
.long __FINI_SECTION__
|
||||
|
||||
scont:
|
||||
! clear interrupt flags
|
||||
mov.l _slave_int_clr,r1
|
||||
mov.w r0,@-r1 /* PWM INT clear */
|
||||
mov.w r0,@r1
|
||||
mov.w r0,@-r1 /* CMD INT clear */
|
||||
mov.w r0,@r1
|
||||
mov.w r0,@-r1 /* H INT clear */
|
||||
mov.w r0,@r1
|
||||
mov.w r0,@-r1 /* V INT clear */
|
||||
mov.w r0,@r1
|
||||
mov.w r0,@-r1 /* VRES INT clear */
|
||||
mov.w r0,@r1
|
||||
|
||||
mov.l _slave_stk,r15
|
||||
! wait for Master SH2 and 68000 to finish init
|
||||
mov.l _slave_sts,r0
|
||||
mov.l _slave_ok,r1
|
||||
1:
|
||||
mov.l @r0,r2
|
||||
nop
|
||||
nop
|
||||
cmp/eq r1,r2
|
||||
bt 1b
|
||||
|
||||
mov.l _slave_adapter,r1
|
||||
mov #0x00,r0
|
||||
mov.b r0,@(1,r1) /* set int enables (different from master despite same address!) */
|
||||
mov #0x20,r0
|
||||
ldc r0,sr /* allow ints */
|
||||
|
||||
! purge cache, turn it on, and run slave()
|
||||
mov.l _slave_cctl,r0
|
||||
mov #0x11,r1
|
||||
mov.b r1,@r0
|
||||
mov.l _slave_go,r0
|
||||
jmp @r0
|
||||
nop
|
||||
|
||||
.align 2
|
||||
_slave_int_clr:
|
||||
.long 0x2000401E /* one word passed last int clr reg */
|
||||
_slave_stk:
|
||||
.long 0x06040000 /* Cold Start SP */
|
||||
_slave_sts:
|
||||
.long 0x20004024
|
||||
_slave_ok:
|
||||
.ascii "S_OK"
|
||||
_slave_adapter:
|
||||
.long 0x20004000
|
||||
_slave_cctl:
|
||||
.long 0xFFFFFE92
|
||||
_slave_go:
|
||||
.long _slave
|
||||
|
||||
! Master exception handler
|
||||
|
||||
main_err:
|
||||
rte
|
||||
nop
|
||||
|
||||
! Master IRQ handler
|
||||
|
||||
main_irq:
|
||||
mov.l r0,@-r15
|
||||
|
||||
stc sr,r0 /* SR holds IRQ level in I3-I0 */
|
||||
shlr2 r0
|
||||
and #0x38,r0
|
||||
cmp/eq #0x28,r0
|
||||
bt main_h_irq
|
||||
cmp/eq #0x18,r0
|
||||
bt main_pwm_irq
|
||||
cmp/eq #0x30,r0
|
||||
bt main_v_irq
|
||||
cmp/eq #0x20,r0
|
||||
bt main_cmd_irq
|
||||
cmp/eq #0x38,r0
|
||||
bt main_vres_irq
|
||||
|
||||
mov.l @r15+,r0
|
||||
rte
|
||||
nop
|
||||
|
||||
main_v_irq:
|
||||
mov.l r1,@-r15
|
||||
|
||||
mov.l mvi_mars_adapter,r1
|
||||
mov.w r0,@(0x16,r1) /* clear V IRQ */
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
||||
! handle V IRQ
|
||||
|
||||
mov.l @r15+,r1
|
||||
mov.l @r15+,r0
|
||||
rte
|
||||
nop
|
||||
|
||||
.align 2
|
||||
mvi_mars_adapter:
|
||||
.long 0x20004000
|
||||
|
||||
main_h_irq:
|
||||
mov.l r1,@-r15
|
||||
|
||||
mov.l mhi_mars_adapter,r1
|
||||
mov.w r0,@(0x18,r1) /* clear H IRQ */
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
||||
! handle H IRQ
|
||||
|
||||
mov.l @r15+,r1
|
||||
mov.l @r15+,r0
|
||||
rte
|
||||
nop
|
||||
|
||||
.align 2
|
||||
mhi_mars_adapter:
|
||||
.long 0x20004000
|
||||
|
||||
main_cmd_irq:
|
||||
mov.l r1,@-r15
|
||||
|
||||
mov.l mci_mars_adapter,r1
|
||||
mov.w r0,@(0x1A,r1) /* clear CMD IRQ */
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
||||
! handle CMD IRQ
|
||||
|
||||
mov.l @r15+,r1
|
||||
mov.l @r15+,r0
|
||||
rte
|
||||
nop
|
||||
|
||||
.align 2
|
||||
mci_mars_adapter:
|
||||
.long 0x20004000
|
||||
|
||||
main_pwm_irq:
|
||||
mov.l r1,@-r15
|
||||
|
||||
mov.l mpi_mars_adapter,r1
|
||||
mov.w r0,@(0x1C,r1) /* clear PWM IRQ */
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
||||
! handle PWM IRQ
|
||||
|
||||
mov.l @r15+,r1
|
||||
mov.l @r15+,r0
|
||||
rte
|
||||
nop
|
||||
|
||||
.align 2
|
||||
mpi_mars_adapter:
|
||||
.long 0x20004000
|
||||
|
||||
main_vres_irq:
|
||||
mov.l mvri_mars_adapter,r1
|
||||
mov.w r0,@(0x14,r1) /* clear VRES IRQ */
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
||||
mov #0x0F,r0
|
||||
shll2 r0
|
||||
shll2 r0
|
||||
ldc r0,sr /* disallow ints */
|
||||
|
||||
mov.l mvri_master_stk,r15
|
||||
mov.l mvri_master_vres,r0
|
||||
jmp @r0
|
||||
nop
|
||||
|
||||
.align 2
|
||||
mvri_mars_adapter:
|
||||
.long 0x20004000
|
||||
mvri_master_stk:
|
||||
.long 0x0603FC00 /* Cold Start SP */
|
||||
mvri_master_vres:
|
||||
.long main_reset
|
||||
|
||||
! Slave exception handler
|
||||
|
||||
slav_err:
|
||||
rte
|
||||
nop
|
||||
|
||||
! Slave IRQ handler
|
||||
|
||||
slav_irq:
|
||||
mov.l r0,@-r15
|
||||
|
||||
stc sr,r0 /* SR holds IRQ level I3-I0 */
|
||||
shlr2 r0
|
||||
and #0x38,r0
|
||||
cmp/eq #0x28,r0
|
||||
bt slav_h_irq
|
||||
cmp/eq #0x18,r0
|
||||
bt slav_pwm_irq
|
||||
cmp/eq #0x30,r0
|
||||
bt slav_v_irq
|
||||
cmp/eq #0x20,r0
|
||||
bt slav_cmd_irq
|
||||
cmp/eq #0x38,r0
|
||||
bt slav_vres_irq
|
||||
|
||||
mov.l @r15+,r0
|
||||
rte
|
||||
nop
|
||||
|
||||
slav_v_irq:
|
||||
mov.l r1,@-r15
|
||||
|
||||
mov.l svi_mars_adapter,r1
|
||||
mov.w r0,@(0x16,r1) /* clear V IRQ */
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
||||
! handle V IRQ
|
||||
|
||||
mov.l @r15+,r1
|
||||
mov.l @r15+,r0
|
||||
rte
|
||||
nop
|
||||
|
||||
.align 2
|
||||
svi_mars_adapter:
|
||||
.long 0x20004000
|
||||
|
||||
slav_h_irq:
|
||||
mov.l r1,@-r15
|
||||
|
||||
mov.l shi_mars_adapter,r1
|
||||
mov.w r0,@(0x18,r1) /* clear H IRQ */
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
||||
! handle H IRQ
|
||||
|
||||
mov.l @r15+,r1
|
||||
mov.l @r15+,r0
|
||||
rte
|
||||
nop
|
||||
|
||||
.align 2
|
||||
shi_mars_adapter:
|
||||
.long 0x20004000
|
||||
|
||||
slav_cmd_irq:
|
||||
mov.l r1,@-r15
|
||||
|
||||
mov.l sci_mars_adapter,r1
|
||||
mov.w r0,@(0x1A,r1) /* clear CMD IRQ */
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
||||
! handle CMD IRQ
|
||||
|
||||
mov.l @r15+,r1
|
||||
mov.l @r15+,r0
|
||||
rte
|
||||
nop
|
||||
|
||||
.align 2
|
||||
sci_mars_adapter:
|
||||
.long 0x20004000
|
||||
|
||||
slav_pwm_irq:
|
||||
mov.l r1,@-r15
|
||||
|
||||
mov.l spi_mars_adapter,r1
|
||||
mov.w r0,@(0x1C,r1) /* clear PWM IRQ */
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
||||
! handle PWM IRQ
|
||||
|
||||
mov.l @r15+,r1
|
||||
mov.l @r15+,r0
|
||||
rte
|
||||
nop
|
||||
|
||||
.align 2
|
||||
spi_mars_adapter:
|
||||
.long 0x20004000
|
||||
|
||||
slav_vres_irq:
|
||||
mov.l svri_mars_adapter,r1
|
||||
mov.w r0,@(0x14,r1) /* clear VRES IRQ */
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
||||
mov #0x0F,r0
|
||||
shll2 r0
|
||||
shll2 r0
|
||||
ldc r0,sr /* disallow ints */
|
||||
|
||||
mov.l svri_slave_stk,r15
|
||||
mov.l svri_slave_vres,r0
|
||||
jmp @r0
|
||||
nop
|
||||
|
||||
.align 2
|
||||
svri_mars_adapter:
|
||||
.long 0x20004000
|
||||
svri_slave_stk:
|
||||
.long 0x06040000 /* Cold Start SP */
|
||||
svri_slave_vres:
|
||||
.long slav_reset
|
||||
|
||||
|
||||
! Fast memcpy function - copies longs, runs from sdram for speed
|
||||
! On entry: r4 = dst, r5 = src, r6 = len (in longs)
|
||||
|
||||
.align 4
|
||||
.global _fast_memcpy
|
||||
_fast_memcpy:
|
||||
mov.l @r5+,r3
|
||||
mov.l r3,@r4
|
||||
dt r6
|
||||
bf/s _fast_memcpy
|
||||
add #4,r4
|
||||
rts
|
||||
nop
|
||||
|
||||
! Cache clear line function
|
||||
! On entry: r4 = ptr - should be 16 byte aligned
|
||||
|
||||
.align 4
|
||||
.global _CacheClearLine
|
||||
_CacheClearLine:
|
||||
mov.l _cache_flush,r0
|
||||
or r0,r4
|
||||
mov #0,r0
|
||||
mov.l r0,@r4
|
||||
rts
|
||||
nop
|
||||
|
||||
.align 2
|
||||
|
||||
_cache_flush:
|
||||
.long 0x40000000
|
||||
|
||||
! Cache control function
|
||||
! On entry: r4 = cache mode => 0x10 = CP, 0x08 = TW, 0x01 = CE
|
||||
|
||||
.align 4
|
||||
.global _CacheControl
|
||||
_CacheControl:
|
||||
mov.l _sh2_cctl,r0
|
||||
mov.b r4,@r0
|
||||
rts
|
||||
nop
|
||||
|
||||
.align 2
|
||||
|
||||
_sh2_cctl:
|
||||
.long 0xFFFFFE92
|
||||
|
||||
! void ScreenStretch(int src, int width, int height, int interp);
|
||||
! On entry: r4 = src pointer, r5 = width, r6 = height, r7 = interpolate
|
||||
|
||||
.align 4
|
||||
.global _ScreenStretch
|
||||
_ScreenStretch:
|
||||
cmp/pl r7
|
||||
bt ss_interp
|
||||
|
||||
! stretch screen without interpolation
|
||||
|
||||
0:
|
||||
mov r5,r3
|
||||
shll r3
|
||||
mov r3,r2
|
||||
shll r2
|
||||
add r4,r3
|
||||
add r4,r2
|
||||
1:
|
||||
add #-2,r3
|
||||
mov.w @r3,r0
|
||||
extu.w r0,r1
|
||||
shll16 r0
|
||||
or r1,r0
|
||||
mov.l r0,@-r2
|
||||
cmp/eq r3,r4
|
||||
bf 1b
|
||||
|
||||
/* next line */
|
||||
mov.w ss_pitch,r0
|
||||
dt r6
|
||||
bf/s 0b
|
||||
add r0,r4
|
||||
rts
|
||||
nop
|
||||
|
||||
ss_interp:
|
||||
|
||||
! stretch screen with interpolation
|
||||
|
||||
0:
|
||||
mov r5,r3
|
||||
shll r3
|
||||
mov r3,r2
|
||||
shll r2
|
||||
add r4,r3
|
||||
add r4,r2
|
||||
mov #0,r7
|
||||
1:
|
||||
add #-2,r3
|
||||
mov.w @r3,r0
|
||||
mov.w ss_mask,r1
|
||||
and r0,r1 /* masked curr pixel */
|
||||
shll16 r0
|
||||
add r1,r7 /* add to masked prev pixel */
|
||||
shlr r7 /* blended pixel */
|
||||
or r7,r0 /* curr pixel << 16 | blended pixel */
|
||||
mov r1,r7 /* masked prev pixel = masked curr pixel */
|
||||
mov.l r0,@-r2
|
||||
cmp/eq r3,r4
|
||||
bf 1b
|
||||
|
||||
/* next line */
|
||||
mov.w ss_pitch,r0
|
||||
dt r6
|
||||
bf/s 0b
|
||||
add r0,r4
|
||||
rts
|
||||
nop
|
||||
|
||||
ss_mask:
|
||||
.word 0x7BDE
|
||||
ss_pitch:
|
||||
.word 640
|
||||
|
||||
.align 2
|
||||
|
||||
.text
|
||||
|
||||
main_reset:
|
||||
! do any master SH2 specific reset code here
|
||||
|
||||
mov.l slav_st,r0
|
||||
mov.l slav_ok,r1
|
||||
0:
|
||||
mov.l @r0,r2
|
||||
nop
|
||||
nop
|
||||
cmp/eq r1,r2
|
||||
bf 0b /* wait for slave */
|
||||
|
||||
! recopy rom data to sdram
|
||||
|
||||
mov.l rom_header,r1
|
||||
mov.l @r1,r2 /* src relative to start of rom */
|
||||
mov.l @(4,r1),r3 /* dst relative to start of sdram */
|
||||
mov.l @(8,r1),r4 /* size (longword aligned) */
|
||||
mov.l rom_start,r1
|
||||
add r1,r2
|
||||
mov.l sdram_start,r1
|
||||
add r1,r3
|
||||
shlr2 r4 /* number of longs */
|
||||
add #-1,r4
|
||||
1:
|
||||
mov.l @r2+,r0
|
||||
mov.l r0,@r3
|
||||
add #4,r3
|
||||
dt r4
|
||||
bf 1b
|
||||
|
||||
mov.l main_st,r0
|
||||
mov.l main_ok,r1
|
||||
mov.l r1,@r0 /* tell everyone reset complete */
|
||||
|
||||
mov.l main_go,r0
|
||||
jmp @r0
|
||||
nop
|
||||
|
||||
slav_reset:
|
||||
! do any slave SH2 specific reset code here
|
||||
|
||||
mov.l slav_st,r0
|
||||
mov.l slav_ok,r1
|
||||
mov.l r1,@r0 /* tell master to start reset */
|
||||
|
||||
mov.l main_st,r0
|
||||
mov.l main_ok,r1
|
||||
0:
|
||||
mov.l @r0,r2
|
||||
nop
|
||||
nop
|
||||
cmp/eq r1,r2
|
||||
bf 0b /* wait for master to do the work */
|
||||
|
||||
mov.l slav_go,r0
|
||||
jmp @r0
|
||||
nop
|
||||
|
||||
.align 2
|
||||
main_st:
|
||||
.long 0x20004020
|
||||
main_ok:
|
||||
.ascii "M_OK"
|
||||
main_go:
|
||||
.long mstart
|
||||
rom_header:
|
||||
.long 0x220003D4
|
||||
rom_start:
|
||||
.long 0x22000000
|
||||
sdram_start:
|
||||
.long 0x26000000
|
||||
|
||||
slav_st:
|
||||
.long 0x20004024
|
||||
slav_ok:
|
||||
.ascii "S_OK"
|
||||
slav_go:
|
||||
.long sstart
|
||||
|
||||
|
||||
.global _start
|
||||
_start:
|
||||
|
||||
127
misc/3ds/Makefile
Normal file
@@ -0,0 +1,127 @@
|
||||
ifeq ($(strip $(DEVKITPRO)),)
|
||||
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitPro)
|
||||
endif
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Configurable options
|
||||
#---------------------------------------------------------------------------------
|
||||
# Name of the final output
|
||||
TARGET = ClassiCube-3ds
|
||||
# List of directories containing source code
|
||||
SOURCE_DIRS = src src/3ds third_party/bearssl/src
|
||||
# List of directories containing shader files
|
||||
SHDR_DIRS = misc/3ds
|
||||
# List of directories containing more header files
|
||||
INCLUDES = -Ithird_party/bearssl/inc
|
||||
# Directory where object files are placed
|
||||
BUILD_DIR = build/3ds
|
||||
|
||||
APP_ICON = misc/3ds/icon.png
|
||||
APP_TITLE = ClassiCube
|
||||
APP_DESCRIPTION = Simple block building sandbox
|
||||
APP_AUTHOR = ClassiCube team
|
||||
|
||||
CIA_BANNER_BIN = misc/3ds/banner.bin
|
||||
CIA_ICON_BIN = misc/3ds/icon.bin
|
||||
CIA_SPEC_RSF = misc/3ds/spec.rsf
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Code generation
|
||||
#---------------------------------------------------------------------------------
|
||||
S_FILES = $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.S))
|
||||
C_FILES = $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.c))
|
||||
OBJS = $(addprefix $(BUILD_DIR)/, $(notdir $(C_FILES:%.c=%.o) $(S_FILES:%.S=%.o)))
|
||||
|
||||
PICAFILES := $(foreach dir,$(SHDR_DIRS),$(notdir $(wildcard $(dir)/*.v.pica)))
|
||||
OBJS += $(addprefix $(BUILD_DIR)/, $(PICAFILES:.v.pica=.shbin.o))
|
||||
|
||||
ARCH = -march=armv6k -mtune=mpcore -mfloat-abi=hard -mtp=soft
|
||||
CFLAGS = -g -Wall -O2 -mword-relocations -ffunction-sections $(ARCH) $(INCLUDE) -D__3DS__
|
||||
ASFLAGS = -g $(ARCH)
|
||||
|
||||
LDFLAGS = -specs=3dsx.specs -g $(ARCH)
|
||||
LIBS = -lctru -lm
|
||||
|
||||
CTRULIB = $(DEVKITPRO)/libctru
|
||||
INCLUDES += $(foreach dir, $(CTRULIB), -I$(dir)/include)
|
||||
LDFLAGS += $(foreach dir, $(CTRULIB), -L$(dir)/lib)
|
||||
|
||||
# Dependency tracking
|
||||
DEPFLAGS = -MT $@ -MMD -MP -MF $(BUILD_DIR)/$*.d
|
||||
DEPFILES := $(OBJS:%.o=%.d)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Compiler tools
|
||||
#---------------------------------------------------------------------------------
|
||||
PREFIX := $(DEVKITPRO)/devkitARM/bin/arm-none-eabi-
|
||||
ARM_AS := $(PREFIX)as
|
||||
ARM_CC := $(PREFIX)gcc
|
||||
ARM_CXX := $(PREFIX)g++
|
||||
|
||||
_DSXTOOL := $(DEVKITPRO)/tools/bin/3dsxtool
|
||||
SMDHTOOL := $(DEVKITPRO)/tools/bin/smdhtool
|
||||
PICASSO := $(DEVKITPRO)/tools/bin/picasso
|
||||
BIN2S := $(DEVKITPRO)/tools/bin/bin2s
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Main targets
|
||||
#---------------------------------------------------------------------------------
|
||||
default: $(BUILD_DIR) $(TARGET).cia
|
||||
|
||||
clean:
|
||||
rm $(TARGET).cia $(TARGET).3dsx $(TARGET).elf $(OBJS)
|
||||
|
||||
$(BUILD_DIR):
|
||||
mkdir -p $(BUILD_DIR)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Executable generation
|
||||
#---------------------------------------------------------------------------------
|
||||
$(TARGET).elf: $(OBJS)
|
||||
$(ARM_CC) $(LDFLAGS) $^ -o $@ $(LIBS)
|
||||
|
||||
$(BUILD_DIR).smdh: $(APP_ICON)
|
||||
$(SMDHTOOL) --create "$(APP_TITLE)" "$(APP_DESCRIPTION)" "$(APP_AUTHOR)" $(APP_ICON) $@
|
||||
|
||||
$(TARGET).3dsx: $(TARGET).elf $(BUILD_DIR).smdh
|
||||
$(_DSXTOOL) $< $@ --smdh=$(BUILD_DIR).smdh
|
||||
|
||||
$(BUILD_DIR)/makerom:
|
||||
wget https://github.com/3DSGuy/Project_CTR/releases/download/makerom-v0.18.3/makerom-v0.18.3-ubuntu_x86_64.zip -O $(BUILD_DIR)/makerom.zip
|
||||
unzip $(BUILD_DIR)/makerom.zip -d $(BUILD_DIR)
|
||||
chmod +x $(BUILD_DIR)/makerom
|
||||
|
||||
$(TARGET).cia : $(TARGET).3dsx $(BUILD_DIR)/makerom
|
||||
$(BUILD_DIR)/makerom -f cia -o $(TARGET).cia -elf $(TARGET).elf -rsf $(CIA_SPEC_RSF) -icon $(CIA_ICON_BIN) -banner $(CIA_BANNER_BIN) -exefslogo -target t
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Object generation
|
||||
#---------------------------------------------------------------------------------
|
||||
$(BUILD_DIR)/%.o: src/%.c
|
||||
$(ARM_CC) $(CFLAGS) $(INCLUDES) $(DEPFLAGS) -c $< -o $@
|
||||
|
||||
$(BUILD_DIR)/%.o: src/3ds/%.c
|
||||
$(ARM_CC) $(CFLAGS) $(INCLUDES) $(DEPFLAGS) -c $< -o $@
|
||||
|
||||
$(BUILD_DIR)/%.o: third_party/bearssl/src/%.c
|
||||
$(ARM_CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
|
||||
|
||||
$(BUILD_DIR)/%.shbin: misc/3ds/%.v.pica
|
||||
$(PICASSO) $< -o $@
|
||||
|
||||
$(BUILD_DIR)/%.shbin.o: $(BUILD_DIR)/%.shbin
|
||||
$(BIN2S) $< | $(ARM_AS) -o $@
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Dependency tracking
|
||||
#---------------------------------------------------------------------------------
|
||||
$(DEPFILES):
|
||||
|
||||
include $(wildcard $(DEPFILES))
|
||||
BIN
misc/3ds/audio.wav
Normal file
BIN
misc/3ds/banner.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
33
misc/3ds/coloured.v.pica
Normal file
@@ -0,0 +1,33 @@
|
||||
; Vertex shader for rendering coloured vertices for PICA200 GPU on the Nintendo 3DS
|
||||
; ==================================================================================
|
||||
|
||||
; Uniforms
|
||||
.fvec MVP[4];
|
||||
|
||||
; Constants
|
||||
.constf ONE_DIV_255(0.003921568627, 0.003921568627, 0.003921568627, 0.003921568627)
|
||||
|
||||
; Outputs
|
||||
.out out_pos position
|
||||
.out out_col color
|
||||
|
||||
; Inputs (defined as aliases for convenience)
|
||||
.alias in_pos v0
|
||||
.alias in_col v1
|
||||
|
||||
.proc main
|
||||
; r0 = in_pos
|
||||
mov r0, in_pos
|
||||
|
||||
; out_pos = MVP * r0
|
||||
dp4 out_pos.x, MVP[0], r0
|
||||
dp4 out_pos.y, MVP[1], r0
|
||||
dp4 out_pos.z, MVP[2], r0
|
||||
dp4 out_pos.w, MVP[3], r0
|
||||
|
||||
; out_col = in_col * ONE_DIV_255
|
||||
mul out_col, ONE_DIV_255, in_col
|
||||
|
||||
end
|
||||
.end
|
||||
|
||||
BIN
misc/3ds/icon.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
38
misc/3ds/offset.v.pica
Normal file
@@ -0,0 +1,38 @@
|
||||
; Vertex shader for rendering textured vertices with an offset for PICA200 GPU on the Nintendo 3DS
|
||||
; ==================================================================================
|
||||
|
||||
; Uniforms
|
||||
.fvec MVP[4];
|
||||
.fvec tex_offset;
|
||||
|
||||
; Constants
|
||||
.constf ONE_DIV_255(0.003921568627, 0.003921568627, 0.003921568627, 0.003921568627)
|
||||
|
||||
; Outputs
|
||||
.out out_pos position
|
||||
.out out_col color
|
||||
.out out_tex texcoord0
|
||||
|
||||
; Inputs (defined as aliases for convenience)
|
||||
.alias in_pos v0
|
||||
.alias in_col v1
|
||||
.alias in_tex v2
|
||||
|
||||
.proc main
|
||||
; r0 = in_pos
|
||||
mov r0, in_pos
|
||||
|
||||
; out_pos = MVP * r0
|
||||
dp4 out_pos.x, MVP[0], r0
|
||||
dp4 out_pos.y, MVP[1], r0
|
||||
dp4 out_pos.z, MVP[2], r0
|
||||
dp4 out_pos.w, MVP[3], r0
|
||||
|
||||
; out_col = in_col * ONE_DIV_255
|
||||
mul out_col, ONE_DIV_255, in_col
|
||||
; out_tex = in_tex + tex_offset
|
||||
add out_tex, tex_offset, in_tex
|
||||
|
||||
end
|
||||
.end
|
||||
|
||||
5
misc/3ds/readme.md
Normal file
@@ -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`
|
||||
204
misc/3ds/spec.rsf
Normal file
@@ -0,0 +1,204 @@
|
||||
# https://github.com/msikma/3ds-tpl
|
||||
# https://gist.github.com/jakcron/9f9f02ffd94d98a72632
|
||||
|
||||
BasicInfo:
|
||||
Title : ClassiCube
|
||||
CompanyCode : "00"
|
||||
ProductCode : CCBE
|
||||
ContentType : Application
|
||||
Logo : Nintendo
|
||||
|
||||
TitleInfo:
|
||||
UniqueId : 0x00CCBE
|
||||
Category : Application
|
||||
|
||||
CardInfo:
|
||||
MediaSize : 128MB # 128MB / 256MB / 512MB / 1GB / 2GB / 4GB
|
||||
MediaType : Card1 # Card1 / Card2
|
||||
CardDevice : NorFlash # NorFlash(Pick this if you use savedata) / None
|
||||
|
||||
|
||||
Option:
|
||||
UseOnSD : true # true if App is to be installed to SD
|
||||
FreeProductCode : true # Removes limitations on ProductCode
|
||||
MediaFootPadding : false # If true CCI files are created with padding
|
||||
EnableCrypt : false # Enables encryption for NCCH and CIA
|
||||
EnableCompress : true # Compresses exefs code
|
||||
|
||||
AccessControlInfo:
|
||||
#UseExtSaveData : true
|
||||
#ExtSaveDataId: 0xff3ff
|
||||
#UseExtendedSaveDataAccessControl: true
|
||||
#AccessibleSaveDataIds: [0x101, 0x202, 0x303, 0x404, 0x505, 0x606]
|
||||
|
||||
SystemControlInfo:
|
||||
SaveDataSize: 128KB
|
||||
RemasterVersion: 0
|
||||
StackSize: 0x40000
|
||||
|
||||
AccessControlInfo:
|
||||
FileSystemAccess:
|
||||
- Debug
|
||||
- DirectSdmc
|
||||
- DirectSdmcWrite
|
||||
|
||||
IdealProcessor : 0
|
||||
AffinityMask : 1
|
||||
|
||||
Priority : 16
|
||||
SystemMode : 80MB
|
||||
MaxCpu : 0x9E # Default
|
||||
DisableDebug : false
|
||||
EnableForceDebug : false
|
||||
CanWriteSharedPage : false
|
||||
CanUsePrivilegedPriority : false
|
||||
CanUseNonAlphabetAndNumber : false
|
||||
PermitMainFunctionArgument : false
|
||||
CanShareDeviceMemory : false
|
||||
RunnableOnSleep : false
|
||||
SpecialMemoryArrange : false
|
||||
CoreVersion : 2
|
||||
DescVersion : 2
|
||||
|
||||
ReleaseKernelMajor : "02"
|
||||
ReleaseKernelMinor : "33"
|
||||
MemoryType : Application
|
||||
HandleTableSize: 512
|
||||
|
||||
# New3DS Exclusive Process Settings
|
||||
SystemModeExt : 124MB # Legacy(Default)/124MB/178MB Legacy:Use Old3DS SystemMode
|
||||
CpuSpeed : 804MHz # 268MHz(Default)/804MHz
|
||||
EnableL2Cache : true # false(default)/true
|
||||
CanAccessCore2 : true
|
||||
|
||||
# Virtual Address Mappings
|
||||
IORegisterMapping:
|
||||
- 1ff50000-1ff57fff # DSP memory
|
||||
- 1ff70000-1ff77fff
|
||||
MemoryMapping:
|
||||
- 1f000000-1f5fffff:r # VRAM
|
||||
|
||||
SystemCallAccess:
|
||||
ArbitrateAddress: 34
|
||||
Break: 60
|
||||
CancelTimer: 28
|
||||
ClearEvent: 25
|
||||
ClearTimer: 29
|
||||
CloseHandle: 35
|
||||
ConnectToPort: 45
|
||||
ControlMemory: 1
|
||||
CreateAddressArbiter: 33
|
||||
CreateEvent: 23
|
||||
CreateMemoryBlock: 30
|
||||
CreateMutex: 19
|
||||
CreateSemaphore: 21
|
||||
CreateThread: 8
|
||||
CreateTimer: 26
|
||||
DuplicateHandle: 39
|
||||
ExitProcess: 3
|
||||
ExitThread: 9
|
||||
GetCurrentProcessorNumber: 17
|
||||
GetHandleInfo: 41
|
||||
GetProcessId: 53
|
||||
GetProcessIdOfThread: 54
|
||||
GetProcessIdealProcessor: 6
|
||||
GetProcessInfo: 43
|
||||
GetResourceLimit: 56
|
||||
GetResourceLimitCurrentValues: 58
|
||||
GetResourceLimitLimitValues: 57
|
||||
GetSystemInfo: 42
|
||||
GetSystemTick: 40
|
||||
GetThreadContext: 59
|
||||
GetThreadId: 55
|
||||
GetThreadIdealProcessor: 15
|
||||
GetThreadInfo: 44
|
||||
GetThreadPriority: 11
|
||||
MapMemoryBlock: 31
|
||||
OutputDebugString: 61
|
||||
QueryMemory: 2
|
||||
ReleaseMutex: 20
|
||||
ReleaseSemaphore: 22
|
||||
SendSyncRequest1: 46
|
||||
SendSyncRequest2: 47
|
||||
SendSyncRequest3: 48
|
||||
SendSyncRequest4: 49
|
||||
SendSyncRequest: 50
|
||||
SetThreadPriority: 12
|
||||
SetTimer: 27
|
||||
SignalEvent: 24
|
||||
SleepThread: 10
|
||||
UnmapMemoryBlock: 32
|
||||
WaitSynchronization1: 36
|
||||
WaitSynchronizationN: 37
|
||||
InterruptNumbers:
|
||||
|
||||
# Service List
|
||||
# Maximum 34 services (32 if firmware is prior to 9.3.0)
|
||||
ServiceAccessControl:
|
||||
- APT:U
|
||||
- $hioFIO
|
||||
- $hostio0
|
||||
- $hostio1
|
||||
- ac:u
|
||||
- boss:U
|
||||
- cam:u
|
||||
- cecd:u
|
||||
- cfg:u
|
||||
- dlp:FKCL
|
||||
- dlp:SRVR
|
||||
- dsp::DSP
|
||||
- frd:u
|
||||
- fs:USER
|
||||
- gsp::Gpu
|
||||
- hid:USER
|
||||
- mic:u
|
||||
- ndm:u
|
||||
- news:s
|
||||
- nwm::UDS
|
||||
- ptm:u
|
||||
- pxi:dev
|
||||
- soc:U
|
||||
- gsp::Lcd
|
||||
- y2r:u
|
||||
- ldr:ro
|
||||
- ir:USER
|
||||
- ir:u
|
||||
- csnd:SND
|
||||
- am:u
|
||||
- ns:s
|
||||
|
||||
SystemControlInfo:
|
||||
# Modules that run services listed above should be included below
|
||||
# Maximum 48 dependencies
|
||||
# If a module is listed that isn't present on the 3DS, the title will get stuck at the logo (3ds waves)
|
||||
# So act, nfc and qtm are commented for 4.x support. Uncomment if you need these.
|
||||
# <module name>:<module titleid>
|
||||
Dependency:
|
||||
ac: 0x0004013000002402L
|
||||
am: 0x0004013000001502L
|
||||
boss: 0x0004013000003402L
|
||||
camera: 0x0004013000001602L
|
||||
cecd: 0x0004013000002602L
|
||||
cfg: 0x0004013000001702L
|
||||
codec: 0x0004013000001802L
|
||||
csnd: 0x0004013000002702L
|
||||
dlp: 0x0004013000002802L
|
||||
dsp: 0x0004013000001a02L
|
||||
friends: 0x0004013000003202L
|
||||
gpio: 0x0004013000001b02L
|
||||
gsp: 0x0004013000001c02L
|
||||
hid: 0x0004013000001d02L
|
||||
i2c: 0x0004013000001e02L
|
||||
ir: 0x0004013000003302L
|
||||
mcu: 0x0004013000001f02L
|
||||
mic: 0x0004013000002002L
|
||||
ndm: 0x0004013000002b02L
|
||||
news: 0x0004013000003502L
|
||||
nim: 0x0004013000002c02L
|
||||
nwm: 0x0004013000002d02L
|
||||
pdn: 0x0004013000002102L
|
||||
ps: 0x0004013000003102L
|
||||
ptm: 0x0004013000002202L
|
||||
ro: 0x0004013000003702L
|
||||
socket: 0x0004013000002e02L
|
||||
spi: 0x0004013000002302L
|
||||
37
misc/3ds/textured.v.pica
Normal file
@@ -0,0 +1,37 @@
|
||||
; Vertex shader for rendering textured vertices for PICA200 GPU on the Nintendo 3DS
|
||||
; ==================================================================================
|
||||
|
||||
; Uniforms
|
||||
.fvec MVP[4];
|
||||
|
||||
; Constants
|
||||
.constf ONE_DIV_255(0.003921568627, 0.003921568627, 0.003921568627, 0.003921568627)
|
||||
|
||||
; Outputs
|
||||
.out out_pos position
|
||||
.out out_col color
|
||||
.out out_tex texcoord0
|
||||
|
||||
; Inputs (defined as aliases for convenience)
|
||||
.alias in_pos v0
|
||||
.alias in_col v1
|
||||
.alias in_tex v2
|
||||
|
||||
.proc main
|
||||
; r0 = in_pos
|
||||
mov r0, in_pos
|
||||
|
||||
; out_pos = MVP * r0
|
||||
dp4 out_pos.x, MVP[0], r0
|
||||
dp4 out_pos.y, MVP[1], r0
|
||||
dp4 out_pos.z, MVP[2], r0
|
||||
dp4 out_pos.w, MVP[3], r0
|
||||
|
||||
; out_col = in_col * ONE_DIV_255
|
||||
mul out_col, ONE_DIV_255, in_col
|
||||
; out_tex = in_tex
|
||||
mov out_tex, in_tex
|
||||
|
||||
end
|
||||
.end
|
||||
|
||||
BIN
misc/CCicon.ico
Normal file
|
After Width: | Height: | Size: 107 KiB |
BIN
misc/CCicon.png
Normal file
|
After Width: | Height: | Size: 7.0 KiB |
50
misc/UWP/Package.appxmanifest
Normal file
@@ -0,0 +1,50 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<Package
|
||||
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
|
||||
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
|
||||
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
|
||||
IgnorableNamespaces="uap mp">
|
||||
|
||||
<Identity
|
||||
Name="64f1d536-965b-4190-90d3-47d861786f88"
|
||||
Publisher="CN=ClassiCube"
|
||||
Version="1.0.0.0" />
|
||||
|
||||
<mp:PhoneIdentity PhoneProductId="64f1d536-965b-4190-90d3-47d861786f88" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>
|
||||
|
||||
<Properties>
|
||||
<DisplayName>ClassiCube-UWP</DisplayName>
|
||||
<PublisherDisplayName>ClassiCube</PublisherDisplayName>
|
||||
<Logo>Assets\StoreLogo.png</Logo>
|
||||
</Properties>
|
||||
|
||||
<Dependencies>
|
||||
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
|
||||
</Dependencies>
|
||||
|
||||
<Resources>
|
||||
<Resource Language="x-generate"/>
|
||||
</Resources>
|
||||
|
||||
<Applications>
|
||||
<Application Id="App"
|
||||
Executable="$targetnametoken$.exe"
|
||||
EntryPoint="ClassiCube_UWP.App">
|
||||
<uap:VisualElements
|
||||
DisplayName="ClassiCube-UWP"
|
||||
Description="ClassiCube-UWP"
|
||||
BackgroundColor="transparent" Square44x44Logo="Assets\Square44x44Logo.png" Square150x150Logo="Assets\Square150x150Logo.png">
|
||||
<uap:DefaultTile>
|
||||
<uap:ShowNameOnTiles>
|
||||
<uap:ShowOn Tile="square150x150Logo"/>
|
||||
</uap:ShowNameOnTiles>
|
||||
</uap:DefaultTile>
|
||||
</uap:VisualElements>
|
||||
</Application>
|
||||
</Applications>
|
||||
|
||||
<Capabilities>
|
||||
<Capability Name="internetClient" />
|
||||
</Capabilities>
|
||||
</Package>
|
||||
809
misc/UWP/Platform_UWP.cpp
Normal file
@@ -0,0 +1,809 @@
|
||||
#include "../../src/Core.h"
|
||||
#include "../../src/_PlatformBase.h"
|
||||
#include "../../src/Stream.h"
|
||||
#include "../../src/SystemFonts.h"
|
||||
#include "../../src/Funcs.h"
|
||||
#include "../../src/Utils.h"
|
||||
#include "../../src/Errors.h"
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#define NOSERVICE
|
||||
#define NOMCX
|
||||
#define NOIME
|
||||
#ifndef UNICODE
|
||||
#define UNICODE
|
||||
#define _UNICODE
|
||||
#endif
|
||||
#include <windows.h>
|
||||
#include <winsock2.h>
|
||||
#include <ws2tcpip.h>
|
||||
#include <shellapi.h>
|
||||
#include <wincrypt.h>
|
||||
|
||||
#include <winrt/Windows.Foundation.h>
|
||||
#include <winrt/Windows.System.h>
|
||||
|
||||
using namespace winrt;
|
||||
using namespace Windows::Foundation;
|
||||
using namespace Windows::System;
|
||||
|
||||
static HANDLE heap;
|
||||
const cc_result ReturnCode_FileShareViolation = ERROR_SHARING_VIOLATION;
|
||||
const cc_result ReturnCode_FileNotFound = ERROR_FILE_NOT_FOUND;
|
||||
const cc_result ReturnCode_DirectoryExists = ERROR_ALREADY_EXISTS;
|
||||
const cc_result ReturnCode_SocketInProgess = WSAEINPROGRESS;
|
||||
const cc_result ReturnCode_SocketWouldBlock = WSAEWOULDBLOCK;
|
||||
const cc_result ReturnCode_SocketDropped = WSAECONNRESET;
|
||||
|
||||
const char* Platform_AppNameSuffix = "";
|
||||
cc_bool Platform_ReadonlyFilesystem;
|
||||
cc_uint8 Platform_Flags = PLAT_FLAG_SINGLE_PROCESS;
|
||||
#define UWP_STRING(str) ((wchar_t*)(str)->uni)
|
||||
|
||||
/*########################################################################################################################*
|
||||
*---------------------------------------------------------Memory----------------------------------------------------------*
|
||||
*#########################################################################################################################*/
|
||||
void* Mem_Set(void* dst, cc_uint8 value, unsigned numBytes) { return memset( dst, value, numBytes); }
|
||||
void* Mem_Copy(void* dst, const void* src, unsigned numBytes) { return memcpy( dst, src, numBytes); }
|
||||
void* Mem_Move(void* dst, const void* src, unsigned numBytes) { return memmove(dst, src, numBytes); }
|
||||
|
||||
void* Mem_TryAlloc(cc_uint32 numElems, cc_uint32 elemsSize) {
|
||||
cc_uint32 size = CalcMemSize(numElems, elemsSize);
|
||||
return size ? HeapAlloc(heap, 0, size) : NULL;
|
||||
}
|
||||
|
||||
void* Mem_TryAllocCleared(cc_uint32 numElems, cc_uint32 elemsSize) {
|
||||
cc_uint32 size = CalcMemSize(numElems, elemsSize);
|
||||
return size ? HeapAlloc(heap, HEAP_ZERO_MEMORY, size) : NULL;
|
||||
}
|
||||
|
||||
void* Mem_TryRealloc(void* mem, cc_uint32 numElems, cc_uint32 elemsSize) {
|
||||
cc_uint32 size = CalcMemSize(numElems, elemsSize);
|
||||
return size ? HeapReAlloc(heap, 0, mem, size) : NULL;
|
||||
}
|
||||
|
||||
void Mem_Free(void* mem) {
|
||||
if (mem) HeapFree(heap, 0, mem);
|
||||
}
|
||||
|
||||
|
||||
/*########################################################################################################################*
|
||||
*------------------------------------------------------Logging/Time-------------------------------------------------------*
|
||||
*#########################################################################################################################*/
|
||||
/* TODO: check this is actually accurate */
|
||||
static cc_uint64 sw_freqMul = 1, sw_freqDiv = 1;
|
||||
cc_uint64 Stopwatch_ElapsedMicroseconds(cc_uint64 beg, cc_uint64 end) {
|
||||
if (end < beg) return 0;
|
||||
return ((end - beg) * sw_freqMul) / sw_freqDiv;
|
||||
}
|
||||
|
||||
static HANDLE conHandle;
|
||||
static BOOL hasDebugger;
|
||||
|
||||
void Platform_Log(const char* msg, int len) {
|
||||
char tmp[2048 + 1];
|
||||
DWORD wrote;
|
||||
|
||||
if (conHandle) {
|
||||
WriteFile(conHandle, msg, len, &wrote, NULL);
|
||||
WriteFile(conHandle, "\n", 1, &wrote, NULL);
|
||||
}
|
||||
|
||||
if (!hasDebugger) return;
|
||||
len = min(len, 2048);
|
||||
Mem_Copy(tmp, msg, len); tmp[len] = '\0';
|
||||
|
||||
OutputDebugStringA(tmp);
|
||||
OutputDebugStringA("\n");
|
||||
}
|
||||
|
||||
#define FILETIME_EPOCH 50491123200ULL
|
||||
#define FILETIME_UNIX_EPOCH 11644473600ULL
|
||||
#define FileTime_TotalSecs(time) ((time / 10000000) + FILETIME_EPOCH)
|
||||
#define FileTime_UnixTime(time) ((time / 10000000) - FILETIME_UNIX_EPOCH)
|
||||
|
||||
TimeMS DateTime_CurrentUTC(void) {
|
||||
FILETIME ft;
|
||||
cc_uint64 raw;
|
||||
|
||||
GetSystemTimeAsFileTime(&ft);
|
||||
/* in 100 nanosecond units, since Jan 1 1601 */
|
||||
raw = ft.dwLowDateTime | ((cc_uint64)ft.dwHighDateTime << 32);
|
||||
return FileTime_TotalSecs(raw);
|
||||
}
|
||||
|
||||
void DateTime_CurrentLocal(struct cc_datetime* t) {
|
||||
SYSTEMTIME localTime;
|
||||
GetLocalTime(&localTime);
|
||||
|
||||
t->year = localTime.wYear;
|
||||
t->month = localTime.wMonth;
|
||||
t->day = localTime.wDay;
|
||||
t->hour = localTime.wHour;
|
||||
t->minute = localTime.wMinute;
|
||||
t->second = localTime.wSecond;
|
||||
}
|
||||
|
||||
static cc_bool sw_highRes;
|
||||
cc_uint64 Stopwatch_Measure(void) {
|
||||
LARGE_INTEGER t;
|
||||
FILETIME ft;
|
||||
|
||||
if (sw_highRes) {
|
||||
QueryPerformanceCounter(&t);
|
||||
return (cc_uint64)t.QuadPart;
|
||||
} else {
|
||||
GetSystemTimeAsFileTime(&ft);
|
||||
return (cc_uint64)ft.dwLowDateTime | ((cc_uint64)ft.dwHighDateTime << 32);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*########################################################################################################################*
|
||||
*-------------------------------------------------------Crash handling----------------------------------------------------*
|
||||
*#########################################################################################################################*/
|
||||
static const char* ExceptionDescribe(cc_uint32 code) {
|
||||
switch (code) {
|
||||
case EXCEPTION_ACCESS_VIOLATION: return "ACCESS_VIOLATION";
|
||||
case EXCEPTION_ILLEGAL_INSTRUCTION: return "ILLEGAL_INSTRUCTION";
|
||||
case EXCEPTION_INT_DIVIDE_BY_ZERO: return "DIVIDE_BY_ZERO";
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static LONG WINAPI UnhandledFilter(struct _EXCEPTION_POINTERS* info) {
|
||||
cc_string msg; char msgBuffer[128 + 1];
|
||||
const char* desc;
|
||||
cc_uint32 code;
|
||||
cc_uintptr addr;
|
||||
|
||||
code = (cc_uint32)info->ExceptionRecord->ExceptionCode;
|
||||
addr = (cc_uintptr)info->ExceptionRecord->ExceptionAddress;
|
||||
desc = ExceptionDescribe(code);
|
||||
|
||||
String_InitArray_NT(msg, msgBuffer);
|
||||
if (desc) {
|
||||
String_Format2(&msg, "Unhandled %c error at %x", desc, &addr);
|
||||
} else {
|
||||
String_Format2(&msg, "Unhandled exception 0x%h at %x", &code, &addr);
|
||||
}
|
||||
|
||||
DWORD numArgs = info->ExceptionRecord->NumberParameters;
|
||||
if (numArgs) {
|
||||
numArgs = min(numArgs, EXCEPTION_MAXIMUM_PARAMETERS);
|
||||
String_AppendConst(&msg, " [");
|
||||
|
||||
for (DWORD i = 0; i < numArgs; i++)
|
||||
{
|
||||
String_Format1(&msg, "0x%x,", &info->ExceptionRecord->ExceptionInformation[i]);
|
||||
}
|
||||
String_Append(&msg, ']');
|
||||
}
|
||||
|
||||
msg.buffer[msg.length] = '\0';
|
||||
Logger_DoAbort(0, msg.buffer, info->ContextRecord);
|
||||
return EXCEPTION_EXECUTE_HANDLER; /* TODO: different flag */
|
||||
}
|
||||
|
||||
void CrashHandler_Install(void) {
|
||||
SetUnhandledExceptionFilter(UnhandledFilter);
|
||||
}
|
||||
|
||||
void Process_Abort2(cc_result result, const char* raw_msg) {
|
||||
Logger_DoAbort(result, raw_msg, NULL);
|
||||
}
|
||||
|
||||
|
||||
/*########################################################################################################################*
|
||||
*-----------------------------------------------------Directory/File------------------------------------------------------*
|
||||
*#########################################################################################################################*/
|
||||
void Directory_GetCachePath(cc_string* path) { }
|
||||
|
||||
void Platform_EncodePath(cc_filepath* dst, const cc_string* src) {
|
||||
Platform_EncodeString(dst, src);
|
||||
}
|
||||
|
||||
cc_result Directory_Create(const cc_filepath* path) {
|
||||
if (CreateDirectoryW(UWP_STRING(path), NULL)) return 0;
|
||||
return GetLastError();
|
||||
}
|
||||
|
||||
int File_Exists(const cc_filepath* path) {
|
||||
DWORD attribs = GetFileAttributesW(UWP_STRING(path));
|
||||
|
||||
return attribs != INVALID_FILE_ATTRIBUTES && !(attribs & FILE_ATTRIBUTE_DIRECTORY);
|
||||
}
|
||||
|
||||
static cc_result Directory_EnumCore(const cc_string* dirPath, const cc_string* file, DWORD attribs,
|
||||
void* obj, Directory_EnumCallback callback) {
|
||||
cc_string path; char pathBuffer[MAX_PATH + 10];
|
||||
int is_dir;
|
||||
|
||||
/* ignore . and .. entry */
|
||||
if (file->length == 1 && file->buffer[0] == '.') return 0;
|
||||
if (file->length == 2 && file->buffer[0] == '.' && file->buffer[1] == '.') return 0;
|
||||
|
||||
String_InitArray(path, pathBuffer);
|
||||
String_Format2(&path, "%s/%s", dirPath, file);
|
||||
|
||||
is_dir = attribs & FILE_ATTRIBUTE_DIRECTORY;
|
||||
callback(&path, obj, is_dir);
|
||||
return 0;
|
||||
}
|
||||
|
||||
cc_result Directory_Enum(const cc_string* dirPath, void* obj, Directory_EnumCallback callback) {
|
||||
cc_string path; char pathBuffer[MAX_PATH + 10];
|
||||
WIN32_FIND_DATAW eW;
|
||||
int i, ansi = false;
|
||||
cc_filepath str;
|
||||
HANDLE find;
|
||||
cc_result res;
|
||||
|
||||
/* Need to append \* to search for files in directory */
|
||||
String_InitArray(path, pathBuffer);
|
||||
String_Format1(&path, "%s\\*", dirPath);
|
||||
Platform_EncodePath(&str, &path);
|
||||
|
||||
find = FindFirstFileW(UWP_STRING(&str), &eW);
|
||||
if (!find || find == INVALID_HANDLE_VALUE)
|
||||
return GetLastError();
|
||||
|
||||
do {
|
||||
path.length = 0;
|
||||
for (i = 0; i < MAX_PATH && eW.cFileName[i]; i++) {
|
||||
/* TODO: UTF16 to codepoint conversion */
|
||||
String_Append(&path, Convert_CodepointToCP437(eW.cFileName[i]));
|
||||
}
|
||||
if ((res = Directory_EnumCore(dirPath, &path, eW.dwFileAttributes, obj, callback))) return res;
|
||||
} while (FindNextFileW(find, &eW));
|
||||
|
||||
res = GetLastError(); /* return code from FindNextFile */
|
||||
FindClose(find);
|
||||
return res == ERROR_NO_MORE_FILES ? 0 : res;
|
||||
}
|
||||
|
||||
static cc_result DoFile(cc_file* file, const cc_filepath* path, DWORD access, DWORD createMode) {
|
||||
*file = CreateFile2(UWP_STRING(path), access, FILE_SHARE_READ, createMode, NULL);
|
||||
if (*file && *file != INVALID_HANDLE_VALUE) return 0;
|
||||
return GetLastError();
|
||||
}
|
||||
|
||||
cc_result File_Open(cc_file* file, const cc_filepath* path) {
|
||||
return DoFile(file, path, GENERIC_READ, OPEN_EXISTING);
|
||||
}
|
||||
cc_result File_Create(cc_file* file, const cc_filepath* path) {
|
||||
return DoFile(file, path, GENERIC_WRITE | GENERIC_READ, CREATE_ALWAYS);
|
||||
}
|
||||
cc_result File_OpenOrCreate(cc_file* file, const cc_filepath* path) {
|
||||
return DoFile(file, path, GENERIC_WRITE | GENERIC_READ, OPEN_ALWAYS);
|
||||
}
|
||||
|
||||
cc_result File_Read(cc_file file, void* data, cc_uint32 count, cc_uint32* bytesRead) {
|
||||
/* NOTE: the (DWORD*) cast assumes that sizeof(long) is 4 */
|
||||
BOOL success = ReadFile(file, data, count, (DWORD*)bytesRead, NULL);
|
||||
return success ? 0 : GetLastError();
|
||||
}
|
||||
|
||||
cc_result File_Write(cc_file file, const void* data, cc_uint32 count, cc_uint32* bytesWrote) {
|
||||
/* NOTE: the (DWORD*) cast assumes that sizeof(long) is 4 */
|
||||
BOOL success = WriteFile(file, data, count, (DWORD*)bytesWrote, NULL);
|
||||
return success ? 0 : GetLastError();
|
||||
}
|
||||
|
||||
cc_result File_Close(cc_file file) {
|
||||
return CloseHandle(file) ? 0 : GetLastError();
|
||||
}
|
||||
|
||||
cc_result File_Seek(cc_file file, int offset, int seekType) {
|
||||
static cc_uint8 modes[] = { FILE_BEGIN, FILE_CURRENT, FILE_END };
|
||||
DWORD pos = SetFilePointer(file, offset, NULL, modes[seekType]);
|
||||
return pos != INVALID_SET_FILE_POINTER ? 0 : GetLastError();
|
||||
}
|
||||
|
||||
cc_result File_Position(cc_file file, cc_uint32* pos) {
|
||||
*pos = SetFilePointer(file, 0, NULL, FILE_CURRENT);
|
||||
return *pos != INVALID_SET_FILE_POINTER ? 0 : GetLastError();
|
||||
}
|
||||
|
||||
cc_result File_Length(cc_file file, cc_uint32* len) {
|
||||
LARGE_INTEGER raw;
|
||||
if (!GetFileSizeEx(file, &raw)) return GetLastError();
|
||||
|
||||
*len = raw.QuadPart;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*########################################################################################################################*
|
||||
*--------------------------------------------------------Threading--------------------------------------------------------*
|
||||
*#############################################################################################################p############*/
|
||||
void Thread_Sleep(cc_uint32 milliseconds) { Sleep(milliseconds); }
|
||||
static DWORD WINAPI ExecThread(void* param) {
|
||||
Thread_StartFunc func = (Thread_StartFunc)param;
|
||||
func();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Thread_Run(void** handle, Thread_StartFunc func, int stackSize, const char* name) {
|
||||
DWORD threadID;
|
||||
HANDLE thread = CreateThread(NULL, 0, ExecThread, (void*)func, CREATE_SUSPENDED, &threadID);
|
||||
if (!thread) Process_Abort2(GetLastError(), "Creating thread");
|
||||
|
||||
*handle = thread;
|
||||
ResumeThread(thread);
|
||||
}
|
||||
|
||||
void Thread_Detach(void* handle) {
|
||||
if (!CloseHandle((HANDLE)handle)) {
|
||||
Process_Abort2(GetLastError(), "Freeing thread handle");
|
||||
}
|
||||
}
|
||||
|
||||
void Thread_Join(void* handle) {
|
||||
WaitForSingleObject((HANDLE)handle, INFINITE);
|
||||
Thread_Detach(handle);
|
||||
}
|
||||
|
||||
void* Mutex_Create(const char* name) {
|
||||
CRITICAL_SECTION* ptr = (CRITICAL_SECTION*)Mem_Alloc(1, sizeof(CRITICAL_SECTION), "mutex");
|
||||
InitializeCriticalSection(ptr);
|
||||
return ptr;
|
||||
}
|
||||
|
||||
void Mutex_Free(void* handle) {
|
||||
DeleteCriticalSection((CRITICAL_SECTION*)handle);
|
||||
Mem_Free(handle);
|
||||
}
|
||||
void Mutex_Lock(void* handle) { EnterCriticalSection((CRITICAL_SECTION*)handle); }
|
||||
void Mutex_Unlock(void* handle) { LeaveCriticalSection((CRITICAL_SECTION*)handle); }
|
||||
|
||||
void* Waitable_Create(const char* name) {
|
||||
void* handle = CreateEventA(NULL, false, false, NULL);
|
||||
if (!handle) {
|
||||
Process_Abort2(GetLastError(), "Creating waitable");
|
||||
}
|
||||
return handle;
|
||||
}
|
||||
|
||||
void Waitable_Free(void* handle) {
|
||||
if (!CloseHandle((HANDLE)handle)) {
|
||||
Process_Abort2(GetLastError(), "Freeing waitable");
|
||||
}
|
||||
}
|
||||
|
||||
void Waitable_Signal(void* handle) { SetEvent((HANDLE)handle); }
|
||||
void Waitable_Wait(void* handle) {
|
||||
WaitForSingleObject((HANDLE)handle, INFINITE);
|
||||
}
|
||||
|
||||
void Waitable_WaitFor(void* handle, cc_uint32 milliseconds) {
|
||||
WaitForSingleObject((HANDLE)handle, milliseconds);
|
||||
}
|
||||
|
||||
|
||||
/*########################################################################################################################*
|
||||
*---------------------------------------------------------Socket----------------------------------------------------------*
|
||||
*#########################################################################################################################*/
|
||||
/* Sanity check to ensure cc_sockaddr struct is large enough to contain all socket addresses supported by this platform */
|
||||
static char sockaddr_size_check[sizeof(SOCKADDR_STORAGE) < CC_SOCKETADDR_MAXSIZE ? 1 : -1];
|
||||
|
||||
static cc_result ParseHostNew(char* host, int port, cc_sockaddr* addrs, int* numValidAddrs) {
|
||||
char portRaw[32]; cc_string portStr;
|
||||
struct addrinfo hints = { 0 };
|
||||
struct addrinfo* result;
|
||||
struct addrinfo* cur;
|
||||
int i = 0;
|
||||
|
||||
hints.ai_socktype = SOCK_STREAM;
|
||||
hints.ai_protocol = IPPROTO_TCP;
|
||||
|
||||
String_InitArray(portStr, portRaw);
|
||||
String_AppendInt(&portStr, port);
|
||||
portRaw[portStr.length] = '\0';
|
||||
|
||||
int res = getaddrinfo(host, portRaw, &hints, &result);
|
||||
if (res == WSAHOST_NOT_FOUND) return SOCK_ERR_UNKNOWN_HOST;
|
||||
if (res) return res;
|
||||
|
||||
/* Prefer IPv4 addresses first */
|
||||
for (cur = result; cur && i < SOCKET_MAX_ADDRS; cur = cur->ai_next)
|
||||
{
|
||||
if (cur->ai_family != AF_INET) continue;
|
||||
SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen); i++;
|
||||
}
|
||||
|
||||
for (cur = result; cur && i < SOCKET_MAX_ADDRS; cur = cur->ai_next)
|
||||
{
|
||||
if (cur->ai_family == AF_INET) continue;
|
||||
SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen); i++;
|
||||
}
|
||||
|
||||
freeaddrinfo(result);
|
||||
*numValidAddrs = i;
|
||||
return i == 0 ? ERR_INVALID_ARGUMENT : 0;
|
||||
}
|
||||
|
||||
cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* addrs, int* numValidAddrs) {
|
||||
SOCKADDR_IN* addr4 = (SOCKADDR_IN* )addrs[0].data;
|
||||
SOCKADDR_IN6* addr6 = (SOCKADDR_IN6*)addrs[0].data;
|
||||
cc_winstring str;
|
||||
INT size;
|
||||
|
||||
*numValidAddrs = 0;
|
||||
Platform_EncodeString(&str, address);
|
||||
|
||||
size = sizeof(*addr4);
|
||||
if (!WSAStringToAddressW(UWP_STRING(&str), AF_INET, NULL, (SOCKADDR*)addr4, &size)) {
|
||||
addr4->sin_port = htons(port);
|
||||
|
||||
addrs[0].size = size;
|
||||
*numValidAddrs = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
size = sizeof(*addr6);
|
||||
if (!WSAStringToAddressW(UWP_STRING(&str), AF_INET6, NULL, (SOCKADDR*)addr6, &size)) {
|
||||
addr6->sin6_port = htons(port);
|
||||
|
||||
addrs[0].size = size;
|
||||
*numValidAddrs = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return ParseHostNew(str.ansi, port, addrs, numValidAddrs);
|
||||
}
|
||||
|
||||
cc_result Socket_Create(cc_socket* s, cc_sockaddr* addr, cc_bool nonblocking) {
|
||||
SOCKADDR* raw_addr = (SOCKADDR*)addr->data;
|
||||
|
||||
*s = socket(raw_addr->sa_family, SOCK_STREAM, IPPROTO_TCP);
|
||||
if (*s == -1) return WSAGetLastError();
|
||||
|
||||
if (nonblocking) {
|
||||
u_long blockingMode = -1; /* non-blocking mode */
|
||||
ioctlsocket(*s, FIONBIO, &blockingMode);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
cc_result Socket_Connect(cc_socket s, cc_sockaddr* addr) {
|
||||
SOCKADDR* raw_addr = (SOCKADDR*)addr->data;
|
||||
|
||||
int res = connect(s, raw_addr, addr->size);
|
||||
return res == -1 ? WSAGetLastError() : 0;
|
||||
}
|
||||
|
||||
cc_result Socket_Read(cc_socket s, cc_uint8* data, cc_uint32 count, cc_uint32* modified) {
|
||||
int recvCount = recv(s, (char*)data, count, 0);
|
||||
if (recvCount != -1) { *modified = recvCount; return 0; }
|
||||
*modified = 0; return WSAGetLastError();
|
||||
}
|
||||
|
||||
cc_result Socket_Write(cc_socket s, const cc_uint8* data, cc_uint32 count, cc_uint32* modified) {
|
||||
int sentCount = send(s, (const char*)data, count, 0);
|
||||
if (sentCount != -1) { *modified = sentCount; return 0; }
|
||||
*modified = 0; return WSAGetLastError();
|
||||
}
|
||||
|
||||
void Socket_Close(cc_socket s) {
|
||||
shutdown(s, SD_BOTH);
|
||||
closesocket(s);
|
||||
}
|
||||
|
||||
static cc_result Socket_Poll(cc_socket s, int mode, cc_bool* success) {
|
||||
fd_set set;
|
||||
struct timeval time = { 0 };
|
||||
int selectCount;
|
||||
|
||||
set.fd_count = 1;
|
||||
set.fd_array[0] = s;
|
||||
|
||||
if (mode == SOCKET_POLL_READ) {
|
||||
selectCount = select(1, &set, NULL, NULL, &time);
|
||||
} else {
|
||||
selectCount = select(1, NULL, &set, NULL, &time);
|
||||
}
|
||||
|
||||
if (selectCount == -1) { *success = false; return WSAGetLastError(); }
|
||||
|
||||
*success = set.fd_count != 0; return 0;
|
||||
}
|
||||
|
||||
cc_result Socket_CheckReadable(cc_socket s, cc_bool* readable) {
|
||||
return Socket_Poll(s, SOCKET_POLL_READ, readable);
|
||||
}
|
||||
|
||||
cc_result Socket_CheckWritable(cc_socket s, cc_bool* writable) {
|
||||
int resultSize = sizeof(cc_result);
|
||||
cc_result res = Socket_Poll(s, SOCKET_POLL_WRITE, writable);
|
||||
if (res || *writable) return res;
|
||||
|
||||
/* https://stackoverflow.com/questions/29479953/so-error-value-after-successful-socket-operation */
|
||||
getsockopt(s, SOL_SOCKET, SO_ERROR, (char*)&res, &resultSize);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
/*########################################################################################################################*
|
||||
*-----------------------------------------------------Process/Module------------------------------------------------------*
|
||||
*#########################################################################################################################*/
|
||||
cc_bool Process_OpenSupported = true;
|
||||
|
||||
static cc_result Process_RawGetExePath(cc_winstring* path, int* len) {
|
||||
*len = GetModuleFileNameW(NULL, UWP_STRING(path), NATIVE_STR_LEN);
|
||||
path->uni[*len] = '\0';
|
||||
if (*len) return 0;
|
||||
|
||||
return GetLastError();
|
||||
}
|
||||
|
||||
cc_result Process_StartGame2(const cc_string* args, int numArgs) {
|
||||
union STARTUPINFO_union {
|
||||
STARTUPINFOW wide;
|
||||
STARTUPINFOA ansi;
|
||||
} si = { 0 }; // less compiler warnings this way
|
||||
|
||||
cc_winstring path;
|
||||
cc_string argv; char argvBuffer[NATIVE_STR_LEN];
|
||||
PROCESS_INFORMATION pi = { 0 };
|
||||
cc_winstring raw;
|
||||
cc_result res;
|
||||
int len, i;
|
||||
|
||||
if (Platform_IsSingleProcess()) return SetGameArgs(args, numArgs);
|
||||
|
||||
if ((res = Process_RawGetExePath(&path, &len))) return res;
|
||||
si.wide.cb = sizeof(STARTUPINFOW);
|
||||
|
||||
String_InitArray(argv, argvBuffer);
|
||||
/* Game doesn't actually care about argv[0] */
|
||||
String_AppendConst(&argv, "cc");
|
||||
for (i = 0; i < numArgs; i++)
|
||||
{
|
||||
if (String_IndexOf(&args[i], ' ') >= 0) {
|
||||
String_Format1(&argv, " \"%s\"", &args[i]);
|
||||
} else {
|
||||
String_Format1(&argv, " %s", &args[i]);
|
||||
}
|
||||
}
|
||||
Platform_EncodeString(&raw, &argv);
|
||||
|
||||
if (!CreateProcessW(UWP_STRING(&path), UWP_STRING(&raw), NULL, NULL,
|
||||
false, 0, NULL, NULL, &si.wide, &pi)) return GetLastError();
|
||||
|
||||
/* Don't leak memory for process return code */
|
||||
CloseHandle(pi.hProcess);
|
||||
CloseHandle(pi.hThread);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Process_Exit(cc_result code) { ExitProcess(code); }
|
||||
cc_result Process_StartOpen(const cc_string* args) {
|
||||
cc_winstring raw;
|
||||
Platform_EncodeString(&raw, args);
|
||||
|
||||
auto str = hstring(UWP_STRING(&raw));
|
||||
auto uri = Uri(str);
|
||||
|
||||
auto options = Windows::System::LauncherOptions();
|
||||
options.TreatAsUntrusted(true);
|
||||
Windows::System::Launcher::LaunchUriAsync(uri, options);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*########################################################################################################################*
|
||||
*--------------------------------------------------------Updater----------------------------------------------------------*
|
||||
*#########################################################################################################################*/
|
||||
#define UPDATE_TMP TEXT("CC_prev.exe")
|
||||
#define UPDATE_SRC TEXT(UPDATE_FILE)
|
||||
cc_bool Updater_Supported = true;
|
||||
|
||||
#if defined _M_IX86
|
||||
const struct UpdaterInfo Updater_Info = {
|
||||
"&eDirect3D 9 is recommended", 2,
|
||||
{
|
||||
{ "Direct3D9", "ClassiCube.exe" },
|
||||
{ "OpenGL", "ClassiCube.opengl.exe" }
|
||||
}
|
||||
};
|
||||
#elif defined _M_X64
|
||||
const struct UpdaterInfo Updater_Info = {
|
||||
"&eDirect3D 9 is recommended", 2,
|
||||
{
|
||||
{ "Direct3D9", "ClassiCube.64.exe" },
|
||||
{ "OpenGL", "ClassiCube.64-opengl.exe" }
|
||||
}
|
||||
};
|
||||
#elif defined _M_ARM64
|
||||
const struct UpdaterInfo Updater_Info = { "", 1, { { "Direct3D11", "cc-arm64-d3d11.exe" } } };
|
||||
#elif defined _M_ARM
|
||||
const struct UpdaterInfo Updater_Info = { "", 1, { { "Direct3D11", "cc-arm32-d3d11.exe" } } };
|
||||
#else
|
||||
const struct UpdaterInfo Updater_Info = { "&eCompile latest source code to update", 0 };
|
||||
#endif
|
||||
|
||||
cc_bool Updater_Clean(void) {
|
||||
return DeleteFile(UPDATE_TMP) || GetLastError() == ERROR_FILE_NOT_FOUND;
|
||||
}
|
||||
|
||||
cc_result Updater_Start(const char** action) {
|
||||
cc_winstring path;
|
||||
cc_result res;
|
||||
int len;
|
||||
|
||||
*action = "Getting executable path";
|
||||
if ((res = Process_RawGetExePath(&path, &len))) return res;
|
||||
|
||||
*action = "Moving executable to CC_prev.exe";
|
||||
if (!path.uni[0]) return ERR_NOT_SUPPORTED; /* MoveFileA returns ERROR_ACCESS_DENIED on Win 9x anyways */
|
||||
if (!MoveFileExW(UWP_STRING(&path), UPDATE_TMP, MOVEFILE_REPLACE_EXISTING)) return GetLastError();
|
||||
|
||||
*action = "Replacing executable";
|
||||
if (!MoveFileExW(UPDATE_SRC, UWP_STRING(&path), MOVEFILE_REPLACE_EXISTING)) return GetLastError();
|
||||
|
||||
*action = "Restarting game";
|
||||
return Process_StartGame2(NULL, 0);
|
||||
}
|
||||
|
||||
cc_result Updater_GetBuildTime(cc_uint64* timestamp) {
|
||||
cc_winstring path;
|
||||
cc_file file;
|
||||
FILETIME ft;
|
||||
cc_uint64 raw;
|
||||
cc_result res;
|
||||
int len;
|
||||
|
||||
if ((res = Process_RawGetExePath(&path, &len))) return res;
|
||||
if ((res = File_Open(&file, &path))) return res;
|
||||
|
||||
if (GetFileTime(file, NULL, NULL, &ft)) {
|
||||
raw = ft.dwLowDateTime | ((cc_uint64)ft.dwHighDateTime << 32);
|
||||
*timestamp = FileTime_UnixTime(raw);
|
||||
} else {
|
||||
res = GetLastError();
|
||||
}
|
||||
|
||||
File_Close(file);
|
||||
return res;
|
||||
}
|
||||
|
||||
/* Don't need special execute permission on windows */
|
||||
cc_result Updater_MarkExecutable(void) { return 0; }
|
||||
cc_result Updater_SetNewBuildTime(cc_uint64 timestamp) {
|
||||
static const cc_string path = String_FromConst(UPDATE_FILE);
|
||||
cc_filepath str;
|
||||
cc_file file;
|
||||
FILETIME ft;
|
||||
cc_uint64 raw;
|
||||
cc_result res;
|
||||
|
||||
Platform_EncodePath(&str, &path);
|
||||
res = File_OpenOrCreate(&file, &str);
|
||||
if (res) return res;
|
||||
|
||||
raw = 10000000 * (timestamp + FILETIME_UNIX_EPOCH);
|
||||
ft.dwLowDateTime = (cc_uint32)raw;
|
||||
ft.dwHighDateTime = (cc_uint32)(raw >> 32);
|
||||
|
||||
if (!SetFileTime(file, NULL, NULL, &ft)) res = GetLastError();
|
||||
File_Close(file);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
/*########################################################################################################################*
|
||||
*-------------------------------------------------------Dynamic lib-------------------------------------------------------*
|
||||
*#########################################################################################################################*/
|
||||
const cc_string DynamicLib_Ext = String_FromConst(".dll");
|
||||
static cc_result dynamicErr;
|
||||
static cc_bool loadingPlugin;
|
||||
|
||||
void* DynamicLib_Load2(const cc_string* path) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void* DynamicLib_Get2(void* lib, const char* name) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
cc_bool DynamicLib_DescribeError(cc_string* dst) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/*########################################################################################################################*
|
||||
*--------------------------------------------------------Platform---------------------------------------------------------*
|
||||
*#########################################################################################################################*/
|
||||
void Platform_EncodeString(cc_winstring* dst, const cc_string* src) {
|
||||
cc_unichar* uni;
|
||||
char* ansi;
|
||||
int i;
|
||||
if (src->length > FILENAME_SIZE) Process_Abort("String too long to expand");
|
||||
|
||||
uni = dst->uni;
|
||||
for (i = 0; i < src->length; i++)
|
||||
{
|
||||
*uni++ = Convert_CP437ToUnicode(src->buffer[i]);
|
||||
}
|
||||
*uni = '\0';
|
||||
|
||||
ansi = dst->ansi;
|
||||
for (i = 0; i < src->length; i++)
|
||||
{
|
||||
*ansi++ = (char)dst->uni[i];
|
||||
}
|
||||
*ansi = '\0';
|
||||
}
|
||||
|
||||
static void Platform_InitStopwatch(void) {
|
||||
LARGE_INTEGER freq;
|
||||
sw_highRes = QueryPerformanceFrequency(&freq);
|
||||
|
||||
if (sw_highRes) {
|
||||
sw_freqMul = 1000 * 1000;
|
||||
sw_freqDiv = freq.QuadPart;
|
||||
} else { sw_freqDiv = 10; }
|
||||
}
|
||||
|
||||
void Platform_Init(void) {
|
||||
WSADATA wsaData;
|
||||
cc_result res;
|
||||
|
||||
Platform_InitStopwatch();
|
||||
heap = GetProcessHeap();
|
||||
|
||||
hasDebugger = IsDebuggerPresent();
|
||||
AttachConsole(-1); /* ATTACH_PARENT_PROCESS */
|
||||
|
||||
conHandle = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
if (conHandle == INVALID_HANDLE_VALUE) conHandle = NULL;
|
||||
|
||||
res = WSAStartup(MAKEWORD(2, 2), &wsaData);
|
||||
if (res) Logger_SysWarn(res, "starting WSA");
|
||||
}
|
||||
|
||||
void Platform_Free(void) {
|
||||
WSACleanup();
|
||||
HeapDestroy(heap);
|
||||
}
|
||||
|
||||
cc_bool Platform_DescribeError(cc_result res, cc_string* dst) {
|
||||
WCHAR chars[NATIVE_STR_LEN];
|
||||
DWORD flags = FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS;
|
||||
|
||||
res = FormatMessageW(flags, NULL, res, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||
chars, NATIVE_STR_LEN, NULL);
|
||||
if (!res) return false;
|
||||
|
||||
String_AppendUtf16(dst, chars, res * 2);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/*########################################################################################################################*
|
||||
*-------------------------------------------------------Encryption--------------------------------------------------------*
|
||||
*#########################################################################################################################*/
|
||||
cc_result Platform_Encrypt(const void* data, int len, cc_string* dst) {
|
||||
return 200;
|
||||
}
|
||||
|
||||
cc_result Platform_Decrypt(const void* data, int len, cc_string* dst) {
|
||||
return 200;
|
||||
}
|
||||
|
||||
cc_result Platform_GetEntropy(void* data, int len) {
|
||||
return ERR_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
|
||||
/*########################################################################################################################*
|
||||
*-----------------------------------------------------Configuration-------------------------------------------------------*
|
||||
*#########################################################################################################################*/
|
||||
int Platform_GetCommandLineArgs(int argc, STRING_REF char** argv, cc_string* args) {
|
||||
return GetGameArgs(args);
|
||||
}
|
||||
|
||||
cc_result Platform_SetDefaultCurrentDirectory(int argc, char** argv) {
|
||||
return 0;
|
||||
}
|
||||
327
misc/UWP/Window_UWP.cpp
Normal file
@@ -0,0 +1,327 @@
|
||||
#include "../../src/Core.h"
|
||||
|
||||
#include <winrt/Windows.ApplicationModel.DataTransfer.h>
|
||||
#include <winrt/Windows.ApplicationModel.h>
|
||||
#include <winrt/Windows.ApplicationModel.Core.h>
|
||||
#include <winrt/Windows.ApplicationModel.Activation.h>
|
||||
#include <winrt/Windows.Devices.Input.h>
|
||||
#include <winrt/Windows.Foundation.h>
|
||||
#include <winrt/Windows.Graphics.Display.h>
|
||||
#include <winrt/Windows.Storage.Pickers.h>
|
||||
#include <winrt/Windows.System.h>
|
||||
#include <winrt/Windows.UI.Core.h>
|
||||
|
||||
using namespace winrt;
|
||||
using namespace Windows::ApplicationModel;
|
||||
using namespace Windows::ApplicationModel::Core;
|
||||
using namespace Windows::ApplicationModel::DataTransfer;
|
||||
using namespace Windows::ApplicationModel::Activation;
|
||||
using namespace Windows::Devices::Input;
|
||||
using namespace Windows::Graphics::Display;
|
||||
using namespace Windows::Foundation;
|
||||
using namespace Windows::System;
|
||||
using namespace Windows::UI::Core;
|
||||
using namespace Windows::UI::Input;
|
||||
|
||||
#include "../../src/_WindowBase.h"
|
||||
#include "../../src/String.h"
|
||||
#include "../../src/Funcs.h"
|
||||
#include "../../src/Bitmap.h"
|
||||
#include "../../src/Options.h"
|
||||
#include "../../src/Errors.h"
|
||||
#include "../../src/Graphics.h"
|
||||
#include "../../src/Game.h"
|
||||
#define UWP_STRING(str) ((wchar_t*)(str)->uni)
|
||||
|
||||
|
||||
/*########################################################################################################################*
|
||||
*--------------------------------------------------Public implementation--------------------------------------------------*
|
||||
*#########################################################################################################################*/
|
||||
void Window_PreInit(void) {
|
||||
DisplayInfo.CursorVisible = true;
|
||||
}
|
||||
|
||||
void Window_Init(void) {
|
||||
CoreWindow& window = CoreWindow::GetForCurrentThread();
|
||||
Input.Sources = INPUT_SOURCE_NORMAL;
|
||||
|
||||
DisplayInfo.Width = 640;
|
||||
DisplayInfo.Height = 480;
|
||||
DisplayInfo.Depth = 32;
|
||||
DisplayInfo.ScaleX = 1.0f;
|
||||
DisplayInfo.ScaleY = 1.0f;
|
||||
|
||||
Rect bounds = window.Bounds();
|
||||
|
||||
WindowInfo.UIScaleX = DEFAULT_UI_SCALE_X;
|
||||
WindowInfo.UIScaleY = DEFAULT_UI_SCALE_Y;
|
||||
WindowInfo.Width = bounds.Width;
|
||||
WindowInfo.Height = bounds.Height;
|
||||
WindowInfo.Exists = true;
|
||||
}
|
||||
|
||||
void Window_Free(void) { }
|
||||
|
||||
void Window_Create2D(int width, int height) { }
|
||||
void Window_Create3D(int width, int height) { }
|
||||
|
||||
void Window_Destroy(void) {
|
||||
}
|
||||
|
||||
void Window_SetTitle(const cc_string* title) {
|
||||
}
|
||||
|
||||
void Clipboard_GetText(cc_string* value) {
|
||||
DataPackageView content = Clipboard::GetContent();
|
||||
hstring str = content.GetTextAsync().get();
|
||||
}
|
||||
|
||||
void Clipboard_SetText(const cc_string* value) {
|
||||
cc_winstring raw;
|
||||
Platform_EncodeString(&raw, value);
|
||||
auto str = hstring(UWP_STRING(&raw));
|
||||
|
||||
DataPackage package = DataPackage();
|
||||
package.SetText(str);
|
||||
Clipboard::SetContent(package);
|
||||
}
|
||||
|
||||
int Window_GetWindowState(void) {
|
||||
return WINDOW_STATE_NORMAL;
|
||||
}
|
||||
|
||||
cc_result Window_EnterFullscreen(void) {
|
||||
return ERR_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
cc_result Window_ExitFullscreen(void) {
|
||||
return ERR_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
int Window_IsObscured(void) { return 0; }
|
||||
|
||||
void Window_Show(void) {
|
||||
}
|
||||
|
||||
void Window_SetSize(int width, int height) {
|
||||
}
|
||||
|
||||
void Window_RequestClose(void) {
|
||||
Event_RaiseVoid(&WindowEvents.Closing);
|
||||
}
|
||||
|
||||
void Window_ProcessEvents(float delta) {
|
||||
CoreWindow& window = CoreWindow::GetForCurrentThread();
|
||||
|
||||
CoreDispatcher& dispatcher = window.Dispatcher();
|
||||
dispatcher.ProcessEvents(CoreProcessEventsOption::ProcessAllIfPresent);
|
||||
}
|
||||
|
||||
void Gamepads_Init(void) {
|
||||
|
||||
}
|
||||
|
||||
void Gamepads_Process(float delta) { }
|
||||
|
||||
static void Cursor_GetRawPos(int* x, int* y) {
|
||||
CoreWindow& window = CoreWindow::GetForCurrentThread();
|
||||
|
||||
Point point = window.PointerPosition();
|
||||
*x = point.X;
|
||||
*y = point.Y;
|
||||
}
|
||||
|
||||
void Cursor_SetPosition(int x, int y) {
|
||||
CoreWindow& window = CoreWindow::GetForCurrentThread();
|
||||
|
||||
Point point = Point(x, y);
|
||||
window.PointerPosition(point);
|
||||
}
|
||||
|
||||
static void Cursor_DoSetVisible(cc_bool visible) {
|
||||
}
|
||||
|
||||
static void ShowDialogCore(const char* title, const char* msg) {
|
||||
}
|
||||
|
||||
static cc_result OpenSaveFileDialog(const cc_string* filters, FileDialogCallback callback, cc_bool load,
|
||||
const char* const* fileExts, const cc_string* defaultName) {
|
||||
return ERR_NOT_SUPPORTED;
|
||||
//auto picker = Windows::Storage::Pickers::FileOpenPicker();
|
||||
//picker.FileTypeFilter().Append(hstring(L".jpg"));
|
||||
|
||||
//Windows::Storage::StorageFile file = picker->PickSingleFileAsync();
|
||||
}
|
||||
|
||||
cc_result Window_OpenFileDialog(const struct OpenFileDialogArgs* args) {
|
||||
const char* const* fileExts = args->filters;
|
||||
cc_string filters; char buffer[NATIVE_STR_LEN];
|
||||
int i;
|
||||
|
||||
/* Filter tokens are \0 separated - e.g. "Maps (*.cw;*.dat)\0*.cw;*.dat\0 */
|
||||
String_InitArray(filters, buffer);
|
||||
String_Format1(&filters, "%c (", args->description);
|
||||
for (i = 0; fileExts[i]; i++)
|
||||
{
|
||||
if (i) String_Append(&filters, ';');
|
||||
String_Format1(&filters, "*%c", fileExts[i]);
|
||||
}
|
||||
String_Append(&filters, ')');
|
||||
String_Append(&filters, '\0');
|
||||
|
||||
for (i = 0; fileExts[i]; i++)
|
||||
{
|
||||
if (i) String_Append(&filters, ';');
|
||||
String_Format1(&filters, "*%c", fileExts[i]);
|
||||
}
|
||||
String_Append(&filters, '\0');
|
||||
|
||||
return OpenSaveFileDialog(&filters, args->Callback, true, fileExts, &String_Empty);
|
||||
}
|
||||
|
||||
cc_result Window_SaveFileDialog(const struct SaveFileDialogArgs* args) {
|
||||
const char* const* titles = args->titles;
|
||||
const char* const* fileExts = args->filters;
|
||||
cc_string filters; char buffer[NATIVE_STR_LEN];
|
||||
int i;
|
||||
|
||||
/* Filter tokens are \0 separated - e.g. "Map (*.cw)\0*.cw\0 */
|
||||
String_InitArray(filters, buffer);
|
||||
for (i = 0; fileExts[i]; i++)
|
||||
{
|
||||
String_Format2(&filters, "%c (*%c)", titles[i], fileExts[i]);
|
||||
String_Append(&filters, '\0');
|
||||
String_Format1(&filters, "*%c", fileExts[i]);
|
||||
String_Append(&filters, '\0');
|
||||
}
|
||||
return OpenSaveFileDialog(&filters, args->Callback, false, fileExts, &args->defaultName);
|
||||
}
|
||||
|
||||
static GfxResourceID fb_tex, fb_vb;
|
||||
static void AllocateVB(void) {
|
||||
struct VertexTextured* data = (struct VertexTextured*)Gfx_RecreateAndLockVb(&fb_vb,
|
||||
VERTEX_FORMAT_TEXTURED, 4);
|
||||
data[0].x = -1.0f; data[0].y = -1.0f; data[0].z = 0.0f; data[0].Col = PACKEDCOL_WHITE; data[0].U = 0.0f; data[0].V = 1.0f;
|
||||
data[1].x = 1.0f; data[1].y = -1.0f; data[1].z = 0.0f; data[1].Col = PACKEDCOL_WHITE; data[1].U = 1.0f; data[1].V = 1.0f;
|
||||
data[2].x = 1.0f; data[2].y = 1.0f; data[2].z = 0.0f; data[2].Col = PACKEDCOL_WHITE; data[2].U = 1.0f; data[2].V = 0.0f;
|
||||
data[3].x = -1.0f; data[3].y = 1.0f; data[3].z = 0.0f; data[3].Col = PACKEDCOL_WHITE; data[3].U = 0.0f; data[2].V = 0.0f;
|
||||
|
||||
Gfx_UnlockVb(fb_vb);
|
||||
}
|
||||
|
||||
void Window_AllocFramebuffer(struct Bitmap* bmp, int width, int height) {
|
||||
bmp->scan0 = (BitmapCol*)Mem_Alloc(width * height, BITMAPCOLOR_SIZE, "bitmap");
|
||||
bmp->width = width;
|
||||
bmp->height = height;
|
||||
|
||||
if (!Gfx.Created) Gfx_Create();
|
||||
fb_tex = Gfx_AllocTexture(bmp, bmp->width, TEXTURE_FLAG_NONPOW2, false);
|
||||
AllocateVB();
|
||||
|
||||
Game.Width = Window_Main.Width;
|
||||
Game.Height = Window_Main.Height;
|
||||
Gfx_OnWindowResize();
|
||||
}
|
||||
|
||||
void Window_DrawFramebuffer(Rect2D r, struct Bitmap* bmp) {
|
||||
struct Bitmap part;
|
||||
part.scan0 = Bitmap_GetRow(bmp, r.y) + r.x;
|
||||
part.width = r.width;
|
||||
part.height = r.height;
|
||||
|
||||
Gfx_BeginFrame();
|
||||
Gfx_BindIb(Gfx.DefaultIb);
|
||||
Gfx_UpdateTexture(fb_tex, r.x, r.y, &part, bmp->width, false);
|
||||
|
||||
Gfx_LoadMatrix(MATRIX_VIEW, &Matrix_Identity);
|
||||
Gfx_LoadMatrix(MATRIX_PROJ, &Matrix_Identity);
|
||||
Gfx_SetDepthTest(false);
|
||||
Gfx_SetAlphaTest(false);
|
||||
Gfx_SetAlphaBlending(false);
|
||||
|
||||
Gfx_SetVertexFormat(VERTEX_FORMAT_COLOURED);
|
||||
Gfx_SetVertexFormat(VERTEX_FORMAT_TEXTURED);
|
||||
Gfx_BindTexture(fb_tex);
|
||||
Gfx_BindVb(fb_vb);
|
||||
Gfx_DrawVb_IndexedTris(4);
|
||||
Gfx_EndFrame();
|
||||
}
|
||||
|
||||
void Window_FreeFramebuffer(struct Bitmap* bmp) {
|
||||
Mem_Free(bmp->scan0);
|
||||
Gfx_DeleteTexture(&fb_tex);
|
||||
Gfx_DeleteVb(&fb_vb);
|
||||
}
|
||||
|
||||
static cc_bool rawMouseInited, rawMouseSupported;
|
||||
static void InitRawMouse(void) {
|
||||
|
||||
}
|
||||
|
||||
void OnscreenKeyboard_Open(struct OpenKeyboardArgs* args) { }
|
||||
void OnscreenKeyboard_SetText(const cc_string* text) { }
|
||||
void OnscreenKeyboard_Close(void) { }
|
||||
|
||||
void Window_EnableRawMouse(void) {
|
||||
DefaultEnableRawMouse();
|
||||
if (!rawMouseInited) InitRawMouse();
|
||||
|
||||
rawMouseInited = true;
|
||||
}
|
||||
|
||||
void Window_UpdateRawMouse(void) {
|
||||
if (rawMouseSupported) {
|
||||
/* handled in WM_INPUT messages */
|
||||
CentreMousePosition();
|
||||
} else {
|
||||
DefaultUpdateRawMouse();
|
||||
}
|
||||
}
|
||||
|
||||
void Window_DisableRawMouse(void) {
|
||||
DefaultDisableRawMouse();
|
||||
}
|
||||
|
||||
|
||||
struct CCApp : implements<CCApp, IFrameworkViewSource, IFrameworkView>
|
||||
{
|
||||
|
||||
// IFrameworkViewSource interface
|
||||
IFrameworkView CreateView()
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
|
||||
// IFrameworkView interface
|
||||
void Initialize(CoreApplicationView const& view)
|
||||
{
|
||||
}
|
||||
|
||||
void Load(hstring const& entryPoint)
|
||||
{
|
||||
}
|
||||
|
||||
void Uninitialize()
|
||||
{
|
||||
}
|
||||
|
||||
void Run()
|
||||
{
|
||||
CoreWindow& window = CoreWindow::GetForCurrentThread();
|
||||
window.Activate();
|
||||
Window_Main.Handle.ptr = get_abi(window);
|
||||
|
||||
extern int main(int argc, char** argv);
|
||||
main(0, NULL);
|
||||
}
|
||||
|
||||
void SetWindow(CoreWindow const& win)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
int __stdcall wWinMain(void*, void*, wchar_t** argv, int argc)
|
||||
{
|
||||
auto app = make<CCApp>();
|
||||
CoreApplication::Run(app);
|
||||
}
|
||||
BIN
misc/UWP/assets/LockScreenLogo.scale-200.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
misc/UWP/assets/SplashScreen.scale-200.png
Normal file
|
After Width: | Height: | Size: 7.5 KiB |
BIN
misc/UWP/assets/Square150x150Logo.scale-200.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
misc/UWP/assets/Square44x44Logo.scale-200.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
BIN
misc/UWP/assets/StoreLogo.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
misc/UWP/assets/Wide310x150Logo.scale-200.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
44
misc/amiga/Makefile_68k
Normal file
@@ -0,0 +1,44 @@
|
||||
AS=m68k-amigaos-as
|
||||
CC=m68k-amigaos-gcc
|
||||
CXX=m68k-amigaos-g++
|
||||
|
||||
CFLAGS :=-O1 -fno-math-errno -DPLAT_AMIGA -DCC_BUILD_NOFPU
|
||||
TARGET := ClassiCube-68k
|
||||
BUILD_DIR := build-amiga-68k
|
||||
SOURCE_DIR := src
|
||||
LDFLAGS :=
|
||||
|
||||
C_SOURCES := $(wildcard $(SOURCE_DIR)/*.c)
|
||||
C_ASSEMS := $(patsubst $(SOURCE_DIR)/%.c, $(BUILD_DIR)/%.S, $(C_SOURCES))
|
||||
C_OBJECTS := $(patsubst $(SOURCE_DIR)/%.c, $(BUILD_DIR)/%.o, $(C_SOURCES))
|
||||
|
||||
# Dependency tracking
|
||||
DEPFLAGS = -MT $@ -MMD -MP -MF $(BUILD_DIR)/$*.d
|
||||
DEPFILES := $(C_OBJECTS:%.o=%.d)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# main targets
|
||||
#---------------------------------------------------------------------------------
|
||||
default: $(BUILD_DIR) $(TARGET).exe
|
||||
|
||||
$(BUILD_DIR):
|
||||
mkdir -p $(BUILD_DIR)
|
||||
|
||||
$(TARGET).exe: $(C_OBJECTS)
|
||||
$(CC) $(LDFLAGS) -o $(TARGET).exe $(C_OBJECTS)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# object generation
|
||||
#---------------------------------------------------------------------------------
|
||||
$(C_OBJECTS): $(BUILD_DIR)/%.o : $(BUILD_DIR)/%.S
|
||||
$(AS) $< -o $@
|
||||
|
||||
$(C_ASSEMS): $(BUILD_DIR)/%.S : $(SOURCE_DIR)/%.c
|
||||
$(CC) $(CFLAGS) $(DEPFLAGS) -S -c $< -o $@
|
||||
|
||||
# Dependency tracking
|
||||
$(DEPFILES):
|
||||
|
||||
include $(wildcard $(DEPFILES))
|
||||
41
misc/bitmap_font_gen.cs
Normal file
@@ -0,0 +1,41 @@
|
||||
void Main()
|
||||
{
|
||||
Console.WriteLine("static cc_uint8 font_bitmap[][8] = {");
|
||||
using (Bitmap bmp = new Bitmap(@"C:\classicube-dev\default.png"))
|
||||
{
|
||||
for (int CY = 0; CY < 16; CY++)
|
||||
for (int CX = 0; CX < 16; CX++)
|
||||
DecodeTile(bmp, CX, CY);
|
||||
}
|
||||
Console.WriteLine("}");
|
||||
}
|
||||
|
||||
static void DecodeTile(Bitmap bmp, int cx, int cy) {
|
||||
int c = (cy << 4) | cx;
|
||||
if (c <= 32 || c >= 127) return;
|
||||
|
||||
int X = cx * 8, Y = cy * 8;
|
||||
|
||||
Console.Write("\t{ ");
|
||||
|
||||
for (int y = Y; y < Y + 8; y++) {
|
||||
uint mask = 0;
|
||||
int shift = 0;
|
||||
|
||||
for (int x = X; x < X + 8; x++, shift++) {
|
||||
Color P = bmp.GetPixel(x, y);
|
||||
|
||||
if (P.A == 0) {
|
||||
mask |= 0u << shift;
|
||||
} else if (P.R == 255 && P.G == 255 && P.B == 255 && P.A == 255) {
|
||||
mask |= 1u << shift;
|
||||
} else {
|
||||
throw new InvalidOperationException("unsupported colour" + P);
|
||||
}
|
||||
}
|
||||
|
||||
string suffix = y == Y + 7 ? " " : ",";
|
||||
Console.Write("0x" + mask.ToString("X2") + suffix);
|
||||
}
|
||||
Console.WriteLine("}, /* " + (char)c + " */");
|
||||
}
|
||||
65
misc/build_scripts/buildbot_plugin.sh
Normal file
@@ -0,0 +1,65 @@
|
||||
#!/bin/bash
|
||||
# This is similar to buildbot.sh but builds plugins for the game instead
|
||||
# Some variables must be set before invoking this script. See buildtestplugin.sh
|
||||
cd $ROOT
|
||||
echo $(pwd)
|
||||
FILES=$(find . -type f -name "*.c" | tr '\n' ' ')
|
||||
FLAGS="-shared -fPIC -O1 -s -std=c99"
|
||||
echo $FILES
|
||||
|
||||
# ----------------------------- compile linux
|
||||
NIX32_CC="gcc -m32"
|
||||
NIX64_CC="gcc -m64"
|
||||
NIX_FLAGS="-nostartfiles -Wl,--entry=0"
|
||||
|
||||
echo "Compiling linux32.."
|
||||
$NIX32_CC $FILES -I ~/client/src/ -I ./src/ -o ${PLUGIN}_nix32.so $FLAGS $NIX_FLAGS
|
||||
|
||||
echo "Compiling linux64.."
|
||||
$NIX64_CC $FILES -I ~/client/src/ -I ./src/ -o ${PLUGIN}_nix64.so $FLAGS $NIX_FLAGS
|
||||
|
||||
# ----------------------------- compile macOS
|
||||
MAC32_CC=~/osx/target/bin/o32-clang
|
||||
MAC64_CC=~/osx/target/bin/o64-clang
|
||||
MAC_FLAGS="-undefined dynamic_lookup"
|
||||
|
||||
echo "Compiling mac32.."
|
||||
$MAC32_CC $FILES -I ~/client/src/ -I ./src/ -o ${PLUGIN}_mac32.dylib $FLAGS $MAC_FLAGS
|
||||
|
||||
echo "Compiling mac64.."
|
||||
$MAC64_CC $FILES -I ~/client/src/ -I ./src/ -o ${PLUGIN}_mac64.dylib $FLAGS $MAC_FLAGS
|
||||
|
||||
# ----------------------------- compile Windows
|
||||
WIN32_CC=i686-w64-mingw32-gcc
|
||||
WIN64_CC=x86_64-w64-mingw32-gcc
|
||||
# TODO: Figure out why we sometimes need this with mingw
|
||||
# If we don't include nostart files for some plugins, get a
|
||||
# ertr000001.o:(.rdata+0x0): undefined reference to `_pei386_runtime_relocator'
|
||||
# Seems to happen if you use exported variables from the game
|
||||
if [ -z "$LITE_MODE" ]; then
|
||||
WIN_FLAGS=""
|
||||
else
|
||||
WIN_FLAGS="-nostartfiles -Wl,--entry=0"
|
||||
fi
|
||||
# NOTE: You also need to install 'mingw-w64-tools' package for gendef
|
||||
|
||||
echo "Compiling win32"
|
||||
rm ClassiCube.exe ClassiCube.def
|
||||
cp ~/client/src/cc-w32-d3d.exe ClassiCube.exe
|
||||
gendef ClassiCube.exe
|
||||
i686-w64-mingw32-dlltool -d ClassiCube.def -l libClassiCube.a -D ClassiCube.exe
|
||||
$WIN32_CC $FILES -I ~/client/src/ -I ./src/ -o ${PLUGIN}_win32.dll $FLAGS $WIN_FLAGS -L . -lClassiCube
|
||||
|
||||
echo "Compiling win64"
|
||||
rm ClassiCube.exe ClassiCube.def
|
||||
cp ~/client/src/cc-w64-d3d.exe ClassiCube.exe
|
||||
gendef ClassiCube.exe
|
||||
x86_64-w64-mingw32-dlltool -d ClassiCube.def -l libClassiCube.a -D ClassiCube.exe
|
||||
$WIN64_CC $FILES -I ~/client/src/ -I ./src/ -o ${PLUGIN}_win64.dll $FLAGS $WIN_FLAGS -L . -lClassiCube
|
||||
|
||||
# ----------------------------- compile raspberry pi
|
||||
RPI_CC=~/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gcc-4.8.3
|
||||
RPI_FLAGS="-nostartfiles -Wl,--entry=0"
|
||||
|
||||
echo "Compiling rpi"
|
||||
$RPI_CC $FILES -I ~/client/src/ -I ./src/ -o ${PLUGIN}_rpi.so $FLAGS $RPI_FLAGS
|
||||
4
misc/build_scripts/buildtestplugin.sh
Normal file
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
ROOT=~/plugins/test/
|
||||
PLUGIN=test
|
||||
source ./buildbot_plugin.sh
|
||||
6
misc/build_scripts/readme.md
Normal file
@@ -0,0 +1,6 @@
|
||||
This folder contains build scripts for automatically compiling ClassiCube
|
||||
|
||||
|File|Description|
|
||||
|--------|-------|
|
||||
|buildbot_plugin.sh | Compiles specified plugin for various platforms |
|
||||
|buildtestplugin.sh | Example script for how to use buildbot_plugin.sh |
|
||||
BIN
misc/certs/BaltimoreCyberTrustRoot.crt
Normal file
BIN
misc/certs/DigiCertGlobalRootCA.crt
Normal file
BIN
misc/certs/DigiCertGlobalRootG2.crt
Normal file
34
misc/certs/USERTrustRSACertificationAuthority.crt
Normal file
@@ -0,0 +1,34 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB
|
||||
iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl
|
||||
cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV
|
||||
BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw
|
||||
MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV
|
||||
BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
|
||||
aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy
|
||||
dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK
|
||||
AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B
|
||||
3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY
|
||||
tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/
|
||||
Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2
|
||||
VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT
|
||||
79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6
|
||||
c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT
|
||||
Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l
|
||||
c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee
|
||||
UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE
|
||||
Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd
|
||||
BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G
|
||||
A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF
|
||||
Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO
|
||||
VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3
|
||||
ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs
|
||||
8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR
|
||||
iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze
|
||||
Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ
|
||||
XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/
|
||||
qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB
|
||||
VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB
|
||||
L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG
|
||||
jjxDah2nGN59PRbxYvnKkKj9
|
||||
-----END CERTIFICATE-----
|
||||
397
misc/certs/certs.h
Normal file
@@ -0,0 +1,397 @@
|
||||
// This file includes the following root certificates:
|
||||
// - DigiCert Global Root (dropbox.com)
|
||||
// - DigiCert Global Root G2 (resources.download.minecraft.net)
|
||||
// - ISRG Root X1 (catbox.moe)
|
||||
// - ISRG Root X2 (123dmwm.com, garbage.loan)
|
||||
// - Baltimore CyberTrust Root (old classicube.net)
|
||||
// - USERTrust RSA (imgur.com)
|
||||
// - Google Trust Services Root R4 (classicube.net)
|
||||
// Generated using "brssl -ta [cert 1] [cert 2].." from BearSSL
|
||||
|
||||
static const unsigned char TA0_DN[] = {
|
||||
0x30, 0x61, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13,
|
||||
0x02, 0x55, 0x53, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0A,
|
||||
0x13, 0x0C, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x49,
|
||||
0x6E, 0x63, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13,
|
||||
0x10, 0x77, 0x77, 0x77, 0x2E, 0x64, 0x69, 0x67, 0x69, 0x63, 0x65, 0x72,
|
||||
0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x31, 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55,
|
||||
0x04, 0x03, 0x13, 0x17, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74,
|
||||
0x20, 0x47, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x20, 0x52, 0x6F, 0x6F, 0x74,
|
||||
0x20, 0x43, 0x41
|
||||
};
|
||||
|
||||
static const unsigned char TA0_RSA_N[] = {
|
||||
0xE2, 0x3B, 0xE1, 0x11, 0x72, 0xDE, 0xA8, 0xA4, 0xD3, 0xA3, 0x57, 0xAA,
|
||||
0x50, 0xA2, 0x8F, 0x0B, 0x77, 0x90, 0xC9, 0xA2, 0xA5, 0xEE, 0x12, 0xCE,
|
||||
0x96, 0x5B, 0x01, 0x09, 0x20, 0xCC, 0x01, 0x93, 0xA7, 0x4E, 0x30, 0xB7,
|
||||
0x53, 0xF7, 0x43, 0xC4, 0x69, 0x00, 0x57, 0x9D, 0xE2, 0x8D, 0x22, 0xDD,
|
||||
0x87, 0x06, 0x40, 0x00, 0x81, 0x09, 0xCE, 0xCE, 0x1B, 0x83, 0xBF, 0xDF,
|
||||
0xCD, 0x3B, 0x71, 0x46, 0xE2, 0xD6, 0x66, 0xC7, 0x05, 0xB3, 0x76, 0x27,
|
||||
0x16, 0x8F, 0x7B, 0x9E, 0x1E, 0x95, 0x7D, 0xEE, 0xB7, 0x48, 0xA3, 0x08,
|
||||
0xDA, 0xD6, 0xAF, 0x7A, 0x0C, 0x39, 0x06, 0x65, 0x7F, 0x4A, 0x5D, 0x1F,
|
||||
0xBC, 0x17, 0xF8, 0xAB, 0xBE, 0xEE, 0x28, 0xD7, 0x74, 0x7F, 0x7A, 0x78,
|
||||
0x99, 0x59, 0x85, 0x68, 0x6E, 0x5C, 0x23, 0x32, 0x4B, 0xBF, 0x4E, 0xC0,
|
||||
0xE8, 0x5A, 0x6D, 0xE3, 0x70, 0xBF, 0x77, 0x10, 0xBF, 0xFC, 0x01, 0xF6,
|
||||
0x85, 0xD9, 0xA8, 0x44, 0x10, 0x58, 0x32, 0xA9, 0x75, 0x18, 0xD5, 0xD1,
|
||||
0xA2, 0xBE, 0x47, 0xE2, 0x27, 0x6A, 0xF4, 0x9A, 0x33, 0xF8, 0x49, 0x08,
|
||||
0x60, 0x8B, 0xD4, 0x5F, 0xB4, 0x3A, 0x84, 0xBF, 0xA1, 0xAA, 0x4A, 0x4C,
|
||||
0x7D, 0x3E, 0xCF, 0x4F, 0x5F, 0x6C, 0x76, 0x5E, 0xA0, 0x4B, 0x37, 0x91,
|
||||
0x9E, 0xDC, 0x22, 0xE6, 0x6D, 0xCE, 0x14, 0x1A, 0x8E, 0x6A, 0xCB, 0xFE,
|
||||
0xCD, 0xB3, 0x14, 0x64, 0x17, 0xC7, 0x5B, 0x29, 0x9E, 0x32, 0xBF, 0xF2,
|
||||
0xEE, 0xFA, 0xD3, 0x0B, 0x42, 0xD4, 0xAB, 0xB7, 0x41, 0x32, 0xDA, 0x0C,
|
||||
0xD4, 0xEF, 0xF8, 0x81, 0xD5, 0xBB, 0x8D, 0x58, 0x3F, 0xB5, 0x1B, 0xE8,
|
||||
0x49, 0x28, 0xA2, 0x70, 0xDA, 0x31, 0x04, 0xDD, 0xF7, 0xB2, 0x16, 0xF2,
|
||||
0x4C, 0x0A, 0x4E, 0x07, 0xA8, 0xED, 0x4A, 0x3D, 0x5E, 0xB5, 0x7F, 0xA3,
|
||||
0x90, 0xC3, 0xAF, 0x27
|
||||
};
|
||||
|
||||
static const unsigned char TA0_RSA_E[] = {
|
||||
0x01, 0x00, 0x01
|
||||
};
|
||||
|
||||
static const unsigned char TA1_DN[] = {
|
||||
0x30, 0x61, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13,
|
||||
0x02, 0x55, 0x53, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0A,
|
||||
0x13, 0x0C, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x49,
|
||||
0x6E, 0x63, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13,
|
||||
0x10, 0x77, 0x77, 0x77, 0x2E, 0x64, 0x69, 0x67, 0x69, 0x63, 0x65, 0x72,
|
||||
0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x31, 0x20, 0x30, 0x1E, 0x06, 0x03, 0x55,
|
||||
0x04, 0x03, 0x13, 0x17, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74,
|
||||
0x20, 0x47, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x20, 0x52, 0x6F, 0x6F, 0x74,
|
||||
0x20, 0x47, 0x32
|
||||
};
|
||||
|
||||
static const unsigned char TA1_RSA_N[] = {
|
||||
0xBB, 0x37, 0xCD, 0x34, 0xDC, 0x7B, 0x6B, 0xC9, 0xB2, 0x68, 0x90, 0xAD,
|
||||
0x4A, 0x75, 0xFF, 0x46, 0xBA, 0x21, 0x0A, 0x08, 0x8D, 0xF5, 0x19, 0x54,
|
||||
0xC9, 0xFB, 0x88, 0xDB, 0xF3, 0xAE, 0xF2, 0x3A, 0x89, 0x91, 0x3C, 0x7A,
|
||||
0xE6, 0xAB, 0x06, 0x1A, 0x6B, 0xCF, 0xAC, 0x2D, 0xE8, 0x5E, 0x09, 0x24,
|
||||
0x44, 0xBA, 0x62, 0x9A, 0x7E, 0xD6, 0xA3, 0xA8, 0x7E, 0xE0, 0x54, 0x75,
|
||||
0x20, 0x05, 0xAC, 0x50, 0xB7, 0x9C, 0x63, 0x1A, 0x6C, 0x30, 0xDC, 0xDA,
|
||||
0x1F, 0x19, 0xB1, 0xD7, 0x1E, 0xDE, 0xFD, 0xD7, 0xE0, 0xCB, 0x94, 0x83,
|
||||
0x37, 0xAE, 0xEC, 0x1F, 0x43, 0x4E, 0xDD, 0x7B, 0x2C, 0xD2, 0xBD, 0x2E,
|
||||
0xA5, 0x2F, 0xE4, 0xA9, 0xB8, 0xAD, 0x3A, 0xD4, 0x99, 0xA4, 0xB6, 0x25,
|
||||
0xE9, 0x9B, 0x6B, 0x00, 0x60, 0x92, 0x60, 0xFF, 0x4F, 0x21, 0x49, 0x18,
|
||||
0xF7, 0x67, 0x90, 0xAB, 0x61, 0x06, 0x9C, 0x8F, 0xF2, 0xBA, 0xE9, 0xB4,
|
||||
0xE9, 0x92, 0x32, 0x6B, 0xB5, 0xF3, 0x57, 0xE8, 0x5D, 0x1B, 0xCD, 0x8C,
|
||||
0x1D, 0xAB, 0x95, 0x04, 0x95, 0x49, 0xF3, 0x35, 0x2D, 0x96, 0xE3, 0x49,
|
||||
0x6D, 0xDD, 0x77, 0xE3, 0xFB, 0x49, 0x4B, 0xB4, 0xAC, 0x55, 0x07, 0xA9,
|
||||
0x8F, 0x95, 0xB3, 0xB4, 0x23, 0xBB, 0x4C, 0x6D, 0x45, 0xF0, 0xF6, 0xA9,
|
||||
0xB2, 0x95, 0x30, 0xB4, 0xFD, 0x4C, 0x55, 0x8C, 0x27, 0x4A, 0x57, 0x14,
|
||||
0x7C, 0x82, 0x9D, 0xCD, 0x73, 0x92, 0xD3, 0x16, 0x4A, 0x06, 0x0C, 0x8C,
|
||||
0x50, 0xD1, 0x8F, 0x1E, 0x09, 0xBE, 0x17, 0xA1, 0xE6, 0x21, 0xCA, 0xFD,
|
||||
0x83, 0xE5, 0x10, 0xBC, 0x83, 0xA5, 0x0A, 0xC4, 0x67, 0x28, 0xF6, 0x73,
|
||||
0x14, 0x14, 0x3D, 0x46, 0x76, 0xC3, 0x87, 0x14, 0x89, 0x21, 0x34, 0x4D,
|
||||
0xAF, 0x0F, 0x45, 0x0C, 0xA6, 0x49, 0xA1, 0xBA, 0xBB, 0x9C, 0xC5, 0xB1,
|
||||
0x33, 0x83, 0x29, 0x85
|
||||
};
|
||||
|
||||
static const unsigned char TA1_RSA_E[] = {
|
||||
0x01, 0x00, 0x01
|
||||
};
|
||||
|
||||
static const unsigned char TA2_DN[] = {
|
||||
0x30, 0x4F, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13,
|
||||
0x02, 0x55, 0x53, 0x31, 0x29, 0x30, 0x27, 0x06, 0x03, 0x55, 0x04, 0x0A,
|
||||
0x13, 0x20, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x6E, 0x65, 0x74, 0x20, 0x53,
|
||||
0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x20, 0x52, 0x65, 0x73, 0x65,
|
||||
0x61, 0x72, 0x63, 0x68, 0x20, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x31, 0x15,
|
||||
0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0C, 0x49, 0x53, 0x52,
|
||||
0x47, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x58, 0x31
|
||||
};
|
||||
|
||||
static const unsigned char TA2_RSA_N[] = {
|
||||
0xAD, 0xE8, 0x24, 0x73, 0xF4, 0x14, 0x37, 0xF3, 0x9B, 0x9E, 0x2B, 0x57,
|
||||
0x28, 0x1C, 0x87, 0xBE, 0xDC, 0xB7, 0xDF, 0x38, 0x90, 0x8C, 0x6E, 0x3C,
|
||||
0xE6, 0x57, 0xA0, 0x78, 0xF7, 0x75, 0xC2, 0xA2, 0xFE, 0xF5, 0x6A, 0x6E,
|
||||
0xF6, 0x00, 0x4F, 0x28, 0xDB, 0xDE, 0x68, 0x86, 0x6C, 0x44, 0x93, 0xB6,
|
||||
0xB1, 0x63, 0xFD, 0x14, 0x12, 0x6B, 0xBF, 0x1F, 0xD2, 0xEA, 0x31, 0x9B,
|
||||
0x21, 0x7E, 0xD1, 0x33, 0x3C, 0xBA, 0x48, 0xF5, 0xDD, 0x79, 0xDF, 0xB3,
|
||||
0xB8, 0xFF, 0x12, 0xF1, 0x21, 0x9A, 0x4B, 0xC1, 0x8A, 0x86, 0x71, 0x69,
|
||||
0x4A, 0x66, 0x66, 0x6C, 0x8F, 0x7E, 0x3C, 0x70, 0xBF, 0xAD, 0x29, 0x22,
|
||||
0x06, 0xF3, 0xE4, 0xC0, 0xE6, 0x80, 0xAE, 0xE2, 0x4B, 0x8F, 0xB7, 0x99,
|
||||
0x7E, 0x94, 0x03, 0x9F, 0xD3, 0x47, 0x97, 0x7C, 0x99, 0x48, 0x23, 0x53,
|
||||
0xE8, 0x38, 0xAE, 0x4F, 0x0A, 0x6F, 0x83, 0x2E, 0xD1, 0x49, 0x57, 0x8C,
|
||||
0x80, 0x74, 0xB6, 0xDA, 0x2F, 0xD0, 0x38, 0x8D, 0x7B, 0x03, 0x70, 0x21,
|
||||
0x1B, 0x75, 0xF2, 0x30, 0x3C, 0xFA, 0x8F, 0xAE, 0xDD, 0xDA, 0x63, 0xAB,
|
||||
0xEB, 0x16, 0x4F, 0xC2, 0x8E, 0x11, 0x4B, 0x7E, 0xCF, 0x0B, 0xE8, 0xFF,
|
||||
0xB5, 0x77, 0x2E, 0xF4, 0xB2, 0x7B, 0x4A, 0xE0, 0x4C, 0x12, 0x25, 0x0C,
|
||||
0x70, 0x8D, 0x03, 0x29, 0xA0, 0xE1, 0x53, 0x24, 0xEC, 0x13, 0xD9, 0xEE,
|
||||
0x19, 0xBF, 0x10, 0xB3, 0x4A, 0x8C, 0x3F, 0x89, 0xA3, 0x61, 0x51, 0xDE,
|
||||
0xAC, 0x87, 0x07, 0x94, 0xF4, 0x63, 0x71, 0xEC, 0x2E, 0xE2, 0x6F, 0x5B,
|
||||
0x98, 0x81, 0xE1, 0x89, 0x5C, 0x34, 0x79, 0x6C, 0x76, 0xEF, 0x3B, 0x90,
|
||||
0x62, 0x79, 0xE6, 0xDB, 0xA4, 0x9A, 0x2F, 0x26, 0xC5, 0xD0, 0x10, 0xE1,
|
||||
0x0E, 0xDE, 0xD9, 0x10, 0x8E, 0x16, 0xFB, 0xB7, 0xF7, 0xA8, 0xF7, 0xC7,
|
||||
0xE5, 0x02, 0x07, 0x98, 0x8F, 0x36, 0x08, 0x95, 0xE7, 0xE2, 0x37, 0x96,
|
||||
0x0D, 0x36, 0x75, 0x9E, 0xFB, 0x0E, 0x72, 0xB1, 0x1D, 0x9B, 0xBC, 0x03,
|
||||
0xF9, 0x49, 0x05, 0xD8, 0x81, 0xDD, 0x05, 0xB4, 0x2A, 0xD6, 0x41, 0xE9,
|
||||
0xAC, 0x01, 0x76, 0x95, 0x0A, 0x0F, 0xD8, 0xDF, 0xD5, 0xBD, 0x12, 0x1F,
|
||||
0x35, 0x2F, 0x28, 0x17, 0x6C, 0xD2, 0x98, 0xC1, 0xA8, 0x09, 0x64, 0x77,
|
||||
0x6E, 0x47, 0x37, 0xBA, 0xCE, 0xAC, 0x59, 0x5E, 0x68, 0x9D, 0x7F, 0x72,
|
||||
0xD6, 0x89, 0xC5, 0x06, 0x41, 0x29, 0x3E, 0x59, 0x3E, 0xDD, 0x26, 0xF5,
|
||||
0x24, 0xC9, 0x11, 0xA7, 0x5A, 0xA3, 0x4C, 0x40, 0x1F, 0x46, 0xA1, 0x99,
|
||||
0xB5, 0xA7, 0x3A, 0x51, 0x6E, 0x86, 0x3B, 0x9E, 0x7D, 0x72, 0xA7, 0x12,
|
||||
0x05, 0x78, 0x59, 0xED, 0x3E, 0x51, 0x78, 0x15, 0x0B, 0x03, 0x8F, 0x8D,
|
||||
0xD0, 0x2F, 0x05, 0xB2, 0x3E, 0x7B, 0x4A, 0x1C, 0x4B, 0x73, 0x05, 0x12,
|
||||
0xFC, 0xC6, 0xEA, 0xE0, 0x50, 0x13, 0x7C, 0x43, 0x93, 0x74, 0xB3, 0xCA,
|
||||
0x74, 0xE7, 0x8E, 0x1F, 0x01, 0x08, 0xD0, 0x30, 0xD4, 0x5B, 0x71, 0x36,
|
||||
0xB4, 0x07, 0xBA, 0xC1, 0x30, 0x30, 0x5C, 0x48, 0xB7, 0x82, 0x3B, 0x98,
|
||||
0xA6, 0x7D, 0x60, 0x8A, 0xA2, 0xA3, 0x29, 0x82, 0xCC, 0xBA, 0xBD, 0x83,
|
||||
0x04, 0x1B, 0xA2, 0x83, 0x03, 0x41, 0xA1, 0xD6, 0x05, 0xF1, 0x1B, 0xC2,
|
||||
0xB6, 0xF0, 0xA8, 0x7C, 0x86, 0x3B, 0x46, 0xA8, 0x48, 0x2A, 0x88, 0xDC,
|
||||
0x76, 0x9A, 0x76, 0xBF, 0x1F, 0x6A, 0xA5, 0x3D, 0x19, 0x8F, 0xEB, 0x38,
|
||||
0xF3, 0x64, 0xDE, 0xC8, 0x2B, 0x0D, 0x0A, 0x28, 0xFF, 0xF7, 0xDB, 0xE2,
|
||||
0x15, 0x42, 0xD4, 0x22, 0xD0, 0x27, 0x5D, 0xE1, 0x79, 0xFE, 0x18, 0xE7,
|
||||
0x70, 0x88, 0xAD, 0x4E, 0xE6, 0xD9, 0x8B, 0x3A, 0xC6, 0xDD, 0x27, 0x51,
|
||||
0x6E, 0xFF, 0xBC, 0x64, 0xF5, 0x33, 0x43, 0x4F
|
||||
};
|
||||
|
||||
static const unsigned char TA2_RSA_E[] = {
|
||||
0x01, 0x00, 0x01
|
||||
};
|
||||
|
||||
static const unsigned char TA3_DN[] = {
|
||||
0x30, 0x4F, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13,
|
||||
0x02, 0x55, 0x53, 0x31, 0x29, 0x30, 0x27, 0x06, 0x03, 0x55, 0x04, 0x0A,
|
||||
0x13, 0x20, 0x49, 0x6E, 0x74, 0x65, 0x72, 0x6E, 0x65, 0x74, 0x20, 0x53,
|
||||
0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x20, 0x52, 0x65, 0x73, 0x65,
|
||||
0x61, 0x72, 0x63, 0x68, 0x20, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x31, 0x15,
|
||||
0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0C, 0x49, 0x53, 0x52,
|
||||
0x47, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x58, 0x32
|
||||
};
|
||||
|
||||
static const unsigned char TA3_EC_Q[] = {
|
||||
0x04, 0xCD, 0x9B, 0xD5, 0x9F, 0x80, 0x83, 0x0A, 0xEC, 0x09, 0x4A, 0xF3,
|
||||
0x16, 0x4A, 0x3E, 0x5C, 0xCF, 0x77, 0xAC, 0xDE, 0x67, 0x05, 0x0D, 0x1D,
|
||||
0x07, 0xB6, 0xDC, 0x16, 0xFB, 0x5A, 0x8B, 0x14, 0xDB, 0xE2, 0x71, 0x60,
|
||||
0xC4, 0xBA, 0x45, 0x95, 0x11, 0x89, 0x8E, 0xEA, 0x06, 0xDF, 0xF7, 0x2A,
|
||||
0x16, 0x1C, 0xA4, 0xB9, 0xC5, 0xC5, 0x32, 0xE0, 0x03, 0xE0, 0x1E, 0x82,
|
||||
0x18, 0x38, 0x8B, 0xD7, 0x45, 0xD8, 0x0A, 0x6A, 0x6E, 0xE6, 0x00, 0x77,
|
||||
0xFB, 0x02, 0x51, 0x7D, 0x22, 0xD8, 0x0A, 0x6E, 0x9A, 0x5B, 0x77, 0xDF,
|
||||
0xF0, 0xFA, 0x41, 0xEC, 0x39, 0xDC, 0x75, 0xCA, 0x68, 0x07, 0x0C, 0x1F,
|
||||
0xEA
|
||||
};
|
||||
|
||||
static const unsigned char TA4_DN[] = {
|
||||
0x30, 0x5A, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13,
|
||||
0x02, 0x49, 0x45, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0A,
|
||||
0x13, 0x09, 0x42, 0x61, 0x6C, 0x74, 0x69, 0x6D, 0x6F, 0x72, 0x65, 0x31,
|
||||
0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x0A, 0x43, 0x79,
|
||||
0x62, 0x65, 0x72, 0x54, 0x72, 0x75, 0x73, 0x74, 0x31, 0x22, 0x30, 0x20,
|
||||
0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x19, 0x42, 0x61, 0x6C, 0x74, 0x69,
|
||||
0x6D, 0x6F, 0x72, 0x65, 0x20, 0x43, 0x79, 0x62, 0x65, 0x72, 0x54, 0x72,
|
||||
0x75, 0x73, 0x74, 0x20, 0x52, 0x6F, 0x6F, 0x74
|
||||
};
|
||||
|
||||
static const unsigned char TA4_RSA_N[] = {
|
||||
0xA3, 0x04, 0xBB, 0x22, 0xAB, 0x98, 0x3D, 0x57, 0xE8, 0x26, 0x72, 0x9A,
|
||||
0xB5, 0x79, 0xD4, 0x29, 0xE2, 0xE1, 0xE8, 0x95, 0x80, 0xB1, 0xB0, 0xE3,
|
||||
0x5B, 0x8E, 0x2B, 0x29, 0x9A, 0x64, 0xDF, 0xA1, 0x5D, 0xED, 0xB0, 0x09,
|
||||
0x05, 0x6D, 0xDB, 0x28, 0x2E, 0xCE, 0x62, 0xA2, 0x62, 0xFE, 0xB4, 0x88,
|
||||
0xDA, 0x12, 0xEB, 0x38, 0xEB, 0x21, 0x9D, 0xC0, 0x41, 0x2B, 0x01, 0x52,
|
||||
0x7B, 0x88, 0x77, 0xD3, 0x1C, 0x8F, 0xC7, 0xBA, 0xB9, 0x88, 0xB5, 0x6A,
|
||||
0x09, 0xE7, 0x73, 0xE8, 0x11, 0x40, 0xA7, 0xD1, 0xCC, 0xCA, 0x62, 0x8D,
|
||||
0x2D, 0xE5, 0x8F, 0x0B, 0xA6, 0x50, 0xD2, 0xA8, 0x50, 0xC3, 0x28, 0xEA,
|
||||
0xF5, 0xAB, 0x25, 0x87, 0x8A, 0x9A, 0x96, 0x1C, 0xA9, 0x67, 0xB8, 0x3F,
|
||||
0x0C, 0xD5, 0xF7, 0xF9, 0x52, 0x13, 0x2F, 0xC2, 0x1B, 0xD5, 0x70, 0x70,
|
||||
0xF0, 0x8F, 0xC0, 0x12, 0xCA, 0x06, 0xCB, 0x9A, 0xE1, 0xD9, 0xCA, 0x33,
|
||||
0x7A, 0x77, 0xD6, 0xF8, 0xEC, 0xB9, 0xF1, 0x68, 0x44, 0x42, 0x48, 0x13,
|
||||
0xD2, 0xC0, 0xC2, 0xA4, 0xAE, 0x5E, 0x60, 0xFE, 0xB6, 0xA6, 0x05, 0xFC,
|
||||
0xB4, 0xDD, 0x07, 0x59, 0x02, 0xD4, 0x59, 0x18, 0x98, 0x63, 0xF5, 0xA5,
|
||||
0x63, 0xE0, 0x90, 0x0C, 0x7D, 0x5D, 0xB2, 0x06, 0x7A, 0xF3, 0x85, 0xEA,
|
||||
0xEB, 0xD4, 0x03, 0xAE, 0x5E, 0x84, 0x3E, 0x5F, 0xFF, 0x15, 0xED, 0x69,
|
||||
0xBC, 0xF9, 0x39, 0x36, 0x72, 0x75, 0xCF, 0x77, 0x52, 0x4D, 0xF3, 0xC9,
|
||||
0x90, 0x2C, 0xB9, 0x3D, 0xE5, 0xC9, 0x23, 0x53, 0x3F, 0x1F, 0x24, 0x98,
|
||||
0x21, 0x5C, 0x07, 0x99, 0x29, 0xBD, 0xC6, 0x3A, 0xEC, 0xE7, 0x6E, 0x86,
|
||||
0x3A, 0x6B, 0x97, 0x74, 0x63, 0x33, 0xBD, 0x68, 0x18, 0x31, 0xF0, 0x78,
|
||||
0x8D, 0x76, 0xBF, 0xFC, 0x9E, 0x8E, 0x5D, 0x2A, 0x86, 0xA7, 0x4D, 0x90,
|
||||
0xDC, 0x27, 0x1A, 0x39
|
||||
};
|
||||
|
||||
static const unsigned char TA4_RSA_E[] = {
|
||||
0x01, 0x00, 0x01
|
||||
};
|
||||
|
||||
static const unsigned char TA5_DN[] = {
|
||||
0x30, 0x81, 0x88, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06,
|
||||
0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04,
|
||||
0x08, 0x13, 0x0A, 0x4E, 0x65, 0x77, 0x20, 0x4A, 0x65, 0x72, 0x73, 0x65,
|
||||
0x79, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x0B,
|
||||
0x4A, 0x65, 0x72, 0x73, 0x65, 0x79, 0x20, 0x43, 0x69, 0x74, 0x79, 0x31,
|
||||
0x1E, 0x30, 0x1C, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x15, 0x54, 0x68,
|
||||
0x65, 0x20, 0x55, 0x53, 0x45, 0x52, 0x54, 0x52, 0x55, 0x53, 0x54, 0x20,
|
||||
0x4E, 0x65, 0x74, 0x77, 0x6F, 0x72, 0x6B, 0x31, 0x2E, 0x30, 0x2C, 0x06,
|
||||
0x03, 0x55, 0x04, 0x03, 0x13, 0x25, 0x55, 0x53, 0x45, 0x52, 0x54, 0x72,
|
||||
0x75, 0x73, 0x74, 0x20, 0x52, 0x53, 0x41, 0x20, 0x43, 0x65, 0x72, 0x74,
|
||||
0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x41, 0x75,
|
||||
0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79
|
||||
};
|
||||
|
||||
static const unsigned char TA5_RSA_N[] = {
|
||||
0x80, 0x12, 0x65, 0x17, 0x36, 0x0E, 0xC3, 0xDB, 0x08, 0xB3, 0xD0, 0xAC,
|
||||
0x57, 0x0D, 0x76, 0xED, 0xCD, 0x27, 0xD3, 0x4C, 0xAD, 0x50, 0x83, 0x61,
|
||||
0xE2, 0xAA, 0x20, 0x4D, 0x09, 0x2D, 0x64, 0x09, 0xDC, 0xCE, 0x89, 0x9F,
|
||||
0xCC, 0x3D, 0xA9, 0xEC, 0xF6, 0xCF, 0xC1, 0xDC, 0xF1, 0xD3, 0xB1, 0xD6,
|
||||
0x7B, 0x37, 0x28, 0x11, 0x2B, 0x47, 0xDA, 0x39, 0xC6, 0xBC, 0x3A, 0x19,
|
||||
0xB4, 0x5F, 0xA6, 0xBD, 0x7D, 0x9D, 0xA3, 0x63, 0x42, 0xB6, 0x76, 0xF2,
|
||||
0xA9, 0x3B, 0x2B, 0x91, 0xF8, 0xE2, 0x6F, 0xD0, 0xEC, 0x16, 0x20, 0x90,
|
||||
0x09, 0x3E, 0xE2, 0xE8, 0x74, 0xC9, 0x18, 0xB4, 0x91, 0xD4, 0x62, 0x64,
|
||||
0xDB, 0x7F, 0xA3, 0x06, 0xF1, 0x88, 0x18, 0x6A, 0x90, 0x22, 0x3C, 0xBC,
|
||||
0xFE, 0x13, 0xF0, 0x87, 0x14, 0x7B, 0xF6, 0xE4, 0x1F, 0x8E, 0xD4, 0xE4,
|
||||
0x51, 0xC6, 0x11, 0x67, 0x46, 0x08, 0x51, 0xCB, 0x86, 0x14, 0x54, 0x3F,
|
||||
0xBC, 0x33, 0xFE, 0x7E, 0x6C, 0x9C, 0xFF, 0x16, 0x9D, 0x18, 0xBD, 0x51,
|
||||
0x8E, 0x35, 0xA6, 0xA7, 0x66, 0xC8, 0x72, 0x67, 0xDB, 0x21, 0x66, 0xB1,
|
||||
0xD4, 0x9B, 0x78, 0x03, 0xC0, 0x50, 0x3A, 0xE8, 0xCC, 0xF0, 0xDC, 0xBC,
|
||||
0x9E, 0x4C, 0xFE, 0xAF, 0x05, 0x96, 0x35, 0x1F, 0x57, 0x5A, 0xB7, 0xFF,
|
||||
0xCE, 0xF9, 0x3D, 0xB7, 0x2C, 0xB6, 0xF6, 0x54, 0xDD, 0xC8, 0xE7, 0x12,
|
||||
0x3A, 0x4D, 0xAE, 0x4C, 0x8A, 0xB7, 0x5C, 0x9A, 0xB4, 0xB7, 0x20, 0x3D,
|
||||
0xCA, 0x7F, 0x22, 0x34, 0xAE, 0x7E, 0x3B, 0x68, 0x66, 0x01, 0x44, 0xE7,
|
||||
0x01, 0x4E, 0x46, 0x53, 0x9B, 0x33, 0x60, 0xF7, 0x94, 0xBE, 0x53, 0x37,
|
||||
0x90, 0x73, 0x43, 0xF3, 0x32, 0xC3, 0x53, 0xEF, 0xDB, 0xAA, 0xFE, 0x74,
|
||||
0x4E, 0x69, 0xC7, 0x6B, 0x8C, 0x60, 0x93, 0xDE, 0xC4, 0xC7, 0x0C, 0xDF,
|
||||
0xE1, 0x32, 0xAE, 0xCC, 0x93, 0x3B, 0x51, 0x78, 0x95, 0x67, 0x8B, 0xEE,
|
||||
0x3D, 0x56, 0xFE, 0x0C, 0xD0, 0x69, 0x0F, 0x1B, 0x0F, 0xF3, 0x25, 0x26,
|
||||
0x6B, 0x33, 0x6D, 0xF7, 0x6E, 0x47, 0xFA, 0x73, 0x43, 0xE5, 0x7E, 0x0E,
|
||||
0xA5, 0x66, 0xB1, 0x29, 0x7C, 0x32, 0x84, 0x63, 0x55, 0x89, 0xC4, 0x0D,
|
||||
0xC1, 0x93, 0x54, 0x30, 0x19, 0x13, 0xAC, 0xD3, 0x7D, 0x37, 0xA7, 0xEB,
|
||||
0x5D, 0x3A, 0x6C, 0x35, 0x5C, 0xDB, 0x41, 0xD7, 0x12, 0xDA, 0xA9, 0x49,
|
||||
0x0B, 0xDF, 0xD8, 0x80, 0x8A, 0x09, 0x93, 0x62, 0x8E, 0xB5, 0x66, 0xCF,
|
||||
0x25, 0x88, 0xCD, 0x84, 0xB8, 0xB1, 0x3F, 0xA4, 0x39, 0x0F, 0xD9, 0x02,
|
||||
0x9E, 0xEB, 0x12, 0x4C, 0x95, 0x7C, 0xF3, 0x6B, 0x05, 0xA9, 0x5E, 0x16,
|
||||
0x83, 0xCC, 0xB8, 0x67, 0xE2, 0xE8, 0x13, 0x9D, 0xCC, 0x5B, 0x82, 0xD3,
|
||||
0x4C, 0xB3, 0xED, 0x5B, 0xFF, 0xDE, 0xE5, 0x73, 0xAC, 0x23, 0x3B, 0x2D,
|
||||
0x00, 0xBF, 0x35, 0x55, 0x74, 0x09, 0x49, 0xD8, 0x49, 0x58, 0x1A, 0x7F,
|
||||
0x92, 0x36, 0xE6, 0x51, 0x92, 0x0E, 0xF3, 0x26, 0x7D, 0x1C, 0x4D, 0x17,
|
||||
0xBC, 0xC9, 0xEC, 0x43, 0x26, 0xD0, 0xBF, 0x41, 0x5F, 0x40, 0xA9, 0x44,
|
||||
0x44, 0xF4, 0x99, 0xE7, 0x57, 0x87, 0x9E, 0x50, 0x1F, 0x57, 0x54, 0xA8,
|
||||
0x3E, 0xFD, 0x74, 0x63, 0x2F, 0xB1, 0x50, 0x65, 0x09, 0xE6, 0x58, 0x42,
|
||||
0x2E, 0x43, 0x1A, 0x4C, 0xB4, 0xF0, 0x25, 0x47, 0x59, 0xFA, 0x04, 0x1E,
|
||||
0x93, 0xD4, 0x26, 0x46, 0x4A, 0x50, 0x81, 0xB2, 0xDE, 0xBE, 0x78, 0xB7,
|
||||
0xFC, 0x67, 0x15, 0xE1, 0xC9, 0x57, 0x84, 0x1E, 0x0F, 0x63, 0xD6, 0xE9,
|
||||
0x62, 0xBA, 0xD6, 0x5F, 0x55, 0x2E, 0xEA, 0x5C, 0xC6, 0x28, 0x08, 0x04,
|
||||
0x25, 0x39, 0xB8, 0x0E, 0x2B, 0xA9, 0xF2, 0x4C, 0x97, 0x1C, 0x07, 0x3F,
|
||||
0x0D, 0x52, 0xF5, 0xED, 0xEF, 0x2F, 0x82, 0x0F
|
||||
};
|
||||
|
||||
static const unsigned char TA5_RSA_E[] = {
|
||||
0x01, 0x00, 0x01
|
||||
};
|
||||
|
||||
static const unsigned char TA6_DN[] = {
|
||||
0x30, 0x47, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13,
|
||||
0x02, 0x55, 0x53, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, 0x04, 0x0A,
|
||||
0x13, 0x19, 0x47, 0x6F, 0x6F, 0x67, 0x6C, 0x65, 0x20, 0x54, 0x72, 0x75,
|
||||
0x73, 0x74, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x20,
|
||||
0x4C, 0x4C, 0x43, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x03,
|
||||
0x13, 0x0B, 0x47, 0x54, 0x53, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x52,
|
||||
0x34
|
||||
};
|
||||
|
||||
static const unsigned char TA6_EC_Q[] = {
|
||||
0x04, 0xF3, 0x74, 0x73, 0xA7, 0x68, 0x8B, 0x60, 0xAE, 0x43, 0xB8, 0x35,
|
||||
0xC5, 0x81, 0x30, 0x7B, 0x4B, 0x49, 0x9D, 0xFB, 0xC1, 0x61, 0xCE, 0xE6,
|
||||
0xDE, 0x46, 0xBD, 0x6B, 0xD5, 0x61, 0x18, 0x35, 0xAE, 0x40, 0xDD, 0x73,
|
||||
0xF7, 0x89, 0x91, 0x30, 0x5A, 0xEB, 0x3C, 0xEE, 0x85, 0x7C, 0xA2, 0x40,
|
||||
0x76, 0x3B, 0xA9, 0xC6, 0xB8, 0x47, 0xD8, 0x2A, 0xE7, 0x92, 0x91, 0x6A,
|
||||
0x73, 0xE9, 0xB1, 0x72, 0x39, 0x9F, 0x29, 0x9F, 0xA2, 0x98, 0xD3, 0x5F,
|
||||
0x5E, 0x58, 0x86, 0x65, 0x0F, 0xA1, 0x84, 0x65, 0x06, 0xD1, 0xDC, 0x8B,
|
||||
0xC9, 0xC7, 0x73, 0xC8, 0x8C, 0x6A, 0x2F, 0xE5, 0xC4, 0xAB, 0xD1, 0x1D,
|
||||
0x8A
|
||||
};
|
||||
|
||||
static
|
||||
#ifndef CC_BUILD_SYMBIAN
|
||||
const
|
||||
#endif
|
||||
br_x509_trust_anchor TAs[7] = {
|
||||
{
|
||||
{ (unsigned char *)TA0_DN, sizeof TA0_DN },
|
||||
BR_X509_TA_CA,
|
||||
{
|
||||
BR_KEYTYPE_RSA,
|
||||
{ {
|
||||
(unsigned char *)TA0_RSA_N, sizeof TA0_RSA_N,
|
||||
(unsigned char *)TA0_RSA_E, sizeof TA0_RSA_E,
|
||||
} }
|
||||
}
|
||||
},
|
||||
{
|
||||
{ (unsigned char *)TA1_DN, sizeof TA1_DN },
|
||||
BR_X509_TA_CA,
|
||||
{
|
||||
BR_KEYTYPE_RSA,
|
||||
{ {
|
||||
(unsigned char *)TA1_RSA_N, sizeof TA1_RSA_N,
|
||||
(unsigned char *)TA1_RSA_E, sizeof TA1_RSA_E,
|
||||
} }
|
||||
}
|
||||
},
|
||||
{
|
||||
{ (unsigned char *)TA2_DN, sizeof TA2_DN },
|
||||
BR_X509_TA_CA,
|
||||
{
|
||||
BR_KEYTYPE_RSA,
|
||||
{ {
|
||||
(unsigned char *)TA2_RSA_N, sizeof TA2_RSA_N,
|
||||
(unsigned char *)TA2_RSA_E, sizeof TA2_RSA_E,
|
||||
} }
|
||||
}
|
||||
},
|
||||
{
|
||||
{ (unsigned char *)TA3_DN, sizeof TA3_DN },
|
||||
BR_X509_TA_CA,
|
||||
{
|
||||
|
||||
#if defined CC_BUILD_SYMBIAN
|
||||
BR_KEYTYPE_EC
|
||||
/* set in SSL.c */
|
||||
#else
|
||||
BR_KEYTYPE_EC,
|
||||
{ .ec = {
|
||||
BR_EC_secp384r1,
|
||||
(unsigned char *)TA3_EC_Q, sizeof TA3_EC_Q,
|
||||
} }
|
||||
#endif
|
||||
}
|
||||
},
|
||||
{
|
||||
{ (unsigned char *)TA4_DN, sizeof TA4_DN },
|
||||
BR_X509_TA_CA,
|
||||
{
|
||||
BR_KEYTYPE_RSA,
|
||||
{ {
|
||||
(unsigned char *)TA4_RSA_N, sizeof TA4_RSA_N,
|
||||
(unsigned char *)TA4_RSA_E, sizeof TA4_RSA_E,
|
||||
} }
|
||||
}
|
||||
},
|
||||
{
|
||||
{ (unsigned char *)TA5_DN, sizeof TA5_DN },
|
||||
BR_X509_TA_CA,
|
||||
{
|
||||
BR_KEYTYPE_RSA,
|
||||
{ {
|
||||
(unsigned char *)TA5_RSA_N, sizeof TA5_RSA_N,
|
||||
(unsigned char *)TA5_RSA_E, sizeof TA5_RSA_E,
|
||||
} }
|
||||
}
|
||||
},
|
||||
{
|
||||
{ (unsigned char *)TA6_DN, sizeof TA6_DN },
|
||||
BR_X509_TA_CA,
|
||||
{
|
||||
#if defined CC_BUILD_SYMBIAN
|
||||
BR_KEYTYPE_EC
|
||||
/* set in SSL.c */
|
||||
#else
|
||||
BR_KEYTYPE_EC,
|
||||
{ .ec = {
|
||||
BR_EC_secp384r1,
|
||||
(unsigned char *)TA6_EC_Q, sizeof TA6_EC_Q,
|
||||
} }
|
||||
#endif
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
#define TAs_NUM 7
|
||||
BIN
misc/certs/isrg-root-x2.der
Normal file
BIN
misc/certs/isrgrootx1.der
Normal file
BIN
misc/certs/r4.crt
Normal file
96
misc/dreamcast/Makefile
Normal file
@@ -0,0 +1,96 @@
|
||||
ifeq ($(strip $(KOS_BASE)),)
|
||||
$(warning Please set KOS variables in your environment. For example:)
|
||||
$(warning source /opt/toolchains/dc/kos/environ.sh)
|
||||
$(error Failed to find KallistiOS installation)
|
||||
endif
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Configurable options
|
||||
#---------------------------------------------------------------------------------
|
||||
# Directory where object files are placed
|
||||
BUILD_DIR := build/dc
|
||||
# List of directories containing source code
|
||||
SOURCE_DIRS := src third_party/bearssl/src misc/dreamcast
|
||||
# Name of the final output
|
||||
TARGET := ClassiCube-dc
|
||||
# Additional libraries to link against
|
||||
LIBS = -lm -lppp -lkosfat
|
||||
# List of directories containing more header files
|
||||
INCLUDES = -Ithird_party/bearssl/inc
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Code generation
|
||||
#---------------------------------------------------------------------------------
|
||||
S_FILES := $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.S))
|
||||
C_FILES := $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.c))
|
||||
OBJS := $(addprefix $(BUILD_DIR)/, $(notdir $(C_FILES:%.c=%.o) $(S_FILES:%.S=%.o)))
|
||||
CFLAGS := -g -DNDEBUG -O3 -fipa-pta -fno-pie -flto=auto -fomit-frame-pointer -fbuiltin -ffast-math -ffp-contract=fast -mfsrra -mfsca -pipe -fno-math-errno
|
||||
LDFLAGS = -g
|
||||
|
||||
# Dependency tracking
|
||||
DEPFLAGS = -MT $@ -MMD -MP -MF $(BUILD_DIR)/$*.d
|
||||
DEPFILES := $(OBJS:%.o=%.d)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Main targets
|
||||
#---------------------------------------------------------------------------------
|
||||
default: $(BUILD_DIR) $(TARGET).cdi
|
||||
|
||||
clean:
|
||||
rm $(TARGET).cdi $(TARGET).iso $(TARGET).elf $(TARGET)-scr.bin $(TARGET).bin $(OBJS)
|
||||
|
||||
$(BUILD_DIR):
|
||||
mkdir -p $(BUILD_DIR)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Executable generation
|
||||
#---------------------------------------------------------------------------------
|
||||
$(TARGET).elf: $(OBJS)
|
||||
kos-cc $(LDFLAGS) $^ -o $@ $(LIBS)
|
||||
|
||||
$(TARGET).bin: $(TARGET).elf
|
||||
sh-elf-objcopy -R .stack -O binary $(TARGET).elf $(TARGET).bin
|
||||
|
||||
# https://dcemulation.org/phpBB/viewtopic.php?t=105269
|
||||
$(TARGET)-scr.bin: $(TARGET).bin
|
||||
$(KOS_BASE)/utils/scramble/scramble $(TARGET).bin $(TARGET)-scr.bin
|
||||
|
||||
$(TARGET).iso: $(TARGET)-scr.bin
|
||||
mkdir -p ISO_FILES
|
||||
cp $(TARGET)-scr.bin ISO_FILES/1ST_READ.BIN
|
||||
mkdir -p ISO_FILES/audio
|
||||
mkdir -p ISO_FILES/maps
|
||||
mkdir -p ISO_FILES/texpacks
|
||||
mkdir -p ISO_FILES/texturecache
|
||||
cp misc/dreamcast/classicube.zip ISO_FILES/texpacks/default.zip
|
||||
cp misc/dreamcast/IP.BIN IP.BIN
|
||||
mkisofs -G IP.BIN -C 0,11702 -J -l -r -quiet -o $(TARGET).iso ISO_FILES
|
||||
# genisoimage -V ClassiCube -G IP.BIN -joliet -rock -l -o $(TARGET).iso ISO_FILES
|
||||
|
||||
$(TARGET).cdi: $(TARGET).iso
|
||||
cdi4dc $(TARGET).iso $(TARGET).cdi
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Object generation
|
||||
#---------------------------------------------------------------------------------
|
||||
$(BUILD_DIR)/%.o: src/%.c
|
||||
kos-cc $(CFLAGS) $(INCLUDES) $(DEPFLAGS) -c $< -o $@
|
||||
|
||||
$(BUILD_DIR)/%.o: third_party/bearssl/src/%.c
|
||||
kos-cc $(CFLAGS) $(INCLUDES) -c $< -o $@
|
||||
|
||||
$(BUILD_DIR)/%.o: misc/dreamcast/%.S
|
||||
kos-cc $(DEPFLAGS) -c $< -o $@
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Dependency tracking
|
||||
#---------------------------------------------------------------------------------
|
||||
$(DEPFILES):
|
||||
|
||||
include $(wildcard $(DEPFILES))
|
||||
196
misc/dreamcast/VertexClip.S
Normal file
@@ -0,0 +1,196 @@
|
||||
! r1 = v1, CLOBBERS
|
||||
! r2 = v2, CLOBBERS
|
||||
! r3 = OUT, CLOBBERS
|
||||
! r4 = TMP 1, preserved
|
||||
! r5 = TMP 2, preserved
|
||||
! r0 = CL0, CLOBBERS
|
||||
|
||||
! FR0 = 0
|
||||
! FR1 = 0
|
||||
! FR2 = A.1
|
||||
! FR3 = B.1
|
||||
! FR4 = 0
|
||||
! FR5 = 0
|
||||
! FR6 = A.2
|
||||
! FR7 = B.2
|
||||
! FR8 = 0
|
||||
! FR9 = 0
|
||||
! FR10 = invT
|
||||
! FR11 = t
|
||||
|
||||
#define TM1 r0 // CLOBBERED, temp register 1
|
||||
#define TM2 r4 // PRESERVED, temp register 2
|
||||
#define CLO r5 // PRESERVED, output colour
|
||||
|
||||
#define IN1 r1 // CLOBBERED, input vertex 1
|
||||
#define IN2 r2 // CLOBBERED, input vertex 2
|
||||
#define OUT r3 // CLOBBERED, output vertex
|
||||
|
||||
#define CL1 r1 // CLOBBERED, input colour 1
|
||||
#define CL2 r2 // CLOBBERED, input colour 2
|
||||
|
||||
! Calculates the near plane intersection point between two points:
|
||||
! float t = fabsf(v1->z) / fabsf(v2->z - v1->z)
|
||||
! float invt = 1.0f - t;
|
||||
!
|
||||
! out->x = invt * v1->x + t * v2->x;
|
||||
! out->y = invt * v1->y + t * v2->y;
|
||||
! out->z = 0.0f; // clipped against near plane anyways (I.e Z/W = 0 --> Z = 0)
|
||||
!
|
||||
! out->u = invt * v1->u + t * v2->u;
|
||||
! out->v = invt * v1->v + t * v2->v;
|
||||
! out->w = invt * v1->w + t * v2->w;
|
||||
!
|
||||
! out->b = invt * v1->b + t * v2->b;
|
||||
! out->g = invt * v1->g + t * v2->g;
|
||||
! out->r = invt * v1->r + t * v2->r;
|
||||
! out->a = invt * v1->a + t * v2->a;
|
||||
! To optimise these calculations, FIPR is used:
|
||||
! FIPR = FVm.x*FVn.x + FVm.y*FVn.x + FVm.z*FVn.z + FVm.w*FVn.w --> FVn.w
|
||||
! FIPR can be used to accomplish "vout->Q = invt * v1->Q + t * v2->Q" by:
|
||||
! - assigning x/y components to 0 for both vectors
|
||||
! - assigning t and invT to z/w of FVm vector
|
||||
! - assigning v1 and v2 to z/w of FVn vector
|
||||
! FIPR = 0*0 + 0*0 + t*v1->Q + invT*v2->Q --> FVn.w
|
||||
! FIPR = t*v1->Q + invT*v2->Q --> FVn.w
|
||||
|
||||
.global _ClipLine
|
||||
.align 4
|
||||
_ClipLine:
|
||||
mov.l r4,@-r15 ! LS, push(r4)
|
||||
mov.l r5,@-r15 ! LS, push(r5)
|
||||
mov IN1, TM1 ! MT, tmp = &v1
|
||||
fldi0 fr4 ! LS, fr4 = 0
|
||||
add #12, TM1 ! EX, tmp = &v1->z
|
||||
fmov.s @TM1, fr2 ! LS, fr2 = v1->z
|
||||
mov IN2, TM1 ! MT, tmp = &v2
|
||||
fldi0 fr5 ! LS, fr5 = 0
|
||||
add #12, TM1 ! EX, tmp = &v2->z
|
||||
fmov.s @TM1,fr11 ! LS, fr11 = v2->z
|
||||
fsub fr2,fr11 ! FE, fr11 = v2->z - v1->z
|
||||
fldi0 fr8 ! LS, fr8 = 0
|
||||
fmul fr11,fr11 ! FE, fr11 = (v2->z - v1->z) * (v2->z * v1->z)
|
||||
fldi0 fr9 ! LS, fr9 = 0
|
||||
fldi0 fr0 ! LS, fr0 = 0
|
||||
fldi0 fr1 ! LS, fr1 = 0
|
||||
fsrra fr11 ! FE, fr11 = 1 / abs(v2->z - v1->z)
|
||||
fabs fr2 ! LS, fr2 = abs(v1->z)
|
||||
fmul fr2,fr11 ! FE, fr11 = abs(v1->Z) / abs(v2->z - v1->z) --> t
|
||||
add #4, IN1 ! EX, v1 += 4
|
||||
fldi1 fr10 ! LS, fr10 = 1
|
||||
add #4, IN2 ! EX, v2 += 4
|
||||
add #4, OUT ! EX, OUT += 4
|
||||
fsub fr11,fr10 ! FE, fr10 = 1.0 - t --> invT
|
||||
|
||||
fmov.s @IN1+, fr2 ! LS, A1 = v1->x, v1 += 4
|
||||
fmov.s @IN2+, fr3 ! LS, B1 = v2->x, v2 += 4
|
||||
fipr fv8, fv0 ! FE, LERP(A1, B1)
|
||||
fmov.s @IN1+, fr6 ! LS, A2 = v1->y, v1 += 4
|
||||
fmov.s @IN2+, fr7 ! LS, B2 = v2->y, v2 += 4
|
||||
|
||||
fmov.s fr3,@OUT ! LS, OUT->x = LERP
|
||||
add #4, OUT ! EX, OUT += 4
|
||||
fipr fv8, fv4 ! FE, LERP(A2, B2)
|
||||
add #4, IN1 ! EX, v1 += 4
|
||||
add #4, IN2 ! EX, v2 += 4
|
||||
|
||||
fmov.s fr7,@OUT ! LS, OUT->y = LERP
|
||||
add #4, OUT ! EX, OUT += 4
|
||||
fmov.s fr1,@OUT ! LS, OUT->z = 0
|
||||
add #4, OUT ! EX, OUT += 4
|
||||
|
||||
fmov.s @IN1+, fr2 ! LS, A1 = v1->u, v1 += 4
|
||||
fmov.s @IN2+, fr3 ! LS, B1 = v2->u, v2 += 4
|
||||
fipr fv8, fv0 ! FE, LERP(A1, B1)
|
||||
fmov.s @IN1+, fr6 ! LS, A2 = v1->v, v1 += 4
|
||||
fmov.s @IN2+, fr7 ! LS, B2 = v2->v, v2 += 4
|
||||
|
||||
fmov.s fr3,@OUT ! LS, OUT->u = LERP
|
||||
add #4, OUT ! EX, OUT += 4
|
||||
fipr fv8, fv4 ! FE, LERP(A2, B2)
|
||||
add #4, IN1 ! EX, v1 += 4
|
||||
add #4, IN2 ! EX, v2 += 4
|
||||
fmov.s @IN1,fr2 ! LS, A1 = v1->w
|
||||
fmov.s @IN2,fr3 ! LS, B1 = v2->w
|
||||
fmov.s fr7,@OUT ! LS, OUT->v = LERP
|
||||
add #8, OUT ! EX, OUT += 8
|
||||
|
||||
fipr fv8, fv0 ! FE, LERP(A1, B1)
|
||||
add #-4, IN1 ! EX, v1 -= 4
|
||||
add #-4, IN2 ! EX, v2 -= 4
|
||||
fmov.s fr3,@OUT ! LS, OUT->w = lerp
|
||||
add #-4, OUT ! EX, OUT -= 4
|
||||
|
||||
mov.l @IN1,CL1 ! LS, ACOLOR = v1->bgra
|
||||
mov.l @IN2,CL2 ! LS, BCOLOR = v2->bgra
|
||||
! Bypass interpolation if unnecessary
|
||||
cmp/eq CL1,CL2 ! MT, T = ACOLOR == BCOLOR
|
||||
bt.s 1f ! BR, if (T) goto 1;
|
||||
mov CL1,CLO ! MT, OUTCOLOR = ACOLOR (branch delay instruction)
|
||||
! Interpolate B
|
||||
extu.b CL1,TM1 ! EX, val = ACOLOR.b
|
||||
lds TM1,fpul ! CO, FPUL = val
|
||||
float fpul,fr2 ! EX, fr2 = float(FPUL)
|
||||
extu.b CL2,TM1 ! EX, val = BCOLOR.b
|
||||
lds TM1,fpul ! CO, FPUL = val
|
||||
float fpul,fr3 ! EX, fr3 = float(FPUL)
|
||||
fipr fv8, fv0 ! FE, LERP(A1, B1)
|
||||
shlr8 CL1 ! EX, ACOLOR >>= 8
|
||||
ftrc fr3,fpul ! FE, FPUL = int(lerp)
|
||||
shlr8 CL2 ! EX, BCOLOR >>= 8
|
||||
sts fpul,TM2 ! CO, tmp = FPUL
|
||||
! Interpolate G
|
||||
extu.b CL1,TM1 ! EX, val = ACOLOR.g
|
||||
lds TM1,fpul ! CO, FPUL = val
|
||||
float fpul,fr2 ! EX, fr2 = float(FPUL)
|
||||
extu.b CL2,TM1 ! EX, val = BCOLOR.g
|
||||
lds TM1,fpul ! CO, FPUL = val
|
||||
float fpul,fr3 ! EX, fr3 = float(FPUL)
|
||||
fipr fv8, fv0 ! FE, LERP(A1, B1)
|
||||
shlr8 CL1 ! EX, ACOLOR >>= 8
|
||||
ftrc fr3,fpul ! FE, FPUL = int(lerp)
|
||||
extu.b TM2,TM2 ! EX, tmp = (uint8)tmp
|
||||
mov TM2,CLO ! MT, OUTCOLOR.b = tmp
|
||||
shlr8 CL2 ! EX, BCOLOR >>= 8
|
||||
sts fpul,TM2 ! CO, tmp = FPUL
|
||||
! Interpolate R
|
||||
extu.b CL1,TM1 ! EX, val = ACOLOR.r
|
||||
lds TM1,fpul ! CO, FPUL = val
|
||||
float fpul,fr2 ! EX, fr2 = float(FPUL)
|
||||
extu.b CL2,TM1 ! EX, val = BCOLOR.r
|
||||
lds TM1,fpul ! CO, FPUL = val
|
||||
float fpul,fr3 ! EX, fr3 = float(FPUL)
|
||||
fipr fv8, fv0 ! FE, LERP(A1, B1)
|
||||
shlr8 CL1 ! EX, ACOLOR >>= 8
|
||||
ftrc fr3,fpul ! FE, FPUL = int(lerp)
|
||||
extu.b TM2,TM2 ! EX, tmp = (uint8)tmp
|
||||
shll8 TM2 ! EX, tmp <<= 8
|
||||
or TM2,CLO ! EX, OUTCOLOR.g |= tmp
|
||||
shlr8 CL2 ! EX, BCOLOR >>= 8
|
||||
sts fpul,TM2 ! CO, tmp = FPUL
|
||||
! Interpolate A
|
||||
extu.b CL1,TM1 ! EX, val = ACOLOR.a
|
||||
lds TM1,fpul ! CO, FPUL = val
|
||||
float fpul,fr2 ! EX, fr2 = float(FPUL)
|
||||
extu.b CL2,TM1 ! EX, val = BCOLOR.a
|
||||
lds TM1,fpul ! CO, FPUL = val
|
||||
float fpul,fr3 ! EX, fr3 = float(FPUL)
|
||||
fipr fv8, fv0 ! FE, LERP(A1, B1)
|
||||
ftrc fr3,fpul ! FE, FPUL = int(lerp)
|
||||
extu.b TM2,TM2 ! EX, tmp = (uint8)tmp
|
||||
shll16 TM2 ! EX, tmp <<= 16
|
||||
or TM2,CLO ! EX, OUTCOLOR.r |= tmp
|
||||
sts fpul,TM2 ! CO, tmp = FPUL
|
||||
extu.b TM2,TM2 ! EX, tmp = (uint8)tmp
|
||||
shll16 TM2 ! EX, tmp <<= 16
|
||||
shll8 TM2 ! EX, tmp <<= 8
|
||||
or TM2,CLO ! EX, OUTCOLOR.a |= tmp
|
||||
|
||||
1:
|
||||
mov.l CLO,@OUT ! LS, OUT->color = OUTCOLOR
|
||||
mov.l @r15+,r5 ! LS, pop(r5)
|
||||
rts ! CO, return after executing instruction in delay slot
|
||||
mov.l @r15+,r4 ! LS, pop(r4)
|
||||
|
||||
.size _ClipLine, .-_ClipLine
|
||||
.type _ClipLine,%function
|
||||
210
misc/dreamcast/VertexClip2.S
Normal file
@@ -0,0 +1,210 @@
|
||||
! Calculates vertex as the near plane intersection point between two points:
|
||||
! float t = fabsf(v1->z) / fabsf(v2->z - v1->z)
|
||||
! float w = (1 - t) * v1->w + t * v2->w;
|
||||
!
|
||||
! out->c = type << 24
|
||||
! out->x = ((1 - t) * v1->x + t * v2->x) * 1/w
|
||||
! out->y = ((1 - t) * v1->y + t * v2->y) * 1/w
|
||||
! out->w = 1/w
|
||||
!
|
||||
! out->u = (1 - t) * v1->u + t * v2->u;
|
||||
! out->v = (1 - t) * v1->v + t * v2->v;
|
||||
!
|
||||
! out->b = (1 - t) * v1->b + t * v2->b;
|
||||
! out->g = (1 - t) * v1->g + t * v2->g;
|
||||
! out->r = (1 - t) * v1->r + t * v2->r;
|
||||
! out->a = (1 - t) * v1->a + t * v2->a;
|
||||
|
||||
! Optimisations:
|
||||
! - w always ends up being zNear
|
||||
! - Calculations of (1 - t) * v1 + t * v2 can be rearranged to t * (v2 - v1) + v1
|
||||
! - These rearranges calculations can then take advantage of FMAC
|
||||
|
||||
! Final calculation:
|
||||
! out->c = type << 24
|
||||
! out->x = ((v2->x - v1->x) + v1->x) * 1/zNear
|
||||
! out->y = ((v2->y - v1->y) + v1->y) * 1/zNear
|
||||
! out->w = 1/zNear
|
||||
!
|
||||
! out->u = (v2->u - v1->u) + v1->u;
|
||||
! out->v = (v2->v - v1->v) + v1->v;
|
||||
!
|
||||
! out->b = (v2->b - v1->b) + v1->b;
|
||||
! out->g = (v2->g - v1->g) + v1->g;
|
||||
! out->r = (v2->r - v1->r) + v1->r;
|
||||
! out->a = (v2->a - v1->a) + v1->a;
|
||||
|
||||
! INPUT ARGUMENTS
|
||||
#define IN1 r4 // input vertex 1
|
||||
#define IN2 r5 // input vertex 2
|
||||
#define OUT r6 // output vertex
|
||||
#define TYP r7 // type/flags for output vertex
|
||||
|
||||
#define TM1 r1 // temp register 1
|
||||
#define TM2 r3 // temp register 2
|
||||
#define CL1 r4 // input colour 1
|
||||
#define CL2 r5 // input colour 2
|
||||
#define CLO r7 // output colour
|
||||
|
||||
#define F_T fr0
|
||||
#define F_W fr1
|
||||
#define F_X1 fr2
|
||||
#define F_X2 fr3
|
||||
#define F_Y1 fr4
|
||||
#define F_Y2 fr5
|
||||
#define F_U1 fr6
|
||||
#define F_U2 fr7
|
||||
#define F_V1 fr8
|
||||
#define F_V2 fr9
|
||||
#define F_Z1 fr10
|
||||
#define F_Z2 fr11
|
||||
#define Ftmp fr11
|
||||
|
||||
.global _ClipEdge
|
||||
.align 4
|
||||
_ClipEdge:
|
||||
fschg ! FE (swap to 32 bit FPU loads/stores)
|
||||
! Start calculating interpolation factor
|
||||
add #28, IN1 ! EX, IN1 = &v1->z
|
||||
mov.l _NEAR_CLIP_W,TM1 ! LS, tmp = invW (1/zNear)
|
||||
fmov.s @IN1, F_Z1 ! LS, Z1 = v1->z
|
||||
add #28, IN2 ! EX, IN = &v2->z
|
||||
fmov.s @IN2, F_Z2 ! LS, Z2 = v2->z
|
||||
shll16 TYP ! EX, TYP <<= 16
|
||||
fsub F_Z1, Ftmp ! FE, tmp = v2->z - v1->z
|
||||
! Load W
|
||||
lds TM1,fpul ! LS, FPUL = invW (1/zNear)
|
||||
add #-24, IN1 ! EX, IN1 = &v1->x
|
||||
fsts fpul,F_W ! LS, invW = FPUL
|
||||
add #-24, IN2 ! EX, IN2 = &v2->x
|
||||
! Finish calculating interpolation factor
|
||||
shll8 TYP ! EX, TYP <<= 8
|
||||
fmul Ftmp,Ftmp ! FE, tmp = (v2->z - v1->z) * (v2->z * v1->z)
|
||||
mov.l TYP,@OUT ! LS, dst->cmd = TYPE
|
||||
|
||||
! Load components
|
||||
fmov.s @IN1+, F_X1 ! LS, X1 = v1->x
|
||||
fmov.s @IN2+, F_X2 ! LS, X2 = v2->x
|
||||
fmov.s @IN1+, F_Y1 ! LS, Y1 = y1->x
|
||||
fmov.s @IN2+, F_Y2 ! LS, Y2 = y2->x
|
||||
fsrra Ftmp ! FE, tmp = 1 / abs(v2->z - v1->z)
|
||||
add #4, IN1 ! EX, skip over W
|
||||
fabs F_Z1 ! LS, z1 = abs(v1->z)
|
||||
add #4, IN2 ! EX, skip over W
|
||||
fmov.s @IN1+, F_U1 ! LS, U1 = v1->u
|
||||
fmov.s @IN2+, F_U2 ! LS, U2 = v2->u
|
||||
fmov.s @IN1+, F_V1 ! LS, V1 = v1->v
|
||||
fmul F_Z1,Ftmp ! FE, tmp = abs(v1->Z) / abs(v2->z - v1->z)
|
||||
fmov.s @IN2+, F_V2 ! LS, V2 = v2->v
|
||||
|
||||
! Interpolate vertices
|
||||
fsub F_X1, F_X2 ! FE, X2 = X2 - X1
|
||||
fsub F_Y1, F_Y2 ! FE, Y2 = Y2 - Y1
|
||||
fsub F_U1, F_U2 ! FE, U2 = U2 - U1
|
||||
fmov Ftmp, F_T ! LS, T = tmp
|
||||
fsub F_V1, F_V2 ! FE, V2 = V2 - V1
|
||||
|
||||
fmac F_T,F_X2,F_X1 ! FE, X = T * (X2 - X1) + X1
|
||||
fmac F_T,F_Y2,F_Y1 ! FE, Y = T * (Y2 - Y1) + Y1
|
||||
fmac F_T,F_U2,F_U1 ! FE, U = T * (U2 - U1) + U1
|
||||
fmac F_T,F_V2,F_V1 ! FE, V = T * (V2 - V1) + V1
|
||||
|
||||
! Adjust by w
|
||||
fmul F_W, F_X1 ! FE, x = invW * x
|
||||
fmul F_W, F_Y1 ! FE, x = invY * x
|
||||
|
||||
! Load colours and check if equal
|
||||
mov.l @IN1,CL1 ! LS, ACOLOR = v1->bgra
|
||||
mov.l @IN2,CL2 ! LS, BCOLOR = v2->bgra
|
||||
cmp/eq CL1,CL2 ! MT, T = ACOLOR == BCOLOR
|
||||
add #28, OUT ! EX, dst = &dst->padding
|
||||
|
||||
! Bypass RGBA interpolation if unnecessary
|
||||
bt.s 1f ! BR, if (T) goto 1;
|
||||
mov CL1,CLO ! MT, OUTCOLOR = ACOLOR (branch delay instruction)
|
||||
|
||||
! Interpolate B
|
||||
extu.b CL1,TM1 ! EX, val = ACOLOR.b
|
||||
lds TM1,fpul ! LS, FPUL = val
|
||||
float fpul,F_Z1 ! FE, C1 = float(val)
|
||||
extu.b CL2,TM1 ! EX, val = BCOLOR.b
|
||||
lds TM1,fpul ! LS, FPUL = val
|
||||
float fpul,F_Z2 ! FE, C2 = float(val)
|
||||
fsub F_Z1, F_Z2 ! FE, C2 = C2 - C1
|
||||
fmac F_T,F_Z2,F_Z1 ! FE, C = T * (C2 - C1) + C1
|
||||
shlr8 CL1 ! EX, ACOLOR >>= 8
|
||||
shlr8 CL2 ! EX, BCOLOR >>= 8
|
||||
ftrc F_Z1,fpul ! FE, FPUL = int(C)
|
||||
sts fpul,TM2 ! LS, tmp = FPUL
|
||||
|
||||
! Interpolate G
|
||||
extu.b CL1,TM1 ! EX, val = ACOLOR.g
|
||||
lds TM1,fpul ! LS, FPUL = val
|
||||
float fpul,F_Z1 ! FE, C1 = float(val)
|
||||
extu.b CL2,TM1 ! EX, val = BCOLOR.g
|
||||
lds TM1,fpul ! LS, FPUL = val
|
||||
float fpul,F_Z2 ! FE, C2 = float(val)
|
||||
fsub F_Z1, F_Z2 ! FE, C2 = C2 - C1
|
||||
fmac F_T,F_Z2,F_Z1 ! FE, C = T * (C2 - C1) + C1
|
||||
shlr8 CL1 ! EX, ACOLOR >>= 8
|
||||
extu.b TM2,TM2 ! EX, tmp = (uint8)tmp
|
||||
mov TM2,CLO ! MT, OUTCOLOR.b = tmp
|
||||
shlr8 CL2 ! EX, BCOLOR >>= 8
|
||||
ftrc F_Z1,fpul ! FE, FPUL = int(C)
|
||||
sts fpul,TM2 ! LS, tmp = FPUL
|
||||
|
||||
! Interpolate R
|
||||
extu.b CL1,TM1 ! EX, val = ACOLOR.r
|
||||
lds TM1,fpul ! LS, FPUL = val
|
||||
float fpul,F_Z1 ! FE, C1 = float(val)
|
||||
extu.b CL2,TM1 ! EX, val = BCOLOR.r
|
||||
lds TM1,fpul ! LS, FPUL = val
|
||||
float fpul,F_Z2 ! FE, C2 = float(val)
|
||||
fsub F_Z1, F_Z2 ! FE, C2 = C2 - C1
|
||||
fmac F_T,F_Z2,F_Z1 ! FE, C = T * (C2 - C1) + C1
|
||||
shlr8 CL1 ! EX, ACOLOR >>= 8
|
||||
extu.b TM2,TM2 ! EX, tmp = (uint8)tmp
|
||||
shll8 TM2 ! EX, tmp <<= 8
|
||||
or TM2,CLO ! EX, OUTCOLOR.g |= tmp
|
||||
shlr8 CL2 ! EX, BCOLOR >>= 8
|
||||
ftrc F_Z1,fpul ! FE, FPUL = int(C)
|
||||
sts fpul,TM2 ! LS, tmp = FPUL
|
||||
|
||||
! Interpolate A
|
||||
extu.b CL1,TM1 ! EX, val = ACOLOR.a
|
||||
lds TM1,fpul ! LS, FPUL = val
|
||||
float fpul,F_Z1 ! FE, C1 = float(val)
|
||||
extu.b CL2,TM1 ! EX, val = BCOLOR.a
|
||||
lds TM1,fpul ! LS, FPUL = val
|
||||
float fpul,F_Z2 ! FE, C2 = float(val)
|
||||
fsub F_Z1, F_Z2 ! FE, C2 = C2 - C1
|
||||
fmac F_T,F_Z2,F_Z1 ! FE, C = T * (C2 - C1) + C1
|
||||
extu.b TM2,TM2 ! EX, tmp = (uint8)tmp
|
||||
shll16 TM2 ! EX, tmp <<= 16
|
||||
or TM2,CLO ! EX, OUTCOLOR.r |= tmp
|
||||
ftrc F_Z1,fpul ! FE, FPUL = int(C)
|
||||
sts fpul,TM2 ! LS, tmp = FPUL
|
||||
extu.b TM2,TM2 ! EX, tmp = (uint8)tmp
|
||||
shll16 TM2 ! EX, tmp <<= 16
|
||||
shll8 TM2 ! EX, tmp <<= 8
|
||||
or TM2,CLO ! EX, OUTCOLOR.a |= tmp
|
||||
|
||||
1:
|
||||
! Store output
|
||||
mov.l CLO,@-OUT ! LS, dst->color = OUTCOLOR
|
||||
fmov.s F_V1,@-OUT ! LS, dst->v = v
|
||||
fmov.s F_U1,@-OUT ! LS, dst->u = u
|
||||
fmov.s F_W ,@-OUT ! LS, dst->w = invW
|
||||
fmov.s F_Y1,@-OUT ! LS, dst->y = y
|
||||
fmov.s F_X1,@-OUT ! LS, dst->x = x
|
||||
|
||||
fschg ! FE (swap to 64 bit FPU loads/stores)
|
||||
rts ! CO, return after executing instruction in delay slot
|
||||
pref @OUT ! LS, trigger store queue flush
|
||||
.size _ClipEdge, .-_ClipEdge
|
||||
.type _ClipEdge, %function
|
||||
|
||||
.align 4
|
||||
_NEAR_CLIP_W:
|
||||
.float 0
|
||||
.global _NEAR_CLIP_W
|
||||
611
misc/dreamcast/VertexDraw.S
Normal file
@@ -0,0 +1,611 @@
|
||||
! r8 = STORE_QUEUE
|
||||
! r9 = num vertices left
|
||||
! r10 = PVR_CMD_VERTEX
|
||||
! r11 = PVR_CMD_VERTEX_EOL
|
||||
! r12 = ClipLine function
|
||||
! r13 = cur vertex
|
||||
! r14 = next vertex (prefetch)
|
||||
|
||||
#define R_VTX r10
|
||||
#define R_EOL r11
|
||||
#define REG_CMD_VTX r10
|
||||
#define REG_CMD_EOL r11
|
||||
#define REG_CLIPFUNC r12
|
||||
|
||||
|
||||
.align 4
|
||||
|
||||
! Pushes a vertex to the store queue
|
||||
! CLOBBERS: r2
|
||||
! INPUTS: R (vertex), r8 (SQ global)
|
||||
! OUTPUTS: r8 altered
|
||||
.macro PushVertex R
|
||||
! memcpy(r8, \R, 32)
|
||||
mov.l @(0,\R), r2
|
||||
mov.l r2, @(0,r8)
|
||||
mov.l @(4,\R), r2
|
||||
mov.l r2, @(4,r8)
|
||||
mov.l @(8,\R), r2
|
||||
mov.l r2, @(8,r8)
|
||||
mov.l @(12,\R),r2
|
||||
mov.l r2,@(12,r8)
|
||||
mov.l @(16,\R),r2
|
||||
mov.l r2,@(16,r8)
|
||||
mov.l @(20,\R),r2
|
||||
mov.l r2,@(20,r8)
|
||||
mov.l @(24,\R),r2
|
||||
mov.l r2,@(24,r8)
|
||||
mov.l @(28,\R),r2
|
||||
mov.l r2,@(28,r8)
|
||||
pref @r8 ! LS, Trigger SQ
|
||||
add #32,r8 ! EX, SQ += 32
|
||||
.endm
|
||||
|
||||
! Transforms then pushes a vertex to the store queue
|
||||
! note: Vertices are assumed as pre viewport transformed already
|
||||
! CLOBBERS: r2, fr0, fr4, fr5
|
||||
! INPUTS: R (vertex), r8 (SQ global)
|
||||
! OUTPUTS: R, r8 altered
|
||||
.macro TransformVertex R
|
||||
! INVERSE W CALCULATION
|
||||
add #28, \R ! EX, SRC += 28
|
||||
fmov.s @\R,fr0 ! LS, fr0 = v->w
|
||||
fmul fr0,fr0 ! FE, fr0 = fr0 * fr0
|
||||
add #-28, \R ! EX, SRC -= 28
|
||||
mov.l @\R+, r2 ! LS, tmp = SRC->flags, SRC += 4
|
||||
mov.l r2,@r8 ! LS, DST->flags = tmp
|
||||
fsrra fr0 ! FE, invW = 1 / sqrt(SRC->W * SRC->W)
|
||||
add #4, r8 ! EX, DST += 4
|
||||
|
||||
! COPY U,V
|
||||
mov.l @(12,\R),r2 ! LS, tmp = SRC->u
|
||||
mov.l r2,@(12,r8) ! LS, DST->u = tmp
|
||||
mov.l @(16,\R),r2 ! LS, tmp = SRC->v
|
||||
mov.l r2,@(16,r8) ! LS, DST->v = tmp
|
||||
|
||||
! TRANSFORM X
|
||||
fmov.s @\R,fr4 ! LS, fr4 = SRC->x
|
||||
fmul fr0,fr4 ! FE, fr4 = invW * SRC->x
|
||||
mov.l @(20,\R),r2 ! LS, tmp = SRC->bgra
|
||||
mov.l r2,@(20,r8) ! LS, SRC->bgra = tmp
|
||||
add #4, \R ! EX, SRC += 4
|
||||
fmov.s fr4,@r8 ! LS, DST->x = fr4
|
||||
|
||||
! TRANSFORM Y
|
||||
fmov.s @\R,fr4 ! LS, fr4 = SRC->y
|
||||
add #8, r8 ! EX, DST += 8
|
||||
fmul fr0,fr4 ! FE, fr4 = invW * SRC->y
|
||||
fmov.s fr0,@r8 ! LS, DST->z = invW
|
||||
add #-4, r8 ! EX, DST -= 4
|
||||
add #-8, \R ! EX, src -= 8 (back to start of vertex)
|
||||
fmov.s fr4,@r8 ! LS, DST->y = fr4
|
||||
|
||||
add #-8,r8 ! EX, DST -= 8 (back to start of vertex)
|
||||
pref @r8 ! LS, Trigger SQ
|
||||
add #32,r8 ! EX, SQ += 32
|
||||
.endm
|
||||
|
||||
|
||||
#define REG_CLIP1 r1
|
||||
#define REG_CLIP2 r2
|
||||
|
||||
#define REG_V0 r4
|
||||
#define REG_V1 r5
|
||||
#define REG_V2 r6
|
||||
#define REG_V3 r7
|
||||
|
||||
! r3 also matches out parameter for ClipLine
|
||||
#define REG_TMP r3
|
||||
#define TMP_SET_A \
|
||||
mov r15, REG_TMP
|
||||
|
||||
#define TMP_SET_B \
|
||||
mov r15, REG_TMP; add #32, REG_TMP
|
||||
|
||||
|
||||
_Case_0_0_0_1:
|
||||
! v0
|
||||
! / |
|
||||
! / |
|
||||
! .....A....B...
|
||||
! / |
|
||||
! v3--v2---v1
|
||||
sts pr,r13
|
||||
|
||||
TMP_SET_A
|
||||
mov REG_V3, REG_CLIP1
|
||||
mov REG_V0, REG_CLIP2
|
||||
jsr @REG_CLIPFUNC
|
||||
mov.l REG_CMD_EOL, @REG_TMP
|
||||
|
||||
TMP_SET_B
|
||||
mov REG_V0, REG_CLIP1
|
||||
mov REG_V1, REG_CLIP2
|
||||
jsr @REG_CLIPFUNC
|
||||
mov.l REG_CMD_VTX, @REG_TMP
|
||||
|
||||
TransformVertex REG_V0
|
||||
TMP_SET_B
|
||||
TransformVertex REG_TMP
|
||||
TMP_SET_A
|
||||
TransformVertex REG_TMP
|
||||
|
||||
lds r13,pr
|
||||
rts
|
||||
nop
|
||||
|
||||
_Case_0_0_1_0:
|
||||
! v1
|
||||
! / |
|
||||
! / |
|
||||
! ....A.....B...
|
||||
! / |
|
||||
! v0--v3---v2
|
||||
sts pr,r13
|
||||
|
||||
TMP_SET_A
|
||||
mov REG_V0, REG_CLIP1
|
||||
mov REG_V1, REG_CLIP2
|
||||
jsr @REG_CLIPFUNC
|
||||
mov.l REG_CMD_VTX, @REG_TMP
|
||||
|
||||
TMP_SET_B
|
||||
mov REG_V1, REG_CLIP1
|
||||
mov REG_V2, REG_CLIP2
|
||||
jsr @REG_CLIPFUNC
|
||||
mov.l REG_CMD_EOL, @REG_TMP
|
||||
|
||||
TMP_SET_A
|
||||
TransformVertex REG_TMP
|
||||
TransformVertex REG_V1
|
||||
TMP_SET_B
|
||||
TransformVertex REG_TMP
|
||||
|
||||
lds r13,pr
|
||||
rts
|
||||
nop
|
||||
|
||||
_Case_0_1_0_0:
|
||||
! v2
|
||||
! / |
|
||||
! / |
|
||||
! ....A.....B...
|
||||
! / |
|
||||
! v1--v0---v3
|
||||
sts pr,r13
|
||||
|
||||
TMP_SET_A
|
||||
mov REG_V1, REG_CLIP1
|
||||
mov REG_V2, REG_CLIP2
|
||||
jsr @REG_CLIPFUNC
|
||||
mov.l REG_CMD_VTX, @REG_TMP
|
||||
|
||||
TMP_SET_B
|
||||
mov REG_V2, REG_CLIP1
|
||||
mov REG_V3, REG_CLIP2
|
||||
jsr @REG_CLIPFUNC
|
||||
mov.l REG_CMD_EOL, @REG_TMP
|
||||
|
||||
TMP_SET_A
|
||||
TransformVertex REG_TMP
|
||||
TransformVertex REG_V2
|
||||
TMP_SET_B
|
||||
TransformVertex REG_TMP
|
||||
|
||||
lds r13,pr
|
||||
rts
|
||||
nop
|
||||
|
||||
_Case_1_0_0_0:
|
||||
! v3
|
||||
! / |
|
||||
! / |
|
||||
! ....A.....B...
|
||||
! / |
|
||||
! v2--v1---v0
|
||||
sts pr,r13
|
||||
|
||||
TMP_SET_A
|
||||
mov REG_V2, REG_CLIP1
|
||||
mov REG_V3, REG_CLIP2
|
||||
jsr @REG_CLIPFUNC
|
||||
mov.l REG_CMD_VTX, @REG_TMP
|
||||
|
||||
TMP_SET_B
|
||||
mov REG_V3, REG_CLIP1
|
||||
mov REG_V0, REG_CLIP2
|
||||
jsr @REG_CLIPFUNC
|
||||
mov.l REG_CMD_VTX, @REG_TMP
|
||||
|
||||
TMP_SET_B
|
||||
TransformVertex REG_TMP
|
||||
TMP_SET_A
|
||||
TransformVertex REG_TMP
|
||||
TransformVertex REG_V3
|
||||
|
||||
lds r13,pr
|
||||
rts
|
||||
nop
|
||||
|
||||
|
||||
_Case_0_0_1_1:
|
||||
! v0-----------v1
|
||||
! \ |
|
||||
! ....B..........A...
|
||||
! \ |
|
||||
! v3-----v2
|
||||
sts pr,r13
|
||||
|
||||
TMP_SET_A
|
||||
mov REG_V1, REG_CLIP1
|
||||
mov REG_V2, REG_CLIP2
|
||||
jsr @REG_CLIPFUNC
|
||||
mov.l REG_CMD_VTX, @REG_TMP
|
||||
|
||||
TMP_SET_B
|
||||
mov REG_V3, REG_CLIP1
|
||||
mov REG_V0, REG_CLIP2
|
||||
jsr @REG_CLIPFUNC
|
||||
mov.l REG_CMD_EOL, @REG_TMP
|
||||
|
||||
TransformVertex REG_V1
|
||||
TMP_SET_A
|
||||
TransformVertex REG_TMP
|
||||
TransformVertex REG_V0
|
||||
TMP_SET_B
|
||||
TransformVertex REG_TMP
|
||||
|
||||
lds r13,pr
|
||||
rts
|
||||
nop
|
||||
|
||||
_Case_1_0_0_1:
|
||||
! v3-----------v0
|
||||
! \ |
|
||||
! ....B..........A...
|
||||
! \ |
|
||||
! v2-----v1
|
||||
sts pr,r13
|
||||
|
||||
TMP_SET_A
|
||||
mov REG_V0, REG_CLIP1
|
||||
mov REG_V1, REG_CLIP2
|
||||
jsr @REG_CLIPFUNC
|
||||
mov.l REG_CMD_VTX, @REG_TMP
|
||||
|
||||
TMP_SET_B
|
||||
mov REG_V2, REG_CLIP1
|
||||
mov REG_V3, REG_CLIP2
|
||||
jsr @REG_CLIPFUNC
|
||||
mov.l REG_CMD_VTX, @REG_TMP
|
||||
|
||||
TMP_SET_A
|
||||
TransformVertex REG_TMP
|
||||
TMP_SET_B
|
||||
TransformVertex REG_TMP
|
||||
TransformVertex REG_V0
|
||||
TransformVertex REG_V3
|
||||
|
||||
lds r13,pr
|
||||
rts
|
||||
nop
|
||||
|
||||
_Case_0_1_1_0:
|
||||
! v1-----------v2
|
||||
! \ |
|
||||
! ....B..........A...
|
||||
! \ |
|
||||
! v0-----v3
|
||||
sts pr,r13
|
||||
|
||||
TMP_SET_A
|
||||
mov REG_V2, REG_CLIP1
|
||||
mov REG_V3, REG_CLIP2
|
||||
jsr @REG_CLIPFUNC
|
||||
mov.l REG_CMD_EOL, @REG_TMP
|
||||
|
||||
TMP_SET_B
|
||||
mov REG_V0, REG_CLIP1
|
||||
mov REG_V1, REG_CLIP2
|
||||
jsr @REG_CLIPFUNC
|
||||
mov.l REG_CMD_VTX, @REG_TMP
|
||||
|
||||
TransformVertex REG_V1
|
||||
TransformVertex REG_V2
|
||||
TMP_SET_B
|
||||
TransformVertex REG_TMP
|
||||
TMP_SET_A
|
||||
TransformVertex REG_TMP
|
||||
|
||||
lds r13,pr
|
||||
rts
|
||||
nop
|
||||
|
||||
_Case_1_1_0_0:
|
||||
! v2-----------v3
|
||||
! \ |
|
||||
! ....B..........A...
|
||||
! \ |
|
||||
! v1-----v0
|
||||
sts pr,r13
|
||||
|
||||
TMP_SET_A
|
||||
mov REG_V3, REG_CLIP1
|
||||
mov REG_V0, REG_CLIP2
|
||||
jsr @REG_CLIPFUNC
|
||||
mov.l REG_CMD_VTX, @REG_TMP
|
||||
|
||||
TMP_SET_B
|
||||
mov REG_V1, REG_CLIP1
|
||||
mov REG_V2, REG_CLIP2
|
||||
jsr @REG_CLIPFUNC
|
||||
mov.l REG_CMD_VTX, @REG_TMP
|
||||
|
||||
TMP_SET_B
|
||||
TransformVertex REG_TMP
|
||||
TransformVertex REG_V2
|
||||
TMP_SET_A
|
||||
TransformVertex REG_TMP
|
||||
TransformVertex REG_V3
|
||||
|
||||
lds r13,pr
|
||||
rts
|
||||
nop
|
||||
|
||||
_Case_0_1_1_1:
|
||||
! --v1--
|
||||
! v0-- --v2
|
||||
! \ |
|
||||
! .....B.....A...
|
||||
! \ |
|
||||
! v3
|
||||
! v1,v2,v0 v2,v0,A v0,A,B
|
||||
sts pr,r13
|
||||
|
||||
TMP_SET_A
|
||||
mov REG_V2, REG_CLIP1
|
||||
mov REG_V3, REG_CLIP2
|
||||
jsr @REG_CLIPFUNC
|
||||
mov.l REG_CMD_VTX, @REG_TMP
|
||||
|
||||
TMP_SET_B
|
||||
mov REG_V3, REG_CLIP1
|
||||
mov REG_V0, REG_CLIP2
|
||||
jsr @REG_CLIPFUNC
|
||||
mov.l REG_CMD_EOL, @REG_TMP
|
||||
|
||||
TransformVertex REG_V1
|
||||
TransformVertex REG_V2
|
||||
TransformVertex REG_V0
|
||||
TMP_SET_A
|
||||
TransformVertex REG_TMP
|
||||
TMP_SET_B
|
||||
TransformVertex REG_TMP
|
||||
|
||||
lds r13,pr
|
||||
rts
|
||||
nop
|
||||
|
||||
_Case_1_0_1_1:
|
||||
! --v0--
|
||||
! v3-- --v1
|
||||
! \ |
|
||||
! .....B.....A...
|
||||
! \ |
|
||||
! v2
|
||||
! v0,v1,v3 v1,v3,A v3,A,B
|
||||
sts pr,r13
|
||||
|
||||
TMP_SET_A
|
||||
mov REG_V1, REG_CLIP1
|
||||
mov REG_V2, REG_CLIP2
|
||||
jsr @REG_CLIPFUNC
|
||||
mov.l REG_CMD_VTX, @REG_TMP
|
||||
|
||||
TMP_SET_B
|
||||
mov REG_V2, REG_CLIP1
|
||||
mov REG_V3, REG_CLIP2
|
||||
jsr @REG_CLIPFUNC
|
||||
mov.l REG_CMD_EOL, @REG_TMP
|
||||
mov.l REG_CMD_VTX, @REG_V3
|
||||
|
||||
TransformVertex REG_V0
|
||||
TransformVertex REG_V1
|
||||
TransformVertex REG_V3
|
||||
TMP_SET_A
|
||||
TransformVertex REG_TMP
|
||||
TMP_SET_B
|
||||
TransformVertex REG_TMP
|
||||
|
||||
lds r13,pr
|
||||
rts
|
||||
nop
|
||||
|
||||
_Case_1_1_0_1:
|
||||
! --v3--
|
||||
! v2-- --v0
|
||||
! \ |
|
||||
! .....B.....A...
|
||||
! \ |
|
||||
! v1
|
||||
! v3,v0,v2 v0,v2,A v2,A,B
|
||||
sts pr,r13
|
||||
|
||||
TMP_SET_A
|
||||
mov REG_V0, REG_CLIP1
|
||||
mov REG_V1, REG_CLIP2
|
||||
jsr @REG_CLIPFUNC
|
||||
mov.l REG_CMD_VTX, @REG_TMP
|
||||
|
||||
TMP_SET_B
|
||||
mov REG_V1, REG_CLIP1
|
||||
mov REG_V2, REG_CLIP2
|
||||
jsr @REG_CLIPFUNC
|
||||
mov.l REG_CMD_EOL, @REG_TMP
|
||||
mov.l REG_CMD_VTX, @REG_V3
|
||||
|
||||
TransformVertex REG_V3
|
||||
TransformVertex REG_V0
|
||||
TransformVertex REG_V2
|
||||
TMP_SET_A
|
||||
TransformVertex REG_TMP
|
||||
TMP_SET_B
|
||||
TransformVertex REG_TMP
|
||||
|
||||
lds r13,pr
|
||||
rts
|
||||
nop
|
||||
|
||||
_Case_1_1_1_0:
|
||||
! --v2--
|
||||
! v1-- --v3
|
||||
! \ |
|
||||
! .....B.....A...
|
||||
! \ |
|
||||
! v0
|
||||
! v2,v3,v1 v3,v1,A v1,A,B
|
||||
sts pr,r13
|
||||
|
||||
TMP_SET_A
|
||||
mov REG_V3, REG_CLIP1
|
||||
mov REG_V0, REG_CLIP2
|
||||
jsr @REG_CLIPFUNC
|
||||
mov.l REG_CMD_VTX, @REG_TMP
|
||||
|
||||
TMP_SET_B
|
||||
mov REG_V0, REG_CLIP1
|
||||
mov REG_V1, REG_CLIP2
|
||||
jsr @REG_CLIPFUNC
|
||||
mov.l REG_CMD_EOL, @REG_TMP
|
||||
mov.l REG_CMD_VTX, @REG_V3
|
||||
|
||||
TransformVertex REG_V2
|
||||
TransformVertex REG_V3
|
||||
TransformVertex REG_V1
|
||||
TMP_SET_A
|
||||
TransformVertex REG_TMP
|
||||
TMP_SET_B
|
||||
TransformVertex REG_TMP
|
||||
|
||||
lds r13,pr
|
||||
rts
|
||||
nop
|
||||
|
||||
_Case_1_1_1_1:
|
||||
! Triangle strip: {1,2,0} {2,0,3}
|
||||
TransformVertex REG_V1
|
||||
TransformVertex REG_V2
|
||||
TransformVertex REG_V0
|
||||
TransformVertex REG_V3
|
||||
rts
|
||||
nop
|
||||
|
||||
.global _ProcessVertexList
|
||||
.align 4
|
||||
_ProcessVertexList:
|
||||
! STORE CPU REGISTERS
|
||||
mov.l r8,@-r15
|
||||
mov.l r9,@-r15
|
||||
mov.l r10,@-r15
|
||||
mov.l r11,@-r15
|
||||
mov.l r12,@-r15
|
||||
mov.l r13,@-r15
|
||||
mov.l r14,@-r15
|
||||
sts.l pr,@-r15
|
||||
! REGISTER SETUP
|
||||
mov r4,r14
|
||||
mov r4,r13
|
||||
mov.l .CLIPFUNC,r12
|
||||
mov.l .PVR_EOL, r11
|
||||
mov.l .PVR_VTX, r10
|
||||
mov r5,r9
|
||||
mov r6,r8
|
||||
bra SUBMIT_LOOP
|
||||
add #-64,r15
|
||||
|
||||
! Submits a PVR2 TA GPU command
|
||||
DO_CMD:
|
||||
PushVertex REG_V0
|
||||
bra NEXT_ITER
|
||||
nop
|
||||
|
||||
SUBMIT_LOOP:
|
||||
mov.l @r13,r0 ! FLAGS = CUR->flags
|
||||
add #32,r14 ! NEXT += sizeof(Vertex)
|
||||
mov r0,r2 ! TYPE = FLAGS
|
||||
and r11,r2 ! TYPE = FLAGS & 0xF000000 (reuse PVR_CMD_VERTEX_EOL as type mask)
|
||||
! Check for PVR_CMD_VERTEX
|
||||
cmp/eq r10,r2 ! T = r2 == PVR_CMD_VERTEX
|
||||
bt.s NEXT_ITER ! if (T) goto NEXT_ITER
|
||||
pref @r14 ! prefetch(NEXT) -- always executed
|
||||
! Check for non PVR_CMD_VERTEX_EOL
|
||||
cmp/eq r11,r2 ! T = r2 == PVR_CMD_VERTEX_EOL
|
||||
bf.s DO_CMD ! if (!T) goto DO_CMD
|
||||
! PVR_CMD_VERTEX_EOL case
|
||||
extu.b r0,r1 ! EX, MASK = FLAGS & 0xFF (branch delay slot)
|
||||
|
||||
! Prepare and then jump to quad drawing function, based on quad clipflags
|
||||
mova .CASES,r0 ! LS, r0 = CASES
|
||||
mov r13,r7 ! MT, r7 = v3
|
||||
shll2 r1 ! EX, MASK <<= 2
|
||||
mov r13,r6 ! MT, r6 = v3
|
||||
mov.l @(r0,r1),r2 ! LS, r1 = CASES[MASK]
|
||||
mov r13,r5 ! MT, r5 = v3
|
||||
add #-32,r6 ! EX, r6 = v3 - 1 (v2)
|
||||
mov r13,r4 ! MT, r4 = v3
|
||||
add #-64,r5 ! EX, r5 = v3 - 2 (v1)
|
||||
jsr @r2 ! C0, jump CASES[MASK]
|
||||
add #-96,r4 ! EX, r4 = v3 - 3 (v0) (branch delay slot)
|
||||
NEXT_ITER:
|
||||
dt r9 ! NUM--; T = NUM == 0
|
||||
bf.s SUBMIT_LOOP
|
||||
mov r14,r13 ! CUR = NEXT
|
||||
|
||||
add #64,r15
|
||||
! RESTORE CPU REGISTERS
|
||||
lds.l @r15+,pr
|
||||
mov.l @r15+,r14
|
||||
mov.l @r15+,r13
|
||||
mov.l @r15+,r12
|
||||
mov.l @r15+,r11
|
||||
mov.l @r15+,r10
|
||||
mov.l @r15+,r9
|
||||
rts
|
||||
mov.l @r15+,r8
|
||||
.size _ProcessVertexList, .-_ProcessVertexList
|
||||
.type _ProcessVertexList, %function
|
||||
|
||||
.align 4
|
||||
.VP_1:
|
||||
.long _vp
|
||||
.PVR_VTX:
|
||||
.long 0xE0000000
|
||||
.PVR_EOL:
|
||||
.long 0xF0000000
|
||||
.CLIPFUNC:
|
||||
.long _ClipLine
|
||||
|
||||
BUGGY_CASE:
|
||||
rts
|
||||
nop
|
||||
|
||||
! CASES table holds the functions to transfer a quad,
|
||||
! based on the visibility clipflags of the 4 vertices
|
||||
! e.g. CASES[15] = V0_VIS | V1_VIS | V2_VIS | V3_VIS (all 4 visible)
|
||||
.CASES:
|
||||
.long BUGGY_CASE ! Should never happen
|
||||
.long _Case_0_0_0_1
|
||||
.long _Case_0_0_1_0
|
||||
.long _Case_0_0_1_1
|
||||
.long _Case_0_1_0_0
|
||||
.long BUGGY_CASE ! V0_VIS | V2_VIS, Should never happen
|
||||
.long _Case_0_1_1_0
|
||||
.long _Case_0_1_1_1
|
||||
.long _Case_1_0_0_0
|
||||
.long _Case_1_0_0_1
|
||||
.long BUGGY_CASE ! V1_VIS | V3_VIS, Should never happen
|
||||
.long _Case_1_0_1_1
|
||||
.long _Case_1_1_0_0
|
||||
.long _Case_1_1_0_1
|
||||
.long _Case_1_1_1_0
|
||||
.long _Case_1_1_1_1
|
||||
230
misc/dreamcast/VertexTransform.S
Normal file
@@ -0,0 +1,230 @@
|
||||
#define FLG r0 // clip flags
|
||||
#define TMP r1 // temp
|
||||
#define VTX r2 // PVR_CMD_VERTEX
|
||||
#define EOS r3 // PVR_CMD_VERTEX_EOL
|
||||
#define SRC r4 // src pointer ARG
|
||||
#define DST r5 // dst pointer ARG
|
||||
#define CNT r6 // quads count ARG
|
||||
#define PFT r7 // prefetch address
|
||||
|
||||
#define ZERO fr0 // 0.0
|
||||
#define F_U fr1 // vertex.u
|
||||
#define F_V fr2 // vertex.v
|
||||
#define F_C fr3 // vertex.colour
|
||||
#define F_X fr4 // vertex.x
|
||||
#define F_Y fr5 // vertex.y
|
||||
#define F_Z fr6 // vertex.z
|
||||
#define F_W fr7 // vertex.w
|
||||
|
||||
#define XYZW fv4 // vertex.xyzw
|
||||
|
||||
|
||||
! =========================================================
|
||||
! ========================= TRANSFORM SETUP ===============
|
||||
! =========================================================
|
||||
.macro TransformSetup
|
||||
mov SRC, PFT ! MT, pft = src
|
||||
add #-32, DST ! EX, dst -= sizeof(VERTEX)
|
||||
mov #0xE0, VTX ! EX, VTX = 0x00 00 00 E0
|
||||
pref @PFT ! LS, PREFETCH pft (first vertex)
|
||||
shll16 VTX ! EX, VTX = 0x00 E0 00 00
|
||||
shll8 VTX ! EX, VTX = 0xE0 00 00 00 (PVR_CMD_VERTEX)
|
||||
mov #0xF0, EOS ! EX, EOS = 0x00 00 00 F0
|
||||
shll16 EOS ! EX, EOS = 0x00 F0 00 00
|
||||
shll8 EOS ! EX, EOS = 0xF0 00 00 00 (PVR_CMD_VERTEX_EOL)
|
||||
fldi0 ZERO ! LS, fr0 = 0.0
|
||||
.endm
|
||||
|
||||
.macro TransformEnd
|
||||
add #32, DST ! EX, DST += sizeof(VERTEX)
|
||||
rts ! CO, return after executing instruction in delay slot
|
||||
mov DST, r0 ! MT, r0 = DST
|
||||
.endm
|
||||
|
||||
|
||||
! =========================================================
|
||||
! ========================= VERTEX LOADING ================
|
||||
! =========================================================
|
||||
.macro LoadColouredVertex
|
||||
! LOAD XYZ
|
||||
fmov @SRC+, F_X ! LS, X = src->x
|
||||
fmov @SRC+, F_Y ! LS, Y = src->y
|
||||
fmov @SRC+, F_Z ! LS, Z = src->z
|
||||
fldi1 F_W ! LS, W = 1.0
|
||||
! PREPARE NEXT VERTEX
|
||||
add #16, PFT ! EX, pft += VERTEX_STRIDE
|
||||
pref @PFT ! LS, PREFETCH pft (next vertex)
|
||||
add #64, DST ! EX, dst += 2 * sizeof(VERTEX)
|
||||
! TRANSFORM VERTEX
|
||||
ftrv xmtrx, XYZW ! FE, TRANSFORM(XYZW)
|
||||
! LOAD ATTRIBUTES
|
||||
fmov @SRC+, F_C ! LS, C = src->color
|
||||
.endm
|
||||
|
||||
.macro LoadTexturedVertex
|
||||
! LOAD XYZ
|
||||
fmov @SRC+, F_X ! LS, X = src->x
|
||||
fmov @SRC+, F_Y ! LS, Y = src->y
|
||||
fmov @SRC+, F_Z ! LS, Z = src->z
|
||||
fldi1 F_W ! LS, W = 1.0
|
||||
! PREPARE NEXT VERTEX
|
||||
add #24, PFT ! EX, pft += VERTEX_STRIDE
|
||||
pref @PFT ! LS, PREFETCH pft (next vertex)
|
||||
add #64, DST ! EX, dst += 2 * sizeof(VERTEX)
|
||||
! TRANSFORM VERTEX
|
||||
ftrv xmtrx, XYZW ! FE, TRANSFORM(XYZW)
|
||||
! LOAD ATTRIBUTES
|
||||
fmov @SRC+, F_C ! LS, C = src->color
|
||||
fmov @SRC+, F_U ! LS, U = src->u
|
||||
fmov @SRC+, F_V ! LS, V = src->v
|
||||
.endm
|
||||
|
||||
! =========================================================
|
||||
! ========================= VERTEX OUTPUT =================
|
||||
! =========================================================
|
||||
! To take advantage of SH4 dual instruction processing,
|
||||
! clipflag calculation and vertex output are interleaved
|
||||
.macro ProcessVertex1
|
||||
fmov.s F_Z,@-DST ! LS, dst->z = Z
|
||||
fmov.s F_C,@-DST ! LS, dst->c = C
|
||||
fmov.s F_V,@-DST ! LS, dst->v = V
|
||||
fcmp/gt ZERO, F_Z ! FE, T = Z > 0
|
||||
fmov.s F_U,@-DST ! LS, dst->u = U
|
||||
movt FLG ! EX, CLIPFLAGS = T
|
||||
fmov.s F_W,@-DST ! LS, dst->w = W
|
||||
fmov.s F_Y,@-DST ! LS, dst->y = Y
|
||||
fmov.s F_X,@-DST ! LS, dst->x = X
|
||||
mov.l VTX,@-DST ! LS, dst->flags = PVR_CMD_VERTEX
|
||||
.endm
|
||||
|
||||
.macro ProcessVertex2
|
||||
fmov.s F_Z,@-DST ! LS, dst->z = Z
|
||||
fmov.s F_C,@-DST ! LS, dst->c = C
|
||||
fmov.s F_V,@-DST ! LS, dst->v = V
|
||||
fcmp/gt ZERO,F_Z ! FE, T = Z > 0
|
||||
fmov.s F_U,@-DST ! LS, dst->u = U
|
||||
movt TMP ! EX, tmp = T
|
||||
fmov.s F_W,@-DST ! LS, dst->w = W
|
||||
add TMP,TMP ! EX, tmp = tmp + tmp
|
||||
fmov.s F_Y,@-DST ! LS, dst->y = Y
|
||||
or TMP,FLG ! EX, CLIPFLAGS |= tmp (T << 1)
|
||||
fmov.s F_X,@-DST ! LS, dst->x = X
|
||||
mov.l VTX,@-DST ! LS, dst->flags = PVR_CMD_VERTEX
|
||||
.endm
|
||||
|
||||
.macro ProcessVertex3
|
||||
fmov.s F_Z,@-DST ! LS, dst->z = Z
|
||||
fmov.s F_C,@-DST ! LS, dst->c = C
|
||||
fmov.s F_V,@-DST ! LS, dst->v = V
|
||||
fcmp/gt ZERO, F_Z ! FE, T = Z > 0
|
||||
fmov.s F_U,@-DST ! LS, dst->u = U
|
||||
movt TMP ! EX, tmp = T
|
||||
fmov.s F_W,@-DST ! LS, dst->w = W
|
||||
fmov.s F_Y,@-DST ! LS, dst->y = Y
|
||||
shll2 TMP ! EX, tmp = tmp << 2
|
||||
fmov.s F_X,@-DST ! LS, dst->x = X
|
||||
or TMP,FLG ! EX, CLIPFLAGS |= tmp (T << 2)
|
||||
mov.l VTX,@-DST ! LS, dst->flags = PVR_CMD_VERTEX
|
||||
.endm
|
||||
|
||||
.macro ProcessVertex4
|
||||
fmov.s F_Z,@-DST ! LS, dst->z = Z
|
||||
or EOS,FLG ! EX, CLIPFLAGS |= PVR_CMD_VERTEX_EOL
|
||||
fmov.s F_C,@-DST ! LS, dst->c = C
|
||||
fmov.s F_V,@-DST ! LS, dst->v = V
|
||||
fcmp/gt ZERO, F_Z ! FE, T = Z > 0
|
||||
fmov.s F_U,@-DST ! LS, dst->u = U
|
||||
movt TMP ! EX, tmp = T
|
||||
fmov.s F_W,@-DST ! LS, dst->w = W
|
||||
shll2 TMP ! EX, tmp = tmp << 2
|
||||
fmov.s F_Y,@-DST ! LS, dst->y = Y
|
||||
add TMP,TMP ! EX, tmp = (tmp << 2) + (tmp << 2) (T << 3)
|
||||
fmov.s F_X,@-DST ! LS, dst->x = X
|
||||
or TMP,FLG ! EX, CLIPFLAGS |= tmp (T << 3)
|
||||
mov.l FLG,@-DST ! LS, dst->flags = PVR_CMD_VERTEX_EOL | CLIPFLAGS
|
||||
.endm
|
||||
|
||||
|
||||
! =========================================================
|
||||
! ==================== TEXTURED VERTEX TRANSFORM ==========
|
||||
! =========================================================
|
||||
.global _DrawTexturedQuads
|
||||
.align 4
|
||||
|
||||
_DrawTexturedQuads:
|
||||
! Setup
|
||||
TransformSetup
|
||||
|
||||
.T_TRANSFORM_QUAD:
|
||||
LoadTexturedVertex
|
||||
ProcessVertex1
|
||||
|
||||
LoadTexturedVertex
|
||||
ProcessVertex2
|
||||
|
||||
LoadTexturedVertex
|
||||
ProcessVertex3
|
||||
|
||||
LoadTexturedVertex
|
||||
ProcessVertex4
|
||||
|
||||
! CLIPFLAGS TESTING
|
||||
and #15,FLG
|
||||
cmp/eq #0,FLG ! T = CLIPFLAGS == 0 (all points invisible)
|
||||
bf/s .T_LOOP_END ! if !T goto LOOP_END
|
||||
nop
|
||||
|
||||
! No points visible case
|
||||
add #-128, DST ! DST -= 4 * sizeof(VERTEX), move back to prior quad, so that this invisible quad gets overwritten in next iteration
|
||||
|
||||
.T_LOOP_END:
|
||||
dt CNT ! count--; T = count == 0
|
||||
bf .T_TRANSFORM_QUAD ! if !T then goto T_TRANSFORM_QUAD
|
||||
nop
|
||||
|
||||
TransformEnd
|
||||
.size _DrawTexturedQuads, .-_DrawTexturedQuads
|
||||
.type _DrawTexturedQuads, %function
|
||||
|
||||
! =========================================================
|
||||
! ==================== COLOURED VERTEX TRANSFORM ==========
|
||||
! =========================================================
|
||||
.global _DrawColouredQuads
|
||||
.align 4
|
||||
|
||||
_DrawColouredQuads:
|
||||
! Setup
|
||||
fldi0 F_U ! U = 0
|
||||
fldi0 F_V ! V = 0
|
||||
TransformSetup
|
||||
|
||||
.C_TRANSFORM_QUAD:
|
||||
LoadColouredVertex
|
||||
ProcessVertex1
|
||||
|
||||
LoadColouredVertex
|
||||
ProcessVertex2
|
||||
|
||||
LoadColouredVertex
|
||||
ProcessVertex3
|
||||
|
||||
LoadColouredVertex
|
||||
ProcessVertex4
|
||||
|
||||
! CLIPFLAGS TESTING
|
||||
and #15,FLG
|
||||
cmp/eq #0,FLG ! T = CLIPFLAGS == 0 (all points invisible)
|
||||
bf/s .C_LOOP_END ! if !T goto LOOP_END
|
||||
nop
|
||||
|
||||
! No points visible case
|
||||
add #-128, DST ! dst -= 4 * sizeof(VERTEX), move back to 1 vertex before start of quad
|
||||
|
||||
.C_LOOP_END:
|
||||
dt CNT ! count--; T = count == 0
|
||||
bf .C_TRANSFORM_QUAD ! if !T then goto TRANSFORM_QUAD
|
||||
nop
|
||||
|
||||
TransformEnd
|
||||
.size _DrawColouredQuads, .-_DrawColouredQuads
|
||||
.type _DrawColouredQuads, %function
|
||||
BIN
misc/dreamcast/boot_logo.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
3
misc/dreamcast/ip.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
Version : V1.360
|
||||
SW Maker Name : ClassiCube team
|
||||
Game Title : ClassiCube
|
||||
9
misc/dreamcast/readme.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
The dreamcast build requires an initial bootstrap program (Initial Program) named IP.bin
|
||||
|
||||
To generate a custom IP.bin, compile https://github.com/Dreamcast-Projects/makeip
|
||||
|
||||
Then run: makeip ip.txt IP.BIN -l boot_logo.png
|
||||
|
||||
---
|
||||
|
||||
For more details about IP.bin, see https://mc.pp.se/dc/ip.bin.html
|
||||
31
misc/dreamcast/sh4_notes.txt
Normal file
@@ -0,0 +1,31 @@
|
||||
=========================================================
|
||||
======================== PROCESSOR INFO =================
|
||||
=========================================================
|
||||
The SH4 can dual issue (i.e. parallel execution) two instructions
|
||||
as long as the groups of the two instructions are different:
|
||||
* LS - most ALU and FPU register load/stores
|
||||
* EX - most ALU arithmetic instructions
|
||||
* MT - TST, CMP, NOP, MOV Rm,Rn (NOTE: Can execute in parallel with other MT)
|
||||
* FE - most FPU arithmetic instructions
|
||||
* CO - other instructions (NOTE: Cannot never execute in parallel)
|
||||
|
||||
The following general aspects of instructions are important to note per the SH4 manual:
|
||||
* Issue rate: Interval between the issue of an instruction and that of the next instruction
|
||||
* Latency: Interval between the issue of an instruction and the generation of its result (completion)
|
||||
* Latency is also the interval between the execution of two instructions with an interdependent relationship.
|
||||
(although different cases may either increase or decrease Latency)
|
||||
|
||||
|
||||
=========================================================
|
||||
======================== REGISTER USAGES ================
|
||||
=========================================================
|
||||
SH4 C ABI:
|
||||
- R0 to R3 are return values (can be overwritten)
|
||||
- R4 to R7 are input arguments (can be overwritten)
|
||||
- R8 to R13 are non-volatile (must be restored at end)
|
||||
- R14 is the frame pointer (must be restored at end)
|
||||
- R15 is the stack pointer (must be restored at end)
|
||||
- FR0 to FR3 are return values (can be overwritten)
|
||||
- FR4 to FR11 are input arguments (can be overwritten)
|
||||
- FR12 to FR13 are non-volatile (must be restored at end)
|
||||
|
||||
60
misc/ds/Makefile
Normal file
@@ -0,0 +1,60 @@
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
#
|
||||
# SPDX-FileContributor: Antonio Niño Díaz, 2023
|
||||
export BLOCKSDS ?= /opt/wonderful/thirdparty/blocksds/core
|
||||
export BLOCKSDSEXT ?= /opt/wonderful/thirdparty/blocksds/external
|
||||
|
||||
GAME_TITLE := ClassiCube
|
||||
GAME_SUBTITLE := Built with BlocksDS
|
||||
GAME_AUTHOR := ClassiCube team
|
||||
GAME_ICON := misc/ds/icon.bmp
|
||||
GAME_FULL_TITLE := $(GAME_TITLE);$(GAME_SUBTITLE);$(GAME_AUTHOR)
|
||||
|
||||
|
||||
# DLDI and internal SD slot of DSi
|
||||
# --------------------------------
|
||||
|
||||
# Root folder of the SD image
|
||||
SDROOT := sdroot
|
||||
# Name of the generated image it "DSi-1.sd" for no$gba in DSi mode
|
||||
SDIMAGE := image.bin
|
||||
|
||||
# Build artfacts
|
||||
# --------------
|
||||
ifdef BUILD_DSI
|
||||
BUILDDIR := build/dsi
|
||||
ROM := ClassiCube-dsi.nds
|
||||
else
|
||||
BUILDDIR := build/nds
|
||||
ROM := ClassiCube-nds.nds
|
||||
endif
|
||||
|
||||
# Targets
|
||||
# -------
|
||||
.PHONY: all clean arm9 arm7 dldipatch sdimage
|
||||
|
||||
all: $(ROM)
|
||||
|
||||
clean:
|
||||
$(MAKE) -f Makefile.arm9 clean --no-print-directory
|
||||
$(MAKE) -f Makefile.arm7 clean --no-print-directory
|
||||
$(RM) $(ROM) $(BUILDDIR) $(SDIMAGE)
|
||||
|
||||
arm9:
|
||||
$(MAKE) -f misc/ds/Makefile.arm9 --no-print-directory
|
||||
|
||||
arm7:
|
||||
$(MAKE) -f misc/ds/Makefile.arm7 --no-print-directory
|
||||
|
||||
|
||||
$(ROM): arm9 arm7
|
||||
$(BLOCKSDS)/tools/ndstool/ndstool -c $@ \
|
||||
-7 $(BUILDDIR)/cc-arm7.elf -9 $(BUILDDIR)/cc-arm9.elf \
|
||||
-b $(GAME_ICON) "$(GAME_FULL_TITLE)"
|
||||
|
||||
|
||||
sdimage:
|
||||
$(BLOCKSDS)/tools/mkfatimg/mkfatimg -t $(SDROOT) $(SDIMAGE)
|
||||
|
||||
dldipatch: $(ROM)
|
||||
$(BLOCKSDS)/tools/dlditool/dlditool $(BLOCKSDS)/tools/dldi/r4tfv2.dldi $(ROM)
|
||||
96
misc/ds/Makefile.arm7
Normal file
@@ -0,0 +1,96 @@
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
#
|
||||
# SPDX-FileContributor: Antonio Niño Díaz, 2023
|
||||
export BLOCKSDS ?= /opt/wonderful/thirdparty/blocksds/core
|
||||
export BLOCKSDSEXT ?= /opt/wonderful/thirdparty/blocksds/external
|
||||
export WONDERFUL_TOOLCHAIN ?= /opt/wonderful
|
||||
ARM_NONE_EABI_PATH ?= $(WONDERFUL_TOOLCHAIN)/toolchain/gcc-arm-none-eabi/bin/
|
||||
|
||||
SOURCEDIRS := misc/ds
|
||||
INCLUDEDIRS :=
|
||||
DSIWIFI := third_party/dsiwifi
|
||||
|
||||
ifdef BUILD_DSI
|
||||
SOURCEDIRS += $(DSIWIFI)/arm_iop/source $(DSIWIFI)/common/source $(DSIWIFI)/arm_iop/source/ath $(DSIWIFI)/arm_iop/source/crypto $(DSIWIFI)/arm_iop/source/ieee
|
||||
INCLUDEDIRS += $(DSIWIFI)/arm_iop/source $(DSIWIFI)/arm_iop/include $(DSIWIFI)/common/source $(DSIWIFI)/include $(DSIWIFI)/include/lwip
|
||||
BUILDDIR := build/dsi
|
||||
LIBS := -lc -lnds7
|
||||
LIBDIRS := $(BLOCKSDS)/libs/libnds
|
||||
else
|
||||
BUILDDIR := build/nds
|
||||
LIBS := -lc -lnds7 -ldswifi7
|
||||
LIBDIRS := $(BLOCKSDS)/libs/libnds $(BLOCKSDS)/libs/dswifi
|
||||
endif
|
||||
|
||||
NAME := cc-arm7
|
||||
ELF := $(BUILDDIR)/$(NAME).elf
|
||||
MAP := $(BUILDDIR)/$(NAME).map
|
||||
|
||||
PREFIX := $(ARM_NONE_EABI_PATH)arm-none-eabi-
|
||||
CC := $(PREFIX)gcc
|
||||
CXX := $(PREFIX)g++
|
||||
LD := $(CC)
|
||||
|
||||
DEFINES := -D__NDS__ -DARM7
|
||||
ARCH := -mcpu=arm7tdmi -mtune=arm7tdmi
|
||||
WARNFLAGS := -Wall
|
||||
|
||||
# Source files
|
||||
# ------------
|
||||
S_FILES := $(foreach dir,$(SOURCEDIRS),$(wildcard $(dir)/*.s))
|
||||
C_FILES := $(foreach dir,$(SOURCEDIRS),$(wildcard $(dir)/*.c))
|
||||
|
||||
|
||||
INCLUDEFLAGS := $(foreach path,$(INCLUDEDIRS),-I$(path)) \
|
||||
$(foreach path,$(LIBDIRS),-I$(path)/include)
|
||||
|
||||
LIBDIRSFLAGS := $(foreach path,$(LIBDIRS),-L$(path)/lib)
|
||||
|
||||
ASFLAGS += -x assembler-with-cpp $(DEFINES) $(ARCH) \
|
||||
-mthumb -mthumb-interwork $(INCLUDEFLAGS) \
|
||||
-ffunction-sections -fdata-sections
|
||||
|
||||
CFLAGS += -std=gnu11 $(WARNFLAGS) $(DEFINES) $(ARCH) \
|
||||
-mthumb -mthumb-interwork $(INCLUDEFLAGS) -O2 \
|
||||
-ffunction-sections -fdata-sections \
|
||||
-fomit-frame-pointer
|
||||
|
||||
LDFLAGS := -mthumb -mthumb-interwork $(LIBDIRSFLAGS) \
|
||||
-Wl,-Map,$(MAP) -Wl,--gc-sections -nostdlib \
|
||||
-T$(BLOCKSDS)/sys/crts/ds_arm7.ld \
|
||||
-Wl,--no-warn-rwx-segments \
|
||||
-Wl,--start-group $(LIBS) -lgcc -Wl,--end-group
|
||||
|
||||
|
||||
# Intermediate build files
|
||||
# ------------------------
|
||||
OBJS := $(addprefix $(BUILDDIR)/, $(notdir $(C_FILES:%.c=%.o) $(S_FILES:%.s=%.o)))
|
||||
DEPS := $(OBJS:.o=.d)
|
||||
export VPATH := $(SOURCEDIRS)
|
||||
|
||||
# Targets
|
||||
# -------
|
||||
.PHONY: all clean
|
||||
|
||||
all: $(BUILDDIR) $(ELF)
|
||||
|
||||
$(BUILDDIR):
|
||||
mkdir -p $(BUILDDIR)
|
||||
|
||||
$(ELF): $(OBJS)
|
||||
$(LD) -o $@ $(OBJS) $(BLOCKSDS)/sys/crts/ds_arm7_crt0.o $(LDFLAGS)
|
||||
clean:
|
||||
rm $(ELF) $(MAP) $(OBJS)
|
||||
|
||||
# Rules
|
||||
# -----
|
||||
$(BUILDDIR)/%.o : %.s
|
||||
$(CC) $(ASFLAGS) -MMD -MP -c -o $@ $<
|
||||
|
||||
$(BUILDDIR)/%.o : %.c
|
||||
$(CC) $(CFLAGS) -MMD -MP -c -o $@ $<
|
||||
|
||||
# Include dependency files if they exist
|
||||
# --------------------------------------
|
||||
|
||||
-include $(DEPS)
|
||||
106
misc/ds/Makefile.arm9
Normal file
@@ -0,0 +1,106 @@
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
#
|
||||
# SPDX-FileContributor: Antonio Niño Díaz, 2023
|
||||
export BLOCKSDS ?= /opt/wonderful/thirdparty/blocksds/core
|
||||
export BLOCKSDSEXT ?= /opt/wonderful/thirdparty/blocksds/external
|
||||
export WONDERFUL_TOOLCHAIN ?= /opt/wonderful
|
||||
ARM_NONE_EABI_PATH ?= $(WONDERFUL_TOOLCHAIN)/toolchain/gcc-arm-none-eabi/bin/
|
||||
|
||||
SOURCEDIRS := src
|
||||
INCLUDEDIRS :=
|
||||
DSIWIFI := third_party/dsiwifi
|
||||
|
||||
ifdef BUILD_DSI
|
||||
SOURCEDIRS += $(DSIWIFI)/arm_host/source $(DSIWIFI)/common/source $(DSIWIFI)/arm_host/source/nds $(DSIWIFI)/arm_host/source/lwip $(DSIWIFI)/arm_host/source/lwip/ipv4 $(DSIWIFI)/arm_host/source/lwip/ipv6 $(DSIWIFI)/arm_host/source/lwip/netif $(DSIWIFI)/arm_host/source/lwip/netif/ppp $(DSIWIFI)/arm_host/source/lwip/api
|
||||
INCLUDEDIRS += $(DSIWIFI)/arm_host/include $(DSIWIFI)/common/source $(DSIWIFI)/include $(DSIWIFI)/include/lwip
|
||||
BUILDDIR := build/dsi
|
||||
DEFINES := -DPLAT_NDS -DBUILD_DSI
|
||||
LIBS := -lnds9 -lc
|
||||
LIBDIRS := $(BLOCKSDS)/libs/libnds
|
||||
else
|
||||
BUILDDIR := build/nds
|
||||
DEFINES := -DPLAT_NDS
|
||||
LIBS := -ldswifi9 -lnds9 -lc
|
||||
LIBDIRS := $(BLOCKSDS)/libs/dswifi $(BLOCKSDS)/libs/libnds
|
||||
endif
|
||||
|
||||
NAME := cc-arm9
|
||||
ELF := $(BUILDDIR)/$(NAME).elf
|
||||
MAP := $(BUILDDIR)/$(NAME).map
|
||||
|
||||
# Tools
|
||||
# -----
|
||||
PREFIX := $(ARM_NONE_EABI_PATH)arm-none-eabi-
|
||||
CC := $(PREFIX)gcc
|
||||
CXX := $(PREFIX)g++
|
||||
LD := $(PREFIX)gcc
|
||||
|
||||
# Source files
|
||||
# ------------
|
||||
S_FILES := $(foreach dir,$(SOURCEDIRS),$(wildcard $(dir)/*.s))
|
||||
C_FILES := $(foreach dir,$(SOURCEDIRS),$(wildcard $(dir)/*.c))
|
||||
|
||||
# Compiler and linker flags
|
||||
# -------------------------
|
||||
|
||||
ARCH := -mthumb -mcpu=arm946e-s+nofp
|
||||
|
||||
SPECS := $(BLOCKSDS)/sys/crts/ds_arm9.specs
|
||||
|
||||
WARNFLAGS := -Wall
|
||||
|
||||
INCLUDEFLAGS := $(foreach path,$(INCLUDEDIRS),-I$(path)) \
|
||||
$(foreach path,$(LIBDIRS),-I$(path)/include)
|
||||
|
||||
LIBDIRSFLAGS := $(foreach path,$(LIBDIRS),-L$(path)/lib)
|
||||
|
||||
ASFLAGS += -x assembler-with-cpp $(DEFINES) $(INCLUDEFLAGS) \
|
||||
$(ARCH) -ffunction-sections -fdata-sections \
|
||||
-specs=$(SPECS)
|
||||
|
||||
CFLAGS += -std=gnu17 $(WARNFLAGS) $(DEFINES) $(INCLUDEFLAGS) \
|
||||
$(ARCH) -O2 -ffunction-sections -fdata-sections \
|
||||
-specs=$(SPECS) -Wstack-usage=10000
|
||||
|
||||
LDFLAGS := $(ARCH) $(LIBDIRSFLAGS) -Wl,-Map,$(MAP) $(DEFINES) \
|
||||
-Wl,--start-group $(LIBS) -Wl,--end-group -specs=$(SPECS)
|
||||
|
||||
# Intermediate build files
|
||||
# ------------------------
|
||||
OBJS := $(addprefix $(BUILDDIR)/, $(notdir $(C_FILES:%.c=%.o) $(S_FILES:%.s=%.o)))
|
||||
DEPS := $(OBJS:.o=.d)
|
||||
export VPATH := $(SOURCEDIRS)
|
||||
|
||||
# Targets
|
||||
# -------
|
||||
|
||||
.PHONY: all
|
||||
|
||||
all: $(BUILDDIR) $(ELF)
|
||||
|
||||
$(BUILDDIR):
|
||||
mkdir -p $(BUILDDIR)
|
||||
|
||||
$(ELF): $(OBJS)
|
||||
$(LD) -o $@ $(OBJS) $(LDFLAGS)
|
||||
|
||||
clean:
|
||||
rm $(ELF) $(MAP) $(OBJS)
|
||||
rm -rf $(BUILDDIR)
|
||||
|
||||
# Rules
|
||||
# -----
|
||||
|
||||
$(BUILDDIR)/%.o : %.s
|
||||
$(CC) $(ASFLAGS) -MMD -MP -c -o $@ $<
|
||||
|
||||
$(BUILDDIR)/%.o : %.c
|
||||
$(CC) $(CFLAGS) -MMD -MP -c -o $@ $<
|
||||
|
||||
$(BUILDDIR)/%.arm.o : %.arm.c
|
||||
$(CC) $(CFLAGS) -MMD -MP -marm -mlong-calls -c -o $@ $<
|
||||
|
||||
# Include dependency files if they exist
|
||||
# --------------------------------------
|
||||
|
||||
-include $(DEPS)
|
||||
BIN
misc/ds/icon.bmp
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
54
misc/ds/main_arm7.c
Normal file
@@ -0,0 +1,54 @@
|
||||
// SPDX-License-Identifier: Zlib
|
||||
//
|
||||
// Copyright (C) 2005 Michael Noland (joat)
|
||||
// Copyright (C) 2005 Jason Rogers (Dovoto)
|
||||
// Copyright (C) 2005-2015 Dave Murphy (WinterMute)
|
||||
// Copyright (C) 2023 Antonio Niño Díaz
|
||||
|
||||
// Default ARM7 core
|
||||
#include <dswifi7.h>
|
||||
#include <nds.h>
|
||||
|
||||
volatile bool exit_loop = false;
|
||||
|
||||
static void power_button_callback(void) {
|
||||
exit_loop = true;
|
||||
}
|
||||
|
||||
static void vblank_handler(void) {
|
||||
inputGetAndSend();
|
||||
Wifi_Update();
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
enableSound();
|
||||
readUserSettings();
|
||||
ledBlink(0);
|
||||
touchInit();
|
||||
|
||||
irqInit();
|
||||
irqSet(IRQ_VBLANK, vblank_handler);
|
||||
|
||||
fifoInit();
|
||||
installWifiFIFO();
|
||||
installSoundFIFO();
|
||||
installSystemFIFO();
|
||||
|
||||
setPowerButtonCB(power_button_callback);
|
||||
|
||||
initClockIRQTimer(3);
|
||||
irqEnable(IRQ_VBLANK | IRQ_RTC);
|
||||
|
||||
while (!exit_loop)
|
||||
{
|
||||
const uint16_t key_mask = KEY_SELECT | KEY_START | KEY_L | KEY_R;
|
||||
uint16_t keys_pressed = ~REG_KEYINPUT;
|
||||
|
||||
if ((keys_pressed & key_mask) == key_mask)
|
||||
exit_loop = true;
|
||||
|
||||
swiWaitForVBlank();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
7
misc/flatpak/ClassiCubeLauncher
Normal file
@@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
# Fallback Texture Pack and Audio
|
||||
mkdir -p ${XDG_DATA_HOME}/ClassiCube/texpacks ${XDG_DATA_HOME}/ClassiCube/audio
|
||||
test -f ${XDG_DATA_HOME}/ClassiCube/texpacks/classicube.zip || cp /app/share/classicube-texpack.zip ${XDG_DATA_HOME}/ClassiCube/texpacks/classicube.zip
|
||||
test -f ${XDG_DATA_HOME}/ClassiCube/audio/classicube.zip || cp /app/share/classicube-audio.zip ${XDG_DATA_HOME}/ClassiCube/audio/classicube.zip
|
||||
|
||||
cd ${XDG_DATA_HOME}/ClassiCube && exec ClassiCube "$@"
|
||||
136
misc/flatpak/net.classicube.flatpak.client.SDL3.json
Normal file
@@ -0,0 +1,136 @@
|
||||
{
|
||||
"id": "net.classicube.flatpak.client",
|
||||
"runtime": "org.gnome.Platform",
|
||||
"runtime-version": "48",
|
||||
"sdk": "org.gnome.Sdk",
|
||||
"command": "ClassiCubeLauncher",
|
||||
"finish-args": [
|
||||
"--socket=wayland",
|
||||
"--socket=fallback-x11",
|
||||
"--device=dri",
|
||||
"--share=network",
|
||||
"--share=ipc",
|
||||
"--socket=pulseaudio"
|
||||
],
|
||||
"modules": [
|
||||
{
|
||||
"name": "SDL3",
|
||||
"buildsystem": "cmake-ninja",
|
||||
"builddir": true,
|
||||
"sources": [
|
||||
{
|
||||
"type": "git",
|
||||
"url": "https://github.com/libsdl-org/SDL.git",
|
||||
"branch": "main"
|
||||
}
|
||||
],
|
||||
"cleanup": [
|
||||
"/bin/sdl3-config",
|
||||
"/include",
|
||||
"/lib/libSDL3.la",
|
||||
"/lib/libSDL3main.a",
|
||||
"/lib/libSDL3main.la",
|
||||
"/lib/libSDL3_test.a",
|
||||
"/lib/libSDL3_test.la",
|
||||
"/lib/cmake",
|
||||
"/share/aclocal",
|
||||
"/lib/pkgconfig"
|
||||
],
|
||||
"modules": [
|
||||
{
|
||||
"name": "libdecor",
|
||||
"buildsystem": "meson",
|
||||
"config-opts": [
|
||||
"-Ddemo=false"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"type": "git",
|
||||
"url": "https://gitlab.freedesktop.org/libdecor/libdecor.git"
|
||||
}
|
||||
],
|
||||
"cleanup": [
|
||||
"/include",
|
||||
"/lib/pkgconfig"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "zenity-gtk3",
|
||||
"buildsystem": "meson",
|
||||
"build-commands": [
|
||||
"mkdir -p ${FLATPAK_DEST}/share/icons/hicolor"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"type": "archive",
|
||||
"url": "https://gitlab.gnome.org/GNOME/zenity/-/archive/3.44.4/zenity-3.44.4.tar.gz",
|
||||
"sha256": "e7b334867d4e11053e6e52e5d51b7a983dc549f93cb3fda757e40309b16bc57b"
|
||||
}
|
||||
],
|
||||
"post-install": [
|
||||
"mv ${FLATPAK_DEST}/bin/zenity ${FLATPAK_DEST}/bin/zenity-gtk3"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "zenity-gtk4",
|
||||
"buildsystem": "meson",
|
||||
"sources": [
|
||||
{
|
||||
"type": "archive",
|
||||
"url": "https://gitlab.gnome.org/GNOME/zenity/-/archive/4.0.2/zenity-4.0.2.tar.gz",
|
||||
"sha256": "fdbb74e882a6a56bb2f1a2381b81e08b06c627cc7e944edb71d107092c70dd80",
|
||||
"x-checker-data": {
|
||||
"type": "gnome",
|
||||
"name": "zenity"
|
||||
}
|
||||
}
|
||||
],
|
||||
"post-install": [
|
||||
"mv ${FLATPAK_DEST}/bin/zenity ${FLATPAK_DEST}/bin/zenity-gtk4"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ClassiCubeAssets",
|
||||
"buildsystem": "simple",
|
||||
"build-commands": [
|
||||
"install -Dm644 classicube-texpack.zip ${FLATPAK_DEST}/share/classicube-texpack.zip",
|
||||
"install -Dm644 classicube-audio.zip ${FLATPAK_DEST}/share/classicube-audio.zip"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"type": "file",
|
||||
"dest-filename": "classicube-texpack.zip",
|
||||
"url": "https://classicube.net/static/default.zip",
|
||||
"sha256": "55eac12a9727d209b42694d07dfdca8d50349779ab77ffc11a31d2cb66b45635"
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"dest-filename": "classicube-audio.zip",
|
||||
"url": "https://classicube.net/static/audio.zip",
|
||||
"sha256": "13562a712d1cb1de3f36dd93a03245a377f201e7934d19c17de09202b410e04b"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ClassiCube",
|
||||
"buildsystem": "simple",
|
||||
"build-commands": [
|
||||
"gcc -fno-math-errno src/*.c -o src/ClassiCube -rdynamic -lpthread -lGL -DCC_WIN_BACKEND=CC_WIN_BACKEND_SDL3 -DCC_GFX_BACKEND=CC_GFX_BACKEND_GL2 -DCC_BUILD_FLATPAK -L /app/lib -lSDL3",
|
||||
"install -Dm755 src/ClassiCube -t ${FLATPAK_DEST}/bin",
|
||||
"install -Dm755 misc/flatpak/ClassiCubeLauncher -t ${FLATPAK_DEST}/bin",
|
||||
"install -Dm755 misc/flatpak/zenity-wrapper ${FLATPAK_DEST}/bin/zenity",
|
||||
"install -Dm644 misc/flatpak/net.classicube.flatpak.client.svg ${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/net.classicube.flatpak.client.svg",
|
||||
"install -Dm644 misc/flatpak/net.classicube.flatpak.client.desktop ${FLATPAK_DEST}/share/applications/net.classicube.flatpak.client.desktop",
|
||||
"install -Dm644 misc/flatpak/net.classicube.flatpak.client.metainfo.xml ${FLATPAK_DEST}/share/metainfo/net.classicube.flatpak.client.metainfo.xml"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"type": "git",
|
||||
"url": "https://github.com/ClassiCube/ClassiCube.git"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
56
misc/flatpak/net.classicube.flatpak.client.X11.json
Normal file
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"id": "net.classicube.flatpak.client",
|
||||
"runtime": "org.freedesktop.Platform",
|
||||
"runtime-version": "24.08",
|
||||
"sdk": "org.freedesktop.Sdk",
|
||||
"command": "ClassiCubeLauncher",
|
||||
"finish-args": [
|
||||
"--socket=x11",
|
||||
"--device=dri",
|
||||
"--share=network",
|
||||
"--share=ipc",
|
||||
"--socket=pulseaudio"
|
||||
],
|
||||
"modules": [
|
||||
{
|
||||
"name": "ClassiCubeAssets",
|
||||
"buildsystem": "simple",
|
||||
"build-commands": [
|
||||
"install -Dm644 classicube-texpack.zip ${FLATPAK_DEST}/share/classicube-texpack.zip",
|
||||
"install -Dm644 classicube-audio.zip ${FLATPAK_DEST}/share/classicube-audio.zip"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"type": "file",
|
||||
"dest-filename": "classicube-texpack.zip",
|
||||
"url": "https://classicube.net/static/default.zip",
|
||||
"sha256": "55eac12a9727d209b42694d07dfdca8d50349779ab77ffc11a31d2cb66b45635"
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"dest-filename": "classicube-audio.zip",
|
||||
"url": "https://classicube.net/static/audio.zip",
|
||||
"sha256": "13562a712d1cb1de3f36dd93a03245a377f201e7934d19c17de09202b410e04b"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ClassiCube",
|
||||
"buildsystem": "simple",
|
||||
"build-commands": [
|
||||
"gcc -fno-math-errno src/*.c -o src/ClassiCube -O1 -DCC_BUILD_FLATPAK -DCC_GFX_BACKEND=CC_GFX_BACKEND_GL2 -rdynamic -lm -lpthread -lX11 -lXi -lGL -ldl",
|
||||
"install -Dm755 src/ClassiCube -t ${FLATPAK_DEST}/bin",
|
||||
"install -Dm755 misc/flatpak/ClassiCubeLauncher -t ${FLATPAK_DEST}/bin",
|
||||
"install -Dm644 misc/flatpak/net.classicube.flatpak.client.svg ${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/net.classicube.flatpak.client.svg",
|
||||
"install -Dm644 misc/flatpak/net.classicube.flatpak.client.desktop ${FLATPAK_DEST}/share/applications/net.classicube.flatpak.client.desktop",
|
||||
"install -Dm644 misc/flatpak/net.classicube.flatpak.client.metainfo.xml ${FLATPAK_DEST}/share/metainfo/net.classicube.flatpak.client.metainfo.xml"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"type": "git",
|
||||
"url": "https://github.com/ClassiCube/ClassiCube.git"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
10
misc/flatpak/net.classicube.flatpak.client.desktop
Normal file
@@ -0,0 +1,10 @@
|
||||
[Desktop Entry]
|
||||
Name=ClassiCube
|
||||
Exec=ClassiCubeLauncher
|
||||
Comment=Sandbox building-block game
|
||||
Type=Application
|
||||
Icon=net.classicube.flatpak.client
|
||||
Categories=Game;ActionGame;
|
||||
Terminal=false
|
||||
MimeType=x-scheme-handler/mc;
|
||||
StartupWMClass=net.classicube.flatpak.client
|
||||
133
misc/flatpak/net.classicube.flatpak.client.metainfo.xml
Normal file
@@ -0,0 +1,133 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<component type="desktop-application">
|
||||
<id>net.classicube.flatpak.client</id>
|
||||
<name>ClassiCube</name>
|
||||
<summary>Sandbox building-block game</summary>
|
||||
<developer id="net.classicube">
|
||||
<name>The ClassiCube Project</name>
|
||||
</developer>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<project_license>BSD-3-Clause</project_license>
|
||||
<description>
|
||||
<p>ClassiCube brings you back to the days of 2009 where one block game ruled them all, it includes such features as:</p>
|
||||
<ul>
|
||||
<li>Loads of blocks and items to choose from</li>
|
||||
<li>Chatting with other players</li>
|
||||
<li>An extremely simple network protocol to tinker with</li>
|
||||
<li>Hundreds of creative and inventive worlds to explore online</li>
|
||||
<li>A growing community</li>
|
||||
<li>Hundreds of hours of entertainment</li>
|
||||
</ul>
|
||||
</description>
|
||||
<screenshots>
|
||||
<screenshot type="default">
|
||||
<caption>Classic mode features faithful classic gameplay</caption>
|
||||
<image type="source">https://github.com/ClassiCube/ClassiCube/assets/6509348/eedee53f-f53e-456f-b51c-92c62079eee0</image>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<caption>Enhanced mode allows hacks like flying and noclipping, it also allows servers to provide many custom features</caption>
|
||||
<image type="source">https://github.com/ClassiCube/ClassiCube/assets/6509348/b2fe0e2b-5d76-41ab-909f-048d0ad15f37</image>
|
||||
</screenshot>
|
||||
</screenshots>
|
||||
<releases>
|
||||
<release version="1.3.6" date="2023-08-28" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.3.6</url>
|
||||
</release>
|
||||
<release version="1.3.5" date="2023-01-06" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.3.5</url>
|
||||
</release>
|
||||
<release version="1.3.4" date="2022-11-01" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.3.4</url>
|
||||
</release>
|
||||
<release version="1.3.3" date="2022-10-08" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.3.3</url>
|
||||
</release>
|
||||
<release version="1.3.2" date="2022-05-26" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.3.2</url>
|
||||
</release>
|
||||
<release version="1.3.1" date="2022-01-11" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.3.1</url>
|
||||
</release>
|
||||
<release version="1.3.0" date="2022-01-04" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.3.0</url>
|
||||
</release>
|
||||
<release version="1.2.9" date="2021-10-18" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.2.9</url>
|
||||
</release>
|
||||
<release version="1.2.8" date="2021-09-18" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.2.8</url>
|
||||
</release>
|
||||
<release version="1.2.7" date="2021-07-22" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.2.7</url>
|
||||
</release>
|
||||
<release version="1.2.6" date="2021-07-02" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.2.6</url>
|
||||
</release>
|
||||
<release version="1.2.5" date="2021-04-02" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.2.5</url>
|
||||
</release>
|
||||
<release version="1.2.4" date="2021-01-23" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.2.4</url>
|
||||
</release>
|
||||
<release version="1.2.3" date="2020-12-12" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.2.3</url>
|
||||
</release>
|
||||
<release version="1.2.2" date="2020-12-11" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.2.2</url>
|
||||
</release>
|
||||
<release version="1.2.1" date="2020-11-28" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.2.1</url>
|
||||
</release>
|
||||
<release version="1.2.0" date="2020-10-01" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.2.0</url>
|
||||
</release>
|
||||
<release version="1.1.9" date="2020-08-16" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.1.9</url>
|
||||
</release>
|
||||
<release version="1.1.8" date="2020-08-05" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.1.8</url>
|
||||
</release>
|
||||
<release version="1.1.7" date="2020-06-13" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.1.7</url>
|
||||
</release>
|
||||
<release version="1.1.6" date="2020-05-07" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.1.6</url>
|
||||
</release>
|
||||
<release version="1.1.5" date="2020-05-01" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.1.5</url>
|
||||
</release>
|
||||
<release version="1.1.4" date="2020-04-21" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.1.4</url>
|
||||
</release>
|
||||
<release version="1.1.3" date="2020-03-08" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.1.3</url>
|
||||
</release>
|
||||
<release version="1.1.2" date="2020-01-26" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.1.2</url>
|
||||
</release>
|
||||
<release version="1.1.1" date="2019-12-16" type="stable">
|
||||
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.1.1</url>
|
||||
</release>
|
||||
</releases>
|
||||
<url type="homepage">https://www.classicube.net/</url>
|
||||
<url type="bugtracker">https://github.com/ClassiCube/ClassiCube/issues</url>
|
||||
<url type="donation">https://www.patreon.com/ClassiCube</url>
|
||||
<url type="vcs-browser">https://github.com/ClassiCube/ClassiCube</url>
|
||||
<categories>
|
||||
<category>Game</category>
|
||||
<category>AdventureGame</category>
|
||||
<category>ActionGame</category>
|
||||
</categories>
|
||||
<recommends>
|
||||
<control>pointing</control>
|
||||
<control>keyboard</control>
|
||||
</recommends>
|
||||
<content_rating type="oars-1.1">
|
||||
<content_attribute id="violence-cartoon">moderate</content_attribute>
|
||||
<content_attribute id="social-chat">intense</content_attribute>
|
||||
</content_rating>
|
||||
<launchable type="desktop-id">net.classicube.flatpak.client.desktop</launchable>
|
||||
<provides>
|
||||
<binary>ClassiCube</binary>
|
||||
</provides>
|
||||
</component>
|
||||
44
misc/flatpak/net.classicube.flatpak.client.svg
Normal file
@@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="128"
|
||||
height="127.99999"
|
||||
viewBox="0 0 33.866667 33.866664"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
transform="translate(5.8338447,-13.20144)">
|
||||
<g
|
||||
id="g4741"
|
||||
transform="matrix(0.12177585,0,0,0.12056875,-1.6325083,12.971524)">
|
||||
<path
|
||||
id="path4737"
|
||||
d="M -5.8338447,207.40561 V 78.28894 L 106.61407,13.20144 218.79741,78.28894 V 207.40561 L 106.61407,272.4931 Z"
|
||||
style="fill:#f6f6f6;stroke:#000000;stroke-width:8.0626;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
id="path179"
|
||||
d="m 104.07502,141.52929 110.68965,-60.9215 1.62598,125.47985 -109.78346,61.73499 z m 20.61272,94.64566 c 8.561,-1.36503 22.58979,-6.90566 34.77207,-13.73314 8.44846,-4.73489 17.45957,-10.82064 25.81752,-17.43613 8.72093,-6.90281 17.22731,-15.21726 18.55921,-18.14047 0.26981,-0.59217 0.24879,-0.77358 -0.13391,-1.15568 -0.36305,-0.36248 -0.91552,-0.44887 -2.7589,-0.43139 -3.71393,0.0352 -9.27509,1.35366 -16.28846,3.86168 -2.01562,0.7208 -3.69686,1.27297 -3.73608,1.22704 -0.16881,-0.19764 3.44601,-29.37179 6.84564,-55.24912 1.21398,-9.24057 2.15592,-16.89033 2.09321,-16.99948 -0.19747,-0.34365 -6.05941,-0.21541 -8.74964,0.19141 -11.67357,1.7653 -26.1385,9.31897 -38.83406,20.27938 -3.00232,2.59198 -8.66363,8.37481 -10.38554,10.60847 l -1.13332,1.47013 1.06078,5.78494 c 1.66864,9.09991 3.21014,18.62874 5.55847,34.35994 1.6265,10.89577 2.70193,17.7159 2.81167,17.83099 0.23021,0.24143 9.15704,-3.22834 13.96159,-5.42672 4.01374,-1.83655 7.38001,-3.77497 13.6069,-7.83534 5.39432,-3.51748 6.57616,-4.09382 7.18285,-3.50281 1.32604,1.29178 -3.92898,6.46583 -11.75312,11.57204 -5.59387,3.65069 -11.90727,6.67998 -18.54423,8.8979 -3.61228,1.20714 -3.99351,1.40207 -6.48521,3.316 -7.13359,5.47947 -15.77323,13.5129 -18.33378,17.04736 -1.39429,1.92461 -1.60126,3.07547 -0.62376,3.46838 0.81553,0.3278 3.41645,0.32525 5.4901,-0.005 z"
|
||||
style="fill:#cbcbcb;fill-opacity:1;stroke-width:0.264583" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
7
misc/flatpak/zenity-wrapper
Normal file
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
# Allow forcing GTK3/4 through $CC_DIALOG_FORCE_ZENITY_GTK{3,4}
|
||||
if [[ -z "${CC_DIALOG_FORCE_ZENITY_GTK3}" && "${XDG_CURRENT_DESKTOP}" == "GNOME" || ! -z "${CC_DIALOG_FORCE_ZENITY_GTK4}" ]]; then
|
||||
zenity-gtk4 "$@"
|
||||
else
|
||||
zenity-gtk3 "$@"
|
||||
fi
|
||||
88
misc/gba/Makefile
Normal file
@@ -0,0 +1,88 @@
|
||||
ifeq ($(strip $(DEVKITPRO)),)
|
||||
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitPro)
|
||||
endif
|
||||
|
||||
include $(DEVKITPRO)/devkitARM/gba_rules
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Configurable options
|
||||
#---------------------------------------------------------------------------------
|
||||
# Name of the final output
|
||||
TARGET = ClassiCube-gba
|
||||
# List of directories containing source code
|
||||
SOURCE_DIRS = src src/gba
|
||||
# Directory where object files are placed
|
||||
BUILD_DIR = build/gba
|
||||
|
||||
GAME_TITLE = ClassiCube
|
||||
GAME_CODE = 0000
|
||||
MAKER_CODE = 00
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Code generation
|
||||
#---------------------------------------------------------------------------------
|
||||
S_FILES = $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.S))
|
||||
C_FILES = $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.c))
|
||||
OBJS = $(addprefix $(BUILD_DIR)/, $(notdir $(C_FILES:%.c=%.o) $(S_FILES:%.S=%.o)))
|
||||
|
||||
ARCH = -mthumb -mthumb-interwork
|
||||
CFLAGS = -g -Wall -O2 -DPLAT_GBA -ffunction-sections -fdata-sections -mcpu=arm7tdmi -mtune=arm7tdmi $(ARCH)
|
||||
ASFLAGS = -g $(ARCH)
|
||||
|
||||
LDFLAGS = -specs=gba.specs -g $(ARCH)
|
||||
LIBS = -ltonc
|
||||
|
||||
LIBGBA := $(DEVKITPRO)/libgba
|
||||
INCLUDES += $(foreach dir, $(LIBGBA), -I$(dir)/include)
|
||||
LDFLAGS += $(foreach dir, $(LIBGBA), -L$(dir)/lib)
|
||||
|
||||
LIBTONC = $(DEVKITPRO)/libtonc
|
||||
INCLUDES += $(foreach dir, $(LIBTONC), -I$(dir)/include)
|
||||
LDFLAGS += $(foreach dir, $(LIBTONC), -L$(dir)/lib)
|
||||
|
||||
# Dependency tracking
|
||||
DEPFLAGS = -MT $@ -MMD -MP -MF $(BUILD_DIR)/$*.d
|
||||
DEPFILES := $(OBJS:%.o=%.d)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Main targets
|
||||
#---------------------------------------------------------------------------------
|
||||
default: $(BUILD_DIR) $(TARGET).gba
|
||||
|
||||
clean:
|
||||
rm $(TARGET).gba $(TARGET).elf $(OBJS)
|
||||
|
||||
$(BUILD_DIR):
|
||||
mkdir -p $(BUILD_DIR)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Executable generation
|
||||
#---------------------------------------------------------------------------------
|
||||
$(TARGET).elf: $(OBJS)
|
||||
$(CC) $(LDFLAGS) $^ -o $@ $(LIBS)
|
||||
|
||||
$(TARGET).gba: $(TARGET).elf
|
||||
$(OBJCOPY) -O binary $< $@
|
||||
gbafix $@ -t$(GAME_TITLE) -c$(GAME_CODE) -m$(MAKER_CODE)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Object generation
|
||||
#---------------------------------------------------------------------------------
|
||||
$(BUILD_DIR)/%.o: src/%.c
|
||||
$(CC) $(CFLAGS) $(INCLUDES) $(DEPFLAGS) -c $< -o $@
|
||||
|
||||
$(BUILD_DIR)/%.o: src/gba/%.c
|
||||
$(CC) $(CFLAGS) $(INCLUDES) $(DEPFLAGS) -c $< -o $@
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Dependency tracking
|
||||
#---------------------------------------------------------------------------------
|
||||
$(DEPFILES):
|
||||
|
||||
include $(wildcard $(DEPFILES))
|
||||
89
misc/gc/Makefile
Normal file
@@ -0,0 +1,89 @@
|
||||
ifeq ($(strip $(DEVKITPRO)),)
|
||||
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitPro)
|
||||
endif
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Configurable options
|
||||
#---------------------------------------------------------------------------------
|
||||
# Name of the final output
|
||||
TARGET = ClassiCube-gc
|
||||
# List of directories containing source code
|
||||
SOURCE_DIRS = src src/gcwii third_party/bearssl/src
|
||||
# List of directories containing more header files
|
||||
INCLUDES = -Ithird_party/bearssl/inc
|
||||
# Directory where object files are placed
|
||||
BUILD_DIR = build/gc
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Code generation
|
||||
#---------------------------------------------------------------------------------
|
||||
S_FILES = $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.S))
|
||||
C_FILES = $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.c))
|
||||
OBJS = $(addprefix $(BUILD_DIR)/, $(notdir $(C_FILES:%.c=%.o) $(S_FILES:%.S=%.o)))
|
||||
|
||||
MACHDEP = -DGEKKO -mogc -mcpu=750 -meabi -mhard-float
|
||||
CFLAGS = -g -O2 -Wall $(MACHDEP) -I$(DEVKITPRO)/libogc/include
|
||||
|
||||
LDFLAGS = -g $(MACHDEP) -L$(DEVKITPRO)/libogc/lib/cube
|
||||
# Additional libraries to link against
|
||||
LIBS = -lasnd -lbba -lfat -logc -lm
|
||||
|
||||
# Dependency tracking
|
||||
DEPFLAGS = -MT $@ -MMD -MP -MF $(BUILD_DIR)/$*.d
|
||||
DEPFILES := $(OBJS:%.o=%.d)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Compiler tools
|
||||
#---------------------------------------------------------------------------------
|
||||
PREFIX := $(DEVKITPRO)/devkitPPC/bin/powerpc-eabi-
|
||||
PPC_AS := $(PREFIX)as
|
||||
PPC_CC := $(PREFIX)gcc
|
||||
PPC_CXX := $(PREFIX)g++
|
||||
|
||||
ELF2DOL := $(DEVKITPRO)/tools/bin/elf2dol
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Main targets
|
||||
#---------------------------------------------------------------------------------
|
||||
default: $(BUILD_DIR) $(TARGET).dol
|
||||
|
||||
clean:
|
||||
rm $(TARGET).dol $(TARGET).elf $(OBJS)
|
||||
|
||||
$(BUILD_DIR):
|
||||
mkdir -p $(BUILD_DIR)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Executable generation
|
||||
#---------------------------------------------------------------------------------
|
||||
$(TARGET).elf: $(OBJS)
|
||||
$(PPC_CC) $(LDFLAGS) $^ -o $@ $(LIBS)
|
||||
|
||||
$(TARGET).dol: $(TARGET).elf
|
||||
$(ELF2DOL) $< $@
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Object generation
|
||||
#---------------------------------------------------------------------------------
|
||||
$(BUILD_DIR)/%.o: src/%.c
|
||||
$(PPC_CC) $(CFLAGS) $(INCLUDES) $(DEPFLAGS) -c $< -o $@
|
||||
|
||||
$(BUILD_DIR)/%.o: src/gcwii/%.c
|
||||
$(PPC_CC) $(CFLAGS) $(INCLUDES) $(DEPFLAGS) -c $< -o $@
|
||||
|
||||
$(BUILD_DIR)/%.o: third_party/bearssl/src/%.c
|
||||
$(PPC_CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Dependency tracking
|
||||
#---------------------------------------------------------------------------------
|
||||
$(DEPFILES):
|
||||
|
||||
include $(wildcard $(DEPFILES))
|
||||
648
misc/ios/CCIOS.xcodeproj/project.pbxproj
Normal file
@@ -0,0 +1,648 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 50;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
9A4D0C642BDD168800E1695D /* TouchUI.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A4D0C632BDD168800E1695D /* TouchUI.c */; };
|
||||
9A57ECEE2BCD1408006A89F0 /* Audio_OpenAL.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A57ECED2BCD1408006A89F0 /* Audio_OpenAL.c */; };
|
||||
9A62ADF5286D906F00E5E3DE /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9A62ADF4286D906F00E5E3DE /* Assets.xcassets */; };
|
||||
9A6C79652BFDDEF200676D27 /* FancyLighting.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C79642BFDDEF100676D27 /* FancyLighting.c */; };
|
||||
9A6C79672BFDDF0700676D27 /* Queue.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C79662BFDDF0600676D27 /* Queue.c */; };
|
||||
9A6C7DFA2C2F610C00676D27 /* LBackend_ios.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7DF92C2F610C00676D27 /* LBackend_ios.m */; };
|
||||
9A6C7DFC2C41E93700676D27 /* InputHandler.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7DFB2C41E93700676D27 /* InputHandler.c */; };
|
||||
9A6C7DFE2C41E95D00676D27 /* MenuOptions.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7DFD2C41E95C00676D27 /* MenuOptions.c */; };
|
||||
9A6C7E002C41EED700676D27 /* Window_ios.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7DFF2C41EED700676D27 /* Window_ios.m */; };
|
||||
9A7401D92B737D5C0040E575 /* Commands.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A7401D82B737D5B0040E575 /* Commands.c */; };
|
||||
9A7401DB2B7384060040E575 /* SSL.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A7401DA2B7384060040E575 /* SSL.c */; };
|
||||
9A89D4F227F802F600FF3F80 /* LWidgets.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D37827F802F500FF3F80 /* LWidgets.c */; };
|
||||
9A89D4F327F802F600FF3F80 /* Graphics_GL2.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D37A27F802F500FF3F80 /* Graphics_GL2.c */; };
|
||||
9A89D4F427F802F600FF3F80 /* Vorbis.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D37C27F802F500FF3F80 /* Vorbis.c */; };
|
||||
9A89D4F527F802F600FF3F80 /* _ftsynth.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D37D27F802F500FF3F80 /* _ftsynth.c */; };
|
||||
9A89D4F727F802F600FF3F80 /* Game.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D38027F802F500FF3F80 /* Game.c */; };
|
||||
9A89D4F927F802F600FF3F80 /* Http_Worker.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D38227F802F500FF3F80 /* Http_Worker.c */; };
|
||||
9A89D4FB27F802F600FF3F80 /* TexturePack.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D38427F802F500FF3F80 /* TexturePack.c */; };
|
||||
9A89D4FD27F802F600FF3F80 /* ExtMath.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D38627F802F500FF3F80 /* ExtMath.c */; };
|
||||
9A89D4FE27F802F600FF3F80 /* Inventory.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D38B27F802F500FF3F80 /* Inventory.c */; };
|
||||
9A89D4FF27F802F600FF3F80 /* Gui.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D38C27F802F500FF3F80 /* Gui.c */; };
|
||||
9A89D50027F802F600FF3F80 /* _truetype.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D38E27F802F500FF3F80 /* _truetype.c */; };
|
||||
9A89D50127F802F600FF3F80 /* LBackend.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D38F27F802F500FF3F80 /* LBackend.c */; };
|
||||
9A89D50227F802F600FF3F80 /* Block.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D39127F802F500FF3F80 /* Block.c */; };
|
||||
9A89D50327F802F600FF3F80 /* Platform_Posix.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D39227F802F500FF3F80 /* Platform_Posix.c */; };
|
||||
9A89D50427F802F600FF3F80 /* Model.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D39627F802F500FF3F80 /* Model.c */; };
|
||||
9A89D50527F802F600FF3F80 /* LScreens.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D39827F802F500FF3F80 /* LScreens.c */; };
|
||||
9A89D50627F802F600FF3F80 /* Builder.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D39927F802F500FF3F80 /* Builder.c */; };
|
||||
9A89D50727F802F600FF3F80 /* Particle.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D39B27F802F500FF3F80 /* Particle.c */; };
|
||||
9A89D50827F802F600FF3F80 /* PackedCol.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D39C27F802F500FF3F80 /* PackedCol.c */; };
|
||||
9A89D54F27F802F600FF3F80 /* Deflate.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D47227F802F500FF3F80 /* Deflate.c */; };
|
||||
9A89D55027F802F600FF3F80 /* Entity.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D47427F802F500FF3F80 /* Entity.c */; };
|
||||
9A89D55127F802F600FF3F80 /* IsometricDrawer.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D47527F802F500FF3F80 /* IsometricDrawer.c */; };
|
||||
9A89D55227F802F600FF3F80 /* Logger.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D47627F802F500FF3F80 /* Logger.c */; };
|
||||
9A89D55327F802F600FF3F80 /* _psaux.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D47727F802F500FF3F80 /* _psaux.c */; };
|
||||
9A89D55427F802F600FF3F80 /* Bitmap.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D47827F802F500FF3F80 /* Bitmap.c */; };
|
||||
9A89D55527F802F600FF3F80 /* HeldBlockRenderer.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D47927F802F500FF3F80 /* HeldBlockRenderer.c */; };
|
||||
9A89D55627F802F600FF3F80 /* EnvRenderer.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D47A27F802F500FF3F80 /* EnvRenderer.c */; };
|
||||
9A89D55827F802F600FF3F80 /* Graphics_GL1.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D47E27F802F500FF3F80 /* Graphics_GL1.c */; };
|
||||
9A89D55927F802F600FF3F80 /* interop_ios.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D47F27F802F600FF3F80 /* interop_ios.m */; };
|
||||
9A89D55B27F802F600FF3F80 /* _type1.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D48227F802F600FF3F80 /* _type1.c */; };
|
||||
9A89D55C27F802F600FF3F80 /* Animations.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D48527F802F600FF3F80 /* Animations.c */; };
|
||||
9A89D55D27F802F600FF3F80 /* _psmodule.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D48627F802F600FF3F80 /* _psmodule.c */; };
|
||||
9A89D55E27F802F600FF3F80 /* World.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D48727F802F600FF3F80 /* World.c */; };
|
||||
9A89D55F27F802F600FF3F80 /* _sfnt.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D48827F802F600FF3F80 /* _sfnt.c */; };
|
||||
9A89D56027F802F600FF3F80 /* _ftbitmap.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D48A27F802F600FF3F80 /* _ftbitmap.c */; };
|
||||
9A89D56127F802F600FF3F80 /* Menus.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D48B27F802F600FF3F80 /* Menus.c */; };
|
||||
9A89D56227F802F600FF3F80 /* _ftbase.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D48C27F802F600FF3F80 /* _ftbase.c */; };
|
||||
9A89D56327F802F600FF3F80 /* _autofit.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D48D27F802F600FF3F80 /* _autofit.c */; };
|
||||
9A89D56427F802F600FF3F80 /* String.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D49227F802F600FF3F80 /* String.c */; };
|
||||
9A89D56527F802F600FF3F80 /* Generator.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D49427F802F600FF3F80 /* Generator.c */; };
|
||||
9A89D56627F802F600FF3F80 /* Drawer2D.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D49527F802F600FF3F80 /* Drawer2D.c */; };
|
||||
9A89D56727F802F600FF3F80 /* Drawer.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D49827F802F600FF3F80 /* Drawer.c */; };
|
||||
9A89D56827F802F600FF3F80 /* Lighting.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D49927F802F600FF3F80 /* Lighting.c */; };
|
||||
9A89D56A27F802F600FF3F80 /* Physics.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D49B27F802F600FF3F80 /* Physics.c */; };
|
||||
9A89D56B27F802F600FF3F80 /* Server.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D49E27F802F600FF3F80 /* Server.c */; };
|
||||
9A89D56C27F802F600FF3F80 /* _ftinit.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4A027F802F600FF3F80 /* _ftinit.c */; };
|
||||
9A89D56F27F802F600FF3F80 /* Input.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4A627F802F600FF3F80 /* Input.c */; };
|
||||
9A89D57227F802F600FF3F80 /* Picking.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4AA27F802F600FF3F80 /* Picking.c */; };
|
||||
9A89D57327F802F600FF3F80 /* Utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4AB27F802F600FF3F80 /* Utils.c */; };
|
||||
9A89D57427F802F600FF3F80 /* MapRenderer.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4AE27F802F600FF3F80 /* MapRenderer.c */; };
|
||||
9A89D57527F802F600FF3F80 /* AxisLinesRenderer.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4AF27F802F600FF3F80 /* AxisLinesRenderer.c */; };
|
||||
9A89D57627F802F600FF3F80 /* _pshinter.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4B127F802F600FF3F80 /* _pshinter.c */; };
|
||||
9A89D57827F802F600FF3F80 /* Protocol.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4B327F802F600FF3F80 /* Protocol.c */; };
|
||||
9A89D57927F802F600FF3F80 /* Event.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4B527F802F600FF3F80 /* Event.c */; };
|
||||
9A89D57B27F802F600FF3F80 /* _ftglyph.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4BB27F802F600FF3F80 /* _ftglyph.c */; };
|
||||
9A89D57C27F802F600FF3F80 /* Chat.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4BC27F802F600FF3F80 /* Chat.c */; };
|
||||
9A89D57D27F802F600FF3F80 /* _smooth.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4BD27F802F600FF3F80 /* _smooth.c */; };
|
||||
9A89D57E27F802F600FF3F80 /* Resources.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4BE27F802F600FF3F80 /* Resources.c */; };
|
||||
9A89D57F27F802F600FF3F80 /* LWeb.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4C427F802F600FF3F80 /* LWeb.c */; };
|
||||
9A89D58027F802F600FF3F80 /* Formats.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4C627F802F600FF3F80 /* Formats.c */; };
|
||||
9A89D58127F802F600FF3F80 /* SelOutlineRenderer.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4C927F802F600FF3F80 /* SelOutlineRenderer.c */; };
|
||||
9A89D58327F802F600FF3F80 /* EntityComponents.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4CC27F802F600FF3F80 /* EntityComponents.c */; };
|
||||
9A89D58427F802F600FF3F80 /* Camera.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4CF27F802F600FF3F80 /* Camera.c */; };
|
||||
9A89D58627F802F600FF3F80 /* Screens.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4D127F802F600FF3F80 /* Screens.c */; };
|
||||
9A89D58727F802F600FF3F80 /* SelectionBox.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4D227F802F600FF3F80 /* SelectionBox.c */; };
|
||||
9A89D58927F802F600FF3F80 /* _cff.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4DA27F802F600FF3F80 /* _cff.c */; };
|
||||
9A89D58A27F802F600FF3F80 /* BlockPhysics.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4DB27F802F600FF3F80 /* BlockPhysics.c */; };
|
||||
9A89D58B27F802F600FF3F80 /* Launcher.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4DD27F802F600FF3F80 /* Launcher.c */; };
|
||||
9A89D58D27F802F600FF3F80 /* Options.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4E327F802F600FF3F80 /* Options.c */; };
|
||||
9A89D58E27F802F600FF3F80 /* Window_SDL2.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4E427F802F600FF3F80 /* Window_SDL2.c */; };
|
||||
9A89D58F27F802F600FF3F80 /* Audio.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4E727F802F600FF3F80 /* Audio.c */; };
|
||||
9A89D59027F802F600FF3F80 /* Stream.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4E827F802F600FF3F80 /* Stream.c */; };
|
||||
9A89D59127F802F600FF3F80 /* Vectors.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4E927F802F600FF3F80 /* Vectors.c */; };
|
||||
9A89D59427F802F600FF3F80 /* Widgets.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A89D4EE27F802F600FF3F80 /* Widgets.c */; };
|
||||
9AC5433E2AE2649F0086C85F /* SystemFonts.c in Sources */ = {isa = PBXBuildFile; fileRef = 9AC5433D2AE2649E0086C85F /* SystemFonts.c */; };
|
||||
9AC543402AE264AC0086C85F /* GameVersion.c in Sources */ = {isa = PBXBuildFile; fileRef = 9AC5433F2AE264AC0086C85F /* GameVersion.c */; };
|
||||
9AC543422AE264B90086C85F /* EntityRenderers.c in Sources */ = {isa = PBXBuildFile; fileRef = 9AC543412AE264B90086C85F /* EntityRenderers.c */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
9A4D0C632BDD168800E1695D /* TouchUI.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = TouchUI.c; sourceTree = "<group>"; };
|
||||
9A57ECED2BCD1408006A89F0 /* Audio_OpenAL.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Audio_OpenAL.c; sourceTree = "<group>"; };
|
||||
9A62ADF4286D906F00E5E3DE /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = ClassiCube/Assets.xcassets; sourceTree = "<group>"; };
|
||||
9A6C79642BFDDEF100676D27 /* FancyLighting.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = FancyLighting.c; sourceTree = "<group>"; };
|
||||
9A6C79662BFDDF0600676D27 /* Queue.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Queue.c; sourceTree = "<group>"; };
|
||||
9A6C7DF92C2F610C00676D27 /* LBackend_ios.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LBackend_ios.m; sourceTree = "<group>"; };
|
||||
9A6C7DFB2C41E93700676D27 /* InputHandler.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = InputHandler.c; sourceTree = "<group>"; };
|
||||
9A6C7DFD2C41E95C00676D27 /* MenuOptions.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = MenuOptions.c; sourceTree = "<group>"; };
|
||||
9A6C7DFF2C41EED700676D27 /* Window_ios.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Window_ios.m; sourceTree = "<group>"; };
|
||||
9A7401D82B737D5B0040E575 /* Commands.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Commands.c; sourceTree = "<group>"; };
|
||||
9A7401DA2B7384060040E575 /* SSL.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SSL.c; sourceTree = "<group>"; };
|
||||
9A89D35727F802B100FF3F80 /* ClassiCube.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ClassiCube.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
9A89D36827F802B400FF3F80 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
9A89D37827F802F500FF3F80 /* LWidgets.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = LWidgets.c; sourceTree = "<group>"; };
|
||||
9A89D37A27F802F500FF3F80 /* Graphics_GL2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Graphics_GL2.c; sourceTree = "<group>"; };
|
||||
9A89D37C27F802F500FF3F80 /* Vorbis.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Vorbis.c; sourceTree = "<group>"; };
|
||||
9A89D37D27F802F500FF3F80 /* _ftsynth.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = _ftsynth.c; sourceTree = "<group>"; };
|
||||
9A89D38027F802F500FF3F80 /* Game.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Game.c; sourceTree = "<group>"; };
|
||||
9A89D38227F802F500FF3F80 /* Http_Worker.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Http_Worker.c; sourceTree = "<group>"; };
|
||||
9A89D38427F802F500FF3F80 /* TexturePack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = TexturePack.c; sourceTree = "<group>"; };
|
||||
9A89D38627F802F500FF3F80 /* ExtMath.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ExtMath.c; sourceTree = "<group>"; };
|
||||
9A89D38B27F802F500FF3F80 /* Inventory.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Inventory.c; sourceTree = "<group>"; };
|
||||
9A89D38C27F802F500FF3F80 /* Gui.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Gui.c; sourceTree = "<group>"; };
|
||||
9A89D38E27F802F500FF3F80 /* _truetype.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = _truetype.c; sourceTree = "<group>"; };
|
||||
9A89D38F27F802F500FF3F80 /* LBackend.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = LBackend.c; sourceTree = "<group>"; };
|
||||
9A89D39127F802F500FF3F80 /* Block.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Block.c; sourceTree = "<group>"; };
|
||||
9A89D39227F802F500FF3F80 /* Platform_Posix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Platform_Posix.c; sourceTree = "<group>"; };
|
||||
9A89D39627F802F500FF3F80 /* Model.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Model.c; sourceTree = "<group>"; };
|
||||
9A89D39827F802F500FF3F80 /* LScreens.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = LScreens.c; sourceTree = "<group>"; };
|
||||
9A89D39927F802F500FF3F80 /* Builder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Builder.c; sourceTree = "<group>"; };
|
||||
9A89D39B27F802F500FF3F80 /* Particle.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Particle.c; sourceTree = "<group>"; };
|
||||
9A89D39C27F802F500FF3F80 /* PackedCol.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = PackedCol.c; sourceTree = "<group>"; };
|
||||
9A89D47227F802F500FF3F80 /* Deflate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Deflate.c; sourceTree = "<group>"; };
|
||||
9A89D47427F802F500FF3F80 /* Entity.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Entity.c; sourceTree = "<group>"; };
|
||||
9A89D47527F802F500FF3F80 /* IsometricDrawer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = IsometricDrawer.c; sourceTree = "<group>"; };
|
||||
9A89D47627F802F500FF3F80 /* Logger.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Logger.c; sourceTree = "<group>"; };
|
||||
9A89D47727F802F500FF3F80 /* _psaux.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = _psaux.c; sourceTree = "<group>"; };
|
||||
9A89D47827F802F500FF3F80 /* Bitmap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Bitmap.c; sourceTree = "<group>"; };
|
||||
9A89D47927F802F500FF3F80 /* HeldBlockRenderer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = HeldBlockRenderer.c; sourceTree = "<group>"; };
|
||||
9A89D47A27F802F500FF3F80 /* EnvRenderer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = EnvRenderer.c; sourceTree = "<group>"; };
|
||||
9A89D47E27F802F500FF3F80 /* Graphics_GL1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Graphics_GL1.c; sourceTree = "<group>"; };
|
||||
9A89D47F27F802F600FF3F80 /* interop_ios.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = interop_ios.m; sourceTree = "<group>"; };
|
||||
9A89D48227F802F600FF3F80 /* _type1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = _type1.c; sourceTree = "<group>"; };
|
||||
9A89D48527F802F600FF3F80 /* Animations.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Animations.c; sourceTree = "<group>"; };
|
||||
9A89D48627F802F600FF3F80 /* _psmodule.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = _psmodule.c; sourceTree = "<group>"; };
|
||||
9A89D48727F802F600FF3F80 /* World.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = World.c; sourceTree = "<group>"; };
|
||||
9A89D48827F802F600FF3F80 /* _sfnt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = _sfnt.c; sourceTree = "<group>"; };
|
||||
9A89D48A27F802F600FF3F80 /* _ftbitmap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = _ftbitmap.c; sourceTree = "<group>"; };
|
||||
9A89D48B27F802F600FF3F80 /* Menus.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Menus.c; sourceTree = "<group>"; };
|
||||
9A89D48C27F802F600FF3F80 /* _ftbase.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = _ftbase.c; sourceTree = "<group>"; };
|
||||
9A89D48D27F802F600FF3F80 /* _autofit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = _autofit.c; sourceTree = "<group>"; };
|
||||
9A89D49227F802F600FF3F80 /* String.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = String.c; sourceTree = "<group>"; };
|
||||
9A89D49427F802F600FF3F80 /* Generator.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Generator.c; sourceTree = "<group>"; };
|
||||
9A89D49527F802F600FF3F80 /* Drawer2D.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Drawer2D.c; sourceTree = "<group>"; };
|
||||
9A89D49827F802F600FF3F80 /* Drawer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Drawer.c; sourceTree = "<group>"; };
|
||||
9A89D49927F802F600FF3F80 /* Lighting.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Lighting.c; sourceTree = "<group>"; };
|
||||
9A89D49B27F802F600FF3F80 /* Physics.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Physics.c; sourceTree = "<group>"; };
|
||||
9A89D49E27F802F600FF3F80 /* Server.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Server.c; sourceTree = "<group>"; };
|
||||
9A89D4A027F802F600FF3F80 /* _ftinit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = _ftinit.c; sourceTree = "<group>"; };
|
||||
9A89D4A627F802F600FF3F80 /* Input.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Input.c; sourceTree = "<group>"; };
|
||||
9A89D4AA27F802F600FF3F80 /* Picking.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Picking.c; sourceTree = "<group>"; };
|
||||
9A89D4AB27F802F600FF3F80 /* Utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Utils.c; sourceTree = "<group>"; };
|
||||
9A89D4AE27F802F600FF3F80 /* MapRenderer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = MapRenderer.c; sourceTree = "<group>"; };
|
||||
9A89D4AF27F802F600FF3F80 /* AxisLinesRenderer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = AxisLinesRenderer.c; sourceTree = "<group>"; };
|
||||
9A89D4B127F802F600FF3F80 /* _pshinter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = _pshinter.c; sourceTree = "<group>"; };
|
||||
9A89D4B327F802F600FF3F80 /* Protocol.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Protocol.c; sourceTree = "<group>"; };
|
||||
9A89D4B527F802F600FF3F80 /* Event.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Event.c; sourceTree = "<group>"; };
|
||||
9A89D4BB27F802F600FF3F80 /* _ftglyph.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = _ftglyph.c; sourceTree = "<group>"; };
|
||||
9A89D4BC27F802F600FF3F80 /* Chat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Chat.c; sourceTree = "<group>"; };
|
||||
9A89D4BD27F802F600FF3F80 /* _smooth.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = _smooth.c; sourceTree = "<group>"; };
|
||||
9A89D4BE27F802F600FF3F80 /* Resources.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Resources.c; sourceTree = "<group>"; };
|
||||
9A89D4C427F802F600FF3F80 /* LWeb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = LWeb.c; sourceTree = "<group>"; };
|
||||
9A89D4C627F802F600FF3F80 /* Formats.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Formats.c; sourceTree = "<group>"; };
|
||||
9A89D4C927F802F600FF3F80 /* SelOutlineRenderer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SelOutlineRenderer.c; sourceTree = "<group>"; };
|
||||
9A89D4CC27F802F600FF3F80 /* EntityComponents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = EntityComponents.c; sourceTree = "<group>"; };
|
||||
9A89D4CF27F802F600FF3F80 /* Camera.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Camera.c; sourceTree = "<group>"; };
|
||||
9A89D4D127F802F600FF3F80 /* Screens.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Screens.c; sourceTree = "<group>"; };
|
||||
9A89D4D227F802F600FF3F80 /* SelectionBox.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SelectionBox.c; sourceTree = "<group>"; };
|
||||
9A89D4DA27F802F600FF3F80 /* _cff.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = _cff.c; sourceTree = "<group>"; };
|
||||
9A89D4DB27F802F600FF3F80 /* BlockPhysics.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = BlockPhysics.c; sourceTree = "<group>"; };
|
||||
9A89D4DD27F802F600FF3F80 /* Launcher.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Launcher.c; sourceTree = "<group>"; };
|
||||
9A89D4E327F802F600FF3F80 /* Options.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Options.c; sourceTree = "<group>"; };
|
||||
9A89D4E427F802F600FF3F80 /* Window_SDL2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Window_SDL2.c; sourceTree = "<group>"; };
|
||||
9A89D4E727F802F600FF3F80 /* Audio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Audio.c; sourceTree = "<group>"; };
|
||||
9A89D4E827F802F600FF3F80 /* Stream.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Stream.c; sourceTree = "<group>"; };
|
||||
9A89D4E927F802F600FF3F80 /* Vectors.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Vectors.c; sourceTree = "<group>"; };
|
||||
9A89D4EE27F802F600FF3F80 /* Widgets.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Widgets.c; sourceTree = "<group>"; };
|
||||
9AC5433D2AE2649E0086C85F /* SystemFonts.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SystemFonts.c; sourceTree = "<group>"; };
|
||||
9AC5433F2AE264AC0086C85F /* GameVersion.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = GameVersion.c; sourceTree = "<group>"; };
|
||||
9AC543412AE264B90086C85F /* EntityRenderers.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = EntityRenderers.c; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
9A89D35427F802B100FF3F80 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
9A89D34E27F802B100FF3F80 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9A62ADF4286D906F00E5E3DE /* Assets.xcassets */,
|
||||
9A89D36827F802B400FF3F80 /* Info.plist */,
|
||||
9A89D37727F802F500FF3F80 /* src */,
|
||||
9A89D35827F802B100FF3F80 /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
9A89D35827F802B100FF3F80 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9A89D35727F802B100FF3F80 /* ClassiCube.app */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
9A89D37727F802F500FF3F80 /* src */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9A6C7DFF2C41EED700676D27 /* Window_ios.m */,
|
||||
9A6C7DFD2C41E95C00676D27 /* MenuOptions.c */,
|
||||
9A6C7DFB2C41E93700676D27 /* InputHandler.c */,
|
||||
9A6C7DF92C2F610C00676D27 /* LBackend_ios.m */,
|
||||
9A6C79662BFDDF0600676D27 /* Queue.c */,
|
||||
9A6C79642BFDDEF100676D27 /* FancyLighting.c */,
|
||||
9A4D0C632BDD168800E1695D /* TouchUI.c */,
|
||||
9A57ECED2BCD1408006A89F0 /* Audio_OpenAL.c */,
|
||||
9A7401DA2B7384060040E575 /* SSL.c */,
|
||||
9A7401D82B737D5B0040E575 /* Commands.c */,
|
||||
9AC543412AE264B90086C85F /* EntityRenderers.c */,
|
||||
9AC5433F2AE264AC0086C85F /* GameVersion.c */,
|
||||
9AC5433D2AE2649E0086C85F /* SystemFonts.c */,
|
||||
9A89D48D27F802F600FF3F80 /* _autofit.c */,
|
||||
9A89D4DA27F802F600FF3F80 /* _cff.c */,
|
||||
9A89D48C27F802F600FF3F80 /* _ftbase.c */,
|
||||
9A89D48A27F802F600FF3F80 /* _ftbitmap.c */,
|
||||
9A89D4BB27F802F600FF3F80 /* _ftglyph.c */,
|
||||
9A89D4A027F802F600FF3F80 /* _ftinit.c */,
|
||||
9A89D37D27F802F500FF3F80 /* _ftsynth.c */,
|
||||
9A89D47727F802F500FF3F80 /* _psaux.c */,
|
||||
9A89D4B127F802F600FF3F80 /* _pshinter.c */,
|
||||
9A89D48627F802F600FF3F80 /* _psmodule.c */,
|
||||
9A89D48827F802F600FF3F80 /* _sfnt.c */,
|
||||
9A89D4BD27F802F600FF3F80 /* _smooth.c */,
|
||||
9A89D38E27F802F500FF3F80 /* _truetype.c */,
|
||||
9A89D48227F802F600FF3F80 /* _type1.c */,
|
||||
9A89D48527F802F600FF3F80 /* Animations.c */,
|
||||
9A89D4E727F802F600FF3F80 /* Audio.c */,
|
||||
9A89D4AF27F802F600FF3F80 /* AxisLinesRenderer.c */,
|
||||
9A89D47827F802F500FF3F80 /* Bitmap.c */,
|
||||
9A89D39127F802F500FF3F80 /* Block.c */,
|
||||
9A89D4DB27F802F600FF3F80 /* BlockPhysics.c */,
|
||||
9A89D39927F802F500FF3F80 /* Builder.c */,
|
||||
9A89D4CF27F802F600FF3F80 /* Camera.c */,
|
||||
9A89D4BC27F802F600FF3F80 /* Chat.c */,
|
||||
9A89D47227F802F500FF3F80 /* Deflate.c */,
|
||||
9A89D49827F802F600FF3F80 /* Drawer.c */,
|
||||
9A89D49527F802F600FF3F80 /* Drawer2D.c */,
|
||||
9A89D47427F802F500FF3F80 /* Entity.c */,
|
||||
9A89D4CC27F802F600FF3F80 /* EntityComponents.c */,
|
||||
9A89D47A27F802F500FF3F80 /* EnvRenderer.c */,
|
||||
9A89D4B527F802F600FF3F80 /* Event.c */,
|
||||
9A89D38627F802F500FF3F80 /* ExtMath.c */,
|
||||
9A89D4C627F802F600FF3F80 /* Formats.c */,
|
||||
9A89D38027F802F500FF3F80 /* Game.c */,
|
||||
9A89D49427F802F600FF3F80 /* Generator.c */,
|
||||
9A89D47E27F802F500FF3F80 /* Graphics_GL1.c */,
|
||||
9A89D37A27F802F500FF3F80 /* Graphics_GL2.c */,
|
||||
9A89D38C27F802F500FF3F80 /* Gui.c */,
|
||||
9A89D47927F802F500FF3F80 /* HeldBlockRenderer.c */,
|
||||
9A89D38227F802F500FF3F80 /* Http_Worker.c */,
|
||||
9A89D4A627F802F600FF3F80 /* Input.c */,
|
||||
9A89D38B27F802F500FF3F80 /* Inventory.c */,
|
||||
9A89D47527F802F500FF3F80 /* IsometricDrawer.c */,
|
||||
9A89D4DD27F802F600FF3F80 /* Launcher.c */,
|
||||
9A89D38F27F802F500FF3F80 /* LBackend.c */,
|
||||
9A89D49927F802F600FF3F80 /* Lighting.c */,
|
||||
9A89D47627F802F500FF3F80 /* Logger.c */,
|
||||
9A89D39827F802F500FF3F80 /* LScreens.c */,
|
||||
9A89D4C427F802F600FF3F80 /* LWeb.c */,
|
||||
9A89D37827F802F500FF3F80 /* LWidgets.c */,
|
||||
9A89D4AE27F802F600FF3F80 /* MapRenderer.c */,
|
||||
9A89D48B27F802F600FF3F80 /* Menus.c */,
|
||||
9A89D39627F802F500FF3F80 /* Model.c */,
|
||||
9A89D4E327F802F600FF3F80 /* Options.c */,
|
||||
9A89D39C27F802F500FF3F80 /* PackedCol.c */,
|
||||
9A89D39B27F802F500FF3F80 /* Particle.c */,
|
||||
9A89D49B27F802F600FF3F80 /* Physics.c */,
|
||||
9A89D4C927F802F600FF3F80 /* SelOutlineRenderer.c */,
|
||||
9A89D4AA27F802F600FF3F80 /* Picking.c */,
|
||||
9A89D39227F802F500FF3F80 /* Platform_Posix.c */,
|
||||
9A89D4B327F802F600FF3F80 /* Protocol.c */,
|
||||
9A89D4BE27F802F600FF3F80 /* Resources.c */,
|
||||
9A89D4D127F802F600FF3F80 /* Screens.c */,
|
||||
9A89D4D227F802F600FF3F80 /* SelectionBox.c */,
|
||||
9A89D49E27F802F600FF3F80 /* Server.c */,
|
||||
9A89D4E827F802F600FF3F80 /* Stream.c */,
|
||||
9A89D49227F802F600FF3F80 /* String.c */,
|
||||
9A89D38427F802F500FF3F80 /* TexturePack.c */,
|
||||
9A89D4AB27F802F600FF3F80 /* Utils.c */,
|
||||
9A89D4E927F802F600FF3F80 /* Vectors.c */,
|
||||
9A89D37C27F802F500FF3F80 /* Vorbis.c */,
|
||||
9A89D4EE27F802F600FF3F80 /* Widgets.c */,
|
||||
9A89D4E427F802F600FF3F80 /* Window_SDL2.c */,
|
||||
9A89D48727F802F600FF3F80 /* World.c */,
|
||||
9A89D47F27F802F600FF3F80 /* interop_ios.m */,
|
||||
);
|
||||
name = src;
|
||||
path = ../../src;
|
||||
sourceTree = SOURCE_ROOT;
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
9A89D35627F802B100FF3F80 /* ClassiCube */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 9A89D36D27F802B400FF3F80 /* Build configuration list for PBXNativeTarget "ClassiCube" */;
|
||||
buildPhases = (
|
||||
9A89D35327F802B100FF3F80 /* Sources */,
|
||||
9A89D35427F802B100FF3F80 /* Frameworks */,
|
||||
9A89D35527F802B100FF3F80 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = ClassiCube;
|
||||
productName = CCIOS2;
|
||||
productReference = 9A89D35727F802B100FF3F80 /* ClassiCube.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
9A89D34F27F802B100FF3F80 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 1010;
|
||||
ORGANIZATIONNAME = ClassiCube;
|
||||
TargetAttributes = {
|
||||
9A89D35627F802B100FF3F80 = {
|
||||
CreatedOnToolsVersion = 10.1;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 9A89D35227F802B100FF3F80 /* Build configuration list for PBXProject "CCIOS" */;
|
||||
compatibilityVersion = "Xcode 9.3";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = 9A89D34E27F802B100FF3F80;
|
||||
productRefGroup = 9A89D35827F802B100FF3F80 /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
9A89D35627F802B100FF3F80 /* ClassiCube */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
9A89D35527F802B100FF3F80 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
9A62ADF5286D906F00E5E3DE /* Assets.xcassets in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
9A89D35327F802B100FF3F80 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
9A89D50727F802F600FF3F80 /* Particle.c in Sources */,
|
||||
9A89D56C27F802F600FF3F80 /* _ftinit.c in Sources */,
|
||||
9A89D58F27F802F600FF3F80 /* Audio.c in Sources */,
|
||||
9A89D55227F802F600FF3F80 /* Logger.c in Sources */,
|
||||
9A89D58E27F802F600FF3F80 /* Window_SDL2.c in Sources */,
|
||||
9A89D4FF27F802F600FF3F80 /* Gui.c in Sources */,
|
||||
9A89D55027F802F600FF3F80 /* Entity.c in Sources */,
|
||||
9A89D58327F802F600FF3F80 /* EntityComponents.c in Sources */,
|
||||
9A7401D92B737D5C0040E575 /* Commands.c in Sources */,
|
||||
9A89D57327F802F600FF3F80 /* Utils.c in Sources */,
|
||||
9A6C7DFE2C41E95D00676D27 /* MenuOptions.c in Sources */,
|
||||
9A89D58427F802F600FF3F80 /* Camera.c in Sources */,
|
||||
9A89D57C27F802F600FF3F80 /* Chat.c in Sources */,
|
||||
9A89D50527F802F600FF3F80 /* LScreens.c in Sources */,
|
||||
9A89D56727F802F600FF3F80 /* Drawer.c in Sources */,
|
||||
9A89D4F327F802F600FF3F80 /* Graphics_GL2.c in Sources */,
|
||||
9A89D55C27F802F600FF3F80 /* Animations.c in Sources */,
|
||||
9A89D58D27F802F600FF3F80 /* Options.c in Sources */,
|
||||
9A89D57927F802F600FF3F80 /* Event.c in Sources */,
|
||||
9A89D55B27F802F600FF3F80 /* _type1.c in Sources */,
|
||||
9A89D58127F802F600FF3F80 /* SelOutlineRenderer.c in Sources */,
|
||||
9A89D56027F802F600FF3F80 /* _ftbitmap.c in Sources */,
|
||||
9A89D50327F802F600FF3F80 /* Platform_Posix.c in Sources */,
|
||||
9A89D58027F802F600FF3F80 /* Formats.c in Sources */,
|
||||
9A89D4FB27F802F600FF3F80 /* TexturePack.c in Sources */,
|
||||
9A89D50827F802F600FF3F80 /* PackedCol.c in Sources */,
|
||||
9A89D50227F802F600FF3F80 /* Block.c in Sources */,
|
||||
9A89D57227F802F600FF3F80 /* Picking.c in Sources */,
|
||||
9A89D59127F802F600FF3F80 /* Vectors.c in Sources */,
|
||||
9A89D58A27F802F600FF3F80 /* BlockPhysics.c in Sources */,
|
||||
9A89D56127F802F600FF3F80 /* Menus.c in Sources */,
|
||||
9A89D4F727F802F600FF3F80 /* Game.c in Sources */,
|
||||
9A89D55627F802F600FF3F80 /* EnvRenderer.c in Sources */,
|
||||
9A89D58927F802F600FF3F80 /* _cff.c in Sources */,
|
||||
9A6C79672BFDDF0700676D27 /* Queue.c in Sources */,
|
||||
9A89D4F227F802F600FF3F80 /* LWidgets.c in Sources */,
|
||||
9A89D55327F802F600FF3F80 /* _psaux.c in Sources */,
|
||||
9A89D50427F802F600FF3F80 /* Model.c in Sources */,
|
||||
9A89D54F27F802F600FF3F80 /* Deflate.c in Sources */,
|
||||
9A89D56327F802F600FF3F80 /* _autofit.c in Sources */,
|
||||
9A89D55F27F802F600FF3F80 /* _sfnt.c in Sources */,
|
||||
9A89D55527F802F600FF3F80 /* HeldBlockRenderer.c in Sources */,
|
||||
9A89D4FD27F802F600FF3F80 /* ExtMath.c in Sources */,
|
||||
9A57ECEE2BCD1408006A89F0 /* Audio_OpenAL.c in Sources */,
|
||||
9A89D56427F802F600FF3F80 /* String.c in Sources */,
|
||||
9A89D57D27F802F600FF3F80 /* _smooth.c in Sources */,
|
||||
9AC543402AE264AC0086C85F /* GameVersion.c in Sources */,
|
||||
9AC543422AE264B90086C85F /* EntityRenderers.c in Sources */,
|
||||
9A89D50127F802F600FF3F80 /* LBackend.c in Sources */,
|
||||
9A89D56827F802F600FF3F80 /* Lighting.c in Sources */,
|
||||
9A89D57827F802F600FF3F80 /* Protocol.c in Sources */,
|
||||
9A89D55427F802F600FF3F80 /* Bitmap.c in Sources */,
|
||||
9A89D50627F802F600FF3F80 /* Builder.c in Sources */,
|
||||
9A89D55127F802F600FF3F80 /* IsometricDrawer.c in Sources */,
|
||||
9A89D57B27F802F600FF3F80 /* _ftglyph.c in Sources */,
|
||||
9A89D55827F802F600FF3F80 /* Graphics_GL1.c in Sources */,
|
||||
9A89D59427F802F600FF3F80 /* Widgets.c in Sources */,
|
||||
9A89D55927F802F600FF3F80 /* interop_ios.m in Sources */,
|
||||
9A7401DB2B7384060040E575 /* SSL.c in Sources */,
|
||||
9A89D4F527F802F600FF3F80 /* _ftsynth.c in Sources */,
|
||||
9A89D55D27F802F600FF3F80 /* _psmodule.c in Sources */,
|
||||
9A89D56F27F802F600FF3F80 /* Input.c in Sources */,
|
||||
9A89D57E27F802F600FF3F80 /* Resources.c in Sources */,
|
||||
9A89D4F427F802F600FF3F80 /* Vorbis.c in Sources */,
|
||||
9A89D56227F802F600FF3F80 /* _ftbase.c in Sources */,
|
||||
9A89D56B27F802F600FF3F80 /* Server.c in Sources */,
|
||||
9A89D50027F802F600FF3F80 /* _truetype.c in Sources */,
|
||||
9A6C79652BFDDEF200676D27 /* FancyLighting.c in Sources */,
|
||||
9A4D0C642BDD168800E1695D /* TouchUI.c in Sources */,
|
||||
9AC5433E2AE2649F0086C85F /* SystemFonts.c in Sources */,
|
||||
9A89D57F27F802F600FF3F80 /* LWeb.c in Sources */,
|
||||
9A89D56627F802F600FF3F80 /* Drawer2D.c in Sources */,
|
||||
9A89D57427F802F600FF3F80 /* MapRenderer.c in Sources */,
|
||||
9A89D57627F802F600FF3F80 /* _pshinter.c in Sources */,
|
||||
9A89D56A27F802F600FF3F80 /* Physics.c in Sources */,
|
||||
9A6C7DFA2C2F610C00676D27 /* LBackend_ios.m in Sources */,
|
||||
9A89D58727F802F600FF3F80 /* SelectionBox.c in Sources */,
|
||||
9A89D4FE27F802F600FF3F80 /* Inventory.c in Sources */,
|
||||
9A89D56527F802F600FF3F80 /* Generator.c in Sources */,
|
||||
9A89D57527F802F600FF3F80 /* AxisLinesRenderer.c in Sources */,
|
||||
9A6C7E002C41EED700676D27 /* Window_ios.m in Sources */,
|
||||
9A89D55E27F802F600FF3F80 /* World.c in Sources */,
|
||||
9A89D58627F802F600FF3F80 /* Screens.c in Sources */,
|
||||
9A89D4F927F802F600FF3F80 /* Http_Worker.c in Sources */,
|
||||
9A89D58B27F802F600FF3F80 /* Launcher.c in Sources */,
|
||||
9A89D59027F802F600FF3F80 /* Stream.c in Sources */,
|
||||
9A6C7DFC2C41E93700676D27 /* InputHandler.c in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
9A89D36B27F802B400FF3F80 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
9A89D36C27F802B400FF3F80 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
9A89D36E27F802B400FF3F80 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
INFOPLIST_FILE = Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.classicube.client.ios;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
9A89D36F27F802B400FF3F80 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
INFOPLIST_FILE = Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.classicube.client.ios;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
9A89D35227F802B100FF3F80 /* Build configuration list for PBXProject "CCIOS" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
9A89D36B27F802B400FF3F80 /* Debug */,
|
||||
9A89D36C27F802B400FF3F80 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
9A89D36D27F802B400FF3F80 /* Build configuration list for PBXNativeTarget "ClassiCube" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
9A89D36E27F802B400FF3F80 /* Debug */,
|
||||
9A89D36F27F802B400FF3F80 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 9A89D34F27F802B100FF3F80 /* Project object */;
|
||||
}
|
||||
141
misc/ios/Info.plist
Normal file
@@ -0,0 +1,141 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>ClassiCube</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>ClassiCube</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.classicube.client.ios</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>ClassiCube</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<false/>
|
||||
<key>NSPhotoLibraryAddUsageDescription</key>
|
||||
<string>Saving screenshot</string>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>CFBundleIcons</key>
|
||||
<dict>
|
||||
<key>CFBundlePrimaryIcon</key>
|
||||
<dict>
|
||||
<key>CFBundleIconName</key>
|
||||
<string>AppIcon</string>
|
||||
<key>CFBundleIconFiles</key>
|
||||
<array>
|
||||
<string>AppIcon40x40</string>
|
||||
<string>AppIcon60x60</string>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>CFBundleIcons~ipad</key>
|
||||
<dict>
|
||||
<key>CFBundlePrimaryIcon</key>
|
||||
<dict>
|
||||
<key>CFBundleIconName</key>
|
||||
<string>AppIcon</string>
|
||||
<key>CFBundleIconFiles</key>
|
||||
<array>
|
||||
<string>AppIcon40x40</string>
|
||||
<string>AppIcon60x60</string>
|
||||
<string>AppIcon76x76</string>
|
||||
<string>AppIcon83.5x83.5</string>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UTImportedTypeDeclarations</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>com.classicube.client.ios-cw</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>ClassiCube map format</string>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>cw</string>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>com.classicube.client.ios-dat</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>Classic map format</string>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>dat</string>
|
||||
<string>mine</string>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>com.classicube.client.ios-lvl</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>MCSharp map format</string>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>lvl</string>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>com.classicube.client.ios-fcm</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>fCraft map format</string>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>fcm</string>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
43
misc/linux/install-desktop-entry.sh
Normal file
@@ -0,0 +1,43 @@
|
||||
DESKTOP_FILE=ClassiCube.desktop
|
||||
GAME_DIR=`pwd`
|
||||
|
||||
# remove existing ClassiCube desktop entry file
|
||||
rm $DESKTOP_FILE
|
||||
|
||||
# download ClassiCube icon from github if necessary
|
||||
if [ -f "CCicon.png" ]
|
||||
then
|
||||
echo "CCicon.png exists already. Skipping download."
|
||||
else
|
||||
echo "CCicon.png doesn't exist. Attempting to download it.."
|
||||
wget "https://raw.githubusercontent.com/ClassiCube/classicube/master/misc/CCicon.png"
|
||||
fi
|
||||
|
||||
# create ClassiCube desktop entry
|
||||
echo 'Creating ClassiCube.desktop..'
|
||||
cat >> $DESKTOP_FILE << EOF
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Comment=Minecraft Classic inspired sandbox game
|
||||
Name=ClassiCube
|
||||
Exec=$GAME_DIR/ClassiCube
|
||||
Icon=$GAME_DIR/CCicon.png
|
||||
Path=$GAME_DIR
|
||||
Terminal=false
|
||||
Categories=Game;
|
||||
Actions=singleplayer;resume;
|
||||
|
||||
[Desktop Action singleplayer]
|
||||
Name=Start singleplayer
|
||||
Exec=$GAME_DIR/ClassiCube --singleplayer
|
||||
|
||||
[Desktop Action resume]
|
||||
Name=Resume last server
|
||||
Exec=$GAME_DIR/ClassiCube --resume
|
||||
EOF
|
||||
chmod +x $DESKTOP_FILE
|
||||
|
||||
echo 'Installing ClassiCube.desktop..'
|
||||
# install ClassiCube desktop entry into the system
|
||||
sudo desktop-file-install --dir=/usr/share/applications ClassiCube.desktop
|
||||
sudo update-desktop-database /usr/share/applications
|
||||
70
misc/macOS/CCIcon_mac.h
Normal file
@@ -0,0 +1,70 @@
|
||||
/* Generated using misc/macOS/mac_icon_gen.cs */
|
||||
|
||||
static const unsigned int CCIcon_Data[] = {
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB8000000,0xC0000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB9000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xC0000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB9000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xBF000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB9000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF303030,0xFFAEAEAE,0xFFB5B5B5,0xFF373737,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xC0000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB9000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF303030,0xFFAFAFAF,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFB5B5B5,0xFF363636,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xC0000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB8000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF303030,0xFFAFAFAF,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFB5B5B5,0xFF373737,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xBF000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB9000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF303030,0xFFAEAEAE,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFB5B5B5,0xFF363636,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xBF000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB8000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF303030,0xFFAFAFAF,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFB5B5B5,0xFF373737,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xC0000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB9000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF303030,0xFFAEAEAE,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFB6B6B6,0xFF363636,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xBF000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB8000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF313131,0xFFAEAEAE,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFB5B5B5,0xFF373737,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xBF000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB9000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF303030,0xFFAEAEAE,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFB5B5B5,0xFF373737,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xC0000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB9000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF313131,0xFFAEAEAE,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFB5B5B5,0xFF373737,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xBF000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB9000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF303030,0xFFAFAFAF,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFB5B5B5,0xFF373737,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xBF000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB9000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF303030,0xFFAEAEAE,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFB5B5B5,0xFF363636,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xBF000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x96000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF303030,0xFFAFAFAF,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFB5B5B5,0xFF373737,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0x9B000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF000000,0xFF303030,0xFFAEAEAE,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFB6B6B6,0xFF363636,0xFF000000,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF080808,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF2F2F2,0xFFD2D2D2,0xFF060606,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF2F2F2,0xFFD2D2D2,0xFFBEBEBE,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF2F2F2,0xFFD2D2D2,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF2F2F2,0xFFD2D2D2,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF2F2F2,0xFFD2D2D2,0xFFBEBEBE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF2F2F2,0xFFD2D2D2,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF2F2F2,0xFFD2D2D2,0xFFBEBEBE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF2F2F2,0xFFD2D2D2,0xFFBDBDBD,0xFFBDBDBD,0xFFBFBFBF,0xFFD6D6D6,0xFFEBEBEB,0xFFF6F6F6,0xFFF5F5F5,0xFFEAEAEA,0xFFCFCFCF,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFCFCFC,0xFFEDEDED,0xFFE4E4E4,0xFFE7E7E7,0xFFF2F2F2,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF2F2F2,0xFFD2D2D2,0xFFBEBEBE,0xFFBDBDBD,0xFFBDBDBD,0xFFD4D4D4,0xFFF7F7F7,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFCFCFC,0xFFC2C2C2,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFE7E7E7,0xFFC3C3C3,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFC6C6C6,0xFFE1E1E1,0xFFFCFCFC,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF2F2F2,0xFFD2D2D2,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFC0C0C0,0xFFE9E9E9,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFE1E1E1,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFE4E4E4,0xFFBEBEBE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFC6C6C6,0xFFEFEFEF,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF2F2F2,0xFFD2D2D2,0xFFBEBEBE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFC2C2C2,0xFFF1F1F1,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFBFBFB,0xFFC3C3C3,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF5F5F5,0xFFBFBFBF,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBFBFBF,0xFFE6E6E6,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF2F2F2,0xFFD2D2D2,0xFFBEBEBE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFC0C0C0,0xFFF1F1F1,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFE0E0E0,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFD6D6D6,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBEBEBE,0xFFE5E5E5,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF2F2F2,0xFFD2D2D2,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFEAEAEA,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF4F4F4,0xFFE8E8E8,0xFFF2F2F2,0xFFFAFAFA,0xFFC2C2C2,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFDFDFD,0xFFC1C1C1,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBEBEBE,0xFFEDEDED,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBEBEBE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFD9D9D9,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF7F7F7,0xFFD0D0D0,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFC4C4C4,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFEEEEEE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFC9C9C9,0xFFE0E0E0,0xFFE0E0E0,0xFFCDCDCD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFC3C3C3,0xFFF8F8F8,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFC6C6C6,0xFFFCFCFC,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF4F4F4,0xFFC3C3C3,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFE3E3E3,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFCDCDCD,0xFFFCFCFC,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFE9E9E9,0xFFC1C1C1,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFD3D3D3,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFE9E9E9,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFBFBFB,0xFFC6C6C6,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFDCDCDC,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBEBEBE,0xFFF3F3F3,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF0F0F0,0xFFC0C0C0,0xFFBDBDBD,0xFFBDBDBD,0xFFC4C4C4,0xFFFAFAFA,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFCACACA,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFD9D9D9,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFD7D7D7,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFC9C9C9,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFE7E7E7,0xFFBDBDBD,0xFFC5C5C5,0xFFF5F5F5,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFE7E7E7,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF7F7F7,0xFFBEBEBE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFD7D7D7,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFD8D8D8,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFDADADA,0xFFF6F6F6,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFC2C2C2,0xFFFCFCFC,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFDCDCDC,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFD8D8D8,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFDFDFDF,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFD7D7D7,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFC6C6C6,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFDDDDDD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFE1E1E1,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFEBEBEB,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF6F6F6,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFE3E3E3,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFE0E0E0,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBFBFBF,0xFFFAFAFA,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFE9E9E9,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFECECEC,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFDDDDDD,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFC8C8C8,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFE1E1E1,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF9F9F9,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFD5D5D5,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFD2D2D2,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFDDDDDD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFC7C7C7,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFC9C9C9,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFDCDCDC,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFDDDDDD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFDADADA,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBEBEBE,0xFFF9F9F9,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFE0E0E0,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFDEDEDE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFC2C2C2,0xFFC2C2C2,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF0F0F0,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFE6E6E6,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFE3E3E3,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFE4E4E4,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFE4E4E4,0xFFF3F3F3,0xFFC4C4C4,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFC8C8C8,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFCCCCCC,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFE3E3E3,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF0F0F0,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFD1D1D1,0xFFFEFEFE,0xFFFEFEFE,0xFFF5F5F5,0xFFC6C6C6,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFE5E5E5,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFEBEBEB,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFE0E0E0,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFDFDFD,0xFFC5C5C5,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFCACACA,0xFFFAFAFA,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFD1D1D1,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFDFDFD,0xFFC6C6C6,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFC5C5C5,0xFFFAFAFA,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFDBDBDB,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFE7E7E7,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFD0D0D0,0xFFFAFAFA,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFECECEC,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF090909,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFEBEBEB,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFCCCCCC,0xFFFAFAFA,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFD0D0D0,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFE9E9E9,0xFFD3D3D3,0xFFD6D6D6,0xFFECECEC,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFAFAFA,0xFFC5C5C5,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF070707,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF080808,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFD4D4D4,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFC7C7C7,0xFFEEEEEE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF0F0F0,0xFFFCFCFC,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFC3C3C3,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFD2D2D2,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF060606,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0xBF000000,0xFF000000,0xFF000000,0xFF303030,0xFFAEAEAE,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFBFBFB,0xFFC8C8C8,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFC8C8C8,0xFFD3D3D3,0xFFCCCCCC,0xFFBEBEBE,0xFFE2E2E2,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFEEEEEE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFDADADA,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF878787,0xFF282828,0xFF000000,0xFF000000,0xBF000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x96000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF303030,0xFFAFAFAF,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF6F6F6,0xFFC4C4C4,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFC3C3C3,0xFFFCFCFC,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFD2D2D2,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFDFDFD,0xFFD9D9D9,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF878787,0xFF292929,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0x9B000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB9000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF303030,0xFFAEAEAE,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF4F4F4,0xFFC6C6C6,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFE0E0E0,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFE9E9E9,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF7F7F7,0xFFCECECE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF878787,0xFF282828,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xBF000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB9000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF303030,0xFFAFAFAF,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFF8F8F8,0xFFCECECE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFC2C2C2,0xFFFAFAFA,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFC0C0C0,0xFFE7E7E7,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFF8F8F8,0xFFDDDDDD,0xFFC0C0C0,0xFFBDBDBD,0xFFBDBDBD,0xFF878787,0xFF292929,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xBF000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB9000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF313131,0xFFAEAEAE,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFE3E3E3,0xFFC3C3C3,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFE8E8E8,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFC9C9C9,0xFFDCDCDC,0xFFE1E1E1,0xFFDCDCDC,0xFFCFCFCF,0xFFBFBFBF,0xFFBDBDBD,0xFFBDBDBD,0xFF878787,0xFF292929,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xBF000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB9000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF303030,0xFFAEAEAE,0xFFFDFDFD,0xFFFEFEFE,0xFFFBFBFB,0xFFE4E4E4,0xFFD0D0D0,0xFFC4C4C4,0xFFC3C3C3,0xFFCFCFCF,0xFFEBEBEB,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF878787,0xFF292929,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xC0000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB8000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF313131,0xFFAEAEAE,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF878787,0xFF292929,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xBF000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB9000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF303030,0xFFAEAEAE,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF878787,0xFF282828,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xBF000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB8000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF303030,0xFFAFAFAF,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF878787,0xFF292929,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xC0000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB9000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF303030,0xFFAEAEAE,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF878787,0xFF282828,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xBF000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB8000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF303030,0xFFAFAFAF,0xFFFDFDFD,0xFFFEFEFE,0xFFFEFEFE,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFFBDBDBD,0xFF878787,0xFF292929,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xBF000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB9000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF303030,0xFFAFAFAF,0xFFFDFDFD,0xFFFEFEFE,0xFFBDBDBD,0xFFBDBDBD,0xFF878787,0xFF292929,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xC0000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB9000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF303030,0xFFAEAEAE,0xFF878787,0xFF292929,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xC0000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB9000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xBF000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB9000000,0xFF000000,0xFF000000,0xFF000000,0xFF000000,0xC0000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x39000000,0xB8000000,0xC0000000,0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
|
||||
};
|
||||
static const int CCIcon_Width = 64;
|
||||
static const int CCIcon_Height = 64;
|
||||
785
misc/macOS/CCMAC.xcodeproj/project.pbxproj
Normal file
@@ -0,0 +1,785 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 50;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
9A6C7C8D2C073E0C00676D27 /* Vectors.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7BE92C073DEC00676D27 /* Vectors.c */; };
|
||||
9A6C7C8E2C073E0C00676D27 /* _ftglyph.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7BEB2C073DEC00676D27 /* _ftglyph.c */; };
|
||||
9A6C7C8F2C073E0C00676D27 /* Input.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7BF02C073DED00676D27 /* Input.c */; };
|
||||
9A6C7C902C073E0C00676D27 /* Options.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7BF12C073DED00676D27 /* Options.c */; };
|
||||
9A6C7C912C073E0C00676D27 /* _ftbitmap.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7BF22C073DED00676D27 /* _ftbitmap.c */; };
|
||||
9A6C7C922C073E0C00676D27 /* _autofit.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7BF52C073DED00676D27 /* _autofit.c */; };
|
||||
9A6C7C932C073E0C00676D27 /* Menus.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7BF82C073DED00676D27 /* Menus.c */; };
|
||||
9A6C7C942C073E0C00676D27 /* LWeb.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7BFA2C073DEE00676D27 /* LWeb.c */; };
|
||||
9A6C7C952C073E0C00676D27 /* Generator.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7BFB2C073DEE00676D27 /* Generator.c */; };
|
||||
9A6C7C962C073E0C00676D27 /* Screens.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7BFD2C073DEE00676D27 /* Screens.c */; };
|
||||
9A6C7C972C073E0C00676D27 /* SSL.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7BFE2C073DEE00676D27 /* SSL.c */; };
|
||||
9A6C7C982C073E0C00676D27 /* LBackend_Android.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7BFF2C073DEE00676D27 /* LBackend_Android.c */; };
|
||||
9A6C7C992C073E0C00676D27 /* Window_SDL2.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C002C073DEE00676D27 /* Window_SDL2.c */; };
|
||||
9A6C7C9A2C073E0C00676D27 /* Graphics_GL2.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C012C073DEE00676D27 /* Graphics_GL2.c */; };
|
||||
9A6C7C9B2C073E0C00676D27 /* Lighting.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C022C073DEE00676D27 /* Lighting.c */; };
|
||||
9A6C7C9C2C073E0C00676D27 /* EntityComponents.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C042C073DEF00676D27 /* EntityComponents.c */; };
|
||||
9A6C7C9D2C073E0C00676D27 /* Game.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C052C073DEF00676D27 /* Game.c */; };
|
||||
9A6C7C9E2C073E0C00676D27 /* Platform_Posix.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C072C073DEF00676D27 /* Platform_Posix.c */; };
|
||||
9A6C7C9F2C073E0C00676D27 /* Utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C082C073DEF00676D27 /* Utils.c */; };
|
||||
9A6C7CA02C073E0C00676D27 /* Resources.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C092C073DEF00676D27 /* Resources.c */; };
|
||||
9A6C7CA12C073E0C00676D27 /* AudioBackend.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C0A2C073DF000676D27 /* AudioBackend.c */; };
|
||||
9A6C7CA22C073E0C00676D27 /* Queue.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C0B2C073DF000676D27 /* Queue.c */; };
|
||||
9A6C7CA32C073E0C00676D27 /* _smooth.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C0E2C073DF100676D27 /* _smooth.c */; };
|
||||
9A6C7CA42C073E0C00676D27 /* _pshinter.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C102C073DF100676D27 /* _pshinter.c */; };
|
||||
9A6C7CA52C073E0C00676D27 /* Drawer2D.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C112C073DF100676D27 /* Drawer2D.c */; };
|
||||
9A6C7CA62C073E0C00676D27 /* World.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C132C073DF200676D27 /* World.c */; };
|
||||
9A6C7CA72C073E0C00676D27 /* _psaux.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C152C073DF200676D27 /* _psaux.c */; };
|
||||
9A6C7CA82C073E0C00676D27 /* Window_SDL3.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C162C073DF200676D27 /* Window_SDL3.c */; };
|
||||
9A6C7CA92C073E0C00676D27 /* TexturePack.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C1A2C073DF300676D27 /* TexturePack.c */; };
|
||||
9A6C7CAA2C073E0C00676D27 /* Block.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C1C2C073DF300676D27 /* Block.c */; };
|
||||
9A6C7CAB2C073E0C00676D27 /* _ftbase.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C1E2C073DF300676D27 /* _ftbase.c */; };
|
||||
9A6C7CAC2C073E0C00676D27 /* LWidgets.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C1F2C073DF400676D27 /* LWidgets.c */; };
|
||||
9A6C7CAD2C073E0C00676D27 /* PackedCol.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C202C073DF400676D27 /* PackedCol.c */; };
|
||||
9A6C7CAE2C073E0C00676D27 /* Physics.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C212C073DF400676D27 /* Physics.c */; };
|
||||
9A6C7CAF2C073E0C00676D27 /* GameVersion.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C242C073DF500676D27 /* GameVersion.c */; };
|
||||
9A6C7CB02C073E0C00676D27 /* Particle.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C252C073DF500676D27 /* Particle.c */; };
|
||||
9A6C7CB12C073E0C00676D27 /* Graphics_SoftGPU.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C282C073DF500676D27 /* Graphics_SoftGPU.c */; };
|
||||
9A6C7CB22C073E0C00676D27 /* MapRenderer.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C292C073DF500676D27 /* MapRenderer.c */; };
|
||||
9A6C7CB32C073E0C00676D27 /* SelectionBox.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C2A2C073DF500676D27 /* SelectionBox.c */; };
|
||||
9A6C7CB42C073E0C00676D27 /* Stream.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C2C2C073DF600676D27 /* Stream.c */; };
|
||||
9A6C7CB52C073E0C00676D27 /* Formats.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C2D2C073DF600676D27 /* Formats.c */; };
|
||||
9A6C7CB62C073E0C00676D27 /* Chat.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C2E2C073DF600676D27 /* Chat.c */; };
|
||||
9A6C7CB72C073E0C00676D27 /* Graphics_GL1.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C2F2C073DF600676D27 /* Graphics_GL1.c */; };
|
||||
9A6C7CB82C073E0C00676D27 /* Window_Terminal.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C302C073DF600676D27 /* Window_Terminal.c */; };
|
||||
9A6C7CB92C073E0C00676D27 /* AxisLinesRenderer.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C342C073DF700676D27 /* AxisLinesRenderer.c */; };
|
||||
9A6C7CBA2C073E0C00676D27 /* EnvRenderer.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C352C073DF700676D27 /* EnvRenderer.c */; };
|
||||
9A6C7CBB2C073E0C00676D27 /* _ftsynth.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C382C073DF800676D27 /* _ftsynth.c */; };
|
||||
9A6C7CBC2C073E0C00676D27 /* Logger.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C3C2C073DF800676D27 /* Logger.c */; };
|
||||
9A6C7CBD2C073E0C00676D27 /* String.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C3E2C073DF900676D27 /* String.c */; };
|
||||
9A6C7CBE2C073E0C00676D27 /* Protocol.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C3F2C073DF900676D27 /* Protocol.c */; };
|
||||
9A6C7CBF2C073E0C00676D27 /* TouchUI.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C402C073DF900676D27 /* TouchUI.c */; };
|
||||
9A6C7CC02C073E0C00676D27 /* _type1.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C412C073DF900676D27 /* _type1.c */; };
|
||||
9A6C7CC12C073E0C00676D27 /* Event.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C452C073DFB00676D27 /* Event.c */; };
|
||||
9A6C7CC22C073E0C00676D27 /* Launcher.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C462C073DFC00676D27 /* Launcher.c */; };
|
||||
9A6C7CC32C073E0C00676D27 /* _sfnt.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C4A2C073DFD00676D27 /* _sfnt.c */; };
|
||||
9A6C7CC42C073E0C00676D27 /* LScreens.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C4F2C073DFE00676D27 /* LScreens.c */; };
|
||||
9A6C7CC52C073E0C00676D27 /* Commands.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C522C073DFF00676D27 /* Commands.c */; };
|
||||
9A6C7CC62C073E0C00676D27 /* IsometricDrawer.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C552C073E0000676D27 /* IsometricDrawer.c */; };
|
||||
9A6C7CC72C073E0C00676D27 /* HeldBlockRenderer.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C572C073E0000676D27 /* HeldBlockRenderer.c */; };
|
||||
9A6C7CC82C073E0C00676D27 /* _psmodule.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C582C073E0100676D27 /* _psmodule.c */; };
|
||||
9A6C7CC92C073E0C00676D27 /* Gui.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C5A2C073E0100676D27 /* Gui.c */; };
|
||||
9A6C7CCA2C073E0C00676D27 /* _truetype.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C5B2C073E0200676D27 /* _truetype.c */; };
|
||||
9A6C7CCB2C073E0C00676D27 /* Window_cocoa.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C5E2C073E0200676D27 /* Window_cocoa.m */; };
|
||||
9A6C7CCC2C073E0C00676D27 /* Vorbis.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C5F2C073E0200676D27 /* Vorbis.c */; };
|
||||
9A6C7CCD2C073E0C00676D27 /* Inventory.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C602C073E0300676D27 /* Inventory.c */; };
|
||||
9A6C7CCE2C073E0C00676D27 /* Animations.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C622C073E0300676D27 /* Animations.c */; };
|
||||
9A6C7CCF2C073E0C00676D27 /* FancyLighting.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C632C073E0300676D27 /* FancyLighting.c */; };
|
||||
9A6C7CD02C073E0C00676D27 /* Widgets.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C662C073E0400676D27 /* Widgets.c */; };
|
||||
9A6C7CD12C073E0C00676D27 /* Picking.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C672C073E0400676D27 /* Picking.c */; };
|
||||
9A6C7CD22C073E0C00676D27 /* _ftinit.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C682C073E0400676D27 /* _ftinit.c */; };
|
||||
9A6C7CD32C073E0C00676D27 /* Http_Worker.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C6B2C073E0500676D27 /* Http_Worker.c */; };
|
||||
9A6C7CD42C073E0C00676D27 /* ExtMath.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C6D2C073E0500676D27 /* ExtMath.c */; };
|
||||
9A6C7CD52C073E0C00676D27 /* _cff.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C6F2C073E0600676D27 /* _cff.c */; };
|
||||
9A6C7CD62C073E0C00676D27 /* Camera.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C702C073E0600676D27 /* Camera.c */; };
|
||||
9A6C7CD72C073E0C00676D27 /* Drawer.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C712C073E0600676D27 /* Drawer.c */; };
|
||||
9A6C7CD82C073E0C00676D27 /* Entity.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C722C073E0600676D27 /* Entity.c */; };
|
||||
9A6C7CD92C073E0C00676D27 /* SystemFonts.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C742C073E0700676D27 /* SystemFonts.c */; };
|
||||
9A6C7CDA2C073E0C00676D27 /* BlockPhysics.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C762C073E0700676D27 /* BlockPhysics.c */; };
|
||||
9A6C7CDB2C073E0C00676D27 /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C772C073E0700676D27 /* main.c */; };
|
||||
9A6C7CDC2C073E0C00676D27 /* Model.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C792C073E0800676D27 /* Model.c */; };
|
||||
9A6C7CDD2C073E0C00676D27 /* Graphics_Metal.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C7A2C073E0800676D27 /* Graphics_Metal.m */; };
|
||||
9A6C7CDE2C073E0C00676D27 /* SelOutlineRenderer.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C7D2C073E0800676D27 /* SelOutlineRenderer.c */; };
|
||||
9A6C7CDF2C073E0C00676D27 /* EntityRenderers.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C7E2C073E0900676D27 /* EntityRenderers.c */; };
|
||||
9A6C7CE02C073E0C00676D27 /* LBackend.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C802C073E0900676D27 /* LBackend.c */; };
|
||||
9A6C7CE12C073E0C00676D27 /* Builder.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C812C073E0900676D27 /* Builder.c */; };
|
||||
9A6C7CE22C073E0C00676D27 /* Server.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C832C073E0A00676D27 /* Server.c */; };
|
||||
9A6C7CE32C073E0C00676D27 /* Audio.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C842C073E0A00676D27 /* Audio.c */; };
|
||||
9A6C7CE42C073E0C00676D27 /* Deflate.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C852C073E0A00676D27 /* Deflate.c */; };
|
||||
9A6C7CE52C073E0C00676D27 /* Bitmap.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A6C7C892C073E0B00676D27 /* Bitmap.c */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
9A6C796F2C073BFF00676D27 /* CopyFiles */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = /usr/share/man/man1/;
|
||||
dstSubfolderSpec = 0;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 1;
|
||||
};
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
9A6C79712C073BFF00676D27 /* ClassiCube */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = ClassiCube; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
9A6C7BE92C073DEC00676D27 /* Vectors.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Vectors.c; path = "../../../../../../ClassiCube-master/src/Vectors.c"; sourceTree = "<group>"; };
|
||||
9A6C7BEA2C073DEC00676D27 /* TexturePack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TexturePack.h; path = "../../../../../../ClassiCube-master/src/TexturePack.h"; sourceTree = "<group>"; };
|
||||
9A6C7BEB2C073DEC00676D27 /* _ftglyph.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = _ftglyph.c; path = "../../../../../../ClassiCube-master/src/_ftglyph.c"; sourceTree = "<group>"; };
|
||||
9A6C7BEC2C073DED00676D27 /* Constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Constants.h; path = "../../../../../../ClassiCube-master/src/Constants.h"; sourceTree = "<group>"; };
|
||||
9A6C7BED2C073DED00676D27 /* Stream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Stream.h; path = "../../../../../../ClassiCube-master/src/Stream.h"; sourceTree = "<group>"; };
|
||||
9A6C7BEE2C073DED00676D27 /* VirtualKeyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VirtualKeyboard.h; path = "../../../../../../ClassiCube-master/src/VirtualKeyboard.h"; sourceTree = "<group>"; };
|
||||
9A6C7BEF2C073DED00676D27 /* Commands.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Commands.h; path = "../../../../../../ClassiCube-master/src/Commands.h"; sourceTree = "<group>"; };
|
||||
9A6C7BF02C073DED00676D27 /* Input.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Input.c; path = "../../../../../../ClassiCube-master/src/Input.c"; sourceTree = "<group>"; };
|
||||
9A6C7BF12C073DED00676D27 /* Options.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Options.c; path = "../../../../../../ClassiCube-master/src/Options.c"; sourceTree = "<group>"; };
|
||||
9A6C7BF22C073DED00676D27 /* _ftbitmap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = _ftbitmap.c; path = "../../../../../../ClassiCube-master/src/_ftbitmap.c"; sourceTree = "<group>"; };
|
||||
9A6C7BF32C073DED00676D27 /* EntityComponents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EntityComponents.h; path = "../../../../../../ClassiCube-master/src/EntityComponents.h"; sourceTree = "<group>"; };
|
||||
9A6C7BF42C073DED00676D27 /* LWeb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LWeb.h; path = "../../../../../../ClassiCube-master/src/LWeb.h"; sourceTree = "<group>"; };
|
||||
9A6C7BF52C073DED00676D27 /* _autofit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = _autofit.c; path = "../../../../../../ClassiCube-master/src/_autofit.c"; sourceTree = "<group>"; };
|
||||
9A6C7BF62C073DED00676D27 /* _PlatformConsole.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = _PlatformConsole.h; path = "../../../../../../ClassiCube-master/src/_PlatformConsole.h"; sourceTree = "<group>"; };
|
||||
9A6C7BF72C073DED00676D27 /* Physics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Physics.h; path = "../../../../../../ClassiCube-master/src/Physics.h"; sourceTree = "<group>"; };
|
||||
9A6C7BF82C073DED00676D27 /* Menus.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Menus.c; path = "../../../../../../ClassiCube-master/src/Menus.c"; sourceTree = "<group>"; };
|
||||
9A6C7BF92C073DED00676D27 /* Platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Platform.h; path = "../../../../../../ClassiCube-master/src/Platform.h"; sourceTree = "<group>"; };
|
||||
9A6C7BFA2C073DEE00676D27 /* LWeb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = LWeb.c; path = "../../../../../../ClassiCube-master/src/LWeb.c"; sourceTree = "<group>"; };
|
||||
9A6C7BFB2C073DEE00676D27 /* Generator.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Generator.c; path = "../../../../../../ClassiCube-master/src/Generator.c"; sourceTree = "<group>"; };
|
||||
9A6C7BFC2C073DEE00676D27 /* Particle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Particle.h; path = "../../../../../../ClassiCube-master/src/Particle.h"; sourceTree = "<group>"; };
|
||||
9A6C7BFD2C073DEE00676D27 /* Screens.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Screens.c; path = "../../../../../../ClassiCube-master/src/Screens.c"; sourceTree = "<group>"; };
|
||||
9A6C7BFE2C073DEE00676D27 /* SSL.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SSL.c; path = "../../../../../../ClassiCube-master/src/SSL.c"; sourceTree = "<group>"; };
|
||||
9A6C7BFF2C073DEE00676D27 /* LBackend_Android.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = LBackend_Android.c; path = "../../../../../../ClassiCube-master/src/LBackend_Android.c"; sourceTree = "<group>"; };
|
||||
9A6C7C002C073DEE00676D27 /* Window_SDL2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Window_SDL2.c; path = "../../../../../../ClassiCube-master/src/Window_SDL2.c"; sourceTree = "<group>"; };
|
||||
9A6C7C012C073DEE00676D27 /* Graphics_GL2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Graphics_GL2.c; path = "../../../../../../ClassiCube-master/src/Graphics_GL2.c"; sourceTree = "<group>"; };
|
||||
9A6C7C022C073DEE00676D27 /* Lighting.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Lighting.c; path = "../../../../../../ClassiCube-master/src/Lighting.c"; sourceTree = "<group>"; };
|
||||
9A6C7C032C073DEF00676D27 /* Http.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Http.h; path = "../../../../../../ClassiCube-master/src/Http.h"; sourceTree = "<group>"; };
|
||||
9A6C7C042C073DEF00676D27 /* EntityComponents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = EntityComponents.c; path = "../../../../../../ClassiCube-master/src/EntityComponents.c"; sourceTree = "<group>"; };
|
||||
9A6C7C052C073DEF00676D27 /* Game.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Game.c; path = "../../../../../../ClassiCube-master/src/Game.c"; sourceTree = "<group>"; };
|
||||
9A6C7C062C073DEF00676D27 /* Funcs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Funcs.h; path = "../../../../../../ClassiCube-master/src/Funcs.h"; sourceTree = "<group>"; };
|
||||
9A6C7C072C073DEF00676D27 /* Platform_Posix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Platform_Posix.c; path = "../../../../../../ClassiCube-master/src/Platform_Posix.c"; sourceTree = "<group>"; };
|
||||
9A6C7C082C073DEF00676D27 /* Utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Utils.c; path = "../../../../../../ClassiCube-master/src/Utils.c"; sourceTree = "<group>"; };
|
||||
9A6C7C092C073DEF00676D27 /* Resources.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Resources.c; path = "../../../../../../ClassiCube-master/src/Resources.c"; sourceTree = "<group>"; };
|
||||
9A6C7C0A2C073DF000676D27 /* AudioBackend.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AudioBackend.c; path = "../../../../../../ClassiCube-master/src/AudioBackend.c"; sourceTree = "<group>"; };
|
||||
9A6C7C0B2C073DF000676D27 /* Queue.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Queue.c; path = "../../../../../../ClassiCube-master/src/Queue.c"; sourceTree = "<group>"; };
|
||||
9A6C7C0C2C073DF000676D27 /* PackedCol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PackedCol.h; path = "../../../../../../ClassiCube-master/src/PackedCol.h"; sourceTree = "<group>"; };
|
||||
9A6C7C0D2C073DF000676D27 /* Vectors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Vectors.h; path = "../../../../../../ClassiCube-master/src/Vectors.h"; sourceTree = "<group>"; };
|
||||
9A6C7C0E2C073DF100676D27 /* _smooth.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = _smooth.c; path = "../../../../../../ClassiCube-master/src/_smooth.c"; sourceTree = "<group>"; };
|
||||
9A6C7C0F2C073DF100676D27 /* Vorbis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Vorbis.h; path = "../../../../../../ClassiCube-master/src/Vorbis.h"; sourceTree = "<group>"; };
|
||||
9A6C7C102C073DF100676D27 /* _pshinter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = _pshinter.c; path = "../../../../../../ClassiCube-master/src/_pshinter.c"; sourceTree = "<group>"; };
|
||||
9A6C7C112C073DF100676D27 /* Drawer2D.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Drawer2D.c; path = "../../../../../../ClassiCube-master/src/Drawer2D.c"; sourceTree = "<group>"; };
|
||||
9A6C7C122C073DF100676D27 /* Widgets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Widgets.h; path = "../../../../../../ClassiCube-master/src/Widgets.h"; sourceTree = "<group>"; };
|
||||
9A6C7C132C073DF200676D27 /* World.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = World.c; path = "../../../../../../ClassiCube-master/src/World.c"; sourceTree = "<group>"; };
|
||||
9A6C7C142C073DF200676D27 /* Menus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Menus.h; path = "../../../../../../ClassiCube-master/src/Menus.h"; sourceTree = "<group>"; };
|
||||
9A6C7C152C073DF200676D27 /* _psaux.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = _psaux.c; path = "../../../../../../ClassiCube-master/src/_psaux.c"; sourceTree = "<group>"; };
|
||||
9A6C7C162C073DF200676D27 /* Window_SDL3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Window_SDL3.c; path = "../../../../../../ClassiCube-master/src/Window_SDL3.c"; sourceTree = "<group>"; };
|
||||
9A6C7C172C073DF200676D27 /* Lighting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Lighting.h; path = "../../../../../../ClassiCube-master/src/Lighting.h"; sourceTree = "<group>"; };
|
||||
9A6C7C182C073DF300676D27 /* Errors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Errors.h; path = "../../../../../../ClassiCube-master/src/Errors.h"; sourceTree = "<group>"; };
|
||||
9A6C7C192C073DF300676D27 /* SystemFonts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SystemFonts.h; path = "../../../../../../ClassiCube-master/src/SystemFonts.h"; sourceTree = "<group>"; };
|
||||
9A6C7C1A2C073DF300676D27 /* TexturePack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = TexturePack.c; path = "../../../../../../ClassiCube-master/src/TexturePack.c"; sourceTree = "<group>"; };
|
||||
9A6C7C1B2C073DF300676D27 /* Model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Model.h; path = "../../../../../../ClassiCube-master/src/Model.h"; sourceTree = "<group>"; };
|
||||
9A6C7C1C2C073DF300676D27 /* Block.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Block.c; path = "../../../../../../ClassiCube-master/src/Block.c"; sourceTree = "<group>"; };
|
||||
9A6C7C1D2C073DF300676D27 /* Bitmap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Bitmap.h; path = "../../../../../../ClassiCube-master/src/Bitmap.h"; sourceTree = "<group>"; };
|
||||
9A6C7C1E2C073DF300676D27 /* _ftbase.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = _ftbase.c; path = "../../../../../../ClassiCube-master/src/_ftbase.c"; sourceTree = "<group>"; };
|
||||
9A6C7C1F2C073DF400676D27 /* LWidgets.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = LWidgets.c; path = "../../../../../../ClassiCube-master/src/LWidgets.c"; sourceTree = "<group>"; };
|
||||
9A6C7C202C073DF400676D27 /* PackedCol.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = PackedCol.c; path = "../../../../../../ClassiCube-master/src/PackedCol.c"; sourceTree = "<group>"; };
|
||||
9A6C7C212C073DF400676D27 /* Physics.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Physics.c; path = "../../../../../../ClassiCube-master/src/Physics.c"; sourceTree = "<group>"; };
|
||||
9A6C7C222C073DF400676D27 /* Animations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Animations.h; path = "../../../../../../ClassiCube-master/src/Animations.h"; sourceTree = "<group>"; };
|
||||
9A6C7C232C073DF400676D27 /* Protocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Protocol.h; path = "../../../../../../ClassiCube-master/src/Protocol.h"; sourceTree = "<group>"; };
|
||||
9A6C7C242C073DF500676D27 /* GameVersion.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = GameVersion.c; path = "../../../../../../ClassiCube-master/src/GameVersion.c"; sourceTree = "<group>"; };
|
||||
9A6C7C252C073DF500676D27 /* Particle.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Particle.c; path = "../../../../../../ClassiCube-master/src/Particle.c"; sourceTree = "<group>"; };
|
||||
9A6C7C262C073DF500676D27 /* EntityRenderers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EntityRenderers.h; path = "../../../../../../ClassiCube-master/src/EntityRenderers.h"; sourceTree = "<group>"; };
|
||||
9A6C7C272C073DF500676D27 /* SelOutlineRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SelOutlineRenderer.h; path = "../../../../../../ClassiCube-master/src/SelOutlineRenderer.h"; sourceTree = "<group>"; };
|
||||
9A6C7C282C073DF500676D27 /* Graphics_SoftGPU.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Graphics_SoftGPU.c; path = "../../../../../../ClassiCube-master/src/Graphics_SoftGPU.c"; sourceTree = "<group>"; };
|
||||
9A6C7C292C073DF500676D27 /* MapRenderer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = MapRenderer.c; path = "../../../../../../ClassiCube-master/src/MapRenderer.c"; sourceTree = "<group>"; };
|
||||
9A6C7C2A2C073DF500676D27 /* SelectionBox.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SelectionBox.c; path = "../../../../../../ClassiCube-master/src/SelectionBox.c"; sourceTree = "<group>"; };
|
||||
9A6C7C2B2C073DF500676D27 /* Launcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Launcher.h; path = "../../../../../../ClassiCube-master/src/Launcher.h"; sourceTree = "<group>"; };
|
||||
9A6C7C2C2C073DF600676D27 /* Stream.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Stream.c; path = "../../../../../../ClassiCube-master/src/Stream.c"; sourceTree = "<group>"; };
|
||||
9A6C7C2D2C073DF600676D27 /* Formats.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Formats.c; path = "../../../../../../ClassiCube-master/src/Formats.c"; sourceTree = "<group>"; };
|
||||
9A6C7C2E2C073DF600676D27 /* Chat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Chat.c; path = "../../../../../../ClassiCube-master/src/Chat.c"; sourceTree = "<group>"; };
|
||||
9A6C7C2F2C073DF600676D27 /* Graphics_GL1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Graphics_GL1.c; path = "../../../../../../ClassiCube-master/src/Graphics_GL1.c"; sourceTree = "<group>"; };
|
||||
9A6C7C302C073DF600676D27 /* Window_Terminal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Window_Terminal.c; path = "../../../../../../ClassiCube-master/src/Window_Terminal.c"; sourceTree = "<group>"; };
|
||||
9A6C7C312C073DF700676D27 /* Event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Event.h; path = "../../../../../../ClassiCube-master/src/Event.h"; sourceTree = "<group>"; };
|
||||
9A6C7C322C073DF700676D27 /* String.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = String.h; path = "../../../../../../ClassiCube-master/src/String.h"; sourceTree = "<group>"; };
|
||||
9A6C7C332C073DF700676D27 /* LScreens.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LScreens.h; path = "../../../../../../ClassiCube-master/src/LScreens.h"; sourceTree = "<group>"; };
|
||||
9A6C7C342C073DF700676D27 /* AxisLinesRenderer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AxisLinesRenderer.c; path = "../../../../../../ClassiCube-master/src/AxisLinesRenderer.c"; sourceTree = "<group>"; };
|
||||
9A6C7C352C073DF700676D27 /* EnvRenderer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = EnvRenderer.c; path = "../../../../../../ClassiCube-master/src/EnvRenderer.c"; sourceTree = "<group>"; };
|
||||
9A6C7C362C073DF700676D27 /* _WindowBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = _WindowBase.h; path = "../../../../../../ClassiCube-master/src/_WindowBase.h"; sourceTree = "<group>"; };
|
||||
9A6C7C372C073DF700676D27 /* Input.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Input.h; path = "../../../../../../ClassiCube-master/src/Input.h"; sourceTree = "<group>"; };
|
||||
9A6C7C382C073DF800676D27 /* _ftsynth.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = _ftsynth.c; path = "../../../../../../ClassiCube-master/src/_ftsynth.c"; sourceTree = "<group>"; };
|
||||
9A6C7C392C073DF800676D27 /* IsometricDrawer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsometricDrawer.h; path = "../../../../../../ClassiCube-master/src/IsometricDrawer.h"; sourceTree = "<group>"; };
|
||||
9A6C7C3A2C073DF800676D27 /* Formats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Formats.h; path = "../../../../../../ClassiCube-master/src/Formats.h"; sourceTree = "<group>"; };
|
||||
9A6C7C3B2C073DF800676D27 /* Deflate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Deflate.h; path = "../../../../../../ClassiCube-master/src/Deflate.h"; sourceTree = "<group>"; };
|
||||
9A6C7C3C2C073DF800676D27 /* Logger.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Logger.c; path = "../../../../../../ClassiCube-master/src/Logger.c"; sourceTree = "<group>"; };
|
||||
9A6C7C3D2C073DF900676D27 /* Resources.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Resources.h; path = "../../../../../../ClassiCube-master/src/Resources.h"; sourceTree = "<group>"; };
|
||||
9A6C7C3E2C073DF900676D27 /* String.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = String.c; path = "../../../../../../ClassiCube-master/src/String.c"; sourceTree = "<group>"; };
|
||||
9A6C7C3F2C073DF900676D27 /* Protocol.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Protocol.c; path = "../../../../../../ClassiCube-master/src/Protocol.c"; sourceTree = "<group>"; };
|
||||
9A6C7C402C073DF900676D27 /* TouchUI.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = TouchUI.c; path = "../../../../../../ClassiCube-master/src/TouchUI.c"; sourceTree = "<group>"; };
|
||||
9A6C7C412C073DF900676D27 /* _type1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = _type1.c; path = "../../../../../../ClassiCube-master/src/_type1.c"; sourceTree = "<group>"; };
|
||||
9A6C7C422C073DFA00676D27 /* BlockID.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BlockID.h; path = "../../../../../../ClassiCube-master/src/BlockID.h"; sourceTree = "<group>"; };
|
||||
9A6C7C432C073DFA00676D27 /* Gui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Gui.h; path = "../../../../../../ClassiCube-master/src/Gui.h"; sourceTree = "<group>"; };
|
||||
9A6C7C442C073DFB00676D27 /* Picking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Picking.h; path = "../../../../../../ClassiCube-master/src/Picking.h"; sourceTree = "<group>"; };
|
||||
9A6C7C452C073DFB00676D27 /* Event.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Event.c; path = "../../../../../../ClassiCube-master/src/Event.c"; sourceTree = "<group>"; };
|
||||
9A6C7C462C073DFC00676D27 /* Launcher.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Launcher.c; path = "../../../../../../ClassiCube-master/src/Launcher.c"; sourceTree = "<group>"; };
|
||||
9A6C7C472C073DFC00676D27 /* Camera.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Camera.h; path = "../../../../../../ClassiCube-master/src/Camera.h"; sourceTree = "<group>"; };
|
||||
9A6C7C482C073DFC00676D27 /* Queue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Queue.h; path = "../../../../../../ClassiCube-master/src/Queue.h"; sourceTree = "<group>"; };
|
||||
9A6C7C492C073DFC00676D27 /* Screens.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Screens.h; path = "../../../../../../ClassiCube-master/src/Screens.h"; sourceTree = "<group>"; };
|
||||
9A6C7C4A2C073DFD00676D27 /* _sfnt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = _sfnt.c; path = "../../../../../../ClassiCube-master/src/_sfnt.c"; sourceTree = "<group>"; };
|
||||
9A6C7C4B2C073DFD00676D27 /* ExtMath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ExtMath.h; path = "../../../../../../ClassiCube-master/src/ExtMath.h"; sourceTree = "<group>"; };
|
||||
9A6C7C4C2C073DFD00676D27 /* Options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Options.h; path = "../../../../../../ClassiCube-master/src/Options.h"; sourceTree = "<group>"; };
|
||||
9A6C7C4D2C073DFE00676D27 /* Entity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Entity.h; path = "../../../../../../ClassiCube-master/src/Entity.h"; sourceTree = "<group>"; };
|
||||
9A6C7C4E2C073DFE00676D27 /* Drawer2D.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Drawer2D.h; path = "../../../../../../ClassiCube-master/src/Drawer2D.h"; sourceTree = "<group>"; };
|
||||
9A6C7C4F2C073DFE00676D27 /* LScreens.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = LScreens.c; path = "../../../../../../ClassiCube-master/src/LScreens.c"; sourceTree = "<group>"; };
|
||||
9A6C7C502C073DFE00676D27 /* Server.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Server.h; path = "../../../../../../ClassiCube-master/src/Server.h"; sourceTree = "<group>"; };
|
||||
9A6C7C512C073DFF00676D27 /* _HttpBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = _HttpBase.h; path = "../../../../../../ClassiCube-master/src/_HttpBase.h"; sourceTree = "<group>"; };
|
||||
9A6C7C522C073DFF00676D27 /* Commands.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Commands.c; path = "../../../../../../ClassiCube-master/src/Commands.c"; sourceTree = "<group>"; };
|
||||
9A6C7C532C073DFF00676D27 /* Core.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Core.h; path = "../../../../../../ClassiCube-master/src/Core.h"; sourceTree = "<group>"; };
|
||||
9A6C7C542C073DFF00676D27 /* EnvRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EnvRenderer.h; path = "../../../../../../ClassiCube-master/src/EnvRenderer.h"; sourceTree = "<group>"; };
|
||||
9A6C7C552C073E0000676D27 /* IsometricDrawer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = IsometricDrawer.c; path = "../../../../../../ClassiCube-master/src/IsometricDrawer.c"; sourceTree = "<group>"; };
|
||||
9A6C7C562C073E0000676D27 /* _GLShared.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = _GLShared.h; path = "../../../../../../ClassiCube-master/src/_GLShared.h"; sourceTree = "<group>"; };
|
||||
9A6C7C572C073E0000676D27 /* HeldBlockRenderer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = HeldBlockRenderer.c; path = "../../../../../../ClassiCube-master/src/HeldBlockRenderer.c"; sourceTree = "<group>"; };
|
||||
9A6C7C582C073E0100676D27 /* _psmodule.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = _psmodule.c; path = "../../../../../../ClassiCube-master/src/_psmodule.c"; sourceTree = "<group>"; };
|
||||
9A6C7C592C073E0100676D27 /* World.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = World.h; path = "../../../../../../ClassiCube-master/src/World.h"; sourceTree = "<group>"; };
|
||||
9A6C7C5A2C073E0100676D27 /* Gui.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Gui.c; path = "../../../../../../ClassiCube-master/src/Gui.c"; sourceTree = "<group>"; };
|
||||
9A6C7C5B2C073E0200676D27 /* _truetype.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = _truetype.c; path = "../../../../../../ClassiCube-master/src/_truetype.c"; sourceTree = "<group>"; };
|
||||
9A6C7C5C2C073E0200676D27 /* Generator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Generator.h; path = "../../../../../../ClassiCube-master/src/Generator.h"; sourceTree = "<group>"; };
|
||||
9A6C7C5D2C073E0200676D27 /* Game.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Game.h; path = "../../../../../../ClassiCube-master/src/Game.h"; sourceTree = "<group>"; };
|
||||
9A6C7C5E2C073E0200676D27 /* Window_cocoa.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Window_cocoa.m; path = "../../../../../../ClassiCube-master/src/Window_cocoa.m"; sourceTree = "<group>"; };
|
||||
9A6C7C5F2C073E0200676D27 /* Vorbis.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Vorbis.c; path = "../../../../../../ClassiCube-master/src/Vorbis.c"; sourceTree = "<group>"; };
|
||||
9A6C7C602C073E0300676D27 /* Inventory.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Inventory.c; path = "../../../../../../ClassiCube-master/src/Inventory.c"; sourceTree = "<group>"; };
|
||||
9A6C7C612C073E0300676D27 /* _PlatformBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = _PlatformBase.h; path = "../../../../../../ClassiCube-master/src/_PlatformBase.h"; sourceTree = "<group>"; };
|
||||
9A6C7C622C073E0300676D27 /* Animations.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Animations.c; path = "../../../../../../ClassiCube-master/src/Animations.c"; sourceTree = "<group>"; };
|
||||
9A6C7C632C073E0300676D27 /* FancyLighting.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = FancyLighting.c; path = "../../../../../../ClassiCube-master/src/FancyLighting.c"; sourceTree = "<group>"; };
|
||||
9A6C7C642C073E0400676D27 /* Inventory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Inventory.h; path = "../../../../../../ClassiCube-master/src/Inventory.h"; sourceTree = "<group>"; };
|
||||
9A6C7C652C073E0400676D27 /* SSL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SSL.h; path = "../../../../../../ClassiCube-master/src/SSL.h"; sourceTree = "<group>"; };
|
||||
9A6C7C662C073E0400676D27 /* Widgets.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Widgets.c; path = "../../../../../../ClassiCube-master/src/Widgets.c"; sourceTree = "<group>"; };
|
||||
9A6C7C672C073E0400676D27 /* Picking.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Picking.c; path = "../../../../../../ClassiCube-master/src/Picking.c"; sourceTree = "<group>"; };
|
||||
9A6C7C682C073E0400676D27 /* _ftinit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = _ftinit.c; path = "../../../../../../ClassiCube-master/src/_ftinit.c"; sourceTree = "<group>"; };
|
||||
9A6C7C692C073E0400676D27 /* Window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Window.h; path = "../../../../../../ClassiCube-master/src/Window.h"; sourceTree = "<group>"; };
|
||||
9A6C7C6A2C073E0500676D27 /* LBackend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LBackend.h; path = "../../../../../../ClassiCube-master/src/LBackend.h"; sourceTree = "<group>"; };
|
||||
9A6C7C6B2C073E0500676D27 /* Http_Worker.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Http_Worker.c; path = "../../../../../../ClassiCube-master/src/Http_Worker.c"; sourceTree = "<group>"; };
|
||||
9A6C7C6C2C073E0500676D27 /* AxisLinesRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AxisLinesRenderer.h; path = "../../../../../../ClassiCube-master/src/AxisLinesRenderer.h"; sourceTree = "<group>"; };
|
||||
9A6C7C6D2C073E0500676D27 /* ExtMath.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ExtMath.c; path = "../../../../../../ClassiCube-master/src/ExtMath.c"; sourceTree = "<group>"; };
|
||||
9A6C7C6E2C073E0600676D27 /* Block.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Block.h; path = "../../../../../../ClassiCube-master/src/Block.h"; sourceTree = "<group>"; };
|
||||
9A6C7C6F2C073E0600676D27 /* _cff.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = _cff.c; path = "../../../../../../ClassiCube-master/src/_cff.c"; sourceTree = "<group>"; };
|
||||
9A6C7C702C073E0600676D27 /* Camera.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Camera.c; path = "../../../../../../ClassiCube-master/src/Camera.c"; sourceTree = "<group>"; };
|
||||
9A6C7C712C073E0600676D27 /* Drawer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Drawer.c; path = "../../../../../../ClassiCube-master/src/Drawer.c"; sourceTree = "<group>"; };
|
||||
9A6C7C722C073E0600676D27 /* Entity.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Entity.c; path = "../../../../../../ClassiCube-master/src/Entity.c"; sourceTree = "<group>"; };
|
||||
9A6C7C732C073E0700676D27 /* Audio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Audio.h; path = "../../../../../../ClassiCube-master/src/Audio.h"; sourceTree = "<group>"; };
|
||||
9A6C7C742C073E0700676D27 /* SystemFonts.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SystemFonts.c; path = "../../../../../../ClassiCube-master/src/SystemFonts.c"; sourceTree = "<group>"; };
|
||||
9A6C7C752C073E0700676D27 /* _GraphicsBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = _GraphicsBase.h; path = "../../../../../../ClassiCube-master/src/_GraphicsBase.h"; sourceTree = "<group>"; };
|
||||
9A6C7C762C073E0700676D27 /* BlockPhysics.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BlockPhysics.c; path = "../../../../../../ClassiCube-master/src/BlockPhysics.c"; sourceTree = "<group>"; };
|
||||
9A6C7C772C073E0700676D27 /* main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = main.c; path = "../../../../../../ClassiCube-master/src/main.c"; sourceTree = "<group>"; };
|
||||
9A6C7C782C073E0800676D27 /* Builder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Builder.h; path = "../../../../../../ClassiCube-master/src/Builder.h"; sourceTree = "<group>"; };
|
||||
9A6C7C792C073E0800676D27 /* Model.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Model.c; path = "../../../../../../ClassiCube-master/src/Model.c"; sourceTree = "<group>"; };
|
||||
9A6C7C7A2C073E0800676D27 /* Graphics_Metal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Graphics_Metal.m; path = "../../../../../../ClassiCube-master/src/Graphics_Metal.m"; sourceTree = "<group>"; };
|
||||
9A6C7C7B2C073E0800676D27 /* Logger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Logger.h; path = "../../../../../../ClassiCube-master/src/Logger.h"; sourceTree = "<group>"; };
|
||||
9A6C7C7C2C073E0800676D27 /* Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Utils.h; path = "../../../../../../ClassiCube-master/src/Utils.h"; sourceTree = "<group>"; };
|
||||
9A6C7C7D2C073E0800676D27 /* SelOutlineRenderer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SelOutlineRenderer.c; path = "../../../../../../ClassiCube-master/src/SelOutlineRenderer.c"; sourceTree = "<group>"; };
|
||||
9A6C7C7E2C073E0900676D27 /* EntityRenderers.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = EntityRenderers.c; path = "../../../../../../ClassiCube-master/src/EntityRenderers.c"; sourceTree = "<group>"; };
|
||||
9A6C7C7F2C073E0900676D27 /* Graphics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Graphics.h; path = "../../../../../../ClassiCube-master/src/Graphics.h"; sourceTree = "<group>"; };
|
||||
9A6C7C802C073E0900676D27 /* LBackend.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = LBackend.c; path = "../../../../../../ClassiCube-master/src/LBackend.c"; sourceTree = "<group>"; };
|
||||
9A6C7C812C073E0900676D27 /* Builder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Builder.c; path = "../../../../../../ClassiCube-master/src/Builder.c"; sourceTree = "<group>"; };
|
||||
9A6C7C822C073E0900676D27 /* MapRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MapRenderer.h; path = "../../../../../../ClassiCube-master/src/MapRenderer.h"; sourceTree = "<group>"; };
|
||||
9A6C7C832C073E0A00676D27 /* Server.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Server.c; path = "../../../../../../ClassiCube-master/src/Server.c"; sourceTree = "<group>"; };
|
||||
9A6C7C842C073E0A00676D27 /* Audio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Audio.c; path = "../../../../../../ClassiCube-master/src/Audio.c"; sourceTree = "<group>"; };
|
||||
9A6C7C852C073E0A00676D27 /* Deflate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Deflate.c; path = "../../../../../../ClassiCube-master/src/Deflate.c"; sourceTree = "<group>"; };
|
||||
9A6C7C862C073E0A00676D27 /* Drawer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Drawer.h; path = "../../../../../../ClassiCube-master/src/Drawer.h"; sourceTree = "<group>"; };
|
||||
9A6C7C872C073E0B00676D27 /* Chat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Chat.h; path = "../../../../../../ClassiCube-master/src/Chat.h"; sourceTree = "<group>"; };
|
||||
9A6C7C882C073E0B00676D27 /* BlockPhysics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BlockPhysics.h; path = "../../../../../../ClassiCube-master/src/BlockPhysics.h"; sourceTree = "<group>"; };
|
||||
9A6C7C892C073E0B00676D27 /* Bitmap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Bitmap.c; path = "../../../../../../ClassiCube-master/src/Bitmap.c"; sourceTree = "<group>"; };
|
||||
9A6C7C8A2C073E0B00676D27 /* LWidgets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LWidgets.h; path = "../../../../../../ClassiCube-master/src/LWidgets.h"; sourceTree = "<group>"; };
|
||||
9A6C7C8B2C073E0C00676D27 /* HeldBlockRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HeldBlockRenderer.h; path = "../../../../../../ClassiCube-master/src/HeldBlockRenderer.h"; sourceTree = "<group>"; };
|
||||
9A6C7C8C2C073E0C00676D27 /* SelectionBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SelectionBox.h; path = "../../../../../../ClassiCube-master/src/SelectionBox.h"; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
9A6C796E2C073BFF00676D27 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
9A6C79682C073BFF00676D27 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9A6C79732C073BFF00676D27 /* ClassiCube */,
|
||||
9A6C79722C073BFF00676D27 /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
9A6C79722C073BFF00676D27 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9A6C79712C073BFF00676D27 /* ClassiCube */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
9A6C79732C073BFF00676D27 /* ClassiCube */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9A6C7BF52C073DED00676D27 /* _autofit.c */,
|
||||
9A6C7C6F2C073E0600676D27 /* _cff.c */,
|
||||
9A6C7C1E2C073DF300676D27 /* _ftbase.c */,
|
||||
9A6C7BF22C073DED00676D27 /* _ftbitmap.c */,
|
||||
9A6C7BEB2C073DEC00676D27 /* _ftglyph.c */,
|
||||
9A6C7C682C073E0400676D27 /* _ftinit.c */,
|
||||
9A6C7C382C073DF800676D27 /* _ftsynth.c */,
|
||||
9A6C7C562C073E0000676D27 /* _GLShared.h */,
|
||||
9A6C7C752C073E0700676D27 /* _GraphicsBase.h */,
|
||||
9A6C7C512C073DFF00676D27 /* _HttpBase.h */,
|
||||
9A6C7C612C073E0300676D27 /* _PlatformBase.h */,
|
||||
9A6C7BF62C073DED00676D27 /* _PlatformConsole.h */,
|
||||
9A6C7C152C073DF200676D27 /* _psaux.c */,
|
||||
9A6C7C102C073DF100676D27 /* _pshinter.c */,
|
||||
9A6C7C582C073E0100676D27 /* _psmodule.c */,
|
||||
9A6C7C4A2C073DFD00676D27 /* _sfnt.c */,
|
||||
9A6C7C0E2C073DF100676D27 /* _smooth.c */,
|
||||
9A6C7C5B2C073E0200676D27 /* _truetype.c */,
|
||||
9A6C7C412C073DF900676D27 /* _type1.c */,
|
||||
9A6C7C362C073DF700676D27 /* _WindowBase.h */,
|
||||
9A6C7C622C073E0300676D27 /* Animations.c */,
|
||||
9A6C7C222C073DF400676D27 /* Animations.h */,
|
||||
9A6C7C842C073E0A00676D27 /* Audio.c */,
|
||||
9A6C7C732C073E0700676D27 /* Audio.h */,
|
||||
9A6C7C0A2C073DF000676D27 /* AudioBackend.c */,
|
||||
9A6C7C342C073DF700676D27 /* AxisLinesRenderer.c */,
|
||||
9A6C7C6C2C073E0500676D27 /* AxisLinesRenderer.h */,
|
||||
9A6C7C892C073E0B00676D27 /* Bitmap.c */,
|
||||
9A6C7C1D2C073DF300676D27 /* Bitmap.h */,
|
||||
9A6C7C1C2C073DF300676D27 /* Block.c */,
|
||||
9A6C7C6E2C073E0600676D27 /* Block.h */,
|
||||
9A6C7C422C073DFA00676D27 /* BlockID.h */,
|
||||
9A6C7C762C073E0700676D27 /* BlockPhysics.c */,
|
||||
9A6C7C882C073E0B00676D27 /* BlockPhysics.h */,
|
||||
9A6C7C812C073E0900676D27 /* Builder.c */,
|
||||
9A6C7C782C073E0800676D27 /* Builder.h */,
|
||||
9A6C7C702C073E0600676D27 /* Camera.c */,
|
||||
9A6C7C472C073DFC00676D27 /* Camera.h */,
|
||||
9A6C7C2E2C073DF600676D27 /* Chat.c */,
|
||||
9A6C7C872C073E0B00676D27 /* Chat.h */,
|
||||
9A6C7C522C073DFF00676D27 /* Commands.c */,
|
||||
9A6C7BEF2C073DED00676D27 /* Commands.h */,
|
||||
9A6C7BEC2C073DED00676D27 /* Constants.h */,
|
||||
9A6C7C532C073DFF00676D27 /* Core.h */,
|
||||
9A6C7C852C073E0A00676D27 /* Deflate.c */,
|
||||
9A6C7C3B2C073DF800676D27 /* Deflate.h */,
|
||||
9A6C7C712C073E0600676D27 /* Drawer.c */,
|
||||
9A6C7C862C073E0A00676D27 /* Drawer.h */,
|
||||
9A6C7C112C073DF100676D27 /* Drawer2D.c */,
|
||||
9A6C7C4E2C073DFE00676D27 /* Drawer2D.h */,
|
||||
9A6C7C722C073E0600676D27 /* Entity.c */,
|
||||
9A6C7C4D2C073DFE00676D27 /* Entity.h */,
|
||||
9A6C7C042C073DEF00676D27 /* EntityComponents.c */,
|
||||
9A6C7BF32C073DED00676D27 /* EntityComponents.h */,
|
||||
9A6C7C7E2C073E0900676D27 /* EntityRenderers.c */,
|
||||
9A6C7C262C073DF500676D27 /* EntityRenderers.h */,
|
||||
9A6C7C352C073DF700676D27 /* EnvRenderer.c */,
|
||||
9A6C7C542C073DFF00676D27 /* EnvRenderer.h */,
|
||||
9A6C7C182C073DF300676D27 /* Errors.h */,
|
||||
9A6C7C452C073DFB00676D27 /* Event.c */,
|
||||
9A6C7C312C073DF700676D27 /* Event.h */,
|
||||
9A6C7C6D2C073E0500676D27 /* ExtMath.c */,
|
||||
9A6C7C4B2C073DFD00676D27 /* ExtMath.h */,
|
||||
9A6C7C632C073E0300676D27 /* FancyLighting.c */,
|
||||
9A6C7C2D2C073DF600676D27 /* Formats.c */,
|
||||
9A6C7C3A2C073DF800676D27 /* Formats.h */,
|
||||
9A6C7C062C073DEF00676D27 /* Funcs.h */,
|
||||
9A6C7C052C073DEF00676D27 /* Game.c */,
|
||||
9A6C7C5D2C073E0200676D27 /* Game.h */,
|
||||
9A6C7C242C073DF500676D27 /* GameVersion.c */,
|
||||
9A6C7BFB2C073DEE00676D27 /* Generator.c */,
|
||||
9A6C7C5C2C073E0200676D27 /* Generator.h */,
|
||||
9A6C7C2F2C073DF600676D27 /* Graphics_GL1.c */,
|
||||
9A6C7C012C073DEE00676D27 /* Graphics_GL2.c */,
|
||||
9A6C7C7A2C073E0800676D27 /* Graphics_Metal.m */,
|
||||
9A6C7C282C073DF500676D27 /* Graphics_SoftGPU.c */,
|
||||
9A6C7C7F2C073E0900676D27 /* Graphics.h */,
|
||||
9A6C7C5A2C073E0100676D27 /* Gui.c */,
|
||||
9A6C7C432C073DFA00676D27 /* Gui.h */,
|
||||
9A6C7C572C073E0000676D27 /* HeldBlockRenderer.c */,
|
||||
9A6C7C8B2C073E0C00676D27 /* HeldBlockRenderer.h */,
|
||||
9A6C7C6B2C073E0500676D27 /* Http_Worker.c */,
|
||||
9A6C7C032C073DEF00676D27 /* Http.h */,
|
||||
9A6C7BF02C073DED00676D27 /* Input.c */,
|
||||
9A6C7C372C073DF700676D27 /* Input.h */,
|
||||
9A6C7C5E2C073E0200676D27 /* Window_cocoa.m */,
|
||||
9A6C7C602C073E0300676D27 /* Inventory.c */,
|
||||
9A6C7C642C073E0400676D27 /* Inventory.h */,
|
||||
9A6C7C552C073E0000676D27 /* IsometricDrawer.c */,
|
||||
9A6C7C392C073DF800676D27 /* IsometricDrawer.h */,
|
||||
9A6C7C462C073DFC00676D27 /* Launcher.c */,
|
||||
9A6C7C2B2C073DF500676D27 /* Launcher.h */,
|
||||
9A6C7BFF2C073DEE00676D27 /* LBackend_Android.c */,
|
||||
9A6C7C802C073E0900676D27 /* LBackend.c */,
|
||||
9A6C7C6A2C073E0500676D27 /* LBackend.h */,
|
||||
9A6C7C022C073DEE00676D27 /* Lighting.c */,
|
||||
9A6C7C172C073DF200676D27 /* Lighting.h */,
|
||||
9A6C7C3C2C073DF800676D27 /* Logger.c */,
|
||||
9A6C7C7B2C073E0800676D27 /* Logger.h */,
|
||||
9A6C7C4F2C073DFE00676D27 /* LScreens.c */,
|
||||
9A6C7C332C073DF700676D27 /* LScreens.h */,
|
||||
9A6C7BFA2C073DEE00676D27 /* LWeb.c */,
|
||||
9A6C7BF42C073DED00676D27 /* LWeb.h */,
|
||||
9A6C7C1F2C073DF400676D27 /* LWidgets.c */,
|
||||
9A6C7C8A2C073E0B00676D27 /* LWidgets.h */,
|
||||
9A6C7C772C073E0700676D27 /* main.c */,
|
||||
9A6C7C292C073DF500676D27 /* MapRenderer.c */,
|
||||
9A6C7C822C073E0900676D27 /* MapRenderer.h */,
|
||||
9A6C7BF82C073DED00676D27 /* Menus.c */,
|
||||
9A6C7C142C073DF200676D27 /* Menus.h */,
|
||||
9A6C7C792C073E0800676D27 /* Model.c */,
|
||||
9A6C7C1B2C073DF300676D27 /* Model.h */,
|
||||
9A6C7BF12C073DED00676D27 /* Options.c */,
|
||||
9A6C7C4C2C073DFD00676D27 /* Options.h */,
|
||||
9A6C7C202C073DF400676D27 /* PackedCol.c */,
|
||||
9A6C7C0C2C073DF000676D27 /* PackedCol.h */,
|
||||
9A6C7C252C073DF500676D27 /* Particle.c */,
|
||||
9A6C7BFC2C073DEE00676D27 /* Particle.h */,
|
||||
9A6C7C212C073DF400676D27 /* Physics.c */,
|
||||
9A6C7BF72C073DED00676D27 /* Physics.h */,
|
||||
9A6C7C672C073E0400676D27 /* Picking.c */,
|
||||
9A6C7C442C073DFB00676D27 /* Picking.h */,
|
||||
9A6C7C072C073DEF00676D27 /* Platform_Posix.c */,
|
||||
9A6C7BF92C073DED00676D27 /* Platform.h */,
|
||||
9A6C7C3F2C073DF900676D27 /* Protocol.c */,
|
||||
9A6C7C232C073DF400676D27 /* Protocol.h */,
|
||||
9A6C7C0B2C073DF000676D27 /* Queue.c */,
|
||||
9A6C7C482C073DFC00676D27 /* Queue.h */,
|
||||
9A6C7C092C073DEF00676D27 /* Resources.c */,
|
||||
9A6C7C3D2C073DF900676D27 /* Resources.h */,
|
||||
9A6C7BFD2C073DEE00676D27 /* Screens.c */,
|
||||
9A6C7C492C073DFC00676D27 /* Screens.h */,
|
||||
9A6C7C2A2C073DF500676D27 /* SelectionBox.c */,
|
||||
9A6C7C8C2C073E0C00676D27 /* SelectionBox.h */,
|
||||
9A6C7C7D2C073E0800676D27 /* SelOutlineRenderer.c */,
|
||||
9A6C7C272C073DF500676D27 /* SelOutlineRenderer.h */,
|
||||
9A6C7C832C073E0A00676D27 /* Server.c */,
|
||||
9A6C7C502C073DFE00676D27 /* Server.h */,
|
||||
9A6C7BFE2C073DEE00676D27 /* SSL.c */,
|
||||
9A6C7C652C073E0400676D27 /* SSL.h */,
|
||||
9A6C7C2C2C073DF600676D27 /* Stream.c */,
|
||||
9A6C7BED2C073DED00676D27 /* Stream.h */,
|
||||
9A6C7C3E2C073DF900676D27 /* String.c */,
|
||||
9A6C7C322C073DF700676D27 /* String.h */,
|
||||
9A6C7C742C073E0700676D27 /* SystemFonts.c */,
|
||||
9A6C7C192C073DF300676D27 /* SystemFonts.h */,
|
||||
9A6C7C1A2C073DF300676D27 /* TexturePack.c */,
|
||||
9A6C7BEA2C073DEC00676D27 /* TexturePack.h */,
|
||||
9A6C7C402C073DF900676D27 /* TouchUI.c */,
|
||||
9A6C7C082C073DEF00676D27 /* Utils.c */,
|
||||
9A6C7C7C2C073E0800676D27 /* Utils.h */,
|
||||
9A6C7BE92C073DEC00676D27 /* Vectors.c */,
|
||||
9A6C7C0D2C073DF000676D27 /* Vectors.h */,
|
||||
9A6C7BEE2C073DED00676D27 /* VirtualKeyboard.h */,
|
||||
9A6C7C5F2C073E0200676D27 /* Vorbis.c */,
|
||||
9A6C7C0F2C073DF100676D27 /* Vorbis.h */,
|
||||
9A6C7C662C073E0400676D27 /* Widgets.c */,
|
||||
9A6C7C122C073DF100676D27 /* Widgets.h */,
|
||||
9A6C7C002C073DEE00676D27 /* Window_SDL2.c */,
|
||||
9A6C7C162C073DF200676D27 /* Window_SDL3.c */,
|
||||
9A6C7C302C073DF600676D27 /* Window_Terminal.c */,
|
||||
9A6C7C692C073E0400676D27 /* Window.h */,
|
||||
9A6C7C132C073DF200676D27 /* World.c */,
|
||||
9A6C7C592C073E0100676D27 /* World.h */,
|
||||
);
|
||||
path = ClassiCube;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
9A6C79702C073BFF00676D27 /* ClassiCube */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 9A6C79782C073BFF00676D27 /* Build configuration list for PBXNativeTarget "ClassiCube" */;
|
||||
buildPhases = (
|
||||
9A6C796D2C073BFF00676D27 /* Sources */,
|
||||
9A6C796E2C073BFF00676D27 /* Frameworks */,
|
||||
9A6C796F2C073BFF00676D27 /* CopyFiles */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = ClassiCube;
|
||||
productName = ClassiCube;
|
||||
productReference = 9A6C79712C073BFF00676D27 /* ClassiCube */;
|
||||
productType = "com.apple.product-type.tool";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
9A6C79692C073BFF00676D27 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 1010;
|
||||
ORGANIZATIONNAME = ClassiCube;
|
||||
TargetAttributes = {
|
||||
9A6C79702C073BFF00676D27 = {
|
||||
CreatedOnToolsVersion = 10.1;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 9A6C796C2C073BFF00676D27 /* Build configuration list for PBXProject "ClassiCube" */;
|
||||
compatibilityVersion = "Xcode 9.3";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
);
|
||||
mainGroup = 9A6C79682C073BFF00676D27;
|
||||
productRefGroup = 9A6C79722C073BFF00676D27 /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
9A6C79702C073BFF00676D27 /* ClassiCube */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
9A6C796D2C073BFF00676D27 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
9A6C7CB92C073E0C00676D27 /* AxisLinesRenderer.c in Sources */,
|
||||
9A6C7CAF2C073E0C00676D27 /* GameVersion.c in Sources */,
|
||||
9A6C7C9E2C073E0C00676D27 /* Platform_Posix.c in Sources */,
|
||||
9A6C7C9A2C073E0C00676D27 /* Graphics_GL2.c in Sources */,
|
||||
9A6C7C972C073E0C00676D27 /* SSL.c in Sources */,
|
||||
9A6C7CD42C073E0C00676D27 /* ExtMath.c in Sources */,
|
||||
9A6C7CD52C073E0C00676D27 /* _cff.c in Sources */,
|
||||
9A6C7CAA2C073E0C00676D27 /* Block.c in Sources */,
|
||||
9A6C7CC12C073E0C00676D27 /* Event.c in Sources */,
|
||||
9A6C7CDC2C073E0C00676D27 /* Model.c in Sources */,
|
||||
9A6C7CC72C073E0C00676D27 /* HeldBlockRenderer.c in Sources */,
|
||||
9A6C7CDB2C073E0C00676D27 /* main.c in Sources */,
|
||||
9A6C7CDE2C073E0C00676D27 /* SelOutlineRenderer.c in Sources */,
|
||||
9A6C7CB42C073E0C00676D27 /* Stream.c in Sources */,
|
||||
9A6C7CE22C073E0C00676D27 /* Server.c in Sources */,
|
||||
9A6C7C912C073E0C00676D27 /* _ftbitmap.c in Sources */,
|
||||
9A6C7CC52C073E0C00676D27 /* Commands.c in Sources */,
|
||||
9A6C7CD22C073E0C00676D27 /* _ftinit.c in Sources */,
|
||||
9A6C7CD72C073E0C00676D27 /* Drawer.c in Sources */,
|
||||
9A6C7CE12C073E0C00676D27 /* Builder.c in Sources */,
|
||||
9A6C7CA92C073E0C00676D27 /* TexturePack.c in Sources */,
|
||||
9A6C7C962C073E0C00676D27 /* Screens.c in Sources */,
|
||||
9A6C7CB32C073E0C00676D27 /* SelectionBox.c in Sources */,
|
||||
9A6C7CCC2C073E0C00676D27 /* Vorbis.c in Sources */,
|
||||
9A6C7CDF2C073E0C00676D27 /* EntityRenderers.c in Sources */,
|
||||
9A6C7CE02C073E0C00676D27 /* LBackend.c in Sources */,
|
||||
9A6C7CDA2C073E0C00676D27 /* BlockPhysics.c in Sources */,
|
||||
9A6C7CC92C073E0C00676D27 /* Gui.c in Sources */,
|
||||
9A6C7CAB2C073E0C00676D27 /* _ftbase.c in Sources */,
|
||||
9A6C7CB22C073E0C00676D27 /* MapRenderer.c in Sources */,
|
||||
9A6C7C9B2C073E0C00676D27 /* Lighting.c in Sources */,
|
||||
9A6C7C992C073E0C00676D27 /* Window_SDL2.c in Sources */,
|
||||
9A6C7CBF2C073E0C00676D27 /* TouchUI.c in Sources */,
|
||||
9A6C7CD32C073E0C00676D27 /* Http_Worker.c in Sources */,
|
||||
9A6C7CD82C073E0C00676D27 /* Entity.c in Sources */,
|
||||
9A6C7CA02C073E0C00676D27 /* Resources.c in Sources */,
|
||||
9A6C7CA72C073E0C00676D27 /* _psaux.c in Sources */,
|
||||
9A6C7CCB2C073E0C00676D27 /* Window_cocoa.m in Sources */,
|
||||
9A6C7C9C2C073E0C00676D27 /* EntityComponents.c in Sources */,
|
||||
9A6C7C982C073E0C00676D27 /* LBackend_Android.c in Sources */,
|
||||
9A6C7CB02C073E0C00676D27 /* Particle.c in Sources */,
|
||||
9A6C7C942C073E0C00676D27 /* LWeb.c in Sources */,
|
||||
9A6C7C952C073E0C00676D27 /* Generator.c in Sources */,
|
||||
9A6C7C932C073E0C00676D27 /* Menus.c in Sources */,
|
||||
9A6C7CA22C073E0C00676D27 /* Queue.c in Sources */,
|
||||
9A6C7CC42C073E0C00676D27 /* LScreens.c in Sources */,
|
||||
9A6C7CD92C073E0C00676D27 /* SystemFonts.c in Sources */,
|
||||
9A6C7CA82C073E0C00676D27 /* Window_SDL3.c in Sources */,
|
||||
9A6C7CBE2C073E0C00676D27 /* Protocol.c in Sources */,
|
||||
9A6C7CC02C073E0C00676D27 /* _type1.c in Sources */,
|
||||
9A6C7CA12C073E0C00676D27 /* AudioBackend.c in Sources */,
|
||||
9A6C7CDD2C073E0C00676D27 /* Graphics_Metal.m in Sources */,
|
||||
9A6C7CBD2C073E0C00676D27 /* String.c in Sources */,
|
||||
9A6C7C8F2C073E0C00676D27 /* Input.c in Sources */,
|
||||
9A6C7CB52C073E0C00676D27 /* Formats.c in Sources */,
|
||||
9A6C7CB72C073E0C00676D27 /* Graphics_GL1.c in Sources */,
|
||||
9A6C7CA42C073E0C00676D27 /* _pshinter.c in Sources */,
|
||||
9A6C7CBA2C073E0C00676D27 /* EnvRenderer.c in Sources */,
|
||||
9A6C7C9F2C073E0C00676D27 /* Utils.c in Sources */,
|
||||
9A6C7C922C073E0C00676D27 /* _autofit.c in Sources */,
|
||||
9A6C7CCD2C073E0C00676D27 /* Inventory.c in Sources */,
|
||||
9A6C7CB12C073E0C00676D27 /* Graphics_SoftGPU.c in Sources */,
|
||||
9A6C7C9D2C073E0C00676D27 /* Game.c in Sources */,
|
||||
9A6C7CC62C073E0C00676D27 /* IsometricDrawer.c in Sources */,
|
||||
9A6C7CD12C073E0C00676D27 /* Picking.c in Sources */,
|
||||
9A6C7CAE2C073E0C00676D27 /* Physics.c in Sources */,
|
||||
9A6C7CA32C073E0C00676D27 /* _smooth.c in Sources */,
|
||||
9A6C7C8E2C073E0C00676D27 /* _ftglyph.c in Sources */,
|
||||
9A6C7CE52C073E0C00676D27 /* Bitmap.c in Sources */,
|
||||
9A6C7CD62C073E0C00676D27 /* Camera.c in Sources */,
|
||||
9A6C7CB62C073E0C00676D27 /* Chat.c in Sources */,
|
||||
9A6C7CCE2C073E0C00676D27 /* Animations.c in Sources */,
|
||||
9A6C7CE42C073E0C00676D27 /* Deflate.c in Sources */,
|
||||
9A6C7CC82C073E0C00676D27 /* _psmodule.c in Sources */,
|
||||
9A6C7CA62C073E0C00676D27 /* World.c in Sources */,
|
||||
9A6C7CAD2C073E0C00676D27 /* PackedCol.c in Sources */,
|
||||
9A6C7CBC2C073E0C00676D27 /* Logger.c in Sources */,
|
||||
9A6C7C902C073E0C00676D27 /* Options.c in Sources */,
|
||||
9A6C7CC32C073E0C00676D27 /* _sfnt.c in Sources */,
|
||||
9A6C7CBB2C073E0C00676D27 /* _ftsynth.c in Sources */,
|
||||
9A6C7C8D2C073E0C00676D27 /* Vectors.c in Sources */,
|
||||
9A6C7CD02C073E0C00676D27 /* Widgets.c in Sources */,
|
||||
9A6C7CB82C073E0C00676D27 /* Window_Terminal.c in Sources */,
|
||||
9A6C7CE32C073E0C00676D27 /* Audio.c in Sources */,
|
||||
9A6C7CAC2C073E0C00676D27 /* LWidgets.c in Sources */,
|
||||
9A6C7CCF2C073E0C00676D27 /* FancyLighting.c in Sources */,
|
||||
9A6C7CCA2C073E0C00676D27 /* _truetype.c in Sources */,
|
||||
9A6C7CA52C073E0C00676D27 /* Drawer2D.c in Sources */,
|
||||
9A6C7CC22C073E0C00676D27 /* Launcher.c in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
9A6C79762C073BFF00676D27 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "-";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = macosx;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
9A6C79772C073BFF00676D27 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "-";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
SDKROOT = macosx;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
9A6C79792C073BFF00676D27 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_OBJC_ARC = NO;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
9A6C797A2C073BFF00676D27 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_OBJC_ARC = NO;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
9A6C796C2C073BFF00676D27 /* Build configuration list for PBXProject "ClassiCube" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
9A6C79762C073BFF00676D27 /* Debug */,
|
||||
9A6C79772C073BFF00676D27 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
9A6C79782C073BFF00676D27 /* Build configuration list for PBXNativeTarget "ClassiCube" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
9A6C79792C073BFF00676D27 /* Debug */,
|
||||
9A6C797A2C073BFF00676D27 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 9A6C79692C073BFF00676D27 /* Project object */;
|
||||
}
|
||||
BIN
misc/macOS/appicon.icns
Normal file
20
misc/macOS/info.plist
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>ClassiCube</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>appicon</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.classicube.client.mac</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>ClassiCube</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>ClassiCube</string>
|
||||
</dict>
|
||||
</plist>
|
||||
43
misc/macOS/mac_icon_gen.cs
Normal file
@@ -0,0 +1,43 @@
|
||||
using System.Drawing.Imaging;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
|
||||
namespace test
|
||||
{
|
||||
public static class Program
|
||||
{
|
||||
const string src = "CCicon.ico";
|
||||
const string dst = "_CCIcon_mac.h";
|
||||
|
||||
static void DumpIcon(StreamWriter sw, int width, int height) {
|
||||
using (Icon icon = new Icon(src, width, height)) {
|
||||
using (Bitmap bmp = icon.ToBitmap()) {
|
||||
for (int y = 0; y < bmp.Height; y++) {
|
||||
for (int x = 0; x < bmp.Width; x++) {
|
||||
Color c = bmp.GetPixel(x, y);
|
||||
|
||||
int r = c.R * c.A / 255;
|
||||
int g = c.G * c.A / 255;
|
||||
int b = c.B * c.A / 255;
|
||||
int p = (r << 24) | (g << 16) | (b << 8) | c.A;
|
||||
sw.Write("0x" + ((uint)p).ToString("X8") + ",");
|
||||
}
|
||||
sw.WriteLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void Main(string[] args) {
|
||||
using (StreamWriter sw = new StreamWriter(dst)) {
|
||||
sw.WriteLine("/* Generated using misc/macOS/mac_icon_gen.cs */");
|
||||
sw.WriteLine("");
|
||||
sw.WriteLine("static const unsigned int CCIcon_Data[] = {");
|
||||
DumpIcon(sw, 64, 64);
|
||||
sw.WriteLine("};");
|
||||
sw.WriteLine("static const int CCIcon_Width = 64;");
|
||||
sw.WriteLine("static const int CCIcon_Height = 64;");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
23
misc/macclassic/68APPL.r
Normal file
@@ -0,0 +1,23 @@
|
||||
#include "Processes.r"
|
||||
#include "Retro68.r"
|
||||
|
||||
resource 'SIZE' (-1) {
|
||||
reserved,
|
||||
ignoreSuspendResumeEvents,
|
||||
reserved,
|
||||
cannotBackground,
|
||||
needsActivateOnFGSwitch,
|
||||
backgroundAndForeground,
|
||||
dontGetFrontClicks,
|
||||
ignoreChildDiedEvents,
|
||||
is32BitCompatible,
|
||||
notHighLevelEventAware,
|
||||
onlyLocalHLEvents,
|
||||
notStationeryAware,
|
||||
dontUseTextEditServices,
|
||||
reserved,
|
||||
reserved,
|
||||
reserved,
|
||||
8192 * 1024, // preferred (maximum) memory size
|
||||
2900 * 1024, // minimum memory size (enough to load launcher)
|
||||
};
|
||||
66
misc/macclassic/Makefile_68k
Normal file
@@ -0,0 +1,66 @@
|
||||
# path to RETRO68
|
||||
RETRO68=../Retro68-build/toolchain
|
||||
|
||||
PREFIX=$(RETRO68)/m68k-apple-macos
|
||||
CC=$(RETRO68)/bin/m68k-apple-macos-gcc
|
||||
CXX=$(RETRO68)/bin/m68k-apple-macos-g++
|
||||
CFLAGS=-O1 -fno-math-errno
|
||||
|
||||
REZ=$(RETRO68)/bin/Rez
|
||||
|
||||
LDFLAGS=-lm
|
||||
RINCLUDES=$(PREFIX)/RIncludes
|
||||
REZFLAGS=-I$(RINCLUDES)
|
||||
|
||||
ifdef ARCH_68040
|
||||
TARGET := ClassiCube-68040
|
||||
BUILD_DIR := build/mac_68040
|
||||
CFLAGS += -march=68040
|
||||
else
|
||||
TARGET := ClassiCube-68k
|
||||
BUILD_DIR := build/mac_68k
|
||||
CFLAGS += -DCC_BUILD_NOFPU -DCC_BUILD_TINYMEM
|
||||
endif
|
||||
|
||||
SOURCE_DIR := src
|
||||
C_SOURCES := $(wildcard $(SOURCE_DIR)/*.c)
|
||||
C_OBJECTS := $(patsubst $(SOURCE_DIR)/%.c, $(BUILD_DIR)/%.o, $(C_SOURCES))
|
||||
|
||||
# Dependency tracking
|
||||
DEPFLAGS = -MT $@ -MMD -MP -MF $(BUILD_DIR)/$*.d
|
||||
DEPFILES := $(C_OBJECTS:%.o=%.d)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# main targets
|
||||
#---------------------------------------------------------------------------------
|
||||
default: $(BUILD_DIR) $(TARGET).bin
|
||||
|
||||
$(BUILD_DIR):
|
||||
mkdir -p $(BUILD_DIR)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# executable generation
|
||||
#---------------------------------------------------------------------------------
|
||||
$(TARGET).bin $(TARGET).APPL $(TARGET).dsk: $(TARGET).code.bin
|
||||
$(REZ) $(REZFLAGS) \
|
||||
--copy "$(TARGET).code.bin" \
|
||||
"misc/macclassic/68APPL.r" \
|
||||
-t "APPL" -c "????" \
|
||||
-o $(TARGET).bin --cc $(TARGET).APPL --cc $(TARGET).dsk
|
||||
|
||||
$(TARGET).code.bin: $(C_OBJECTS)
|
||||
$(CC) $(C_OBJECTS) -o $@ $(LDFLAGS)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# object generation
|
||||
#---------------------------------------------------------------------------------
|
||||
$(C_OBJECTS): $(BUILD_DIR)/%.o : $(SOURCE_DIR)/%.c
|
||||
$(CC) $(CFLAGS) $(DEPFLAGS) -c $< -o $@
|
||||
|
||||
# Dependency tracking
|
||||
$(DEPFILES):
|
||||
|
||||
include $(wildcard $(DEPFILES))
|
||||
65
misc/macclassic/Makefile_ppc
Normal file
@@ -0,0 +1,65 @@
|
||||
# path to RETRO68
|
||||
RETRO68=../Retro68-build/toolchain
|
||||
|
||||
PREFIX=$(RETRO68)/powerpc-apple-macos
|
||||
CC=$(RETRO68)/bin/powerpc-apple-macos-gcc
|
||||
CXX=$(RETRO68)/bin/powerpc-apple-macos-g++
|
||||
CFLAGS=-O1 -fno-math-errno
|
||||
|
||||
REZ=$(RETRO68)/bin/Rez
|
||||
MakePEF=$(RETRO68)/bin/MakePEF
|
||||
|
||||
LDFLAGS=-lm
|
||||
RINCLUDES=$(PREFIX)/RIncludes
|
||||
REZFLAGS=-I$(RINCLUDES)
|
||||
|
||||
TARGET := ClassiCube-ppc
|
||||
BUILD_DIR := build/mac_ppc
|
||||
SOURCE_DIR := src
|
||||
C_SOURCES := $(wildcard $(SOURCE_DIR)/*.c)
|
||||
C_OBJECTS := $(patsubst $(SOURCE_DIR)/%.c, $(BUILD_DIR)/%.o, $(C_SOURCES))
|
||||
|
||||
# Dependency tracking
|
||||
DEPFLAGS = -MT $@ -MMD -MP -MF $(BUILD_DIR)/$*.d
|
||||
DEPFILES := $(C_OBJECTS:%.o=%.d)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# main targets
|
||||
#---------------------------------------------------------------------------------
|
||||
default: $(BUILD_DIR) $(TARGET).bin
|
||||
|
||||
$(BUILD_DIR):
|
||||
mkdir -p $(BUILD_DIR)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# executable generation
|
||||
#---------------------------------------------------------------------------------
|
||||
$(TARGET).bin $(TARGET).APPL $(TARGET).dsk: $(TARGET).pef
|
||||
$(REZ) $(REZFLAGS) \
|
||||
"misc/macclassic/ppcAPPL.r" \
|
||||
-t "APPL" -c "????" \
|
||||
--data $(TARGET).pef \
|
||||
-o $(TARGET).bin --cc $(TARGET).APPL --cc $(TARGET).dsk
|
||||
|
||||
$(TARGET).elf: $(C_OBJECTS)
|
||||
$(CC) $(C_OBJECTS) -o $@ $(LDFLAGS)
|
||||
|
||||
$(TARGET).pef: $(TARGET).elf
|
||||
$(MakePEF) $(TARGET).elf -o $(TARGET).pef
|
||||
|
||||
$(BUILD_DIR):
|
||||
mkdir -p $(BUILD_DIR)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# object generation
|
||||
#---------------------------------------------------------------------------------
|
||||
$(C_OBJECTS): $(BUILD_DIR)/%.o : $(SOURCE_DIR)/%.c
|
||||
$(CC) $(CFLAGS) $(DEPFLAGS) -c $< -o $@
|
||||
|
||||
# Dependency tracking
|
||||
$(DEPFILES):
|
||||
|
||||
include $(wildcard $(DEPFILES))
|
||||
32
misc/macclassic/ppcAPPL.r
Normal file
@@ -0,0 +1,32 @@
|
||||
#include "Processes.r"
|
||||
#include "CodeFragments.r"
|
||||
|
||||
resource 'cfrg' (0) {
|
||||
{
|
||||
kPowerPCCFragArch, kIsCompleteCFrag, kNoVersionNum, kNoVersionNum,
|
||||
kDefaultStackSize, kNoAppSubFolder,
|
||||
kApplicationCFrag, kDataForkCFragLocator, kZeroOffset, kCFragGoesToEOF,
|
||||
"ClassiCube"
|
||||
}
|
||||
};
|
||||
|
||||
resource 'SIZE' (-1) {
|
||||
reserved,
|
||||
ignoreSuspendResumeEvents,
|
||||
reserved,
|
||||
cannotBackground,
|
||||
needsActivateOnFGSwitch,
|
||||
backgroundAndForeground,
|
||||
dontGetFrontClicks,
|
||||
ignoreChildDiedEvents,
|
||||
is32BitCompatible,
|
||||
notHighLevelEventAware,
|
||||
onlyLocalHLEvents,
|
||||
notStationeryAware,
|
||||
dontUseTextEditServices,
|
||||
reserved,
|
||||
reserved,
|
||||
reserved,
|
||||
8192 * 1024, // preferred (maximum) memory size
|
||||
8192 * 1024 // minimum memory size
|
||||
};
|
||||
33
misc/n64/Makefile
Normal file
@@ -0,0 +1,33 @@
|
||||
BUILD_DIR = build-n64
|
||||
SOURCE_DIR = misc/n64
|
||||
N64_ROM_TITLE = "ClassiCube"
|
||||
N64_ROM_RTC = true
|
||||
TARGET = ClassiCube-n64
|
||||
N64_MKDFS_ROOT = "misc/n64/files"
|
||||
|
||||
CFILES := $(notdir $(wildcard src/*.c))
|
||||
OFILES := $(CFILES:.c=.o) rsp_gpu.o
|
||||
OBJS := $(addprefix $(BUILD_DIR)/,$(OFILES))
|
||||
CFLAGS := -Wno-error=missing-braces -Wno-error=strict-aliasing -Wno-error=incompatible-pointer-types
|
||||
|
||||
default: $(TARGET).z64
|
||||
|
||||
$(BUILD_DIR)/%.o: src/%.c
|
||||
@mkdir -p $(dir $@)
|
||||
@echo " [CC] $<"
|
||||
$(CC) -c $(CFLAGS) -o $@ $<
|
||||
|
||||
include $(N64_INST)/include/n64.mk
|
||||
|
||||
$(TARGET).z64: N64_ROM_TITLE = "ClassiCube"
|
||||
$(TARGET).z64: $(BUILD_DIR)/filesystem.dfs
|
||||
|
||||
$(BUILD_DIR)/filesystem.dfs: misc/n64/files/default.zip
|
||||
|
||||
$(BUILD_DIR)/ClassiCube-n64.elf: $(OBJS)
|
||||
|
||||
clean:
|
||||
rm -rf $(BUILD_DIR) $(TARGET).z64
|
||||
.PHONY: clean
|
||||
|
||||
-include $(wildcard $(BUILD_DIR)/*.d)
|
||||
BIN
misc/n64/files/default.zip
Normal file
242
misc/n64/gpu.c
Normal file
@@ -0,0 +1,242 @@
|
||||
#include "rspq.h"
|
||||
#include "rdpq.h"
|
||||
#include "rdpq_rect.h"
|
||||
#include "rdpq_mode.h"
|
||||
#include "rdpq_debug.h"
|
||||
#include "display.h"
|
||||
|
||||
// This is a severely cutdown version of libdragon's OpenGL implementation
|
||||
#define VTX_SHIFT 5
|
||||
#define TEX_SHIFT 8
|
||||
|
||||
static uint32_t gpup_id;
|
||||
//DEFINE_RSP_UCODE(rsp_gpu);
|
||||
extern uint8_t _binary_build_n64_rsp_gpu_text_bin_start[];
|
||||
extern uint8_t _binary_build_n64_rsp_gpu_data_bin_start[];
|
||||
extern uint8_t _binary_build_n64_rsp_gpu_meta_bin_start[];
|
||||
extern uint8_t _binary_build_n64_rsp_gpu_text_bin_end[0];
|
||||
extern uint8_t _binary_build_n64_rsp_gpu_data_bin_end[0];
|
||||
extern uint8_t _binary_build_n64_rsp_gpu_meta_bin_end[0];
|
||||
|
||||
static rsp_ucode_t rsp_gpu = (rsp_ucode_t){
|
||||
.code = _binary_build_n64_rsp_gpu_text_bin_start,
|
||||
.code_end = _binary_build_n64_rsp_gpu_text_bin_end,
|
||||
.data = _binary_build_n64_rsp_gpu_data_bin_start,
|
||||
.data_end = _binary_build_n64_rsp_gpu_data_bin_end,
|
||||
.meta = _binary_build_n64_rsp_gpu_meta_bin_start,
|
||||
.meta_end = _binary_build_n64_rsp_gpu_meta_bin_end,
|
||||
.name = "rsp_gpu"
|
||||
};
|
||||
|
||||
enum {
|
||||
GPU_CMD_SET_BYTE = 0x0,
|
||||
GPU_CMD_SET_SHORT = 0x1,
|
||||
GPU_CMD_SET_WORD = 0x2,
|
||||
GPU_CMD_SET_LONG = 0x3,
|
||||
|
||||
GPU_CMD_DRAW_QUAD = 0x4,
|
||||
GPU_CMD_MATRIX_LOAD = 0x5,
|
||||
|
||||
GPU_CMD_PUSH_RDP = 0x6,
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
int16_t mvp_matrix_i[4][4];
|
||||
uint16_t mvp_matrix_f[4][4];
|
||||
int16_t vp_scale[4];
|
||||
int16_t vp_offset[4];
|
||||
uint16_t tex_size[2];
|
||||
uint16_t tex_offset[2];
|
||||
uint16_t tri_cmd;
|
||||
uint16_t tri_cull;
|
||||
} __attribute__((aligned(8), packed)) gpu_state;
|
||||
|
||||
__attribute__((always_inline))
|
||||
static inline void gpu_set_byte(uint32_t offset, uint8_t value)
|
||||
{
|
||||
rspq_write(gpup_id, GPU_CMD_SET_BYTE, offset, value);
|
||||
}
|
||||
|
||||
__attribute__((always_inline))
|
||||
static inline void gpu_set_short(uint32_t offset, uint16_t value)
|
||||
{
|
||||
rspq_write(gpup_id, GPU_CMD_SET_SHORT, offset, value);
|
||||
}
|
||||
|
||||
__attribute__((always_inline))
|
||||
static inline void gpu_set_word(uint32_t offset, uint32_t value)
|
||||
{
|
||||
rspq_write(gpup_id, GPU_CMD_SET_WORD, offset, value);
|
||||
}
|
||||
|
||||
__attribute__((always_inline))
|
||||
static inline void gpu_set_long(uint32_t offset, uint64_t value)
|
||||
{
|
||||
rspq_write(gpup_id, GPU_CMD_SET_LONG, offset, value >> 32, value & 0xFFFFFFFF);
|
||||
}
|
||||
|
||||
#define RDP_CMD_SYNC_PIPE 0xE7000000
|
||||
#define RDP_CMD_SET_BLEND_COLOR 0xF9000000
|
||||
|
||||
__attribute__((always_inline))
|
||||
static inline void gpu_push_rdp(uint32_t a1, uint64_t a2)
|
||||
{
|
||||
rdpq_write(2, gpup_id, GPU_CMD_PUSH_RDP, 0, a1, a2);
|
||||
}
|
||||
|
||||
|
||||
static float gpu_vp_scale[3];
|
||||
static float gpu_vp_offset[3];
|
||||
static bool gpu_texturing;
|
||||
static void* gpu_pointer;
|
||||
static int gpu_stride;
|
||||
|
||||
#define GPU_ATTR_Z (1 << 8)
|
||||
#define GPU_ATTR_TEX (1 << 9)
|
||||
#define GPU_ATTR_SHADE (1 << 10)
|
||||
#define GPU_ATTR_EDGE (1 << 11)
|
||||
static bool gpu_attr_z, gpu_attr_tex;
|
||||
|
||||
static void gpuUpdateFormat(void)
|
||||
{
|
||||
uint16_t cmd = 0xC000 | GPU_ATTR_SHADE | GPU_ATTR_EDGE;
|
||||
|
||||
if (gpu_attr_z) cmd |= GPU_ATTR_Z;
|
||||
if (gpu_attr_tex) cmd |= GPU_ATTR_TEX;
|
||||
|
||||
gpu_set_short(offsetof(gpu_state, tri_cmd), cmd);
|
||||
}
|
||||
|
||||
static void gpuSetTexSize(uint16_t width, uint16_t height)
|
||||
{
|
||||
gpu_set_word(offsetof(gpu_state, tex_size[0]), (width << 16) | height);
|
||||
}
|
||||
|
||||
|
||||
static inline void write_shorts(rspq_write_t *w, const uint16_t *s, uint32_t count)
|
||||
{
|
||||
for (uint32_t i = 0; i < count; i += 2)
|
||||
{
|
||||
uint32_t packed = ((uint32_t)s[i] << 16) | (uint32_t)s[i+1];
|
||||
rspq_write_arg(w, packed);
|
||||
}
|
||||
}
|
||||
|
||||
static inline void gpu_matrix_write(rspq_write_t* w, const float* m)
|
||||
{
|
||||
uint16_t integer[16];
|
||||
uint16_t fraction[16];
|
||||
|
||||
for (uint32_t i = 0; i < 16; i++)
|
||||
{
|
||||
int32_t fixed = m[i] * (1<<16);
|
||||
integer[i] = (uint16_t)((fixed & 0xFFFF0000) >> 16);
|
||||
fraction[i] = (uint16_t)(fixed & 0x0000FFFF);
|
||||
}
|
||||
|
||||
write_shorts(w, integer, 16);
|
||||
write_shorts(w, fraction, 16);
|
||||
}
|
||||
|
||||
static void gpuLoadMatrix(const float* m)
|
||||
{
|
||||
rspq_write_t w = rspq_write_begin(gpup_id, GPU_CMD_MATRIX_LOAD, 17);
|
||||
rspq_write_arg(&w, 0); // padding
|
||||
gpu_matrix_write(&w, m);
|
||||
rspq_write_end(&w);
|
||||
}
|
||||
|
||||
static inline void put_word(rspq_write_t* s, uint16_t v1, uint16_t v2)
|
||||
{
|
||||
rspq_write_arg(s, v2 | (v1 << 16));
|
||||
}
|
||||
|
||||
static void upload_vertex(rspq_write_t* s, uint32_t index)
|
||||
{
|
||||
char* ptr = gpu_pointer + index * gpu_stride;
|
||||
|
||||
float* vtx = (float*)(ptr + 0);
|
||||
put_word(s, vtx[0] * (1<<VTX_SHIFT),
|
||||
vtx[1] * (1<<VTX_SHIFT));
|
||||
put_word(s, vtx[2] * (1<<VTX_SHIFT),
|
||||
1.0f * (1<<VTX_SHIFT));
|
||||
|
||||
uint32_t* col = (uint32_t*)(ptr + 12);
|
||||
rspq_write_arg(s, *col);
|
||||
|
||||
if (gpu_texturing) {
|
||||
float* tex = (float*)(ptr + 16);
|
||||
put_word(s, tex[0] * (1<<TEX_SHIFT),
|
||||
tex[1] * (1<<TEX_SHIFT));
|
||||
} else {
|
||||
put_word(s, 0,
|
||||
0);
|
||||
}
|
||||
}
|
||||
|
||||
static void gpuDrawArrays(uint32_t first, uint32_t count)
|
||||
{
|
||||
for (uint32_t i = 0; i < count; i += 4)
|
||||
{
|
||||
rspq_write_t s = rspq_write_begin(gpup_id, GPU_CMD_DRAW_QUAD, 17);
|
||||
rspq_write_arg(&s, 0); // padding
|
||||
for (uint32_t j = 0; j < 4; j++)
|
||||
{
|
||||
upload_vertex(&s, first + i + j);
|
||||
}
|
||||
rspq_write_end(&s);
|
||||
}
|
||||
}
|
||||
|
||||
static void gpuDepthRange(float n, float f)
|
||||
{
|
||||
gpu_vp_scale[2] = (f - n) * 0.5f;
|
||||
gpu_vp_offset[2] = n + (f - n) * 0.5f;
|
||||
|
||||
gpu_set_short(offsetof(gpu_state, vp_scale[2]), gpu_vp_scale[2] * 4);
|
||||
gpu_set_short(offsetof(gpu_state, vp_offset[2]), gpu_vp_offset[2] * 4);
|
||||
}
|
||||
|
||||
static void gpuViewport(int x, int y, int w, int h)
|
||||
{
|
||||
gpu_vp_scale[0] = w * 0.5f;
|
||||
gpu_vp_scale[1] = h * -0.5f;
|
||||
gpu_vp_offset[0] = x + w * 0.5f;
|
||||
gpu_vp_offset[1] = y + h * 0.5f;
|
||||
|
||||
// Screen coordinates are s13.2
|
||||
#define SCREEN_XY_SCALE 4.0f
|
||||
#define SCREEN_Z_SCALE 32767.0f
|
||||
|
||||
// * 2.0f to compensate for RSP reciprocal missing 1 bit
|
||||
uint16_t scale_x = gpu_vp_scale[0] * SCREEN_XY_SCALE * 2.0f;
|
||||
uint16_t scale_y = gpu_vp_scale[1] * SCREEN_XY_SCALE * 2.0f;
|
||||
uint16_t scale_z = gpu_vp_scale[2] * SCREEN_Z_SCALE * 2.0f;
|
||||
|
||||
uint16_t offset_x = gpu_vp_offset[0] * SCREEN_XY_SCALE;
|
||||
uint16_t offset_y = gpu_vp_offset[1] * SCREEN_XY_SCALE;
|
||||
uint16_t offset_z = gpu_vp_offset[2] * SCREEN_Z_SCALE;
|
||||
|
||||
gpu_set_long(
|
||||
offsetof(gpu_state, vp_scale),
|
||||
((uint64_t)scale_x << 48) | ((uint64_t)scale_y << 32) | ((uint64_t)scale_z << 16));
|
||||
gpu_set_long(
|
||||
offsetof(gpu_state, vp_offset),
|
||||
((uint64_t)offset_x << 48) | ((uint64_t)offset_y << 32) | ((uint64_t)offset_z << 16));
|
||||
}
|
||||
|
||||
static void gpuSetCullFace(bool enabled) {
|
||||
// 1 = cull backfaces
|
||||
// 2 = don't cull
|
||||
gpu_set_short(offsetof(gpu_state, tri_cull), enabled ? 1 : 2);
|
||||
}
|
||||
|
||||
static void gpu_init() {
|
||||
gpup_id = rspq_overlay_register(&rsp_gpu);
|
||||
gpuDepthRange(0, 1);
|
||||
}
|
||||
|
||||
static void gpu_close() {
|
||||
rspq_wait();
|
||||
rspq_overlay_unregister(gpup_id);
|
||||
}
|
||||
531
misc/n64/rsp_gpu.S
Normal file
@@ -0,0 +1,531 @@
|
||||
#include <rsp_queue.inc>
|
||||
#include <rdpq_macros.h>
|
||||
#define MATRIX_SIZE 64
|
||||
#define GUARD_BAND_FACTOR 2
|
||||
|
||||
.data
|
||||
|
||||
RSPQ_BeginOverlayHeader
|
||||
RSPQ_DefineCommand GPUCmd_SetByte, 8 # 0x0
|
||||
RSPQ_DefineCommand GPUCmd_SetShort, 8 # 0x1
|
||||
RSPQ_DefineCommand GPUCmd_SetWord, 8 # 0x2
|
||||
RSPQ_DefineCommand GPUCmd_SetLong, 12 # 0x3
|
||||
|
||||
RSPQ_DefineCommand GPUCmd_DrawQuad, 68 # 0x4
|
||||
RSPQ_DefineCommand GPUCmd_MatrixLoad, 68 # 0x5
|
||||
|
||||
RSPQ_DefineCommand GPUCmd_PushRDP, 12 # 0x6
|
||||
RSPQ_EndOverlayHeader
|
||||
|
||||
.align 4
|
||||
BANNER0: .ascii " RSP OpenGL T&L "
|
||||
BANNER1: .ascii "Rasky & Snacchus"
|
||||
|
||||
RSPQ_BeginSavedState
|
||||
|
||||
GL_STATE:
|
||||
# This is the GL state that is also used by the pipeline.
|
||||
GL_MATRIX_MVP: .ds.b MATRIX_SIZE
|
||||
GL_VIEWPORT_SCALE: .half 0,0,0,0
|
||||
GL_VIEWPORT_OFFSET: .half 0,0,0,0
|
||||
GL_STATE_TEX_SIZE: .half 0,0
|
||||
GL_STATE_TEX_OFFSET: .half 0,0
|
||||
GL_TRI_CMD: .half 0
|
||||
GL_TRI_CULL: .half 0
|
||||
|
||||
RSPQ_EndSavedState
|
||||
|
||||
.align 4
|
||||
CLIP_CODE_FACTORS: .half 1, 1, GUARD_BAND_FACTOR, GUARD_BAND_FACTOR
|
||||
DRAW_TRI_RA: .word 0
|
||||
|
||||
#define SCREEN_VTX_CS_POSi 0 // X, Y, Z, W (all 32-bit)
|
||||
#define SCREEN_VTX_CS_POSf 8 // X, Y, Z, W (all 32-bit)
|
||||
#define SCREEN_VTX_X 16
|
||||
#define SCREEN_VTX_Y 18
|
||||
#define SCREEN_VTX_Z 20
|
||||
#define SCREEN_VTX_CLIP_CODE 22
|
||||
#define SCREEN_VTX_PADDING 23
|
||||
#define SCREEN_VTX_RGBA 24
|
||||
#define SCREEN_VTX_S_T 28 // 28 S, 30 T
|
||||
#define SCREEN_VTX_W 32 // FIXME: this is duplicated in CS_POS
|
||||
#define SCREEN_VTX_INVW 36 // 32-bit
|
||||
#define SCREEN_VTX_SIZE 40
|
||||
|
||||
.bss
|
||||
.align 3
|
||||
#define VERTEX_CACHE_SIZE 4
|
||||
//0-39 same as screenvtx
|
||||
#define PRIM_VTX_TRCODE 40 // trivial-reject clipping flags (against -w/+w)
|
||||
#define PRIM_VTX_SIZE 42
|
||||
|
||||
VERTEX_CACHE: .dcb.b PRIM_VTX_SIZE * VERTEX_CACHE_SIZE
|
||||
|
||||
.text
|
||||
|
||||
.func GPUCmd_SetByte
|
||||
GPUCmd_SetByte:
|
||||
jr ra
|
||||
sb a1, %lo(GL_STATE)(a0)
|
||||
.endfunc
|
||||
|
||||
.func GPUCmd_SetShort
|
||||
GPUCmd_SetShort:
|
||||
jr ra
|
||||
sh a1, %lo(GL_STATE)(a0)
|
||||
.endfunc
|
||||
|
||||
.func GPUCmd_SetWord
|
||||
GPUCmd_SetWord:
|
||||
jr ra
|
||||
sw a1, %lo(GL_STATE) + 0(a0)
|
||||
.endfunc
|
||||
|
||||
.func GPUCmd_SetLong
|
||||
GPUCmd_SetLong:
|
||||
sw a2, %lo(GL_STATE) + 4(a0)
|
||||
jr ra
|
||||
sw a1, %lo(GL_STATE) + 0(a0)
|
||||
.endfunc
|
||||
|
||||
|
||||
.func GPUCmd_PushRDP
|
||||
GPUCmd_PushRDP:
|
||||
# RDP command is expected in a0 and a1
|
||||
move a0, a1
|
||||
move a1, a2
|
||||
|
||||
jal_and_j RDPQ_Write8, RDPQ_Finalize
|
||||
.endfunc
|
||||
|
||||
|
||||
.func GPUCmd_MatrixLoad
|
||||
GPUCmd_MatrixLoad:
|
||||
#define src s6
|
||||
#define dst s7
|
||||
|
||||
#define vrhs01_i $v02
|
||||
#define vrhs01_f $v03
|
||||
#define vrhs23_i $v04
|
||||
#define vrhs23_f $v05
|
||||
|
||||
addi src, rspq_dmem_buf_ptr, %lo(RSPQ_DMEM_BUFFER) - 64
|
||||
addi dst, zero, %lo(GL_MATRIX_MVP)
|
||||
|
||||
# Load the matrix from command parameters (misaligned)
|
||||
lqv vrhs01_i, 0x00,src
|
||||
lrv vrhs01_i, 0x10,src
|
||||
lqv vrhs23_i, 0x10,src
|
||||
lrv vrhs23_i, 0x20,src
|
||||
lqv vrhs01_f, 0x20,src
|
||||
lrv vrhs01_f, 0x30,src
|
||||
lqv vrhs23_f, 0x30,src
|
||||
lrv vrhs23_f, 0x40,src
|
||||
|
||||
sqv vrhs01_i, 0x00,dst
|
||||
sqv vrhs23_i, 0x10,dst
|
||||
sqv vrhs01_f, 0x20,dst
|
||||
jr ra
|
||||
sqv vrhs23_f, 0x30,dst
|
||||
|
||||
#undef src
|
||||
#undef dst
|
||||
.endfunc
|
||||
|
||||
.align 3
|
||||
.func GPUCmd_DrawQuad
|
||||
GPUCmd_DrawQuad:
|
||||
#define vtx a0
|
||||
#define mtx_ptr s0
|
||||
#define src_ptr s4
|
||||
#define vcount s3
|
||||
|
||||
#define v___ $v01
|
||||
|
||||
#define vmtx0_i $v16 // m00 m01 m02 m03
|
||||
#define vmtx0_f $v17
|
||||
#define vmtx1_i $v18 // m10 m11 m12 m13
|
||||
#define vmtx1_f $v19
|
||||
#define vmtx2_i $v20 // m20 m21 m22 m23
|
||||
#define vmtx2_f $v21
|
||||
#define vmtx3_i $v22 // m30 m31 m32 m03
|
||||
#define vmtx3_f $v23
|
||||
|
||||
#define vpos $v24
|
||||
#define vcol $v25
|
||||
#define vtex $v26
|
||||
#define vcspos_i $v28
|
||||
#define vcspos_f $v29
|
||||
|
||||
#define x e0
|
||||
#define y e1
|
||||
#define z e2
|
||||
#define w e3
|
||||
|
||||
addi src_ptr, rspq_dmem_buf_ptr, %lo(RSPQ_DMEM_BUFFER) - 64
|
||||
li vtx, %lo(VERTEX_CACHE)
|
||||
li vcount, 4
|
||||
|
||||
li mtx_ptr, %lo(GL_MATRIX_MVP)
|
||||
ldv vmtx0_i.e0, 0x00,mtx_ptr
|
||||
ldv vmtx1_i.e0, 0x08,mtx_ptr
|
||||
ldv vmtx2_i.e0, 0x10,mtx_ptr
|
||||
ldv vmtx3_i.e0, 0x18,mtx_ptr
|
||||
ldv vmtx0_f.e0, 0x20,mtx_ptr
|
||||
ldv vmtx1_f.e0, 0x28,mtx_ptr
|
||||
ldv vmtx2_f.e0, 0x30,mtx_ptr
|
||||
ldv vmtx3_f.e0, 0x38,mtx_ptr
|
||||
|
||||
upload_vertex:
|
||||
ldv vpos, 0, src_ptr # Load X, Y, Z, W
|
||||
llv vcol, 8, src_ptr # Load RGBA
|
||||
llv vtex, 12, src_ptr # Load U, V
|
||||
|
||||
# matrix multiply
|
||||
vmudn v___, vmtx0_f, vpos.h0
|
||||
vmadh v___, vmtx0_i, vpos.h0
|
||||
vmadn v___, vmtx1_f, vpos.h1
|
||||
vmadh v___, vmtx1_i, vpos.h1
|
||||
vmadn v___, vmtx2_f, vpos.h2
|
||||
vmadh v___, vmtx2_i, vpos.h2
|
||||
vmadn v___, vmtx3_f, vpos.h3
|
||||
vmadh vcspos_i, vmtx3_i, vpos.h3
|
||||
vmadn vcspos_f, vzero, vzero
|
||||
|
||||
slv vcol, SCREEN_VTX_RGBA, vtx
|
||||
slv vtex, SCREEN_VTX_S_T, vtx
|
||||
|
||||
# 32-bit right shift by 5, to keep the clip space coordinates unscaled
|
||||
vmudm vcspos_i, vcspos_i, vshift8.e4
|
||||
vmadl vcspos_f, vcspos_f, vshift8.e4
|
||||
|
||||
addi vcount, -1
|
||||
addi src_ptr, 16
|
||||
|
||||
sdv vcspos_i, SCREEN_VTX_CS_POSi,vtx
|
||||
sdv vcspos_f, SCREEN_VTX_CS_POSf,vtx
|
||||
|
||||
# Calculate and store clipping flags against CS.W.
|
||||
# These will be used for trivial rejections.
|
||||
vch v___, vcspos_i, vcspos_i.w
|
||||
vcl v___, vcspos_f, vcspos_f.w
|
||||
cfc2 t0, COP2_CTRL_VCC
|
||||
andi t0, 0x707 # Isolate X/Y/Z flags
|
||||
|
||||
# Compress flags to 8 bit
|
||||
srl t1, t0, 5
|
||||
andi t0, 0x7
|
||||
or t0, t1
|
||||
sb t0, PRIM_VTX_TRCODE(vtx)
|
||||
|
||||
bnez vcount, upload_vertex
|
||||
addi vtx, PRIM_VTX_SIZE
|
||||
|
||||
|
||||
# now do the actual drawing
|
||||
li a1, %lo(VERTEX_CACHE) + 0*PRIM_VTX_SIZE
|
||||
li a2, %lo(VERTEX_CACHE) + 1*PRIM_VTX_SIZE
|
||||
jal GPUCmd_DrawTriangle
|
||||
li a3, %lo(VERTEX_CACHE) + 2*PRIM_VTX_SIZE
|
||||
|
||||
li a1, %lo(VERTEX_CACHE) + 0*PRIM_VTX_SIZE
|
||||
li a2, %lo(VERTEX_CACHE) + 2*PRIM_VTX_SIZE
|
||||
jal GPUCmd_DrawTriangle
|
||||
li a3, %lo(VERTEX_CACHE) + 3*PRIM_VTX_SIZE
|
||||
|
||||
j RSPQ_Loop
|
||||
nop
|
||||
#undef src_ptr
|
||||
#undef vtx
|
||||
|
||||
#undef x
|
||||
#undef y
|
||||
#undef z
|
||||
#undef w
|
||||
|
||||
#undef v___
|
||||
|
||||
#undef vmtx0_i
|
||||
#undef vmtx0_f
|
||||
#undef vmtx1_i
|
||||
#undef vmtx1_f
|
||||
#undef vmtx2_i
|
||||
#undef vmtx2_f
|
||||
#undef vmtx3_i
|
||||
#undef vmtx3_f
|
||||
|
||||
#undef vpos
|
||||
#undef vcspos_i
|
||||
#undef vcspos_f
|
||||
|
||||
.endfunc
|
||||
|
||||
################################################################
|
||||
# GL_CalcScreenSpace
|
||||
#
|
||||
# Args:
|
||||
# s3 = Destination vertex address
|
||||
# $v02 = Clip space position (fractional part)
|
||||
# $v03 = Clip space position (integer part)
|
||||
#
|
||||
################################################################
|
||||
.func GL_CalcScreenSpace
|
||||
GL_CalcScreenSpace:
|
||||
#define dst s3
|
||||
#define vcspos_f $v02
|
||||
#define vcspos_i $v03
|
||||
#define vinvw_f $v23
|
||||
#define vinvw_i $v24
|
||||
#define vviewscale $v25
|
||||
#define vviewoff $v26
|
||||
#define vscreenpos_i $v27
|
||||
#define vscreenpos_f $v28
|
||||
#define v___ $v29
|
||||
#define w e3
|
||||
|
||||
# Calculate 32-bit inverse W
|
||||
# TODO: NR?
|
||||
vrcph vinvw_i.w, vcspos_i.w
|
||||
vrcpl vinvw_f.w, vcspos_f.w
|
||||
vrcph vinvw_i.w, vzero.e0
|
||||
|
||||
# Calculate screenspace coords
|
||||
li t0, %lo(GL_VIEWPORT_SCALE)
|
||||
ldv vviewscale, 0,t0
|
||||
ldv vviewoff, 8,t0
|
||||
|
||||
vmudl v___, vcspos_f, vinvw_f.w
|
||||
vmadm v___, vcspos_i, vinvw_f.w
|
||||
vmadn vscreenpos_f, vcspos_f, vinvw_i.w
|
||||
vmadh vscreenpos_i, vcspos_i, vinvw_i.w
|
||||
|
||||
vmudn vscreenpos_f, vscreenpos_f, vviewscale
|
||||
vmadh vscreenpos_i, vscreenpos_i, vviewscale
|
||||
vadd vscreenpos_i, vviewoff
|
||||
|
||||
sdv vscreenpos_i, SCREEN_VTX_X ,dst
|
||||
ssv vcspos_i.w, SCREEN_VTX_W+0 ,dst
|
||||
ssv vcspos_f.w, SCREEN_VTX_W+2 ,dst
|
||||
ssv vinvw_i.w, SCREEN_VTX_INVW+0,dst
|
||||
ssv vinvw_f.w, SCREEN_VTX_INVW+2,dst
|
||||
jr ra
|
||||
sb zero, SCREEN_VTX_PADDING(dst)
|
||||
|
||||
#undef dst
|
||||
#undef vcspos_f
|
||||
#undef vcspos_i
|
||||
#undef vinvw_f
|
||||
#undef vinvw_i
|
||||
#undef vviewscale
|
||||
#undef vviewoff
|
||||
#undef vscreenpos_i
|
||||
#undef vscreenpos_f
|
||||
#undef v___
|
||||
#undef w
|
||||
|
||||
.endfunc
|
||||
|
||||
################################################################
|
||||
# GL_CalcClipCodes
|
||||
#
|
||||
# Args:
|
||||
# s3 = Destination vertex address
|
||||
# $v02 = Clip space position (fractional part)
|
||||
# $v03 = Clip space position (integer part)
|
||||
#
|
||||
################################################################
|
||||
.func GL_CalcClipCodes
|
||||
GL_CalcClipCodes:
|
||||
#define dst s3
|
||||
#define vcspos_f $v02
|
||||
#define vcspos_i $v03
|
||||
#define vguard_f $v27
|
||||
#define vguard_i $v28
|
||||
#define v___ $v29
|
||||
#define w e3
|
||||
|
||||
li t0, %lo(CLIP_CODE_FACTORS)
|
||||
ldv vguard_i, 0,t0
|
||||
|
||||
vmudn vguard_f, vcspos_f, vguard_i
|
||||
vmadh vguard_i, vcspos_i, vguard_i
|
||||
|
||||
vch v___, vguard_i, vguard_i.w
|
||||
vcl v___, vguard_f, vguard_f.w
|
||||
cfc2 t0, COP2_CTRL_VCC
|
||||
andi t0, 0x707
|
||||
srl t1, t0, 5
|
||||
andi t0, 0x7
|
||||
or t0, t1
|
||||
jr ra
|
||||
sb t0, SCREEN_VTX_CLIP_CODE(dst)
|
||||
|
||||
#undef dst
|
||||
#undef vcspos_i
|
||||
#undef vcspos_f
|
||||
#undef vguard_i
|
||||
#undef vguard_f
|
||||
#undef v___
|
||||
#undef w
|
||||
|
||||
.endfunc
|
||||
|
||||
################################################################
|
||||
# GL_TnL
|
||||
#
|
||||
# Args:
|
||||
# s3 = address of the vertex in DMEM (usually within VERTEX_CACHE)
|
||||
#
|
||||
################################################################
|
||||
.func GL_TnL
|
||||
GL_TnL:
|
||||
#define vtx s3
|
||||
|
||||
#define v___ $v01
|
||||
#define vcspos_f $v02
|
||||
#define vcspos_i $v03
|
||||
#define vtexsize $v06
|
||||
#define vtexoffset $v07
|
||||
#define vst $v08
|
||||
#define vst_i $v28
|
||||
#define vst_f $v29
|
||||
move ra2, ra
|
||||
|
||||
llv vst, SCREEN_VTX_S_T, vtx # S + T
|
||||
|
||||
li t0, %lo(GL_STATE_TEX_SIZE)
|
||||
llv vtexsize, 0,t0
|
||||
llv vtexoffset, 4,t0
|
||||
|
||||
# Scale texcoord by texsize and subtract offset (to correct for bilinear sampling if active)
|
||||
#vmudn v___, vst, vtexsize
|
||||
# vmadh vst, vtexoffset, K1
|
||||
|
||||
#vmudn v___, vst, vtexsize
|
||||
#vmadh vst, vtexoffset, K1
|
||||
#vmudl vst, vst, vtexsize
|
||||
|
||||
vmudh v___, vst, vtexsize
|
||||
vsar vst_i, COP2_ACC_HI
|
||||
vsar vst_f, COP2_ACC_MD
|
||||
|
||||
vmudl vst_f, vst_f, K8192
|
||||
vmadm vst_i, vst_i, K8192
|
||||
vmadn vst, vzero, vzero
|
||||
|
||||
#undef vst_i
|
||||
#undef vst_f
|
||||
|
||||
lbu t0, PRIM_VTX_TRCODE(vtx)
|
||||
slv vst, SCREEN_VTX_S_T, vtx
|
||||
|
||||
ldv vcspos_f, SCREEN_VTX_CS_POSf,vtx
|
||||
ldv vcspos_i, SCREEN_VTX_CS_POSi,vtx
|
||||
|
||||
# Mark this vertex as having T&L applied
|
||||
ori t0, 0x80
|
||||
|
||||
jal GL_CalcScreenSpace
|
||||
sb t0, PRIM_VTX_TRCODE(vtx)
|
||||
|
||||
j GL_CalcClipCodes
|
||||
move ra, ra2
|
||||
|
||||
#undef vcspos_f
|
||||
#undef vcspos_i
|
||||
#undef vtexsize
|
||||
#undef vtexoffset
|
||||
|
||||
#undef vtx
|
||||
|
||||
#undef v___
|
||||
#undef vrgba
|
||||
#undef vst
|
||||
#undef s
|
||||
|
||||
.endfunc
|
||||
|
||||
|
||||
.func GPUCmd_DrawTriangle
|
||||
GPUCmd_DrawTriangle:
|
||||
#define vtx1 a1
|
||||
#define vtx2 a2
|
||||
#define vtx3 a3
|
||||
#define trcode1 t6
|
||||
#define trcode2 t7
|
||||
#define trcode3 t8
|
||||
sw ra, %lo(DRAW_TRI_RA) # TODO find a register for this
|
||||
|
||||
# Trivial reject: if all the vertices are out of the same plane (at least one),
|
||||
# the triangle is out of the viewport.
|
||||
# NOTE: This deliberately uses lb instead of lbu so the sign bit is extended.
|
||||
# The MSB of each TR-code is a bit flag that is set if the vertex has already
|
||||
# had T&L applied once.
|
||||
lb trcode1, PRIM_VTX_TRCODE(vtx1)
|
||||
lb trcode2, PRIM_VTX_TRCODE(vtx2)
|
||||
lb trcode3, PRIM_VTX_TRCODE(vtx3)
|
||||
and t0, trcode1, trcode2
|
||||
and t0, trcode3
|
||||
andi t0, 0x3F
|
||||
bnez t0, JrRa
|
||||
nop
|
||||
|
||||
# Perform T&L for each vertex if we haven't already
|
||||
bgezal trcode1, GL_TnL
|
||||
move s3, vtx1
|
||||
|
||||
bgezal trcode2, GL_TnL
|
||||
move s3, vtx2
|
||||
|
||||
bgezal trcode3, GL_TnL
|
||||
move s3, vtx3
|
||||
|
||||
lbu t0, SCREEN_VTX_CLIP_CODE(vtx1)
|
||||
lbu t1, SCREEN_VTX_CLIP_CODE(vtx2)
|
||||
lbu t2, SCREEN_VTX_CLIP_CODE(vtx3)
|
||||
or t5, t0, t1
|
||||
or t5, t2
|
||||
|
||||
move s1, zero
|
||||
beqz t5, gl_draw_single_triangle
|
||||
move s2, zero
|
||||
|
||||
jal GL_ClipTriangle
|
||||
nop
|
||||
|
||||
beqz v1, gl_draw_triangle_end
|
||||
addi s2, -6
|
||||
lhu s5, 0(s1)
|
||||
gl_draw_clipped_triangles_loop:
|
||||
move vtx1, s5
|
||||
lhu vtx2, 2(s1)
|
||||
lhu vtx3, 4(s1)
|
||||
|
||||
gl_draw_single_triangle:
|
||||
addi vtx1, SCREEN_VTX_X
|
||||
addi vtx2, SCREEN_VTX_X
|
||||
addi vtx3, SCREEN_VTX_X
|
||||
|
||||
lhu a0, %lo(GL_TRI_CMD)
|
||||
lh v0, %lo(GL_TRI_CULL)
|
||||
jal RDPQ_Triangle
|
||||
li s3, %lo(RDPQ_CMD_STAGING)
|
||||
|
||||
jal RDPQ_Send
|
||||
li s4, %lo(RDPQ_CMD_STAGING)
|
||||
|
||||
blt s1, s2, gl_draw_clipped_triangles_loop
|
||||
addi s1, 2
|
||||
|
||||
gl_draw_triangle_end:
|
||||
lw ra, %lo(DRAW_TRI_RA)
|
||||
jr ra
|
||||
nop
|
||||
|
||||
#undef vtx1
|
||||
#undef vtx2
|
||||
#undef vtx3
|
||||
.endfunc
|
||||
|
||||
#include "rsp_gpu_clipping.inc"
|
||||
#include <rsp_rdpq.inc>
|
||||
380
misc/n64/rsp_gpu_clipping.inc
Normal file
@@ -0,0 +1,380 @@
|
||||
#define CLIPPING_PLANE_COUNT 6
|
||||
#define CLIPPING_CACHE_SIZE 9
|
||||
#define CLIPPING_PLANE_SIZE 8
|
||||
|
||||
.section .data.gl_clipping
|
||||
|
||||
.align 4
|
||||
CLIP_PLANES:
|
||||
.half 1, 0, 0, GUARD_BAND_FACTOR
|
||||
.half 0, 1, 0, GUARD_BAND_FACTOR
|
||||
.half 0, 0, 1, 1
|
||||
.half 1, 0, 0, -GUARD_BAND_FACTOR
|
||||
.half 0, 1, 0, -GUARD_BAND_FACTOR
|
||||
.half 0, 0, 1, -1
|
||||
|
||||
.align 4
|
||||
CACHE_OFFSETS: .half 2,4,6,8,10,12,14,16,18
|
||||
|
||||
.section .bss.gl_clipping
|
||||
|
||||
CLIP_CACHE: .dcb.b SCREEN_VTX_SIZE * CLIPPING_CACHE_SIZE
|
||||
CLIP_CACHE_END:
|
||||
|
||||
CLIP_LISTS:
|
||||
CLIP_LIST0: .dcb.w CLIPPING_CACHE_SIZE
|
||||
CLIP_LIST1: .dcb.w CLIPPING_CACHE_SIZE
|
||||
|
||||
|
||||
.section .text.gl_clipping
|
||||
|
||||
################################################################
|
||||
# GL_ClipTriangle
|
||||
# Clip a triangle against the view-frustum by using the Sutherland-Hodgman algorithm
|
||||
# https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm
|
||||
# Args:
|
||||
# a1-a3 = Vertices
|
||||
# t5 = OR'd clip flags of the triangle's vertices
|
||||
# Returns:
|
||||
# s1 = Pointer to list of output vertices
|
||||
# s2 = Pointer to end of list
|
||||
################################################################
|
||||
.func GL_ClipTriangle
|
||||
GL_ClipTriangle:
|
||||
#define out_count v1
|
||||
#define clip_flags t5
|
||||
#define plane_flag t6
|
||||
#define in_count t7
|
||||
#define in_end t8
|
||||
#define in_list s0
|
||||
#define out_list s1
|
||||
#define plane s2
|
||||
#define intersection s3
|
||||
#define cur_ptr s4
|
||||
#define prev_ptr s5
|
||||
#define cur_vtx s6
|
||||
#define prev_vtx s7
|
||||
#define p0 k0
|
||||
#define p1 k1
|
||||
#define vtx1 a1
|
||||
#define vtx2 a2
|
||||
#define vtx3 a3
|
||||
|
||||
#define vplane $v01
|
||||
#define vint_f $v02
|
||||
#define vint_i $v03
|
||||
#define vdot_i $v04
|
||||
#define vdot_f $v05
|
||||
#define vdiff_i $v06
|
||||
#define vdiff_f $v07
|
||||
#define va_i $v08
|
||||
#define va_f $v09
|
||||
#define vpos_i $v10
|
||||
#define vpos_f $v11
|
||||
#define vattr0 $v12
|
||||
#define vattr1 $v13
|
||||
#define voff0 $v14
|
||||
#define voff1 $v15
|
||||
#define vcache0 $v16
|
||||
#define vcache1 $v17
|
||||
#define v__ $v29
|
||||
|
||||
move ra2, ra
|
||||
|
||||
# Init in_list as empty
|
||||
li in_list, %lo(CLIP_LIST0)
|
||||
move in_count, zero
|
||||
|
||||
# Put three original vertices in the out_list
|
||||
# (So after the initial swap they will be in the in_list)
|
||||
li out_list, %lo(CLIP_LIST1)
|
||||
sh vtx1, 0(out_list)
|
||||
sh vtx2, 2(out_list)
|
||||
sh vtx3, 4(out_list)
|
||||
li out_count, 3*2
|
||||
|
||||
li plane, %lo(CLIP_PLANES)
|
||||
li plane_flag, 1
|
||||
|
||||
# Load cache offsets
|
||||
li t0, %lo(CACHE_OFFSETS)
|
||||
vxor voff1, voff1
|
||||
lqv voff0, 0,t0
|
||||
lsv voff1, 16,t0
|
||||
|
||||
# Temporarily use the RDP staging area as a map of which cache slots are used
|
||||
# Init to zero
|
||||
li t0, %lo(RDPQ_CMD_STAGING)
|
||||
sqv vzero, 0,t0
|
||||
sqv vzero, 16,t0
|
||||
|
||||
# Iterate over the 6 clipping planes
|
||||
gl_clip_plane_loop:
|
||||
and t0, clip_flags, plane_flag
|
||||
beqz t0, gl_clip_plane_loop_end
|
||||
move t1, in_list
|
||||
|
||||
# Swap in and out lists
|
||||
|
||||
# If the out list is empty from the last iteration,
|
||||
# the triangle has no visible points and we are done
|
||||
beqz out_count, gl_clip_return
|
||||
move in_list, out_list
|
||||
move out_list, t1
|
||||
move in_count, out_count
|
||||
move out_count, zero
|
||||
|
||||
# Iterate over the egdes of the polygon in the input list
|
||||
# The current edge is between cur_vtx and prev_vtx
|
||||
move cur_ptr, in_list
|
||||
add in_end, in_list, in_count
|
||||
# Init the "previous" vertex to the last in the list for the wrap-around
|
||||
addi prev_ptr, in_end, -2
|
||||
|
||||
gl_clip_edge_loop:
|
||||
#define cur_flag t3
|
||||
#define prev_flag t4
|
||||
|
||||
# Check which side of the plane the two vertices are on
|
||||
lhu cur_vtx, 0(cur_ptr)
|
||||
lhu prev_vtx, 0(prev_ptr)
|
||||
lbu cur_flag, SCREEN_VTX_CLIP_CODE(cur_vtx)
|
||||
lbu prev_flag, SCREEN_VTX_CLIP_CODE(prev_vtx)
|
||||
and cur_flag, plane_flag
|
||||
and prev_flag, plane_flag
|
||||
|
||||
# If they are on opposite sides, there is an intersection
|
||||
xor t0, cur_flag, prev_flag
|
||||
beqz t0, gl_clip_no_intersection
|
||||
move p0, cur_vtx
|
||||
|
||||
# Swap the two points if necessary to make intersection calculation consistent
|
||||
# This will make sure p0 is always inside and p1 is always outside
|
||||
bnez prev_flag, gl_clip_no_swap
|
||||
move p1, prev_vtx
|
||||
xor p0, p0, p1
|
||||
xor p1, p0, p1
|
||||
xor p0, p0, p1
|
||||
|
||||
#undef prev_flag
|
||||
|
||||
gl_clip_no_swap:
|
||||
# Calculate intersection of the line segment and the plane
|
||||
|
||||
li t0, %lo(RDPQ_CMD_STAGING)
|
||||
lqv vcache0, 0,t0
|
||||
lqv vcache1, 16,t0
|
||||
|
||||
# Repeat plane coefficients twice
|
||||
ldv vplane.e0, 0,plane
|
||||
ldv vplane.e4, 0,plane
|
||||
|
||||
# vpos: x0 y0 z0 w0 x1 y1 z1 w1
|
||||
ldv vpos_i.e0, SCREEN_VTX_CS_POSi,p0
|
||||
ldv vpos_f.e0, SCREEN_VTX_CS_POSf,p0
|
||||
ldv vpos_i.e4, SCREEN_VTX_CS_POSi,p1
|
||||
ldv vpos_f.e4, SCREEN_VTX_CS_POSf,p1
|
||||
|
||||
# vint: x1 y1 z1 w1
|
||||
ldv vint_i.e0, SCREEN_VTX_CS_POSi,p1
|
||||
ldv vint_f.e0, SCREEN_VTX_CS_POSf,p1
|
||||
|
||||
# vattr0: r0 g0 b0 a0 s0 t0
|
||||
luv vattr0.e0, SCREEN_VTX_RGBA ,p0
|
||||
llv vattr0.e4, SCREEN_VTX_S_T ,p0
|
||||
|
||||
# vattr1: r1 g1 b1 a1 s1 t1
|
||||
luv vattr1.e0, SCREEN_VTX_RGBA ,p1
|
||||
llv vattr1.e4, SCREEN_VTX_S_T ,p1
|
||||
|
||||
# Find first free slot in clip cache
|
||||
|
||||
# Add the values from the "used slots map" to the cache offsets
|
||||
# After this, each lane will contain the offset of its corresponding cache slot,
|
||||
# but only if the slot is not used. If it is used, it will contain some large value.
|
||||
vaddc vcache0, voff0
|
||||
vaddc vcache1, voff1
|
||||
|
||||
# Look for the smallest value, which will end up in vcache.e0
|
||||
# Because used slots are marked as large values, they will never be found.
|
||||
vlt vcache0, vcache0.q1
|
||||
vlt vcache0, vcache0.h2
|
||||
vlt vcache0, vcache0.e4
|
||||
vlt vcache0, vcache1.e0
|
||||
|
||||
mfc2 t0, vcache0.e0
|
||||
|
||||
# Mark slot as used by storing some large value (careful of overflows!)
|
||||
li t1, 0xFF
|
||||
sh t1, %lo(RDPQ_CMD_STAGING)-2(t0)
|
||||
|
||||
# t0 is the index multiplied by 2
|
||||
# intersection = t0 * 20 = t0 * 16 + t0 * 4
|
||||
sll intersection, t0, 4
|
||||
sll t1, t0, 2
|
||||
add intersection, t1
|
||||
|
||||
# CAUTION: intersection might point to the same address as either p0 or p1,
|
||||
# because one of them is the previous point, which could have been marked unused
|
||||
# in the previous iteration. As long as we don't access p0 or p1 after writing to
|
||||
# intersection, this is fine.
|
||||
addi intersection, %lo(CLIP_CACHE) - SCREEN_VTX_SIZE
|
||||
|
||||
# Store the cache offset in unused memory (used later when finding the cache slot to mark as unused)
|
||||
sb t0, SCREEN_VTX_PADDING(intersection)
|
||||
|
||||
# Compute dot products of both positions with the clip plane
|
||||
# vdot.e0: d0 = dot(p0, plane)
|
||||
# vdot.e4: d1 = dot(p1, plane)
|
||||
vmudn vdot_f, vpos_f, vplane
|
||||
vmadh vdot_i, vpos_i, vplane
|
||||
vaddc vdot_f, vdot_f.q1
|
||||
vadd vdot_i, vdot_i.q1
|
||||
vaddc vdot_f, vdot_f.h2
|
||||
vadd vdot_i, vdot_i.h2
|
||||
|
||||
# d0 - d1
|
||||
vsubc vdiff_f, vdot_f, vdot_f.e4
|
||||
vsub vdiff_i, vdot_i, vdot_i.e4
|
||||
|
||||
# 1 / (d0 - d1)
|
||||
vrcph v__.e0, vdiff_i.e0
|
||||
vrcpl va_f.e0, vdiff_f.e0
|
||||
vrcph va_i.e0, vzero.e0
|
||||
|
||||
# a = d0 / (d0 - d1)
|
||||
vmudl v__, va_f, vdot_f.e0
|
||||
vmadm v__, va_i, vdot_f.e0
|
||||
vmadn va_f, va_f, vdot_i.e0
|
||||
|
||||
# Prepare 0x7FFF in va_i.e0
|
||||
vsubc va_i, vshift8, K1
|
||||
|
||||
# a = min(a, 1)
|
||||
vge v__, va_f, vzero
|
||||
vmrg va_f, va_f, va_i.e0
|
||||
|
||||
# Account for right shift introduced by vrcp
|
||||
vmudn va_f, va_f, K2
|
||||
|
||||
# p1 - p0
|
||||
vsubc vint_f, vpos_f
|
||||
vsub vint_i, vpos_i
|
||||
# attr1 - attr0
|
||||
vsubc vattr1, vattr0
|
||||
|
||||
# Result of linear interpolation:
|
||||
# p0 + a * (p1 - p0)
|
||||
vmudl v__, vint_f, va_f.e0
|
||||
vmadm v__, vint_i, va_f.e0
|
||||
vmadn vint_f, vpos_f, K1
|
||||
vmadh vint_i, vpos_i, K1
|
||||
|
||||
# a * (attr1 - attr0)
|
||||
vmudm vattr1, vattr1, va_f.e0
|
||||
|
||||
# attr0 + a * (attr1 - attr0)
|
||||
vaddc vattr0, vattr1
|
||||
|
||||
# Store results
|
||||
sdv vint_i.e0, SCREEN_VTX_CS_POSi,intersection
|
||||
sdv vint_f.e0, SCREEN_VTX_CS_POSf,intersection
|
||||
suv vattr0.e0, SCREEN_VTX_RGBA ,intersection
|
||||
jal GL_CalcClipCodes
|
||||
slv vattr0.e4, SCREEN_VTX_S_T ,intersection
|
||||
|
||||
# Add intersection to the output list
|
||||
add t0, out_list, out_count
|
||||
sh intersection, 0(t0)
|
||||
addi out_count, 2
|
||||
|
||||
gl_clip_no_intersection:
|
||||
# If cur_vtx is inside, add it to the output list
|
||||
bnez cur_flag, gl_clip_no_current
|
||||
add t0, out_list, out_count
|
||||
sh cur_vtx, 0(t0)
|
||||
b gl_clip_edge_loop_end
|
||||
addi out_count, 2
|
||||
|
||||
#undef cur_flag
|
||||
|
||||
gl_clip_no_current:
|
||||
# Check if the vertex is stored in the clip cache
|
||||
lbu t0, SCREEN_VTX_PADDING(cur_vtx)
|
||||
beqz t0, gl_clip_edge_loop_end
|
||||
# Reset the padding field to zero, so the screen space values won't be recalculated below
|
||||
sb zero, SCREEN_VTX_PADDING(cur_vtx)
|
||||
# If so, mark it as unused
|
||||
sh zero, %lo(RDPQ_CMD_STAGING)-2(t0)
|
||||
|
||||
gl_clip_edge_loop_end:
|
||||
# Advance to the next edge
|
||||
addi cur_ptr, 2
|
||||
blt cur_ptr, in_end, gl_clip_edge_loop
|
||||
addi prev_ptr, cur_ptr, -2
|
||||
|
||||
gl_clip_plane_loop_end:
|
||||
# Advance to the next clipping plane
|
||||
sll plane_flag, 1
|
||||
blt plane_flag, (1<<CLIPPING_PLANE_COUNT), gl_clip_plane_loop
|
||||
addi plane, CLIPPING_PLANE_SIZE
|
||||
|
||||
#define cache_vtx s3
|
||||
#define cache_end s5
|
||||
|
||||
# Calculate screen space values for new vertices (in the clip cache)
|
||||
# TODO: maybe iterate over out_list instead
|
||||
li cache_vtx, %lo(CLIP_CACHE)
|
||||
li cache_end, %lo(CLIP_CACHE_END) - SCREEN_VTX_SIZE
|
||||
gl_clip_finalize_loop:
|
||||
lbu t0, SCREEN_VTX_PADDING(cache_vtx)
|
||||
neg t0
|
||||
|
||||
# Only calculate screen space values if the vertex is actually used
|
||||
ldv vint_i, SCREEN_VTX_CS_POSi,cache_vtx
|
||||
bltzal t0, GL_CalcScreenSpace
|
||||
ldv vint_f, SCREEN_VTX_CS_POSf,cache_vtx
|
||||
|
||||
blt cache_vtx, cache_end, gl_clip_finalize_loop
|
||||
addi cache_vtx, SCREEN_VTX_SIZE
|
||||
|
||||
gl_clip_return:
|
||||
# Done!
|
||||
jr ra2
|
||||
add s2, out_list, out_count
|
||||
|
||||
#undef cache_vtx
|
||||
#undef cache_end
|
||||
#undef clip_flags
|
||||
#undef plane_flag
|
||||
#undef in_count
|
||||
#undef out_count
|
||||
#undef in_end
|
||||
#undef intersection
|
||||
#undef in_list
|
||||
#undef out_list
|
||||
#undef plane
|
||||
#undef cur_ptr
|
||||
#undef prev_ptr
|
||||
#undef cur_vtx
|
||||
#undef prev_vtx
|
||||
#undef p0
|
||||
#undef p1
|
||||
#undef vtx1
|
||||
#undef vtx2
|
||||
#undef vtx3
|
||||
#undef vplane
|
||||
#undef vpos_i
|
||||
#undef vpos_f
|
||||
#undef vdot_i
|
||||
#undef vdot_f
|
||||
#undef vdiff_i
|
||||
#undef vdiff_f
|
||||
#undef va_f
|
||||
#undef vint_i
|
||||
#undef vint_f
|
||||
#undef vattr0
|
||||
#undef vattr1
|
||||
#undef v__
|
||||
|
||||
.endfunc
|
||||
64
misc/opengl/GL1Funcs.h
Normal file
@@ -0,0 +1,64 @@
|
||||
/* Raster state functions */
|
||||
GL_FUNC(void, glAlphaFunc, (GLenum func, GLfloat ref))
|
||||
GL_FUNC(void, glBlendFunc, (GLenum sfactor, GLenum dfactor))
|
||||
GL_FUNC(void, glClearColor, (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha))
|
||||
GL_FUNC(void, glColorMask, (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha))
|
||||
GL_FUNC(void, glDepthFunc, (GLenum func))
|
||||
GL_FUNC(void, glDepthMask, (GLboolean flag))
|
||||
GL_FUNC(void, glDisable, (GLenum cap))
|
||||
GL_FUNC(void, glDisableClientState, (GLenum array))
|
||||
GL_FUNC(void, glEnable, (GLenum cap))
|
||||
GL_FUNC(void, glEnableClientState, (GLenum array))
|
||||
|
||||
/* Fog functions */
|
||||
GL_FUNC(void, glFogf, (GLenum pname, GLfloat param))
|
||||
GL_FUNC(void, glFogfv, (GLenum pname, const GLfloat* params))
|
||||
GL_FUNC(void, glFogi, (GLenum pname, GLint param))
|
||||
GL_FUNC(void, glFogiv, (GLenum pname, const GLint* params))
|
||||
|
||||
/* Transform functions */
|
||||
GL_FUNC(void, glLoadIdentity, (void))
|
||||
GL_FUNC(void, glLoadMatrixf, (const GLfloat* m))
|
||||
GL_FUNC(void, glMatrixMode, (GLenum mode))
|
||||
GL_FUNC(void, glViewport, (GLint x, GLint y, GLsizei width, GLsizei height))
|
||||
|
||||
/* Draw functions */
|
||||
GL_FUNC(void, glDrawArrays, (GLenum mode, GLint first, GLsizei count))
|
||||
GL_FUNC(void, glDrawElements, (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices))
|
||||
GL_FUNC(void, glColorPointer, (GLint size, GLenum type, GLsizei stride, GLpointer pointer))
|
||||
GL_FUNC(void, glTexCoordPointer, (GLint size, GLenum type, GLsizei stride, GLpointer pointer))
|
||||
GL_FUNC(void, glVertexPointer, (GLint size, GLenum type, GLsizei stride, GLpointer pointer))
|
||||
|
||||
/* Misc functions */
|
||||
GL_FUNC(void, glClear, (GLuint mask))
|
||||
GL_FUNC(void, glHint, (GLenum target, GLenum mode))
|
||||
GL_FUNC(void, glReadPixels, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels))
|
||||
GL_FUNC(void, glScissor, (GLint x, GLint y, GLsizei width, GLsizei height))
|
||||
|
||||
/* Texture functions */
|
||||
GL_FUNC(void, glBindTexture, (GLenum target, GLuint texture))
|
||||
GL_FUNC(void, glDeleteTextures, (GLsizei n, const GLuint* textures))
|
||||
GL_FUNC(void, glGenTextures, (GLsizei n, GLuint* textures))
|
||||
GL_FUNC(void, glTexImage2D, (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels))
|
||||
GL_FUNC(void, glTexSubImage2D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels))
|
||||
GL_FUNC(void, glTexParameteri, (GLenum target, GLenum pname, GLint param))
|
||||
|
||||
/* State get functions */
|
||||
GL_FUNC(GLenum, glGetError, (void))
|
||||
GL_FUNC(void, glGetFloatv, (GLenum pname, GLfloat* params))
|
||||
GL_FUNC(void, glGetIntegerv, (GLenum pname, GLint* params))
|
||||
GL_FUNC(const GLubyte*, glGetString, (GLenum name))
|
||||
|
||||
/* Legacy display list functions */
|
||||
GL_FUNC(void, glCallList, (GLuint list))
|
||||
GL_FUNC(void, glDeleteLists, (GLuint list, GLsizei range))
|
||||
GL_FUNC(GLuint, glGenLists, (GLsizei range))
|
||||
GL_FUNC(void, glNewList, (GLuint list, GLenum mode))
|
||||
GL_FUNC(void, glEndList, (void))
|
||||
|
||||
/* Legacy vertex draw functions */
|
||||
GL_FUNC(void, glBegin, (GLenum mode))
|
||||
GL_FUNC(void, glEnd, (void))
|
||||
GL_FUNC(void, glColor4ub, (GLubyte r, GLubyte g, GLubyte b, GLubyte a))
|
||||
GL_FUNC(void, glTexCoord2f, (float u, float v))
|
||||
GL_FUNC(void, glVertex3f, (float x, float y, float z))
|
||||
64
misc/opengl/GL1Macros.h
Normal file
@@ -0,0 +1,64 @@
|
||||
/* Raster state functions */
|
||||
#define _glAlphaFunc glAlphaFunc
|
||||
#define _glBlendFunc glBlendFunc
|
||||
#define _glClearColor glClearColor
|
||||
#define _glColorMask glColorMask
|
||||
#define _glDepthFunc glDepthFunc
|
||||
#define _glDepthMask glDepthMask
|
||||
#define _glDisable glDisable
|
||||
#define _glDisableClientState glDisableClientState
|
||||
#define _glEnable glEnable
|
||||
#define _glEnableClientState glEnableClientState
|
||||
|
||||
/* Fog functions */
|
||||
#define _glFogf glFogf
|
||||
#define _glFogfv glFogfv
|
||||
#define _glFogi glFogi
|
||||
#define _glFogiv glFogiv
|
||||
|
||||
/* Transform functions */
|
||||
#define _glLoadIdentity glLoadIdentity
|
||||
#define _glLoadMatrixf glLoadMatrixf
|
||||
#define _glMatrixMode glMatrixMode
|
||||
#define _glViewport glViewport
|
||||
|
||||
/* Draw functions */
|
||||
#define _glDrawArrays glDrawArrays
|
||||
#define _glDrawElements glDrawElements
|
||||
#define _glColorPointer glColorPointer
|
||||
#define _glTexCoordPointer glTexCoordPointer
|
||||
#define _glVertexPointer glVertexPointer
|
||||
|
||||
/* Misc functions */
|
||||
#define _glClear glClear
|
||||
#define _glHint glHint
|
||||
#define _glReadPixels glReadPixels
|
||||
#define _glScissor glScissor
|
||||
|
||||
/* Texture functions */
|
||||
#define _glBindTexture glBindTexture
|
||||
#define _glDeleteTextures glDeleteTextures
|
||||
#define _glGenTextures glGenTextures
|
||||
#define _glTexImage2D glTexImage2D
|
||||
#define _glTexSubImage2D glTexSubImage2D
|
||||
#define _glTexParameteri glTexParameteri
|
||||
|
||||
/* State get functions */
|
||||
#define _glGetError glGetError
|
||||
#define _glGetFloatv glGetFloatv
|
||||
#define _glGetIntegerv glGetIntegerv
|
||||
#define _glGetString glGetString
|
||||
|
||||
/* Legacy display list functions */
|
||||
#define _glCallList glCallList
|
||||
#define _glDeleteLists glDeleteLists
|
||||
#define _glGenLists glGenLists
|
||||
#define _glNewList glNewList
|
||||
#define _glEndList glEndList
|
||||
|
||||
/* Legacy vertex draw functions */
|
||||
#define _glBegin glBegin
|
||||
#define _glEnd glEnd
|
||||
#define _glColor4ub glColor4ub
|
||||
#define _glTexCoord2f glTexCoord2f
|
||||
#define _glVertex3f glVertex3f
|
||||
36
misc/opengl/GL2Funcs.h
Normal file
@@ -0,0 +1,36 @@
|
||||
/* Buffer functions */
|
||||
GL_FUNC(void, glBindBuffer, (GLenum target, GLuint buffer))
|
||||
GL_FUNC(void, glDeleteBuffers, (GLsizei n, const GLuint* buffers))
|
||||
GL_FUNC(void, glGenBuffers, (GLsizei n, GLuint *buffers))
|
||||
GL_FUNC(void, glBufferData, (GLenum target, cc_uintptr size, const GLvoid* data, GLenum usage))
|
||||
GL_FUNC(void, glBufferSubData, (GLenum target, cc_uintptr offset, cc_uintptr size, const GLvoid* data))
|
||||
|
||||
/* Shader functions */
|
||||
GL_FUNC(GLuint, glCreateShader, (GLenum type))
|
||||
GL_FUNC(void, glDeleteShader, (GLuint shader))
|
||||
GL_FUNC(void, glGetShaderiv, (GLuint shader, GLenum pname, GLint* params))
|
||||
GL_FUNC(void, glGetShaderInfoLog, (GLuint shader, GLsizei bufSize, GLsizei* length, char* infoLog))
|
||||
GL_FUNC(void, glShaderSource, (GLuint shader, GLsizei count, const char* const* string, const GLint* length))
|
||||
|
||||
GL_FUNC(void, glAttachShader, (GLuint program, GLuint shader))
|
||||
GL_FUNC(void, glBindAttribLocation, (GLuint program, GLuint index, const char* name))
|
||||
GL_FUNC(void, glCompileShader, (GLuint shader))
|
||||
GL_FUNC(void, glDetachShader, (GLuint program, GLuint shader))
|
||||
GL_FUNC(void, glLinkProgram, (GLuint program))
|
||||
|
||||
/* Program functions */
|
||||
GL_FUNC(GLuint, glCreateProgram, (void))
|
||||
GL_FUNC(void, glDeleteProgram, (GLuint program))
|
||||
GL_FUNC(void, glGetProgramiv, (GLuint program, GLenum pname, GLint* params))
|
||||
GL_FUNC(void, glGetProgramInfoLog, (GLuint program, GLsizei bufSize, GLsizei* length, char* infoLog))
|
||||
GL_FUNC(void, glUseProgram, (GLuint program))
|
||||
|
||||
GL_FUNC(void, glDisableVertexAttribArray, (GLuint index))
|
||||
GL_FUNC(void, glEnableVertexAttribArray, (GLuint index))
|
||||
GL_FUNC(void, glVertexAttribPointer, (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* pointer))
|
||||
|
||||
GL_FUNC(GLint, glGetUniformLocation, (GLuint program, const char* name))
|
||||
GL_FUNC(void, glUniform1f, (GLint location, GLfloat v0))
|
||||
GL_FUNC(void, glUniform2f, (GLint location, GLfloat v0, GLfloat v1))
|
||||
GL_FUNC(void, glUniform3f, (GLint location, GLfloat v0, GLfloat v1, GLfloat v2))
|
||||
GL_FUNC(void, glUniformMatrix4fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value))
|
||||
108
misc/opengl/GLCommon.h
Normal file
@@ -0,0 +1,108 @@
|
||||
#if defined CC_BUILD_WIN
|
||||
/* Avoid pointless includes */
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#define NOSERVICE
|
||||
#define NOMCX
|
||||
#define NOIME
|
||||
#include <windows.h>
|
||||
#define GLAPI WINGDIAPI
|
||||
#elif defined CC_BUILD_SYMBIAN && !defined __WINSCW__
|
||||
#define GLAPI IMPORT_C
|
||||
#define APIENTRY
|
||||
#else
|
||||
#define GLAPI extern
|
||||
#define APIENTRY
|
||||
#endif
|
||||
|
||||
typedef unsigned int GLenum;
|
||||
typedef unsigned char GLboolean;
|
||||
typedef signed char GLbyte;
|
||||
typedef int GLint;
|
||||
typedef int GLsizei;
|
||||
typedef unsigned char GLubyte;
|
||||
typedef unsigned int GLuint;
|
||||
typedef float GLfloat;
|
||||
typedef void GLvoid;
|
||||
|
||||
/* NOTE: With the OpenGL 1.1 backend "pointer" arguments are actual pointers, */
|
||||
/* but with VBOs they are just offsets instead */
|
||||
#ifdef CC_BUILD_GL11
|
||||
typedef const void* GLpointer;
|
||||
#else
|
||||
typedef cc_uintptr GLpointer;
|
||||
#endif
|
||||
|
||||
#define GL_LEQUAL 0x0203
|
||||
#define GL_GREATER 0x0204
|
||||
|
||||
#define GL_DEPTH_BUFFER_BIT 0x00000100
|
||||
#define GL_COLOR_BUFFER_BIT 0x00004000
|
||||
|
||||
#define GL_LINES 0x0001
|
||||
#define GL_TRIANGLES 0x0004
|
||||
#define GL_QUADS 0x0007
|
||||
|
||||
#define GL_BLEND 0x0BE2
|
||||
#define GL_SRC_ALPHA 0x0302
|
||||
#define GL_ONE_MINUS_SRC_ALPHA 0x0303
|
||||
|
||||
#define GL_UNSIGNED_BYTE 0x1401
|
||||
#define GL_UNSIGNED_SHORT 0x1403
|
||||
#define GL_UNSIGNED_INT 0x1405
|
||||
#define GL_FLOAT 0x1406
|
||||
#define GL_RGBA 0x1908
|
||||
|
||||
#define GL_FOG 0x0B60
|
||||
#define GL_FOG_DENSITY 0x0B62
|
||||
#define GL_FOG_END 0x0B64
|
||||
#define GL_FOG_MODE 0x0B65
|
||||
#define GL_FOG_COLOR 0x0B66
|
||||
#define GL_LINEAR 0x2601
|
||||
#define GL_EXP 0x0800
|
||||
#define GL_EXP2 0x0801
|
||||
|
||||
#define GL_CULL_FACE 0x0B44
|
||||
#define GL_DEPTH_TEST 0x0B71
|
||||
#define GL_MATRIX_MODE 0x0BA0
|
||||
#define GL_VIEWPORT 0x0BA2
|
||||
#define GL_ALPHA_TEST 0x0BC0
|
||||
#define GL_SCISSOR_TEST 0x0C11
|
||||
|
||||
#define GL_MAX_TEXTURE_SIZE 0x0D33
|
||||
#define GL_DEPTH_BITS 0x0D56
|
||||
|
||||
#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50
|
||||
#define GL_FOG_HINT 0x0C54
|
||||
#define GL_NICEST 0x1102
|
||||
#define GL_COMPILE 0x1300
|
||||
|
||||
#define GL_MODELVIEW 0x1700
|
||||
#define GL_PROJECTION 0x1701
|
||||
#define GL_TEXTURE 0x1702
|
||||
|
||||
#define GL_VENDOR 0x1F00
|
||||
#define GL_RENDERER 0x1F01
|
||||
#define GL_VERSION 0x1F02
|
||||
#define GL_EXTENSIONS 0x1F03
|
||||
|
||||
#define GL_TEXTURE_2D 0x0DE1
|
||||
#define GL_NEAREST 0x2600
|
||||
#define GL_NEAREST_MIPMAP_LINEAR 0x2702
|
||||
#define GL_TEXTURE_MAG_FILTER 0x2800
|
||||
#define GL_TEXTURE_MIN_FILTER 0x2801
|
||||
|
||||
#define GL_VERTEX_ARRAY 0x8074
|
||||
#define GL_COLOR_ARRAY 0x8076
|
||||
#define GL_TEXTURE_COORD_ARRAY 0x8078
|
||||
|
||||
/* Not present in gl.h on Windows (only up to OpenGL 1.1) */
|
||||
#define GL_ARRAY_BUFFER 0x8892
|
||||
#define GL_ELEMENT_ARRAY_BUFFER 0x8893
|
||||
#define GL_STATIC_DRAW 0x88E4
|
||||
#define GL_DYNAMIC_DRAW 0x88E8
|
||||
|
||||
#define GL_FRAGMENT_SHADER 0x8B30
|
||||
#define GL_VERTEX_SHADER 0x8B31
|
||||
#define GL_COMPILE_STATUS 0x8B81
|
||||
#define GL_LINK_STATUS 0x8B82
|
||||
#define GL_INFO_LOG_LENGTH 0x8B84
|
||||
28
misc/os2/Makefile
Normal file
@@ -0,0 +1,28 @@
|
||||
TARGET := ClassiCube
|
||||
BUILD_DIR := build/os2
|
||||
SOURCE_DIR := src
|
||||
|
||||
C_SOURCES := $(wildcard $(SOURCE_DIR)/*.c)
|
||||
C_OBJECTS := $(patsubst $(SOURCE_DIR)/%.c, $(BUILD_DIR)/%.o, $(C_SOURCES))
|
||||
OBJECTS := $(C_OBJECTS) $(BUILD_DIR)/$(TARGET).res misc/os2/classicube.def
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# options for code generation
|
||||
#---------------------------------------------------------------------------------
|
||||
CC := gcc
|
||||
CFLAGS := -pipe -Wno-attributes -fno-math-errno -O3 -g -mtune=pentium4 -msse2 -march=i686 -idirafter /@unixroot/usr/include/os2tk45 -DOS2
|
||||
LDFLAGS := -Zhigh-mem -Zomf -Zargs-wild -Zargs-resp -Zlinker DISABLE -Zlinker 1121
|
||||
LIBS := -lcx -lmmpm2 -lpthread /@unixroot/usr/local/lib/kai.a
|
||||
|
||||
$(TARGET).exe: $(BUILD_DIR) $(OBJECTS)
|
||||
$(CC) $(LDFLAGS) -o $@ $(OBJECTS) $(LIBS)
|
||||
|
||||
$(BUILD_DIR):
|
||||
mkdir -p $(BUILD_DIR)
|
||||
|
||||
$(BUILD_DIR)/%.o : $(SOURCE_DIR)/%.c
|
||||
$(CC) $(CFLAGS) -c $< -o $@
|
||||
|
||||
$(BUILD_DIR)/$(TARGET).res: misc/os2/$(TARGET).rc misc/os2/$(TARGET).ico
|
||||
wrc -r misc/os2/$(TARGET).rc -fo=$@
|
||||
|
||||
83
misc/ps1/Makefile
Normal file
@@ -0,0 +1,83 @@
|
||||
ifeq ($(strip $(PSN00BSDK_ROOT)),)
|
||||
$(warning Please set PSN00BSDK_ROOT path in your environment. For example:)
|
||||
$(warning export PSN00BSDK_ROOT=/usr/local/lib/psn00bsdk)
|
||||
$(error Failed to find PSN00BSDK installation path)
|
||||
endif
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Configurable options
|
||||
#---------------------------------------------------------------------------------
|
||||
# Name of the final output
|
||||
TARGET := ClassiCube-ps1
|
||||
# List of directories containing source code
|
||||
SOURCE_DIRS := src src/ps1
|
||||
# Directory where object files are placed
|
||||
BUILD_DIR := build/ps1
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Code generation
|
||||
#---------------------------------------------------------------------------------
|
||||
S_FILES := $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.S))
|
||||
C_FILES := $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.c))
|
||||
OBJS := $(addprefix $(BUILD_DIR)/, $(notdir $(C_FILES:%.c=%.o) $(S_FILES:%.S=%.o)))
|
||||
|
||||
CINCLUDES := -I$(PSN00BSDK_ROOT)/include/libpsn00b
|
||||
|
||||
CFLAGS := -DPLAT_PS1 -DPSN00BSDK=1 -g -Wa,--strip-local-absolute -ffreestanding -fno-builtin -nostdlib -fdata-sections -ffunction-sections -fsigned-char -fno-strict-overflow -msoft-float -march=r3000 -mtune=r3000 -mabi=32 -mno-mt -mno-llsc -Og -mdivide-breaks -G8 -fno-pic -mno-abicalls -mgpopt -mno-extern-sdata
|
||||
|
||||
# Dependency tracking
|
||||
DEPFLAGS = -MT $@ -MMD -MP -MF $(BUILD_DIR)/$*.d
|
||||
DEPFILES := $(OBJS:%.o=%.d)
|
||||
|
||||
# Additional libraries to link against
|
||||
# libpsxgpu -> $(PSN00BSDK_ROOT)/lib/libpsn00b/debug/libpsxgpu_exe_gprel.a
|
||||
PS1LIBS := libpsxgpu libpsxgte libpsxspu libpsxcd libpsxpress libpsxsio libpsxetc libpsxapi libsmd liblzp libc
|
||||
PS1LIBS := $(addprefix $(PSN00BSDK_ROOT)/lib/libpsn00b/debug/, $(PS1LIBS))
|
||||
PS1LIBS := $(addsuffix _exe_gprel.a, $(PS1LIBS))
|
||||
|
||||
LDFLAGS = -g -T$(PSN00BSDK_ROOT)/lib/libpsn00b/ldscripts/exe.ld -nostdlib -Wl,-gc-sections -G8 -static
|
||||
LIBS = -lgcc $(PS1LIBS)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# main targets
|
||||
#---------------------------------------------------------------------------------
|
||||
default: $(BUILD_DIR) $(TARGET).bin
|
||||
|
||||
clean:
|
||||
rm $(TARGET).bin $(TARGET).cue $(TARGET).exe $(BUILD_DIR)/$(TARGET).elf $(OBJS)
|
||||
|
||||
$(BUILD_DIR):
|
||||
mkdir -p $(BUILD_DIR)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# executable generation
|
||||
#---------------------------------------------------------------------------------
|
||||
$(BUILD_DIR)/$(TARGET).elf: $(OBJS)
|
||||
$(PSN00BSDK_ROOT)/bin/mipsel-none-elf-gcc $(LDFLAGS) $^ -o $@ $(LIBS)
|
||||
|
||||
$(TARGET).exe: $(BUILD_DIR)/$(TARGET).elf
|
||||
$(PSN00BSDK_ROOT)/bin/elf2x -q $(BUILD_DIR)/$(TARGET).elf $(TARGET).exe
|
||||
|
||||
$(TARGET).bin: $(TARGET).exe
|
||||
$(PSN00BSDK_ROOT)/bin/mkpsxiso -y -o $(TARGET).bin -c $(TARGET).cue misc/ps1/iso.xml
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# object generation
|
||||
#---------------------------------------------------------------------------------
|
||||
$(BUILD_DIR)/%.o: src/%.c
|
||||
$(PSN00BSDK_ROOT)/bin/mipsel-none-elf-gcc $(CFLAGS) $(CINCLUDES) $(DEPFLAGS) -c $< -o $@
|
||||
|
||||
$(BUILD_DIR)/%.o: src/ps1/%.c
|
||||
$(PSN00BSDK_ROOT)/bin/mipsel-none-elf-gcc $(CFLAGS) $(CINCLUDES) $(DEPFLAGS) -c $< -o $@
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Dependency tracking
|
||||
#---------------------------------------------------------------------------------
|
||||
$(DEPFILES):
|
||||
|
||||
include $(wildcard $(DEPFILES))
|
||||
138
misc/ps1/iso.xml
Normal file
@@ -0,0 +1,138 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
This file is used by mkpsxiso to build the CD image.
|
||||
|
||||
NOTE: all paths are relative to the misc/ps1 directory.
|
||||
-->
|
||||
<iso_project>
|
||||
<track type="data">
|
||||
<!--
|
||||
The "volume", "volume_set", "publisher", "data_preparer" and
|
||||
"copyright" strings below can be freely modified. The ISO9660
|
||||
specification, however, imposes the following limitations:
|
||||
|
||||
- "volume" and "volume_set" must be 32 characters or less, and can
|
||||
only contain uppercase letters, digits and underscores.
|
||||
- "publisher" and "data_preparer" can be up to 128 characters long
|
||||
and can additionally contain spaces and some special characters.
|
||||
- "copyright" should be a path to a file on the disc, even one that
|
||||
does not exist (but in practice it can be set to anything).
|
||||
|
||||
"system" and "application" must always be set to "PLAYSTATION" in
|
||||
order for the disc to be recognized as valid.
|
||||
-->
|
||||
<identifiers
|
||||
system ="PLAYSTATION"
|
||||
volume ="CLASSICUBE_PS1"
|
||||
volume_set ="CLASSICUBE_PS1"
|
||||
publisher ="CLASSICUBE"
|
||||
data_preparer ="PSN00BSDK"
|
||||
application ="PLAYSTATION"
|
||||
copyright ="README.TXT;1"
|
||||
/>
|
||||
|
||||
<!--
|
||||
You may optionally include a license file using the <license> tag.
|
||||
Some consoles, particularly Japanese or PAL models with a modchip,
|
||||
require the disc to contain valid license data and will refuse to
|
||||
boot if it is missing. License files are usually not required on
|
||||
US consoles or when booting via softmods or cheat cartridges.
|
||||
|
||||
License files are region-specific and are not distributed with
|
||||
PSn00bSDK for obvious reasons, but can be dumped from an official
|
||||
game using dumpsxiso or extracted from the Sony SDK.
|
||||
-->
|
||||
<!--<license file="${PROJECT_SOURCE_DIR}/license.dat" />-->
|
||||
|
||||
<!--
|
||||
Files and directories can be added to the disc by placing <file>
|
||||
and <dir> tags below. All file names are case-insensitive and must
|
||||
be in 8.3 format, i.e. no more than 8 characters for the name and 3
|
||||
for the optional extension. Directories cannot have extensions.
|
||||
|
||||
A boot configuration file (SYSTEM.CNF) or executable (PSX.EXE) must
|
||||
be present in the root directory. Due to BIOS limitations the root
|
||||
directory cannot hold more than 30 files or directories, and the
|
||||
entire disc must contain 45 directories or less. Subdirectories can
|
||||
contain any number of files.
|
||||
-->
|
||||
<directory_tree>
|
||||
<file name="SYSTEM.CNF" type="data" source="system.cnf" />
|
||||
<file name="CCUBEPS1.EXE" type="data" source="../../ClassiCube-ps1.exe" />
|
||||
|
||||
<dir name="audio">
|
||||
<file name="DCLOTH1.SND" type="data" source="sounds/dig_cloth1.snd" />
|
||||
<file name="DCLOTH2.SND" type="data" source="sounds/dig_cloth2.snd" />
|
||||
<file name="DCLOTH3.SND" type="data" source="sounds/dig_cloth3.snd" />
|
||||
<file name="DCLOTH4.SND" type="data" source="sounds/dig_cloth4.snd" />
|
||||
<file name="DGLASS1.SND" type="data" source="sounds/dig_glass1.snd" />
|
||||
<file name="DGLASS2.SND" type="data" source="sounds/dig_glass2.snd" />
|
||||
<file name="DGLASS3.SND" type="data" source="sounds/dig_glass3.snd" />
|
||||
<file name="DGRASS1.SND" type="data" source="sounds/dig_grass1.snd" />
|
||||
<file name="DGRASS2.SND" type="data" source="sounds/dig_grass2.snd" />
|
||||
<file name="DGRASS3.SND" type="data" source="sounds/dig_grass3.snd" />
|
||||
<file name="DGRASS4.SND" type="data" source="sounds/dig_grass4.snd" />
|
||||
<file name="DGRAVEL1.SND" type="data" source="sounds/dig_gravel1.snd" />
|
||||
<file name="DGRAVEL2.SND" type="data" source="sounds/dig_gravel2.snd" />
|
||||
<file name="DGRAVEL3.SND" type="data" source="sounds/dig_gravel3.snd" />
|
||||
<file name="DGRAVEL4.SND" type="data" source="sounds/dig_gravel4.snd" />
|
||||
<file name="DSAND1.SND" type="data" source="sounds/dig_sand1.snd" />
|
||||
<file name="DSAND2.SND" type="data" source="sounds/dig_sand2.snd" />
|
||||
<file name="DSAND3.SND" type="data" source="sounds/dig_sand3.snd" />
|
||||
<file name="DSAND4.SND" type="data" source="sounds/dig_sand4.snd" />
|
||||
<file name="DSNOW1.SND" type="data" source="sounds/dig_snow1.snd" />
|
||||
<file name="DSNOW2.SND" type="data" source="sounds/dig_snow2.snd" />
|
||||
<file name="DSNOW3.SND" type="data" source="sounds/dig_snow3.snd" />
|
||||
<file name="DSNOW4.SND" type="data" source="sounds/dig_snow4.snd" />
|
||||
<file name="DSTONE1.SND" type="data" source="sounds/dig_stone1.snd" />
|
||||
<file name="DSTONE2.SND" type="data" source="sounds/dig_stone2.snd" />
|
||||
<file name="DSTONE3.SND" type="data" source="sounds/dig_stone3.snd" />
|
||||
<file name="DSTONE4.SND" type="data" source="sounds/dig_stone4.snd" />
|
||||
<file name="DWOOD1.SND" type="data" source="sounds/dig_wood1.snd" />
|
||||
<file name="DWOOD2.SND" type="data" source="sounds/dig_wood2.snd" />
|
||||
<file name="DWOOD3.SND" type="data" source="sounds/dig_wood3.snd" />
|
||||
<file name="DWOOD4.SND" type="data" source="sounds/dig_wood4.snd" />
|
||||
<file name="SCLOTH1.SND" type="data" source="sounds/step_cloth1.snd" />
|
||||
<file name="SCLOTH2.SND" type="data" source="sounds/step_cloth2.snd" />
|
||||
<file name="SCLOTH3.SND" type="data" source="sounds/step_cloth3.snd" />
|
||||
<file name="SCLOTH4.SND" type="data" source="sounds/step_cloth4.snd" />
|
||||
<file name="SGRASS1.SND" type="data" source="sounds/step_grass1.snd" />
|
||||
<file name="SGRASS2.SND" type="data" source="sounds/step_grass2.snd" />
|
||||
<file name="SGRASS3.SND" type="data" source="sounds/step_grass3.snd" />
|
||||
<file name="SGRASS4.SND" type="data" source="sounds/step_grass4.snd" />
|
||||
<file name="SGRAVEL1.SND" type="data" source="sounds/step_gravel1.snd" />
|
||||
<file name="SGRAVEL2.SND" type="data" source="sounds/step_gravel2.snd" />
|
||||
<file name="SGRAVEL3.SND" type="data" source="sounds/step_gravel3.snd" />
|
||||
<file name="SGRAVEL4.SND" type="data" source="sounds/step_gravel4.snd" />
|
||||
<file name="SSAND1.SND" type="data" source="sounds/step_sand1.snd" />
|
||||
<file name="SSAND2.SND" type="data" source="sounds/step_sand2.snd" />
|
||||
<file name="SSAND3.SND" type="data" source="sounds/step_sand3.snd" />
|
||||
<file name="SSAND4.SND" type="data" source="sounds/step_sand4.snd" />
|
||||
<file name="SSNOW1.SND" type="data" source="sounds/step_snow1.snd" />
|
||||
<file name="SSNOW2.SND" type="data" source="sounds/step_snow2.snd" />
|
||||
<file name="SSNOW3.SND" type="data" source="sounds/step_snow3.snd" />
|
||||
<file name="SSNOW4.SND" type="data" source="sounds/step_snow4.snd" />
|
||||
<file name="SSTONE1.SND" type="data" source="sounds/step_stone1.snd" />
|
||||
<file name="SSTONE2.SND" type="data" source="sounds/step_stone2.snd" />
|
||||
<file name="SSTONE3.SND" type="data" source="sounds/step_stone3.snd" />
|
||||
<file name="SSTONE4.SND" type="data" source="sounds/step_stone4.snd" />
|
||||
<file name="SWOOD1.SND" type="data" source="sounds/step_wood1.snd" />
|
||||
<file name="SWOOD2.SND" type="data" source="sounds/step_wood2.snd" />
|
||||
<file name="SWOOD3.SND" type="data" source="sounds/step_wood3.snd" />
|
||||
<file name="SWOOD4.SND" type="data" source="sounds/step_wood4.snd" />
|
||||
</dir>
|
||||
<dir name="texpacks">
|
||||
<file name="default.zip" type="data" source="classicube.zip" />
|
||||
</dir>
|
||||
<dummy sectors="1024"/>
|
||||
</directory_tree>
|
||||
</track>
|
||||
|
||||
<!--
|
||||
CD-DA tracks can be added to the CD image by using one or more <track>
|
||||
tags. The source attribute must be a path to an audio file in WAV, FLAC
|
||||
or MP3 format (using WAV or FLAC is highly recommended to preserve
|
||||
audio quality if you have a lossless copy of the source track).
|
||||
-->
|
||||
<!--<track type="audio" source="${PROJECT_SOURCE_DIR}/track2.wav" />-->
|
||||
</iso_project>
|
||||