From 5126a846546c53d6c5021e24df6b8ad7269b0147 Mon Sep 17 00:00:00 2001 From: Crayon Date: Sat, 28 May 2022 01:27:55 -0400 Subject: [PATCH] Add GameCube examples (#28) --- .github/workflows/ci.yml | 1 + examples/gamecube/3D_CubedTileDemo/Makefile | 146 ++ .../gamecube/3D_CubedTileDemo/data/bg.png | Bin 0 -> 4223 bytes .../gamecube/3D_CubedTileDemo/data/logo.png | Bin 0 -> 1363 bytes .../3D_CubedTileDemo/data/nonameno.png | Bin 0 -> 532 bytes .../gamecube/3D_CubedTileDemo/data/perso.png | Bin 0 -> 7756 bytes .../gamecube/3D_CubedTileDemo/data/tile1.png | Bin 0 -> 13442 bytes .../gamecube/3D_CubedTileDemo/source/main.c | 349 +++ examples/gamecube/3D_Light1/Makefile | 146 ++ .../data/Letter_Gothic_Std_14_Bold.png | Bin 0 -> 6364 bytes examples/gamecube/3D_Light1/source/main.c | 86 + examples/gamecube/3D_Light2/Makefile | 146 ++ .../data/Rockwell_Condensed_12_Bold.png | Bin 0 -> 4269 bytes examples/gamecube/3D_Light2/source/main.c | 81 + examples/gamecube/3D_Light3/Makefile | 146 ++ examples/gamecube/3D_Light3/data/font9x12.png | Bin 0 -> 1543 bytes examples/gamecube/3D_Light3/source/main.c | 103 + examples/gamecube/3D_Light4/Makefile | 149 ++ .../gamecube/3D_Light4/data/Snap_ITC_12.png | Bin 0 -> 6310 bytes examples/gamecube/3D_Light4/source/main.c | 54 + examples/gamecube/3D_sample1/Makefile | 146 ++ examples/gamecube/3D_sample1/data/font.png | Bin 0 -> 932 bytes examples/gamecube/3D_sample1/source/main.c | 106 + examples/gamecube/3D_sample2/Makefile | 146 ++ examples/gamecube/3D_sample2/data/font.png | Bin 0 -> 932 bytes examples/gamecube/3D_sample2/data/girl.png | Bin 0 -> 157564 bytes examples/gamecube/3D_sample2/source/main.c | 136 ++ examples/gamecube/3D_sample3/Makefile | 146 ++ examples/gamecube/3D_sample3/data/font.png | Bin 0 -> 932 bytes examples/gamecube/3D_sample3/data/girl.png | Bin 0 -> 157564 bytes examples/gamecube/3D_sample3/source/main.c | 151 ++ examples/gamecube/3D_sample4/Makefile | 146 ++ .../gamecube/3D_sample4/source/gfx/logo.h | 1997 +++++++++++++++++ examples/gamecube/3D_sample4/source/main.c | 61 + examples/gamecube/3D_sample5/Makefile | 146 ++ examples/gamecube/3D_sample5/data/font.png | Bin 0 -> 932 bytes examples/gamecube/3D_sample5/source/main.c | 103 + examples/gamecube/Makefile | 12 + examples/gamecube/TileDemo/Makefile | 146 ++ examples/gamecube/TileDemo/data/bg.png | Bin 0 -> 4223 bytes examples/gamecube/TileDemo/data/logo.png | Bin 0 -> 1363 bytes examples/gamecube/TileDemo/data/nonameno.png | Bin 0 -> 532 bytes examples/gamecube/TileDemo/data/perso.png | Bin 0 -> 7756 bytes examples/gamecube/TileDemo/data/tile1.png | Bin 0 -> 13442 bytes examples/gamecube/TileDemo/source/main.c | 274 +++ examples/gamecube/basic_drawing/Makefile | 162 ++ .../gamecube/basic_drawing/data/BMfont1.png | Bin 0 -> 17180 bytes .../gamecube/basic_drawing/data/BMfont2.png | Bin 0 -> 3272 bytes .../gamecube/basic_drawing/data/BMfont3.png | Bin 0 -> 6503 bytes .../gamecube/basic_drawing/data/BMfont4.png | Bin 0 -> 932 bytes .../gamecube/basic_drawing/data/BMfont5.png | Bin 0 -> 6374 bytes .../gamecube/basic_drawing/data/frontal.bmf | Bin 0 -> 51137 bytes .../gamecube/basic_drawing/data/ocean.bmf | Bin 0 -> 65036 bytes .../gamecube/basic_drawing/data/sprite.png | Bin 0 -> 15097 bytes .../gamecube/basic_drawing/data/test_bmp.bmp | Bin 0 -> 8166 bytes .../gamecube/basic_drawing/data/test_jpg.jpg | Bin 0 -> 13406 bytes examples/gamecube/basic_drawing/source/main.c | 230 ++ examples/gamecube/bitmap_fx/Makefile | 146 ++ examples/gamecube/bitmap_fx/data/font1.png | Bin 0 -> 12400 bytes examples/gamecube/bitmap_fx/data/pirate.png | Bin 0 -> 45111 bytes examples/gamecube/bitmap_fx/source/main.c | 232 ++ examples/gamecube/compositing/Makefile | 146 ++ examples/gamecube/compositing/data/font3d.png | Bin 0 -> 17755 bytes examples/gamecube/compositing/source/main.c | 59 + examples/gamecube/funsin/Makefile | 138 ++ examples/gamecube/funsin/source/main.c | 108 + examples/gamecube/template/Makefile | 149 ++ examples/gamecube/template/source/main.c | 36 + examples/gamecube/ttf/Makefile | 159 ++ examples/gamecube/ttf/data/FreeMonoBold.ttf | Bin 0 -> 164212 bytes examples/gamecube/ttf/source/main.c | 114 + examples/gamecube/unlimited2d/Makefile | 147 ++ examples/gamecube/unlimited2d/data/ball.png | Bin 0 -> 5515 bytes examples/gamecube/unlimited2d/data/font.png | Bin 0 -> 932 bytes examples/gamecube/unlimited2d/data/logo.png | Bin 0 -> 622 bytes examples/gamecube/unlimited2d/source/main.c | 100 + examples/gamecube/unlimited3d/Makefile | 147 ++ examples/gamecube/unlimited3d/data/font.png | Bin 0 -> 932 bytes examples/gamecube/unlimited3d/data/girl.png | Bin 0 -> 157564 bytes examples/gamecube/unlimited3d/data/logo.png | Bin 0 -> 622 bytes examples/gamecube/unlimited3d/source/main.c | 196 ++ 81 files changed, 7392 insertions(+) create mode 100644 examples/gamecube/3D_CubedTileDemo/Makefile create mode 100644 examples/gamecube/3D_CubedTileDemo/data/bg.png create mode 100644 examples/gamecube/3D_CubedTileDemo/data/logo.png create mode 100644 examples/gamecube/3D_CubedTileDemo/data/nonameno.png create mode 100644 examples/gamecube/3D_CubedTileDemo/data/perso.png create mode 100644 examples/gamecube/3D_CubedTileDemo/data/tile1.png create mode 100644 examples/gamecube/3D_CubedTileDemo/source/main.c create mode 100644 examples/gamecube/3D_Light1/Makefile create mode 100644 examples/gamecube/3D_Light1/data/Letter_Gothic_Std_14_Bold.png create mode 100644 examples/gamecube/3D_Light1/source/main.c create mode 100644 examples/gamecube/3D_Light2/Makefile create mode 100644 examples/gamecube/3D_Light2/data/Rockwell_Condensed_12_Bold.png create mode 100644 examples/gamecube/3D_Light2/source/main.c create mode 100644 examples/gamecube/3D_Light3/Makefile create mode 100644 examples/gamecube/3D_Light3/data/font9x12.png create mode 100644 examples/gamecube/3D_Light3/source/main.c create mode 100644 examples/gamecube/3D_Light4/Makefile create mode 100644 examples/gamecube/3D_Light4/data/Snap_ITC_12.png create mode 100644 examples/gamecube/3D_Light4/source/main.c create mode 100644 examples/gamecube/3D_sample1/Makefile create mode 100644 examples/gamecube/3D_sample1/data/font.png create mode 100644 examples/gamecube/3D_sample1/source/main.c create mode 100644 examples/gamecube/3D_sample2/Makefile create mode 100644 examples/gamecube/3D_sample2/data/font.png create mode 100644 examples/gamecube/3D_sample2/data/girl.png create mode 100644 examples/gamecube/3D_sample2/source/main.c create mode 100644 examples/gamecube/3D_sample3/Makefile create mode 100644 examples/gamecube/3D_sample3/data/font.png create mode 100644 examples/gamecube/3D_sample3/data/girl.png create mode 100644 examples/gamecube/3D_sample3/source/main.c create mode 100644 examples/gamecube/3D_sample4/Makefile create mode 100644 examples/gamecube/3D_sample4/source/gfx/logo.h create mode 100644 examples/gamecube/3D_sample4/source/main.c create mode 100644 examples/gamecube/3D_sample5/Makefile create mode 100644 examples/gamecube/3D_sample5/data/font.png create mode 100644 examples/gamecube/3D_sample5/source/main.c create mode 100644 examples/gamecube/Makefile create mode 100644 examples/gamecube/TileDemo/Makefile create mode 100644 examples/gamecube/TileDemo/data/bg.png create mode 100644 examples/gamecube/TileDemo/data/logo.png create mode 100644 examples/gamecube/TileDemo/data/nonameno.png create mode 100644 examples/gamecube/TileDemo/data/perso.png create mode 100644 examples/gamecube/TileDemo/data/tile1.png create mode 100644 examples/gamecube/TileDemo/source/main.c create mode 100644 examples/gamecube/basic_drawing/Makefile create mode 100644 examples/gamecube/basic_drawing/data/BMfont1.png create mode 100644 examples/gamecube/basic_drawing/data/BMfont2.png create mode 100644 examples/gamecube/basic_drawing/data/BMfont3.png create mode 100644 examples/gamecube/basic_drawing/data/BMfont4.png create mode 100644 examples/gamecube/basic_drawing/data/BMfont5.png create mode 100644 examples/gamecube/basic_drawing/data/frontal.bmf create mode 100644 examples/gamecube/basic_drawing/data/ocean.bmf create mode 100644 examples/gamecube/basic_drawing/data/sprite.png create mode 100644 examples/gamecube/basic_drawing/data/test_bmp.bmp create mode 100644 examples/gamecube/basic_drawing/data/test_jpg.jpg create mode 100644 examples/gamecube/basic_drawing/source/main.c create mode 100644 examples/gamecube/bitmap_fx/Makefile create mode 100644 examples/gamecube/bitmap_fx/data/font1.png create mode 100644 examples/gamecube/bitmap_fx/data/pirate.png create mode 100644 examples/gamecube/bitmap_fx/source/main.c create mode 100644 examples/gamecube/compositing/Makefile create mode 100644 examples/gamecube/compositing/data/font3d.png create mode 100644 examples/gamecube/compositing/source/main.c create mode 100644 examples/gamecube/funsin/Makefile create mode 100644 examples/gamecube/funsin/source/main.c create mode 100644 examples/gamecube/template/Makefile create mode 100644 examples/gamecube/template/source/main.c create mode 100644 examples/gamecube/ttf/Makefile create mode 100644 examples/gamecube/ttf/data/FreeMonoBold.ttf create mode 100644 examples/gamecube/ttf/source/main.c create mode 100644 examples/gamecube/unlimited2d/Makefile create mode 100644 examples/gamecube/unlimited2d/data/ball.png create mode 100644 examples/gamecube/unlimited2d/data/font.png create mode 100644 examples/gamecube/unlimited2d/data/logo.png create mode 100644 examples/gamecube/unlimited2d/source/main.c create mode 100644 examples/gamecube/unlimited3d/Makefile create mode 100644 examples/gamecube/unlimited3d/data/font.png create mode 100644 examples/gamecube/unlimited3d/data/girl.png create mode 100644 examples/gamecube/unlimited3d/data/logo.png create mode 100644 examples/gamecube/unlimited3d/source/main.c diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 32cc76d..ff98541 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,4 +26,5 @@ jobs: name: examples path: | examples/**/*.elf + examples/gamecube/**/*.dol !examples/template/* diff --git a/examples/gamecube/3D_CubedTileDemo/Makefile b/examples/gamecube/3D_CubedTileDemo/Makefile new file mode 100644 index 0000000..1a18e66 --- /dev/null +++ b/examples/gamecube/3D_CubedTileDemo/Makefile @@ -0,0 +1,146 @@ +#--------------------------------------------------------------------------------- +# Clear the implicit built in rules +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITPPC)),) +$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") +endif + +include $(DEVKITPPC)/gamecube_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +#--------------------------------------------------------------------------------- +TARGET := $(notdir $(CURDIR)) +BUILD := build +SOURCES := source +DATA := data +INCLUDES := + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- + +CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) +CXXFLAGS = $(CFLAGS) + +LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#--------------------------------------------------------------------------------- +LIBS := -lgrrlib -lfreetype -lbz2 -lpngu -lpng -ljpeg -lz -lfat -logc -lm + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := $(CURDIR)/$(GRRLIB) $(PORTLIBS) + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +#--------------------------------------------------------------------------------- +# automatically build a list of object files for our project +#--------------------------------------------------------------------------------- +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) + export LD := $(CC) +else + export LD := $(CXX) +endif + +export OFILES_BIN := $(addsuffix .o,$(BINFILES)) +export OFILES_SOURCES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(sFILES:.s=.o) $(SFILES:.S=.o) +export OFILES := $(OFILES_BIN) $(OFILES_SOURCES) + +export HFILES := $(addsuffix .h,$(subst .,_,$(BINFILES))) + +#--------------------------------------------------------------------------------- +# build a list of include paths +#--------------------------------------------------------------------------------- +export INCLUDE := $(foreach dir,$(INCLUDES), -iquote $(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) \ + -I$(LIBOGC_INC) + +#--------------------------------------------------------------------------------- +# build a list of library paths +#--------------------------------------------------------------------------------- +export LIBPATHS := -L$(LIBOGC_LIB) $(foreach dir,$(LIBDIRS),-L$(dir)/lib) + +export OUTPUT := $(CURDIR)/$(TARGET) +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol + +#--------------------------------------------------------------------------------- +run: + wiiload $(TARGET).dol + + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT).dol: $(OUTPUT).elf +$(OUTPUT).elf: $(OFILES) + +$(OFILES_SOURCES) : $(HFILES) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .jpg extension +#--------------------------------------------------------------------------------- +%.jpg.o : %.jpg +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .png extension +#--------------------------------------------------------------------------------- +%.png.o : %.png +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- diff --git a/examples/gamecube/3D_CubedTileDemo/data/bg.png b/examples/gamecube/3D_CubedTileDemo/data/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..164e7e4c6da54c3877bb4e198ef877d1644b3d3c GIT binary patch literal 4223 zcmeH~ZA?>F7{?CXpI6vDs{R`*&jWlMKI+q* z%m{XjG3&45{cq8}*>-Kj#2krWCXTZ)*#G&B^7R6*hk03)I0S`dKdltZ1kd}tyCy?h zQA}DC(gHtF;Nb!MU6zz60A_drVww8B@$v#cWuP+9nIDhCJ&MAu-F=`$m0OyfYb3-e zg_XamdDLhKOqV=G`^kFt)V#W=9!=}6g$~1iyR*ou9(B1{)qw}+gJmW1(=FlAMAC8< zg}3N{vbR!@fBqHAKx?Xl*LpB(CTJ`Gz;#(E1i+IAh-K>g=Z|Nps1mAVEV2Tpd=pOj z^4b`QJ~n&PnYgx%>#Di=K8sczu^|Qsb*A*o9 zX^JODpWyv^-;5@@nQorA%rU!yDkW2pC<>;_7hS^1#Nx;VS@mMuj0JC(v|M^~{_%*A z23&2)H;~BThC7guJO>leb|572^>+*~GmJ~A!;&^6rX{^U6i*6VN)lG;Vy@vFB2T~+ zbaZ}zy=PzU2O2|ML2{p_cyja!-Xp6$Q)Owg?#aiPnf3_^tF}nP=UZFnJSN0z608xy z&FeY?8r{5I^k#yu!wqHF*CX>LfZ}2_2xhx2Lp4hDA&kB+{u} z2?^1QaB`NSo=v!~-%bit2vq$VH3tIK2TXxecLJGO!M3%k zmTCTlbP1lEjR~7iwiL9P+swC^gIrj{EVG({RH>v%dGqcKLfrC)vQ)L|5xjy>bPjit zF4RoT-mv2syQ*S)*J2T=1BqA@{2?Lh9Go1~W>eblC-}=tTda{T*c0iwa%s!;bb1LX z@YJ`-ZZwb&!W4{|CCJniGJghaA=7M3@Z{V~^y~bLC`+a#vx8ZW!;jL`tFCU0r0gYI$lz_DdoF=0e@d^DgXcg literal 0 HcmV?d00001 diff --git a/examples/gamecube/3D_CubedTileDemo/data/logo.png b/examples/gamecube/3D_CubedTileDemo/data/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8dd44d8e7eb4d2ce3cb46308f4122720c3f71f8c GIT binary patch literal 1363 zcmV-Z1+4msP)Px)4M{{nRCwC$T^+(IaYQYeK|D1}n!#rZD~5*x+~{f<7LI$leI`0XQNJ{5rYOa<^N!BOUG{r?r_Qvrz2Rsc;2TBu|`6@YlT z0^Frihe~jm=?Gx{T^LLSAnxG-FeXnkc)0oWAX+H>*f_}Sg|~4%ZVv1ANN~AKa9z^R z>tN06U)O$#=b!=**JJ@pEFDyC!51?tFsu*G_2}zg`aW|v_cxe}!}eq_2HH#WI)2H` zH?JEPXB$)i;@UcZR|#a^qGS^#`k0Tg+N%UvX;9O?0%%OmhEUaX59U(=h!y@^ou|r9 zPM`$n(k;fCij&rgkh)J1s-gs{GK4v%=XNjVBd7pWfNP;DL5H1=N)UbH2FSaYd|v(? z*D*YS6bNIz%(cA0bnJigy9Fu$72q|nlmPSV)UBYu&JrXxXHbHmcz|Ru8kxIfDgC4c zxyf5aDgYJWwXm{-9QW%9)_BsbYD|q#R{&2?PkOFTVLlar2qE0yL=aXC^JFDJ7>#uW ztPonRU0lDsjqKntOt&xNd`UB3S$MYDY0Id zoWjrTHKd?;gt(6RF|4WIXPJA^x-$zPoE{+hqGN;sv>hpo$M$la;FCVmyD4rTD~7X- zwmbrQ1??QcQaKd2KW;EZk*vI47g(o_A^`I@>uO4CqX!^P@BrElTz0O+Hn{%&J1{P# z-El02E=*VQdyMTE^Mj%coAUrhd%RAYdD_YgG-KVC^=Q?nsHhwD7fG)1t+(M|}7B1pds@9$(9%?kuA<}1wBlx6cVh2=RP9SgXB ztQ1Bi3)0p{^GaImx7M8sK=>3uVn75_jA6?I*^HTwc zIR$9=89w9s+3~LW#?g&?Z;&0l*zKRao<~6ipaS^v>a&=8_IR`SHq&YKBLL&tMc)a0 z^!dHnkoW$n091hIcJ5K8T1>bK;)<_b34F+^b{a)woS^yuHtOF3I;wz35LB#KZSS%_4K@h~R#s8d^ V9hh%a_RjzS002ovPDHLkV1oEni0%LY literal 0 HcmV?d00001 diff --git a/examples/gamecube/3D_CubedTileDemo/data/nonameno.png b/examples/gamecube/3D_CubedTileDemo/data/nonameno.png new file mode 100644 index 0000000000000000000000000000000000000000..6d55046f54be3de13dea824cbebbbd48dc6f5a3f GIT binary patch literal 532 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 literal 0 HcmV?d00001 diff --git a/examples/gamecube/3D_CubedTileDemo/data/tile1.png b/examples/gamecube/3D_CubedTileDemo/data/tile1.png new file mode 100644 index 0000000000000000000000000000000000000000..cb87f4050075b051380383eb105ba23525415101 GIT binary patch literal 13442 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 R{y_+!EUzI~^V%}>{{au@rFj4V literal 0 HcmV?d00001 diff --git a/examples/gamecube/3D_CubedTileDemo/source/main.c b/examples/gamecube/3D_CubedTileDemo/source/main.c new file mode 100644 index 0000000..df38e01 --- /dev/null +++ b/examples/gamecube/3D_CubedTileDemo/source/main.c @@ -0,0 +1,349 @@ +/*=========================================== + NoNameNo CubedTileDemo + A sample code to show how to use Dynamic Texturing + Have a look a TileDemo sources for diff ;) +============================================*/ +#include + +#include +#include +#include + +#include "tile1_png.h" +#include "perso_png.h" +#include "bg_png.h" +#include "nonameno_png.h" + +#define TileMap1Width (32) +#define TileMap1Height (32) +#define Map1Width (87) +#define Map1Height (51) + +signed short Map1Data[53][87] = +{{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, 3, 3, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1, 5, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 6, 7, 3, 8, 9, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10, 1,10, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3,11,12, 3,11,12, 3, 4,13,14, 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 1,15, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {16,16,17,16,17,16,17,16,17,16, 0, 0, 0, 0, 0, 0, 1, 1,17,16, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3,18,19, 3,18,19, 3, 4,20,21, 0,22, 0, 0, 0, 0, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 0, 1, 1, 1, 0,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17}, + {23,23,24,23,24,23,24,23,24,23,22,22, 0, 1, 1, 1, 1, 0,24,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,25,26, 0,27,28,28,28,28,28,28,28,28,28,29,30,31,22, 0, 0, 0, 2, 3,32,33, 3,34,35, 3,36,37, 3, 4, 0, 1, 0, 0,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23,22,22, 0, 1, 1, 1, 1, 0,24,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,38,39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,13,14, 0,22,13,14, 0, 2, 3,11,12, 3,11,12, 3,11,12, 3, 4, 1, 1, 0, 0,24,23,40,41,40,41,40,41,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23,27,28,28,31, 1, 1, 1, 0,24,23,13,14, 0, 0, 0, 0, 0, 0, 0, 0,42,43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,20,21, 0,22,20,21, 0, 2, 3,18,19, 3,18,19, 3,18,19, 3, 4, 1, 0, 0, 0,24,23,44,45,46,44, 0, 0,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23,27,28,28,31, 1, 0, 0, 0,24,23,20,21, 0, 0, 0, 0, 0, 0, 0,22,47,48,22, 0, 0, 0, 0, 0, 0, 0, 0, 0,27,28,28,28,28,29,30,28,28,28,28,28,28,28,28,28,28,28,28,28,28,31, 0, 0,24,23,44,11,12,44,13,14,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0,27,28,28,31, 0, 0, 0,24,23,13,14, 0, 0, 0,13,14, 0,42,43,42,43,42,43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,13,14,17,16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,24,23,44,18,19,44,20,21,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23,27,28,28,31, 0, 0, 0, 0,24,23,20,21, 0, 0, 0,20,21,22,47,48,47,48,47,48,22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,20,21,24,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,24,23,27,28,28,31,13,14,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0,27,28,28,31, 0, 0,27,28,28,29,30,28,28,28,29,30,28,28,28,28,28,28,28,31, 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, 4, 0,13,14,24,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,24,23,40,41,40,41,20,21,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23,27,28,28,31, 0, 0, 0, 0, 0, 0,20,21, 0, 0, 0,13,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3,49,50, 3, 4,13,14,24,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,24,23,24,23,24,23,13,14,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0,27,28,28,31, 0, 0, 0, 0, 0,13,14, 0, 0, 0,20,21, 0, 0, 0, 0,20,21, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3,11,12, 3, 4,20,21,24,23, 0, 0, 0, 0,27,28,28,31, 0, 0, 2, 3, 3, 4, 0,40,41,40,41,40,41,20,21,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0, 0, 0,27,28,28,31, 0, 0, 0,20,21, 0, 0, 0,13,14, 0, 0, 0, 0,13,14, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3,18,19, 3, 4,13,14,24,23, 0, 0,17,16, 0,27,28,31, 0, 2, 3,51,52, 3, 4, 0, 0, 0, 0, 0, 0,13,14,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0, 0, 0, 2, 3, 3, 4, 0, 0, 0,13,14, 0, 0, 0,20,21, 0, 0, 0,27,29,30,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,31, 2,53,54, 4, 0,22, 0, 0, 2, 3,11,12, 3, 4, 0, 0, 0, 0, 0, 0,20,21,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0, 0, 2, 3,55,56, 3, 4, 0, 0,20,21, 0, 0, 0,13,14, 0, 0, 0, 0,13,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3,11,12, 3, 4,22, 0, 0, 2, 3,18,19, 3, 4, 0, 0, 0, 0, 0, 0,13,14,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0, 0, 2, 3,11,12, 3, 4, 0, 0,13,14, 0, 0, 0,20,21, 0, 0, 0, 0,20,21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3,18,19, 3, 4,22, 0, 0,27,28,28,28,28,28,28,28,28,28,28,31,20,21,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0, 0, 2, 3,18,19, 3, 4, 0, 0,20,21, 0, 0, 0,13,14, 0, 0, 0, 0,13,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,27,28,28,31, 0,22, 0, 0, 0, 0, 0, 0, 0, 0,17,16,17,16,17,16,13,14,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0,27,28,28,28,28,28,28,28,28,28,28,31, 0, 0,20,21, 0, 0, 0,27,29,30,28,28,28,28,28,28,28,28,28,31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,22, 0, 0, 0, 0, 0, 0, 0, 0,24,23,24,23,24,23,20,21,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,13,14, 0, 0, 0, 0,13,14, 0, 0, 0, 0, 0, 0, 0, 0, 0,57,57, 0,57,57, 0,57,57, 0,42,43, 0,42,43, 0, 0, 0, 2, 3, 3, 4, 0, 0, 0,24,23,24,23,24,23,13,14,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0, 0, 0, 2, 3, 3, 4, 0, 0, 0, 0, 0, 0,27,28,28,28,28,28,28,28,29,30,31, 0, 0, 0, 0, 0, 0, 0, 0,57,57, 0,57,57, 0,57,57, 0,47,48, 0,47,48, 0, 0, 2, 3,58,59, 3, 4, 0, 0,24,23,24,23,24,23,13,14,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0, 0, 2, 3,60,61, 3, 4,13,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,13,14, 0, 0, 0, 0, 0, 0, 0, 0, 0,57,57, 0,57,57, 0,57,57, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3,11,12, 3, 4, 0, 0,24,23,24,23,24,23,20,21,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0, 0, 2, 3,11,12, 3, 4,20,21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,20,21, 0, 0, 0, 0, 0, 0, 0, 0, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0, 0, 2, 3,18,19, 3, 4, 0, 0,24,23,24,23,24,23,13,14,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0, 0, 2, 3,18,19, 3, 4,13,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,13,14, 0, 0, 0, 0, 0, 0, 0, 0, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0, 0,27,28,28,28,28,31, 0, 0,24,23,24,23,24,23,20,21,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0, 0,27,28,28,28,28,28,29,30,28,28,31, 0, 0, 0, 0, 0, 0, 0, 0,20,21, 0, 0, 0, 0, 0, 0, 0, 0, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,24,23,24,23,24,23,13,14,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0, 0, 0, 0, 0, 0, 0, 0,13,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,13,14, 0, 0, 0, 0, 2, 3, 3, 4, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0, 0,42,43, 0, 0, 0, 0, 0, 0,24,23,24,23,24,23,20,21,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0, 0, 0, 0, 0, 0, 0, 0,20,21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,20,21, 0, 0, 0, 0, 3,62,63, 3, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0, 0,47,48, 0, 0, 0, 0, 0, 0,24,23,40,41,40,41,13,14,40,41,40,41,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0, 0, 0, 0, 0, 0, 0, 0,13,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,13,14, 0, 0, 0, 2, 3,11,12, 3, 4, 0,57,57,57,57,57,57, 0, 0,57,57, 0,57,57, 0, 0,25,26, 0, 0,20,21, 0, 0,24,23, 2, 3, 3, 4,20,21, 0, 0, 0, 0,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0, 0, 0, 0, 0, 0, 0, 0,20,21, 0, 0, 0, 2, 3, 3, 4, 0, 0, 0, 0,20,21, 0, 0, 0, 2, 3,18,19, 3, 4, 0, 0,57, 0, 0,57, 0, 0, 0,57,57, 0,57,57, 0, 0,38,39, 0, 0,13,14, 0, 0,24,23, 3,64,65, 3,13,14, 0, 0, 0, 5,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0, 0, 0, 0, 0, 0, 0, 0,13,14, 0, 0, 2, 3,66,67, 3, 4, 0, 0, 0,13,14, 0, 0,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,30,31, 0,24,23, 3,11,12, 3,20,21, 0,42,43,10,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0, 0, 0, 0, 0, 0, 0, 0,20,21, 0, 0, 2, 3,11,12, 3, 4, 0, 0, 0,20,21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,13,14, 0, 0,24,23, 3,18,19, 3,13,14, 0,47,48,15,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0, 0, 0,68, 0, 0, 0, 0,13,14, 0, 0, 2, 3,18,19, 3, 4, 0,68, 0,13,14, 0, 0,57,57,57,57, 0, 0, 0,57,57,57, 0, 0, 0, 0,57, 0, 0,57, 0, 0, 0,57,57,57,57, 0, 0,20,21, 0, 0,24,23,27,28,28,28,28,28,28,28,28,31,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0,27,28,28,28,28,28,28,29,30,28,28,28,28,28,28,28,28,28,28,28,28,28,28,31,57,57,57,57,57, 0,57,57,57,57,57, 0, 0,57,57,57,57,57,57, 0, 0,57,57,57,57,57, 0,13,14, 0, 0,24,23,17,16,17,16,17,16,17,16,17,16,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0, 0, 0,17,16,17,16, 0,13,14, 0, 0, 0, 0, 0, 0, 0,44, 0, 0, 0, 0, 0, 0, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,20,21, 0, 0,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0, 0, 0,24,23,24,23, 0,20,21, 0, 0, 0, 0, 0, 0, 0,44, 0, 0, 0, 0, 0, 0, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,13,14, 0, 0,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23, 0, 0, 0,24,23,24,23, 0,13,14, 0, 0, 0, 0, 0, 0, 0,44, 0, 0, 0, 0, 0, 0, 0,57,57,57,57, 0, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57,57,57, 0, 0,20,21, 0, 0,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23,22, 0, 0,24,23,24,23, 0,20,21, 0, 0, 0, 0, 0, 0, 0,44, 0, 0, 0, 0, 0, 0, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,13,14, 0, 0,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23,22, 0, 0,24,23,24,23, 0,13,14, 0, 0, 2, 3, 3, 4, 0,44, 0, 0, 0, 0, 0, 0, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,13,14, 0, 0,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23,22, 0, 0,17,69,70,16, 0,20,21, 0, 2, 3,71,72, 3, 4,44, 0, 0, 0, 0, 0, 0, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57, 0,13,14, 0, 0,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {23,23,24,23,24,23,24,23,24,23,42,43, 0,44,11,12,44, 0,13,14, 0, 2, 3,11,12, 3, 4,44, 0, 0, 0, 0, 0, 0, 0,57,57,57,57,57, 0,57,57,57,57,57, 0,57,57, 0,57,57, 0,57,57, 0,57,57,57,57,57, 0,20,21, 0, 0,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24,23,24}, + {41,41,40,41,40,41,40,41,40,41,47,48,22,44,18,19,44, 0,13,14, 0, 2, 3,18,19, 3, 4,44, 0, 0,68,68, 0, 0, 0,57,57,57,57, 0, 0, 0,57,57,57, 0, 0,57,57, 0,57,57, 0,57,57, 0,57,57,57,57, 0, 0,13,14, 0, 0,40,41,40,41,40,41,40,41,40,41,40,41,40,41,40,41,40,41,40,41,40}, + {73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73}, + {74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74}, + {74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74}, + {74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74}, + {74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74}, + {74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74}, + {74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74}, + {74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74}, + {74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74}}; + +signed int Map1Info[53][87] = +{{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,63232,63232, 0,63488,63488, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 9, 9, 3, 9, 3, 9, 3, 9, 3, 9, 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,43521,43521, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 0, 0, 0, 0, 0, 0, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 1, 1, 1, 1, 0, 0, 0, 0, 2, 8,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0,43521,43521, 0, 0, 0,63744,63744, 0,64000,64000, 0,64256,64256, 0, 0, 0, 0, 0, 0, 2, 8, 0, 0, 0, 0, 0, 0, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 1, 1, 1, 1, 0, 0, 0, 0, 2, 8,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,43521,43521, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 2, 8, 0, 0, 0, 0,43521,43521, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 1, 1, 1, 1, 0, 0, 0, 2, 8,43521,43521, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 0,64512,64512, 0,43521,43521, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 1, 1, 1, 1, 0, 0, 0, 0, 2, 8,43521,43521, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 1, 1, 1, 1,43521,43521, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1,43521,43521, 1, 1, 1,43521,43521, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 0, 0, 0, 8,43521,43521, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 2, 8, 2, 8,43521,43521, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0,43521,43521, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 2, 8, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,43521,43521, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0,43521,43521, 0, 0, 0,43521,43521, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,62976,62976, 0, 0,43521,43521, 2, 8, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0,43521,43521, 0, 0, 0, 1,43521,43521, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0,43521,43521, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,65024,65024, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0,43521,43521, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,64768,64768, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,43521,43521, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 0, 0,61440,61440, 0, 0, 0, 0,43521,43521, 0, 0, 0,43521,43521, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 8,43521,43521, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,43521,43521, 0, 0, 0, 1,43521,43521, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 2, 8, 2, 8,43521,43521, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 2, 8, 2, 8,43521,43521, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,43521,43521, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 2, 8, 2, 8,43521,43521, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 2, 8, 2, 8,43521,43521, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,65280,65280, 0, 0, 0, 0, 2, 8, 2, 8, 2, 8,43521,43521, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 0, 0,61696,61696, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 2, 8, 2, 8, 2, 8,43521,43521, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 1, 1, 1, 1, 1, 1,43521,43521, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 2, 8, 2, 8,43521,43521, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 2, 8, 2, 8,43521,43521, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 0, 0, 0, 8,43521,43521, 2, 0, 0, 0, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 2, 8, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0,62720,62720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 2, 8, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,43521,43521, 1, 0, 2, 8, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 2, 8, 0,61184,61184, 0,43521,43521, 0, 0, 0, 0, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0,61952,61952, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 2, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 1, 1, 1, 1, 1, 1, 1,43521,43521, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 0, 2, 0, 0, 8, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 0, 3, 9, 3, 9, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 0, 2, 8, 2, 8, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 0, 2, 8, 2, 8, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 0, 6,12, 6,12, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 8, 8, 2, 8, 2, 8, 2, 8, 2, 8, 0, 0, 0, 2, 0, 0, 8, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + {12,12, 6,12, 6,12, 6,12, 6,12, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 6,12, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0,62208,62208, 0, 0,43521,43521, 0, 0, 0,62464,62464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,43521,43521, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}; + +int main() { + int startx=0, starty=0; + int x, y; + int dirx=0, diry=0; + int cptx=0, cpty=0; + int bgx=-32, bgy=-32; + float idperso=0; + int i; + float sinnonameno=0; + float camZ=1400.0f; + float a=0; + + GRRLIB_Init(); + GRRLIB_Settings.antialias = false; + PAD_Init(); + GRRLIB_ClipDrawing(0,0,rmode->fbWidth,rmode->efbHeight); + GRRLIB_texImg *tex_tile1 = GRRLIB_LoadTexture(tile1_png); + GRRLIB_InitTileSet(tex_tile1, TileMap1Width, TileMap1Height, 0); + GRRLIB_texImg *tex_perso = GRRLIB_LoadTexture(perso_png); + GRRLIB_InitTileSet(tex_perso, 64, 64, 0); + GRRLIB_texImg *tex_bg = GRRLIB_LoadTexture(bg_png); + GRRLIB_texImg *tex_nonameno = GRRLIB_LoadTexture(nonameno_png); + GRRLIB_InitTileSet(tex_nonameno, 32, 32, 0); + + GRRLIB_texImg *tex_screen = GRRLIB_CreateEmptyTexture(rmode->fbWidth, rmode->efbHeight); + + GRRLIB_SetBackgroundColour(0x00, 0x00, 0x00, 0xFF); + + while(1) { + GRRLIB_2dMode(); + PAD_ScanPads(); + if (PAD_ButtonsDown(0) & PAD_BUTTON_START) break; + if (PAD_ButtonsHeld(0) & PAD_BUTTON_X) camZ+=20.0f; + if (PAD_ButtonsHeld(0) & PAD_BUTTON_Y) camZ-=20.0f; + + if((dirx==0) && (diry==0)) { + if (PAD_ButtonsHeld(0) & PAD_BUTTON_DOWN) { diry=-4; idperso=15;} + else if (PAD_ButtonsHeld(0) & PAD_BUTTON_UP) { diry=4; idperso=15;} + else if (PAD_ButtonsHeld(0) & PAD_BUTTON_RIGHT) { dirx=-4; idperso=1;} + else if (PAD_ButtonsHeld(0) & PAD_BUTTON_LEFT) { dirx=4; idperso=8;} + } + + if((dirx==0) && (diry==0)) { + idperso=0; + } + + if(((Map1Info[9+starty][10+startx]==1) || (Map1Info[9+starty][11+startx]==1)) || ((Map1Info[9+starty][10+startx]==43521) || (Map1Info[9+starty][11+startx]==43521))) { + } + else{ + dirx=0; + diry=-4; + } + + if(dirx<0) { + if((Map1Info[7+starty][12+startx]==8) || (Map1Info[7+starty][12+startx]==2) || (Map1Info[8+starty][12+startx]==8) || (Map1Info[8+starty][12+startx]==2)) { + dirx=0; + } + else { + idperso++; + if(idperso>7) + idperso=1; + } + } + + if(dirx>0) { + if((Map1Info[7+starty][9+startx]==8) || (Map1Info[7+starty][9+startx]==2) || (Map1Info[8+starty][9+startx]==8) || (Map1Info[8+starty][9+startx]==2)) { + dirx=0; + } + else { + idperso++; + if(idperso>14) + idperso=8; + } + } + + if(diry<0) { + if((Map1Info[9+starty][10+startx]==1) || (Map1Info[9+starty][11+startx]==1)) { + diry=0; + } + } + + if(diry!=0) { + idperso++; + if(idperso>22) + idperso=16; + } + + cptx+=dirx; + if(dirx>0) + bgx++; + else if(dirx<0) + bgx--; + if((bgx>-1) || (bgx<-63)) + bgx=-32; + + if(cptx==32) { + cptx=0; + dirx=0; + startx--; + } + else if(cptx==-32) { + cptx=0; + dirx=0; + startx++; + } + + cpty+=diry; + if(diry>0) + bgy++; + else if(diry<0) + bgy--; + if((bgy>-1) ||(bgy<-63)) + bgy=-32; + + if(cpty==32) { + cpty=0; + diry=0; + starty--; + } + else if(cpty==-32) { + cpty=0; + if(((Map1Info[9+starty][10+startx]==1) || (Map1Info[9+starty][11+startx]==1)) || ((Map1Info[9+starty][10+startx]==43521) || (Map1Info[9+starty][11+startx]==43521))) { + diry=0; + } + starty++; + } + GRRLIB_DrawImg(bgx, bgy, tex_bg, 0, 1, 1, 0xFFFFFFFF); + + for(y=0; y<=17; y++) { + for(x=0; x<=21; x++) { + if(Map1Data[y+starty][x+startx] != 0) { + GRRLIB_DrawTile(x*TileMap1Width+cptx-TileMap1Width,y*TileMap1Height+cpty-TileMap1Height,tex_tile1,0,1,1,0xFFFFFFFF,Map1Data[y+starty][x+startx]-1); + } + } + } + GRRLIB_DrawTile(TileMap1Width*9,TileMap1Height*6,tex_perso,0,1,1,0xFFFFFFFF,(int)idperso); + + const float oldsinnonameno=sinnonameno; + for(i=0; i<8; i++) { + GRRLIB_DrawTile(TileMap1Width*(6+i),(TileMap1Height*10)+sin(sinnonameno)*64,tex_nonameno,0,1,1,0xFFFFFFFF,i); + sinnonameno+=0.4F; + } + sinnonameno=oldsinnonameno+0.08F; + + GRRLIB_Screen2Texture(0, 0, tex_screen, GX_TRUE); + + + GRRLIB_Camera3dSettings(0.0f,0.0f,camZ, 0,1,0, 0,0,0); + GRRLIB_3dMode(0.1,3000,45,1,0); + GRRLIB_SetTexture(tex_screen,0); + GRRLIB_ObjectView(0,0,0, a,a*2,a*3,1,1,1); + GX_Begin(GX_QUADS, GX_VTXFMT0, 16); + GX_Position3f32(-rmode->fbWidth/2,rmode->efbHeight/2,rmode->fbWidth/2); + GX_Color1u32(0xFFFFFFFF); + GX_TexCoord2f32(0.0f,0.0f); + GX_Position3f32(rmode->fbWidth/2,rmode->efbHeight/2,rmode->fbWidth/2); + GX_Color1u32(0xFFFFFFFF); + GX_TexCoord2f32(1.0f,0.0f); + GX_Position3f32(rmode->fbWidth/2,-rmode->efbHeight/2,rmode->fbWidth/2); + GX_Color1u32(0xFFFFFFFF); + GX_TexCoord2f32(1.0f,1.0f); + GX_Position3f32(-rmode->fbWidth/2,-rmode->efbHeight/2,rmode->fbWidth/2); + GX_Color1u32(0xFFFFFFFF); + GX_TexCoord2f32(0.0f,1.0f); + + GX_Position3f32(rmode->fbWidth/2,rmode->efbHeight/2,-rmode->fbWidth/2); + GX_Color1u32(0xFFFFFFFF); + GX_TexCoord2f32(0.0f,0.0f); + GX_Position3f32(-rmode->fbWidth/2,rmode->efbHeight/2,-rmode->fbWidth/2); + GX_Color1u32(0xFFFFFFFF); + GX_TexCoord2f32(1.0f,0.0f); + GX_Position3f32(-rmode->fbWidth/2,-rmode->efbHeight/2,-rmode->fbWidth/2); + GX_Color1u32(0xFFFFFFFF); + GX_TexCoord2f32(1.0f,1.0f); + GX_Position3f32(rmode->fbWidth/2,-rmode->efbHeight/2,-rmode->fbWidth/2); + GX_Color1u32(0xFFFFFFFF); + GX_TexCoord2f32(0.0f,1.0f); + + GX_Position3f32(rmode->fbWidth/2,rmode->efbHeight/2,rmode->fbWidth/2); + GX_Color1u32(0xFFFFFFFF); + GX_TexCoord2f32(0.0f,0.0f); + GX_Position3f32(rmode->fbWidth/2,rmode->efbHeight/2,-rmode->fbWidth/2); + GX_Color1u32(0xFFFFFFFF); + GX_TexCoord2f32(1.0f,0.0f); + GX_Position3f32(rmode->fbWidth/2,-rmode->efbHeight/2,-rmode->fbWidth/2); + GX_Color1u32(0xFFFFFFFF); + GX_TexCoord2f32(1.0f,1.0f); + GX_Position3f32(rmode->fbWidth/2,-rmode->efbHeight/2,rmode->fbWidth/2); + GX_Color1u32(0xFFFFFFFF); + GX_TexCoord2f32(0.0f,1.0f); + + GX_Position3f32(-rmode->fbWidth/2,rmode->efbHeight/2,-rmode->fbWidth/2); + GX_Color1u32(0xFFFFFFFF); + GX_TexCoord2f32(0.0f,0.0f); + GX_Position3f32(-rmode->fbWidth/2,rmode->efbHeight/2,rmode->fbWidth/2); + GX_Color1u32(0xFFFFFFFF); + GX_TexCoord2f32(1.0f,0.0f); + GX_Position3f32(-rmode->fbWidth/2,-rmode->efbHeight/2,rmode->fbWidth/2); + GX_Color1u32(0xFFFFFFFF); + GX_TexCoord2f32(1.0f,1.0f); + GX_Position3f32(-rmode->fbWidth/2,-rmode->efbHeight/2,-rmode->fbWidth/2); + GX_Color1u32(0xFFFFFFFF); + GX_TexCoord2f32(0.0f,1.0f); + GX_End(); + + a+=0.2f; + + GRRLIB_Render(); + } + + GRRLIB_FreeTexture(tex_tile1); + GRRLIB_FreeTexture(tex_perso); + GRRLIB_FreeTexture(tex_bg); + GRRLIB_FreeTexture(tex_nonameno); + GRRLIB_FreeTexture(tex_screen); + GRRLIB_Exit(); + exit(0); +} diff --git a/examples/gamecube/3D_Light1/Makefile b/examples/gamecube/3D_Light1/Makefile new file mode 100644 index 0000000..1a18e66 --- /dev/null +++ b/examples/gamecube/3D_Light1/Makefile @@ -0,0 +1,146 @@ +#--------------------------------------------------------------------------------- +# Clear the implicit built in rules +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITPPC)),) +$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") +endif + +include $(DEVKITPPC)/gamecube_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +#--------------------------------------------------------------------------------- +TARGET := $(notdir $(CURDIR)) +BUILD := build +SOURCES := source +DATA := data +INCLUDES := + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- + +CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) +CXXFLAGS = $(CFLAGS) + +LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#--------------------------------------------------------------------------------- +LIBS := -lgrrlib -lfreetype -lbz2 -lpngu -lpng -ljpeg -lz -lfat -logc -lm + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := $(CURDIR)/$(GRRLIB) $(PORTLIBS) + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +#--------------------------------------------------------------------------------- +# automatically build a list of object files for our project +#--------------------------------------------------------------------------------- +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) + export LD := $(CC) +else + export LD := $(CXX) +endif + +export OFILES_BIN := $(addsuffix .o,$(BINFILES)) +export OFILES_SOURCES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(sFILES:.s=.o) $(SFILES:.S=.o) +export OFILES := $(OFILES_BIN) $(OFILES_SOURCES) + +export HFILES := $(addsuffix .h,$(subst .,_,$(BINFILES))) + +#--------------------------------------------------------------------------------- +# build a list of include paths +#--------------------------------------------------------------------------------- +export INCLUDE := $(foreach dir,$(INCLUDES), -iquote $(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) \ + -I$(LIBOGC_INC) + +#--------------------------------------------------------------------------------- +# build a list of library paths +#--------------------------------------------------------------------------------- +export LIBPATHS := -L$(LIBOGC_LIB) $(foreach dir,$(LIBDIRS),-L$(dir)/lib) + +export OUTPUT := $(CURDIR)/$(TARGET) +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol + +#--------------------------------------------------------------------------------- +run: + wiiload $(TARGET).dol + + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT).dol: $(OUTPUT).elf +$(OUTPUT).elf: $(OFILES) + +$(OFILES_SOURCES) : $(HFILES) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .jpg extension +#--------------------------------------------------------------------------------- +%.jpg.o : %.jpg +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .png extension +#--------------------------------------------------------------------------------- +%.png.o : %.png +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- diff --git a/examples/gamecube/3D_Light1/data/Letter_Gothic_Std_14_Bold.png b/examples/gamecube/3D_Light1/data/Letter_Gothic_Std_14_Bold.png new file mode 100644 index 0000000000000000000000000000000000000000..0561972126b807ecc2ee0475323b20b5c449124c GIT binary patch literal 6364 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 literal 0 HcmV?d00001 diff --git a/examples/gamecube/3D_Light1/source/main.c b/examples/gamecube/3D_Light1/source/main.c new file mode 100644 index 0000000..5497961 --- /dev/null +++ b/examples/gamecube/3D_Light1/source/main.c @@ -0,0 +1,86 @@ +/*=========================================== + NoNameNo + Simple Diffuse light sample code +============================================*/ +#include + +#include +#include +#include + + +#include "Letter_Gothic_Std_14_Bold_png.h" + +int main() { + float l1=0, l2=0; + float a=0; + int camZ=13.0f; + + GRRLIB_Init(); + PAD_Init(); + + + GRRLIB_texImg *tex_font = GRRLIB_LoadTexture(Letter_Gothic_Std_14_Bold_png); + GRRLIB_InitTileSet(tex_font, 11, 24, 32); + + + GRRLIB_Settings.antialias = true; + + GRRLIB_SetBackgroundColour(0x00, 0x00, 0x00, 0xFF); + + while(1) { + GRRLIB_2dMode(); + PAD_ScanPads(); + if(PAD_ButtonsDown(0) & PAD_BUTTON_START) break; + if(PAD_ButtonsHeld(0) & PAD_BUTTON_X) camZ++; + if(PAD_ButtonsHeld(0) & PAD_BUTTON_Y) camZ--; + + GRRLIB_Camera3dSettings(0.0f,0.0f,camZ, 0,1,0, 0,0,0); + GRRLIB_SetLightAmbient(0x333333FF); + + GRRLIB_3dMode(0.1, 1000, 45, 0, 1); + + if(PAD_ButtonsHeld(0) & PAD_BUTTON_A) { + // Set all light off to get the sphere no light sourced (only get the vertex color) + GRRLIB_SetLightOff(); + GRRLIB_ObjectView(sin(l1)*4.0f,0.0f,cos(l1)*4.0f, 0,0,0,1,1,1); + GRRLIB_DrawSphere(0.2f, 20, 20, true, 0xFF0000FF); + } + + if(PAD_ButtonsHeld(0) & PAD_BUTTON_B) { + // Set all light off to get the sphere no light sourced (only get the vertex color) + GRRLIB_SetLightOff(); + GRRLIB_ObjectView(0.0f,sin(l2)*4.0f,cos(l2)*4.0f, 0,0,0,1,1,1); + GRRLIB_DrawSphere(0.2f, 20, 20, true, 0x00FF00FF); + } + + // Set a dummy black light to get the ambient one when no light is selected + GRRLIB_SetLightDiff(0,(guVector){0.0f,0.0f,0.0f},20.0f,1.0f,0x000000FF); + + if(PAD_ButtonsHeld(0) & PAD_BUTTON_A) { + GRRLIB_SetLightDiff(0,(guVector){sin(l1)*4.0f,0.0f,cos(l1)*4.0f},20.0f,1.0f,0xFF0000FF); + l1+=0.03f; + } + + if(PAD_ButtonsHeld(0) & PAD_BUTTON_B) { + GRRLIB_SetLightDiff(1,(guVector){0.0f,sin(l2)*4.0f,cos(l2)*4.0f},20.0f,1.0f,0x00FF00FF); + l2+=0.05f; + } + + GRRLIB_ObjectView(0,0,0, a,a*2,a*3,1,1,1); + GRRLIB_DrawTorus(1, 2, 60, 60, true, 0xFFFFFFFF); + + a+=0.5f; + + // Switch to 2D Mode to display text + GRRLIB_2dMode(); + GRRLIB_Printf((640-(16*29))/2, 20, tex_font, 0xFFFFFFFF, 1, "PRESS Y OR X TO ZOOM"); + GRRLIB_Printf((640-(16*29))/2, 40, tex_font, 0xFFFFFFFF, 1, "HOLD A - RED / B - GREEN"); + + GRRLIB_Render(); + } + GRRLIB_FreeTexture(tex_font); + GRRLIB_Exit(); // Be a good boy, clear the memory allocated by GRRLIB + + exit(0); +} diff --git a/examples/gamecube/3D_Light2/Makefile b/examples/gamecube/3D_Light2/Makefile new file mode 100644 index 0000000..1a18e66 --- /dev/null +++ b/examples/gamecube/3D_Light2/Makefile @@ -0,0 +1,146 @@ +#--------------------------------------------------------------------------------- +# Clear the implicit built in rules +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITPPC)),) +$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") +endif + +include $(DEVKITPPC)/gamecube_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +#--------------------------------------------------------------------------------- +TARGET := $(notdir $(CURDIR)) +BUILD := build +SOURCES := source +DATA := data +INCLUDES := + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- + +CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) +CXXFLAGS = $(CFLAGS) + +LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#--------------------------------------------------------------------------------- +LIBS := -lgrrlib -lfreetype -lbz2 -lpngu -lpng -ljpeg -lz -lfat -logc -lm + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := $(CURDIR)/$(GRRLIB) $(PORTLIBS) + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +#--------------------------------------------------------------------------------- +# automatically build a list of object files for our project +#--------------------------------------------------------------------------------- +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) + export LD := $(CC) +else + export LD := $(CXX) +endif + +export OFILES_BIN := $(addsuffix .o,$(BINFILES)) +export OFILES_SOURCES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(sFILES:.s=.o) $(SFILES:.S=.o) +export OFILES := $(OFILES_BIN) $(OFILES_SOURCES) + +export HFILES := $(addsuffix .h,$(subst .,_,$(BINFILES))) + +#--------------------------------------------------------------------------------- +# build a list of include paths +#--------------------------------------------------------------------------------- +export INCLUDE := $(foreach dir,$(INCLUDES), -iquote $(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) \ + -I$(LIBOGC_INC) + +#--------------------------------------------------------------------------------- +# build a list of library paths +#--------------------------------------------------------------------------------- +export LIBPATHS := -L$(LIBOGC_LIB) $(foreach dir,$(LIBDIRS),-L$(dir)/lib) + +export OUTPUT := $(CURDIR)/$(TARGET) +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol + +#--------------------------------------------------------------------------------- +run: + wiiload $(TARGET).dol + + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT).dol: $(OUTPUT).elf +$(OUTPUT).elf: $(OFILES) + +$(OFILES_SOURCES) : $(HFILES) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .jpg extension +#--------------------------------------------------------------------------------- +%.jpg.o : %.jpg +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .png extension +#--------------------------------------------------------------------------------- +%.png.o : %.png +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- diff --git a/examples/gamecube/3D_Light2/data/Rockwell_Condensed_12_Bold.png b/examples/gamecube/3D_Light2/data/Rockwell_Condensed_12_Bold.png new file mode 100644 index 0000000000000000000000000000000000000000..9a9f74fa61ec4037847ee0c73a24951e2dd10921 GIT binary patch literal 4269 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 + +#include +#include +#include +#include + +#include "Rockwell_Condensed_12_Bold_png.h" + + +int main() { + float a = 0; + float objscal = 0.5f; + int objqual = 20; + + GRRLIB_Init(); + PAD_Init(); + + GRRLIB_texImg *tex_font = GRRLIB_LoadTexture(Rockwell_Condensed_12_Bold_png); + GRRLIB_InitTileSet(tex_font, 12, 19, 32); + + + GRRLIB_Settings.antialias = true; + + GRRLIB_SetBackgroundColour(0x00, 0x00, 0x00, 0xFF); + + + while(1) { + GRRLIB_2dMode(); + PAD_ScanPads(); + if(PAD_ButtonsDown(0) & PAD_BUTTON_START) break; + + GRRLIB_Camera3dSettings(0.0f, 0.0f,13.0f, 0,1,0, 0,0,0); + + GRRLIB_SetLightAmbient(0x333333FF); + GRRLIB_SetLightDiff(0,(guVector){0.0f,0.0f,0.0f},20.0f,1.0f,0x00FFFFFF); + GRRLIB_SetLightDiff(1,(guVector){0.0f,13.0f,3.0f},20.0f,1.0f,0xFF00FFFF); + GRRLIB_SetLightDiff(2,(guVector){0.0f,-13.0f,3.0f},20.0f,1.0f,0xFFFF00FF); + GRRLIB_SetLightDiff(3,(guVector){13.0f,0.0f,3.0f},20.0f,1.0f,0xFF0000FF); + GRRLIB_SetLightDiff(4,(guVector){-13.0f,0.0f,3.0f},20.0f,1.0f,0x00FF00FF); + + GRRLIB_3dMode(0.1,1000,45,0,1); + + GRRLIB_ObjectViewInv(1.0f, -1.0f, 1.0f, a, a*2, a*3, 1.0f, 1.0f, 1.0f); + GRRLIB_DrawSphere(objscal,objqual,objqual,true,0xFFFFFFFF); + GRRLIB_ObjectViewInv(-1.0f, -1.0f, 1.0f, a, a*2, a*3, 1.0f, 1.0f, 1.0f); + GRRLIB_DrawSphere(objscal,objqual,objqual,true,0xFFFFFFFF); + GRRLIB_ObjectViewInv(1.0f, 1.0f, 1.0f, a, a*2, a*3, 1.0f, 1.0f, 1.0f); + GRRLIB_DrawSphere(objscal,objqual,objqual,true,0xFFFFFFFF); + GRRLIB_ObjectViewInv(-1.0f, 1.0f, 1.0f, a, a*2, a*3, 1.0f, 1.0f, 1.0f); + GRRLIB_DrawSphere(objscal,objqual,objqual,true,0xFFFFFFFF); + + GRRLIB_ObjectViewInv(1.0f, -1.0f, -1.0f, a, a*2, a*3, 1.0f, 1.0f, 1.0f); + GRRLIB_DrawSphere(objscal,objqual,objqual,true,0xFFFFFFFF); + GRRLIB_ObjectViewInv(-1.0f, -1.0f, -1.0f, a, a*2, a*3, 1.0f, 1.0f, 1.0f); + GRRLIB_DrawSphere(objscal,objqual,objqual,true,0xFFFFFFFF); + GRRLIB_ObjectViewInv(1.0f, 1.0f, -1.0f, a, a*2, a*3, 1.0f, 1.0f, 1.0f); + GRRLIB_DrawSphere(objscal,objqual,objqual,true,0xFFFFFFFF); + GRRLIB_ObjectViewInv(-1.0f, 1.0f, -1.0f, a, a*2, a*3, 1.0f, 1.0f, 1.0f); + GRRLIB_DrawSphere(objscal,objqual,objqual,true,0xFFFFFFFF); + + GRRLIB_ObjectView(0.0f, 0.0f, -1.0f, a, a*2, a*3, 1.0f, 1.0f, 1.0f); + GRRLIB_DrawCube(3.0, true, 0xFFFFFF44); + + a+=0.6f; + + // Switch To 2D Mode to display text + GRRLIB_2dMode(); + GRRLIB_Printf((640-(16*29))/2, 20, tex_font, 0xFFFFFFFF, 1, "LIGHT SAMPLE CODE 2"); + + GRRLIB_Render(); + } + GRRLIB_FreeTexture(tex_font); + GRRLIB_Exit(); // Be a good boy, clear the memory allocated by GRRLIB + + exit(0); +} diff --git a/examples/gamecube/3D_Light3/Makefile b/examples/gamecube/3D_Light3/Makefile new file mode 100644 index 0000000..1a18e66 --- /dev/null +++ b/examples/gamecube/3D_Light3/Makefile @@ -0,0 +1,146 @@ +#--------------------------------------------------------------------------------- +# Clear the implicit built in rules +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITPPC)),) +$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") +endif + +include $(DEVKITPPC)/gamecube_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +#--------------------------------------------------------------------------------- +TARGET := $(notdir $(CURDIR)) +BUILD := build +SOURCES := source +DATA := data +INCLUDES := + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- + +CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) +CXXFLAGS = $(CFLAGS) + +LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#--------------------------------------------------------------------------------- +LIBS := -lgrrlib -lfreetype -lbz2 -lpngu -lpng -ljpeg -lz -lfat -logc -lm + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := $(CURDIR)/$(GRRLIB) $(PORTLIBS) + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +#--------------------------------------------------------------------------------- +# automatically build a list of object files for our project +#--------------------------------------------------------------------------------- +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) + export LD := $(CC) +else + export LD := $(CXX) +endif + +export OFILES_BIN := $(addsuffix .o,$(BINFILES)) +export OFILES_SOURCES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(sFILES:.s=.o) $(SFILES:.S=.o) +export OFILES := $(OFILES_BIN) $(OFILES_SOURCES) + +export HFILES := $(addsuffix .h,$(subst .,_,$(BINFILES))) + +#--------------------------------------------------------------------------------- +# build a list of include paths +#--------------------------------------------------------------------------------- +export INCLUDE := $(foreach dir,$(INCLUDES), -iquote $(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) \ + -I$(LIBOGC_INC) + +#--------------------------------------------------------------------------------- +# build a list of library paths +#--------------------------------------------------------------------------------- +export LIBPATHS := -L$(LIBOGC_LIB) $(foreach dir,$(LIBDIRS),-L$(dir)/lib) + +export OUTPUT := $(CURDIR)/$(TARGET) +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol + +#--------------------------------------------------------------------------------- +run: + wiiload $(TARGET).dol + + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT).dol: $(OUTPUT).elf +$(OUTPUT).elf: $(OFILES) + +$(OFILES_SOURCES) : $(HFILES) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .jpg extension +#--------------------------------------------------------------------------------- +%.jpg.o : %.jpg +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .png extension +#--------------------------------------------------------------------------------- +%.png.o : %.png +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- diff --git a/examples/gamecube/3D_Light3/data/font9x12.png b/examples/gamecube/3D_Light3/data/font9x12.png new file mode 100644 index 0000000000000000000000000000000000000000..c7de790e822e73b45b97c4729a74a5b95648e0f1 GIT binary patch literal 1543 zcmV+i2Kf1jP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igG# z4>uaQ|C*Bk00oChL_t(|+U;FU(xfm5wP)oKU3xT^9?@OTDpeUKgvU>!-Oa0-s`)fx z0)#-o^s*!pi9{liNF)-8MB*M?*Y&=x>y6x(+IrrFUO$cl>I2f(LaX=g>$={@alC&) z4>;a%<1hDHJf!zpw6txwYaAW=TspIJcf@8Fr4z2(x?4l!7ZwkcIZ?Q-UjG(bYJIoRgz%<8c;xj+7K&)&1$w z(X`P9MNw@cHbQ3b2hj~grcrdF+T0yrA@d8h-%phLDE-L*tF0r2FK9r7tS1pc7P`LQ z5ukZ#d&cIqDVlbgchUKkAw_N&j7X|T2?M%*4BzplK@IJkW=B`+~8)%WXr_5aKLZQGhkLJepA%ynJw`tQ0g<^Fk|tYL2TbB6FoP5`ZgjMAih zuH{A1yQf(YsO(zfDgA1-Mfrr3Hfk4es;3csuIG-WO`+eTQJ$y&q;X14RZFItjR%WS zlz0_A&n#_vx*cWgEgLE4c`mbTWAwtx>6n!cXNR6r65i5{T6T0?<(|g=wCuB1KlXip zo#(l1+qQUkN9VP79WTC1%U+<>1(I%9%7!I5^a5S#Pg&@oI*(?RwC%Jy67{(O!k@^J za;}}0j+A`(<_vnhZXxzV@(l`|X@P2#qpqFw=q?twqvb8j`?L&JbbzHP`9qye%OZvt zH0yUZ+L9rJA87fXM(3X}hc$HR*m@Zet-P!<)y&`M{zw_45v5tkSSin}?|8z(%jp=W z3n-7dd8*0Qk8*IhjXTe{dUOy+9NA3M*wd#4^GFu3Rbr|MV0&u{_b!Bg-t4BQLPgRq zk8bqlg;!ota<^1(MOFWJ?N85!Qu{MIgRa^1I*vnZ=gk05ch0O%BxgK&fg4grct?Qs zY2RR37X*y~wkq9$#WAruINFV(sI?LavYrxPMI1&mbAxAwqiwb42wjh_^@%0QDDTjW;~i^(b%O`J zrX71kEHk}C5J{^cX??ClkP`?kRiWi-%USZG+8r7btC7R zrJ>ToVv!F*hbsrtzN=S$gOom6%bZXh}d(ZcH;LSFpGDQPfD;>(dPM_@j|iB%kXt*21H0+y3K|x9>gu*U+iwG}X^?52ZurAXgF` zt=CiM$?Wd{G-ZM4(cz;`j?7>^;pZJ@+Fp*9HuKxNCiUB6$D-_ySMJ(xbR|Cb{8g3}<{@A4}@xs*sG5{X12k(jWlJ=(GSmfsAGI&C=do%)eTBoc{4B9Zt}M|S3^nBU|) tXMi + +#include +#include + +#include "font9x12_png.h" + + +int main() { + f32 rot = 0.0f; + float shininess = 10.0f; + + GRRLIB_Init(); + PAD_Init(); + + GRRLIB_texImg *tex_font = GRRLIB_LoadTexture(font9x12_png); + GRRLIB_InitTileSet(tex_font, 9, 12, 32); + + GRRLIB_Settings.antialias = true; + + GRRLIB_SetBackgroundColour(0x40, 0x40, 0x40, 0xFF); + + while(1) { + GRRLIB_Camera3dSettings(0.0f,0.0f,10.0f, 0,1,0, 0,0,0); + + PAD_ScanPads(); + + if(PAD_ButtonsDown(0) & PAD_BUTTON_START) break; + if(PAD_ButtonsHeld(0) & PAD_BUTTON_A) shininess+=1; + if(PAD_ButtonsHeld(0) & PAD_BUTTON_B) shininess-=1; + + GRRLIB_3dMode(0.1,1000,45,0,1); + + // dir param of GRRLIB_SetLightSpec function have to be a crazy 0,0,0 value + // there is a bug in libogc about this + // https://devkitpro.org/viewtopic.php?f=7&t=1933 + // we are waiting for a fix from libogc devs + GRRLIB_SetLightAmbient(0x404040FF); + GRRLIB_SetLightSpec(0, (guVector){0.0f,0.0f,0.0f}, shininess, 0xFFFFFFFF, 0xFFFFFFFF); + + GRRLIB_ObjectViewBegin(); + GRRLIB_ObjectViewTrans(0.0f,1.3f,0.0f); + GRRLIB_ObjectViewRotate(rot,rot*2,rot*3); + GRRLIB_ObjectViewEnd(); + GRRLIB_DrawCone(0.6f, 2.6f, 60,true, 0x502010FF); + + GRRLIB_ObjectViewBegin(); + GRRLIB_ObjectViewRotate(0.0f,0.0f,90.0f); + GRRLIB_ObjectViewTrans(-1.3f,0.0f,0.0f); + GRRLIB_ObjectViewRotate(rot,rot*2,rot*3); + GRRLIB_ObjectViewEnd(); + GRRLIB_DrawCone(0.6f, 2.6f, 60,true, 0x502010FF); + + GRRLIB_ObjectViewBegin(); + GRRLIB_ObjectViewRotate(0.0f,0.0f,180.0f); + GRRLIB_ObjectViewTrans(0.0f,-1.3f,0.0f); + GRRLIB_ObjectViewRotate(rot,rot*2,rot*3); + GRRLIB_ObjectViewEnd(); + GRRLIB_DrawCone(0.6f, 2.6f, 60,true, 0x502010FF); + + GRRLIB_ObjectViewBegin(); + GRRLIB_ObjectViewRotate(0.0f,0.0f,-90.0f); + GRRLIB_ObjectViewTrans(1.3f,0.0f,0.0f); + GRRLIB_ObjectViewRotate(rot,rot*2,rot*3); + GRRLIB_ObjectViewEnd(); + GRRLIB_DrawCone(0.6f, 2.6f, 60,true, 0x502010FF); + + GRRLIB_ObjectViewBegin(); + GRRLIB_ObjectViewRotate(-90.0f,0.0f,0.0f); + GRRLIB_ObjectViewTrans(0.0f,0.0f,-1.3f); + GRRLIB_ObjectViewRotate(rot,rot*2,rot*3); + GRRLIB_ObjectViewEnd(); + GRRLIB_DrawCone(0.6f, 2.6f, 60,true, 0x502010FF); + + GRRLIB_ObjectViewBegin(); + GRRLIB_ObjectViewRotate(90.0f,0.0f,0.0f); + GRRLIB_ObjectViewTrans(0.0f,0.0f,1.3f); + GRRLIB_ObjectViewRotate(rot,rot*2,rot*3); + GRRLIB_ObjectViewEnd(); + GRRLIB_DrawCone(0.6f, 2.6f, 60,true, 0x502010FF); + + GRRLIB_ObjectViewBegin(); + GRRLIB_ObjectViewRotate(rot,rot*2,rot*3); + GRRLIB_ObjectViewEnd(); + GRRLIB_DrawCube( 0.6f, true, 0x102050FF); + + + rot+=0.8f; + + GRRLIB_2dMode(); + GRRLIB_Printf(50, 60, tex_font, 0xFFFFFFFF, 1, "Use ( A / B ) to change the shininess value: %d", (int)shininess); + GRRLIB_Render(); + } + GRRLIB_FreeTexture(tex_font); + GRRLIB_Exit(); // Be a good boy, clear the memory allocated by GRRLIB + + exit(0); +} diff --git a/examples/gamecube/3D_Light4/Makefile b/examples/gamecube/3D_Light4/Makefile new file mode 100644 index 0000000..26d41a9 --- /dev/null +++ b/examples/gamecube/3D_Light4/Makefile @@ -0,0 +1,149 @@ +#--------------------------------------------------------------------------------- +# Clear the implicit built in rules +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITPPC)),) +$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") +endif + +include $(DEVKITPPC)/gamecube_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +#--------------------------------------------------------------------------------- +TARGET := $(notdir $(CURDIR)) +BUILD := build +SOURCES := source +DATA := data +INCLUDES := + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- + +CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) +CXXFLAGS = $(CFLAGS) + +LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +# the order can-be/is critical +#--------------------------------------------------------------------------------- +LIBS := -lgrrlib -lfreetype -lbz2 -lpngu -lpng -ljpeg -lz -lfat +#LIBS += -lmodplay -laesnd +LIBS += -logc -lm + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := $(PORTLIBS) + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +#--------------------------------------------------------------------------------- +# automatically build a list of object files for our project +#--------------------------------------------------------------------------------- +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) + export LD := $(CC) +else + export LD := $(CXX) +endif + +export OFILES_BIN := $(addsuffix .o,$(BINFILES)) +export OFILES_SOURCES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(sFILES:.s=.o) $(SFILES:.S=.o) +export OFILES := $(OFILES_BIN) $(OFILES_SOURCES) + +export HFILES := $(addsuffix .h,$(subst .,_,$(BINFILES))) + +#--------------------------------------------------------------------------------- +# build a list of include paths +#--------------------------------------------------------------------------------- +export INCLUDE := $(foreach dir,$(INCLUDES), -iquote $(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) \ + -I$(LIBOGC_INC) + +#--------------------------------------------------------------------------------- +# build a list of library paths +#--------------------------------------------------------------------------------- +export LIBPATHS := -L$(LIBOGC_LIB) $(foreach dir,$(LIBDIRS),-L$(dir)/lib) + +export OUTPUT := $(CURDIR)/$(TARGET) +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol + +#--------------------------------------------------------------------------------- +run: + wiiload $(TARGET).dol + + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT).dol: $(OUTPUT).elf +$(OUTPUT).elf: $(OFILES) + +$(OFILES_SOURCES) : $(HFILES) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .jpg extension +#--------------------------------------------------------------------------------- +%.jpg.o : %.jpg +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .png extension +#--------------------------------------------------------------------------------- +%.png.o : %.png +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- diff --git a/examples/gamecube/3D_Light4/data/Snap_ITC_12.png b/examples/gamecube/3D_Light4/data/Snap_ITC_12.png new file mode 100644 index 0000000000000000000000000000000000000000..9e32b1b2cc5e013061d9ed673cf6b40a9a0b5ba6 GIT binary patch literal 6310 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 + +#include +#include +#include + +#include "Snap_ITC_12_png.h" + +int main(int argc, char **argv) { + f32 lightx=0.0f; + + GRRLIB_Init(); + + GRRLIB_texImg *tex_font = GRRLIB_LoadTexture(Snap_ITC_12_png); + GRRLIB_InitTileSet(tex_font, 17, 22, 32); + + PAD_Init(); + + GRRLIB_SetBackgroundColour(0x40, 0x40, 0x40, 0xFF); + + while(1) { + GRRLIB_2dMode(); + PAD_ScanPads(); + if (PAD_ButtonsDown(0) & PAD_BUTTON_START) break; + + GRRLIB_Camera3dSettings(0.0f,0.0f,3.0f, 0,1,0, 0,0,0); + + GRRLIB_SetLightAmbient(0x404040FF); + + GRRLIB_SetLightSpot(1, (guVector){ sin(lightx)*2.5f, 0.8f, 0 }, (guVector){ sin(lightx)*2.5f, 0.0f, 0.0f }, -4.0f, 5.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0x0000FFFF); + GRRLIB_SetLightSpot(2, (guVector){ -sin(lightx)*2.5f, 0.8f, 0 }, (guVector){ -sin(lightx)*2.5f, 0.0f, 0.0f }, -4.0f, 5.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0xFF0000FF); + + GRRLIB_3dMode(0.1,1000,45,0,1); + GRRLIB_ObjectView(0,-0.8,0, -90,0,0,1,1,1); + GRRLIB_DrawTessPanel(6.2f,0.17f,3.7f,0.1f,0,0xFFFFFFFF); + + lightx+=0.05f; + + GRRLIB_2dMode(); + GRRLIB_Printf((640-(17*26))/2, 480-25, tex_font, 0xFFFFFFFF, 1, "GRRLIB SPOT LIGHT SAMPLE 1"); + + + GRRLIB_Render(); + } + + GRRLIB_FreeTexture(tex_font); + GRRLIB_Exit(); + + exit(0); +} diff --git a/examples/gamecube/3D_sample1/Makefile b/examples/gamecube/3D_sample1/Makefile new file mode 100644 index 0000000..1a18e66 --- /dev/null +++ b/examples/gamecube/3D_sample1/Makefile @@ -0,0 +1,146 @@ +#--------------------------------------------------------------------------------- +# Clear the implicit built in rules +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITPPC)),) +$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") +endif + +include $(DEVKITPPC)/gamecube_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +#--------------------------------------------------------------------------------- +TARGET := $(notdir $(CURDIR)) +BUILD := build +SOURCES := source +DATA := data +INCLUDES := + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- + +CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) +CXXFLAGS = $(CFLAGS) + +LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#--------------------------------------------------------------------------------- +LIBS := -lgrrlib -lfreetype -lbz2 -lpngu -lpng -ljpeg -lz -lfat -logc -lm + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := $(CURDIR)/$(GRRLIB) $(PORTLIBS) + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +#--------------------------------------------------------------------------------- +# automatically build a list of object files for our project +#--------------------------------------------------------------------------------- +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) + export LD := $(CC) +else + export LD := $(CXX) +endif + +export OFILES_BIN := $(addsuffix .o,$(BINFILES)) +export OFILES_SOURCES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(sFILES:.s=.o) $(SFILES:.S=.o) +export OFILES := $(OFILES_BIN) $(OFILES_SOURCES) + +export HFILES := $(addsuffix .h,$(subst .,_,$(BINFILES))) + +#--------------------------------------------------------------------------------- +# build a list of include paths +#--------------------------------------------------------------------------------- +export INCLUDE := $(foreach dir,$(INCLUDES), -iquote $(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) \ + -I$(LIBOGC_INC) + +#--------------------------------------------------------------------------------- +# build a list of library paths +#--------------------------------------------------------------------------------- +export LIBPATHS := -L$(LIBOGC_LIB) $(foreach dir,$(LIBDIRS),-L$(dir)/lib) + +export OUTPUT := $(CURDIR)/$(TARGET) +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol + +#--------------------------------------------------------------------------------- +run: + wiiload $(TARGET).dol + + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT).dol: $(OUTPUT).elf +$(OUTPUT).elf: $(OFILES) + +$(OFILES_SOURCES) : $(HFILES) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .jpg extension +#--------------------------------------------------------------------------------- +%.jpg.o : %.jpg +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .png extension +#--------------------------------------------------------------------------------- +%.png.o : %.png +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- diff --git a/examples/gamecube/3D_sample1/data/font.png b/examples/gamecube/3D_sample1/data/font.png new file mode 100644 index 0000000000000000000000000000000000000000..ac5131a1526b947780dd01aabee2f79a531f6435 GIT binary patch literal 932 zcmV;V16%xwP)Px&UP(kjRCwC$ozb$bAP7KDP5=MP-KRa%ZERFPKwazU%-NA9NJL7<-yrV$zJGro z$8r3DE6?%Q>fn8@_c?37Lr%MR>gP*`U(|HlJO8!qx5~fe4)1}6cw--Z4s<`S^ZU|Q z$-%T9Yw0XY$M*LBdCZAfz{(T8H?rVnsEf{K8}AF#z~BK}XqBxwxLR6dM5;t1j{{s3 zoE}&^Kd*jT*mvvsE-xi8A;EjXdroBQ3B0TGvudmLCCM3Sm;kW1^NWT@U>F+7dq@AJ zx0@dAXL1zToL`R(c-YIcjcW&kfW4gHh$og=`fugHtgkn#6C?rz_;3KxX`9{%c85n- z={i97N8p}?lK?!0|JK#GQ4%vl5>;A{4D?9!KVqGmr~PW@V5asX<;@-7sCr(r%dhx$I`8av%0Rq6bxbFlRQTuE4Rqr!gU*tM0BI%sD+0LiYSIap5w-;DbV6dliPe&n%=1TI~ypAM?@b14=fyP-Q zo5;Rq%CBnepjAGrZA3?Sy#W?EK!6P*UMO>B8~o@;2oJ+*ZDXd7`rMu1n2^sPe`a(P zI6>%r-1&hMM7~G%z_J-E{N&UpP&`|&IX zRoXU}u^gO5Jx?io7ufoaBHT-?k+;~(Ji7f_yOGylbIQCi%r}3mU>zU;Yzq+}5MjW! zI=M!NnBHXjHpfgwO*4$2G#{v`=ZFJ}uZJ16kok&!29L@i)N)bWjdSboeOzzBP4r)$ z(-HMBBlE4~0AcA!AE3(tjxa3ibGF`1BKnH_dL`j|`jlz>BqhS4OTl^T|McnvP7ryV zAmg9S30~QZD|=ps^Z67N&A+4SjB!?uA?Rwt$(ZW=Oq^a0000000000Snv<4xnH#}UeZti0000 + +#include +#include +#include +#include + +#include "font_png.h" + +int main() { + float a=0; + u32 col[3] = {0xFFFFFFFF, 0xAAAAAAFF, 0x666666FF}; + int cubeZ=0; + + GRRLIB_Init(); + PAD_Init(); + + GRRLIB_texImg *tex_font = GRRLIB_LoadTexture(font_png); + GRRLIB_InitTileSet(tex_font, 16, 16, 32); + + GRRLIB_Settings.antialias = true; + + GRRLIB_SetBackgroundColour(0x00, 0x00, 0x00, 0xFF); + GRRLIB_Camera3dSettings(0.0f,0.0f,13.0f, 0,1,0, 0,0,0); + + while(1) { + GRRLIB_2dMode(); + PAD_ScanPads(); + if(PAD_ButtonsDown(0) & PAD_BUTTON_START) exit(0); + if(PAD_ButtonsHeld(0) & PAD_BUTTON_A) cubeZ++; + if(PAD_ButtonsHeld(0) & PAD_BUTTON_B) cubeZ--; + + GRRLIB_3dMode(0.1,1000,45,0,0); + GRRLIB_ObjectView(0,0,cubeZ, a,a*2,a*3,1,1,1); + GX_Begin(GX_QUADS, GX_VTXFMT0, 24); + GX_Position3f32(-1.0f,1.0f,-1.0f); + GX_Color1u32(col[0]); + GX_Position3f32(-1.0f,-1.0f,-1.0f); + GX_Color1u32(col[0]); + GX_Position3f32(1.0f,-1.0f,-1.0f); + GX_Color1u32(col[0]); + GX_Position3f32(1.0f,1.0f,-1.0f); + GX_Color1u32(col[0]); + + GX_Position3f32(-1.0f,1.0f,1.0f); + GX_Color1u32(col[0]); + GX_Position3f32(-1.0f,-1.0f,1.0f); + GX_Color1u32(col[0]); + GX_Position3f32(1.0f,-1.0f,1.0f); + GX_Color1u32(col[0]); + GX_Position3f32(1.0f,1.0f,1.0f); + GX_Color1u32(col[0]); + + GX_Position3f32(-1.0f,1.0f,1.0f); + GX_Color1u32(col[1]); + GX_Position3f32(1.0f,1.0f,1.0f); + GX_Color1u32(col[1]); + GX_Position3f32(1.0f,1.0f,-1.0f); + GX_Color1u32(col[1]); + GX_Position3f32(-1.0f,1.0f,-1.0f); + GX_Color1u32(col[1]); + + GX_Position3f32(-1.0f,-1.0f,1.0f); + GX_Color1u32(col[1]); + GX_Position3f32(1.0f,-1.0f,1.0f); + GX_Color1u32(col[1]); + GX_Position3f32(1.0f,-1.0f,-1.0f); + GX_Color1u32(col[1]); + GX_Position3f32(-1.0f,-1.0f,-1.0f); + GX_Color1u32(col[1]); + + GX_Position3f32(-1.0f,1.0f,1.0f); + GX_Color1u32(col[2]); + GX_Position3f32(-1.0f,1.0f,-1.0f); + GX_Color1u32(col[2]); + GX_Position3f32(-1.0f,-1.0f,-1.0f); + GX_Color1u32(col[2]); + GX_Position3f32(-1.0f,-1.0f,1.0f); + GX_Color1u32(col[2]); + + GX_Position3f32(1.0f,1.0f,1.0f); + GX_Color1u32(col[2]); + GX_Position3f32(1.0f,1.0f,-1.0f); + GX_Color1u32(col[2]); + GX_Position3f32(1.0f,-1.0f,-1.0f); + GX_Color1u32(col[2]); + GX_Position3f32(1.0f,-1.0f,1.0f); + GX_Color1u32(col[2]); + GX_End(); + a+=0.5f; + + // Switch To 2D Mode to display text + GRRLIB_2dMode(); + GRRLIB_Printf((640-(16*29))/2, 20, tex_font, 0xFFFFFFFF, 1, "PRESS A OR B TO ZOOM THE CUBE"); + + GRRLIB_Render(); + } + GRRLIB_FreeTexture(tex_font); + GRRLIB_Exit(); // Be a good boy, clear the memory allocated by GRRLIB + + exit(0); +} diff --git a/examples/gamecube/3D_sample2/Makefile b/examples/gamecube/3D_sample2/Makefile new file mode 100644 index 0000000..1a18e66 --- /dev/null +++ b/examples/gamecube/3D_sample2/Makefile @@ -0,0 +1,146 @@ +#--------------------------------------------------------------------------------- +# Clear the implicit built in rules +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- +ifeq ($(strip $(DEVKITPPC)),) +$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") +endif + +include $(DEVKITPPC)/gamecube_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +#--------------------------------------------------------------------------------- +TARGET := $(notdir $(CURDIR)) +BUILD := build +SOURCES := source +DATA := data +INCLUDES := + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- + +CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) +CXXFLAGS = $(CFLAGS) + +LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#--------------------------------------------------------------------------------- +LIBS := -lgrrlib -lfreetype -lbz2 -lpngu -lpng -ljpeg -lz -lfat -logc -lm + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := $(CURDIR)/$(GRRLIB) $(PORTLIBS) + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +#--------------------------------------------------------------------------------- +# automatically build a list of object files for our project +#--------------------------------------------------------------------------------- +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) + export LD := $(CC) +else + export LD := $(CXX) +endif + +export OFILES_BIN := $(addsuffix .o,$(BINFILES)) +export OFILES_SOURCES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(sFILES:.s=.o) $(SFILES:.S=.o) +export OFILES := $(OFILES_BIN) $(OFILES_SOURCES) + +export HFILES := $(addsuffix .h,$(subst .,_,$(BINFILES))) + +#--------------------------------------------------------------------------------- +# build a list of include paths +#--------------------------------------------------------------------------------- +export INCLUDE := $(foreach dir,$(INCLUDES), -iquote $(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) \ + -I$(LIBOGC_INC) + +#--------------------------------------------------------------------------------- +# build a list of library paths +#--------------------------------------------------------------------------------- +export LIBPATHS := -L$(LIBOGC_LIB) $(foreach dir,$(LIBDIRS),-L$(dir)/lib) + +export OUTPUT := $(CURDIR)/$(TARGET) +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol + +#--------------------------------------------------------------------------------- +run: + wiiload $(TARGET).dol + + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT).dol: $(OUTPUT).elf +$(OUTPUT).elf: $(OFILES) + +$(OFILES_SOURCES) : $(HFILES) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .jpg extension +#--------------------------------------------------------------------------------- +%.jpg.o : %.jpg +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .png extension +#--------------------------------------------------------------------------------- +%.png.o : %.png +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + $(bin2o) + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- diff --git a/examples/gamecube/3D_sample2/data/font.png b/examples/gamecube/3D_sample2/data/font.png new file mode 100644 index 0000000000000000000000000000000000000000..ac5131a1526b947780dd01aabee2f79a531f6435 GIT binary patch literal 932 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