From 14c9a60572c79bd10c6dca09414a4b9b76201054 Mon Sep 17 00:00:00 2001 From: util1 Date: Fri, 19 Jul 2019 21:55:17 +0200 Subject: [PATCH] ajout anciens fichiers --- 1v1-3D.g1a | Bin 0 -> 10912 bytes Makefile | 136 +++++++++ assets-cg/icon-cg-sel.png | Bin 0 -> 8388 bytes assets-cg/icon-cg-uns.png | Bin 0 -> 4629 bytes assets-fx/icon-fx.png | Bin 0 -> 7429 bytes build-fx/map | 444 +++++++++++++++++++++++++++++ build-fx/src/1v1-3D.bin | Bin 0 -> 10400 bytes build-fx/src/1v1-3D.elf | Bin 0 -> 17684 bytes build-fx/src/main.d | 1 + build-fx/src/main.o | Bin 0 -> 1008 bytes project.cfg | 19 ++ src/FxEngine/FxEngine.cpp | 49 ++++ src/FxEngine/FxEngine.h | 36 +++ src/FxEngine/math/coord.cpp | 9 + src/FxEngine/math/coord.h | 17 ++ src/FxEngine/math/pos.cpp | 38 +++ src/FxEngine/math/pos.h | 19 ++ src/FxEngine/object/coordtable.cpp | Bin 0 -> 1024 bytes src/FxEngine/object/coordtable.h | Bin 0 -> 1024 bytes src/FxEngine/object/face.cpp | Bin 0 -> 1024 bytes src/FxEngine/object/face.h | Bin 0 -> 1024 bytes src/FxEngine/object/facetable.cpp | Bin 0 -> 1024 bytes src/FxEngine/object/facetable.h | Bin 0 -> 1024 bytes src/FxEngine/object/object.cpp | Bin 0 -> 1024 bytes src/FxEngine/object/object.h | Bin 0 -> 1024 bytes src/FxEngine/object/texture.cpp | 14 + src/FxEngine/object/texture.h | 8 + src/FxEngine/zbuffer/zbuffer.cpp | 32 +++ src/FxEngine/zbuffer/zbuffer.h | 20 ++ src/credits.h | 8 + src/main.c | 12 + 31 files changed, 862 insertions(+) create mode 100644 1v1-3D.g1a create mode 100644 Makefile create mode 100644 assets-cg/icon-cg-sel.png create mode 100644 assets-cg/icon-cg-uns.png create mode 100644 assets-fx/icon-fx.png create mode 100644 build-fx/map create mode 100755 build-fx/src/1v1-3D.bin create mode 100755 build-fx/src/1v1-3D.elf create mode 100644 build-fx/src/main.d create mode 100644 build-fx/src/main.o create mode 100644 project.cfg create mode 100644 src/FxEngine/FxEngine.cpp create mode 100644 src/FxEngine/FxEngine.h create mode 100644 src/FxEngine/math/coord.cpp create mode 100644 src/FxEngine/math/coord.h create mode 100644 src/FxEngine/math/pos.cpp create mode 100644 src/FxEngine/math/pos.h create mode 100644 src/FxEngine/object/coordtable.cpp create mode 100644 src/FxEngine/object/coordtable.h create mode 100644 src/FxEngine/object/face.cpp create mode 100644 src/FxEngine/object/face.h create mode 100644 src/FxEngine/object/facetable.cpp create mode 100644 src/FxEngine/object/facetable.h create mode 100644 src/FxEngine/object/object.cpp create mode 100644 src/FxEngine/object/object.h create mode 100644 src/FxEngine/object/texture.cpp create mode 100644 src/FxEngine/object/texture.h create mode 100644 src/FxEngine/zbuffer/zbuffer.cpp create mode 100644 src/FxEngine/zbuffer/zbuffer.h create mode 100644 src/credits.h create mode 100644 src/main.c diff --git a/1v1-3D.g1a b/1v1-3D.g1a new file mode 100644 index 0000000000000000000000000000000000000000..e85efc304a3afbcb86aafc355d6af870268e3df0 GIT binary patch literal 10912 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 literal 0 HcmV?d00001 diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..93a942d --- /dev/null +++ b/Makefile @@ -0,0 +1,136 @@ +#! /usr/bin/make -f +# Default Makefile for fxSDK add-ins. This file was probably copied there by +# the [fxsdk] program. +#--- + +# +# Configuration +# + +include project.cfg + +# Compiler flags +cf := -mb -ffreestanding -nostdlib -Wall -Wextra \ + -fstrict-volatile-bitfields $(CFLAGS) +cf-fx := $(cf) -m3 -DFX9860G +cf-cg := $(cf) -m4-nofpu -DFXCG50 + +# Linker flags +lf-fx := $(LDFLAGS) -Tfx9860g.ld -lgint-fx -lgcc -Wl,-Map=build-fx/map +lf-cg := $(LDFLAGS) -Tfxcg50.ld -lgint-cg -lgcc -Wl,-Map=build-cg/map + +dflags = -MMD -MT $@ -MF $(@:.o=.d) -MP +cpflags := -R .bss -R .gint_bss + +g1af := -i "$(ICON_FX)" -n "$(NAME)" --internal="$(INTERNAL)" +g3af := -n basic:"$(NAME)" -i uns:"$(ICON_CG_UNS)" -i sel:"$(ICON_CG_SEL)" + +# +# File listings +# + +null := +filename := $(subst $(null) $(null),-,$(NAME)) + +elf = $(dir $<)$(filename).elf +bin = $(dir $<)$(filename).bin +target-fx := $(filename).g1a +target-cg := $(filename).g3a + +# Source files +src := $(wildcard src/*.c) +assets-fx := $(wildcard assets-fx/**/*) +assets-cg := $(wildcard assets-cg/**/*) + +# Object files +obj-fx := $(src:%.c=build-fx/%.o) $(assets-fx:assets-fx/%=build-fx/assets/%.o) +obj-cg := $(src:%.c=build-cg/%.o) $(assets-cg:assets-cg/%=build-cg/assets/%.o) + +# Additional dependencies +deps-fx := $(ICON_FX) +deps-cg := $(ICON_CG_UNS) $(ICON_CG_SEL) + +# All targets +all := +ifneq "$(wildcard build-fx)" "" +all += all-fx +endif +ifneq "$(wildcard build-cg)" "" +all += all-cg +endif + +# +# Build rules +# + +all: $(all) + +all-fx: $(target-fx) +all-cg: $(target-cg) + +$(target-fx): $(obj-fx) $(deps-fx) + + sh3eb-elf-gcc -o $(elf) $(obj-fx) $(cf-fx) $(lf-fx) + sh3eb-elf-objcopy -O binary $(cpflags) $(elf) $(bin) + fxg1a $(bin) -o $@ $(g1af) + +$(target-cg): $(obj-cg) $(deps-cg) + + sh4eb-elf-gcc -o $(elf) $(obj-cg) $(cf-cg) $(lf-cg) + sh4eb-elf-objcopy -O binary $(cpflags) $(elf) $(bin) + mkg3a $(g3af) $(bin) $@ + +# C sources +build-fx/%.o: %.c + @ mkdir -p $(dir $@) + sh3eb-elf-gcc -c $< -o $@ $(cf-fx) $(dflags) +build-cg/%.o: %.c + @ mkdir -p $(dir $@) + sh4eb-elf-gcc -c $< -o $@ $(cf-cg) $(dflags) + +# Images +build-fx/assets/img/%.o: assets-fx/img/% + @ mkdir -p $(dir $@) + fxconv -i $< -o $@ name:img_$(basename $*) + +build-cg/assets/img/%.o: assets-cg/img/% + @ echo -ne "\e[31;1mWARNING: image conversion for fxcg50 is not " + @ echo -ne "supported yet\e[0m" + @ mkdir -p $(dir $@) + fxconv -i $< -o $@ name:img_$(basename $*) + +# Fonts +build-fx/assets/fonts/%.o: assets-fx/fonts/% + @ mkdir -p $(dir $@) + fxconv -f $< -o $@ name:font_$(basename $*) $(FONT.$*) + +build-cg/assets/fonts/%.o: assets-cg/fonts/% + @ mkdir -p $(dir $@) + fxconv -f $< -o $@ name:font_$(basename $*) $(FONT.$*) + +# +# Cleaning and utilities +# + +# Dependency information +-include $(shell find build* -name *.d 2> /dev/null) +build-fx/%.d: ; +build-cg/%.d: ; +.PRECIOUS: build-fx build-cg build-fx/%.d build-cg/%.d %/ + +clean: + @ rm -rf build* +distclean: clean + @ rm -f $(target-fx) $(target-cg) + +install-fx: $(target-fx) + p7 send -f $< +install-cg: $(target-cg) + @ while [[ ! -h /dev/Prizm1 ]]; do sleep 1; done + @ mount /dev/Prizm1 + @ rm -f /mnt/prizm/$< + @ cp $< /mnt/prizm + @ umount /dev/Prizm1 + @- eject /dev/Prizm1 + +.PHONY: all all-fx all-cg clean distclean install-fx install-cg diff --git a/assets-cg/icon-cg-sel.png b/assets-cg/icon-cg-sel.png new file mode 100644 index 0000000000000000000000000000000000000000..7137b504cfd44f62f3105ce7a203b9100a557d0f GIT binary patch literal 8388 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 ag#Q8hHNm}t`+-sb0000 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 LNkvXXu0mjfMjhGA literal 0 HcmV?d00001 diff --git a/assets-fx/icon-fx.png b/assets-fx/icon-fx.png new file mode 100644 index 0000000000000000000000000000000000000000..c92f12afab0af9f7b3d8e2bec76a1dc5cc9c08a1 GIT binary patch literal 7429 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 U>BG`!bm77nJj%m)^DN_k1AfaZdH?_b literal 0 HcmV?d00001 diff --git a/build-fx/src/1v1-3D.elf b/build-fx/src/1v1-3D.elf new file mode 100755 index 0000000000000000000000000000000000000000..6c918345e093b76a7ef1c0b1ff23fda2bef51b5f GIT binary patch literal 17684 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 literal 0 HcmV?d00001 diff --git a/project.cfg b/project.cfg new file mode 100644 index 0000000..6ddde2d --- /dev/null +++ b/project.cfg @@ -0,0 +1,19 @@ +#--- +# fxSDK project configuration file for 1v1 3D +#--- + +# Project name, should be at most 8 bytes long. +NAME = 1v1 3D +# Internal name, should be '@' followed by at most 7 uppercase letters. +INTERNAL = @1V13D + +# fx-9860G icon location +ICON_FX = assets-fx/icon-fx.png +# fx-CG 50 icon locations +ICON_CG_UNS = assets-cg/icon-cg-uns.png +ICON_CG_SEL = assets-cg/icon-cg-sel.png + +# Additional compiler flags +CFLAGS = -std=c11 -Os +# Additional linker flags +LDFLAGS = diff --git a/src/FxEngine/FxEngine.cpp b/src/FxEngine/FxEngine.cpp new file mode 100644 index 0000000..d030ffa --- /dev/null +++ b/src/FxEngine/FxEngine.cpp @@ -0,0 +1,49 @@ +#include "FxEngine.h" + +#include + +FE_Angle FxEngine::dh(0); +FE_Angle FxEngine::dv(0); +FE_Angle FxEngine::m_dh(0); +FE_Angle FxEngine::m_dv(0); + +FE_Position FxEngine::real(0,0,0); +FE_Position FxEngine::m_virt(0,0,0); + +int FxEngine::m_numChange=0; +int FxEngine::numPublicChange=0; + +FE_State FxEngine::m_state=FE_PASSIVE; + +void FxEngine::newFrame() +{ + numPublicChange=m_numChange; + dh=m_dh; + dv=m_dv; + real=m_virt; + dupdate(); + dclear(white); +} + +void FxEngine::setState(FE_State state) +{ + if (m_moveActive==state) + return; + if (state==true) + { + // TODO + // gint timer + m_moveActive=true; + } + else + { + // TODO + // gint kill timer + m_moveActive=false; + } +} + +void FxEngine::move() +{ + // todo with math functions, not implemented yet ! +} \ No newline at end of file diff --git a/src/FxEngine/FxEngine.h b/src/FxEngine/FxEngine.h new file mode 100644 index 0000000..42af0a6 --- /dev/null +++ b/src/FxEngine/FxEngine.h @@ -0,0 +1,36 @@ +#ifndef FENG_H +#define FENG_H + +#define FE_State bool +#define FE_ACTIVE true +#define FE_PASSIVE false + +#include "math/pos.h" +#include "math/angle.h" + + +class FxEngine // regroupement des fonctions +{ +public: + static void newFrame(); // reloads coords + static void setState(FE_State state); + + static FE_Angle dh,dv; + static FE_Position real; + static int numPublicChange; +private: + static FE_Angle m_dh,m_dv; + static FE_Position m_virt; + + static FE_State m_state; + static int m_numChange; + + static void move(); // appelé à intervalles réguliers + +}; + + + + + +#endif \ No newline at end of file diff --git a/src/FxEngine/math/coord.cpp b/src/FxEngine/math/coord.cpp new file mode 100644 index 0000000..44da9f8 --- /dev/null +++ b/src/FxEngine/math/coord.cpp @@ -0,0 +1,9 @@ +#include "coord.h" + +#include "angle.h" + +void FE_Coord::calc() +{ + transformed=original-real; + // rotate +} \ No newline at end of file diff --git a/src/FxEngine/math/coord.h b/src/FxEngine/math/coord.h new file mode 100644 index 0000000..9b420e9 --- /dev/null +++ b/src/FxEngine/math/coord.h @@ -0,0 +1,17 @@ +#ifndef FE_COORD_H +#define FE_COORD_H + +#include "pos.h" + +class FE_Coord +{ +public: + FE_Pos normal; + FE_Pos transformed; + void calc(); +}; + + + + +#endif \ No newline at end of file diff --git a/src/FxEngine/math/pos.cpp b/src/FxEngine/math/pos.cpp new file mode 100644 index 0000000..7819f0b --- /dev/null +++ b/src/FxEngine/math/pos.cpp @@ -0,0 +1,38 @@ +#include "pos.h" + +bool operator==(FE_Pos const& a, FE_Pos const& b) +{return (a.x==b.x && a.y==b.y && a.z==b.z);} +bool operator!=(FE_Pos const& a, FE_Pos const& b) +{return !(a==b);} + +FE_Pos::FE_Pos() : x(0), y(0), z(0) +{} + +FE_Pos::FE_Pos(const FE_Pos& coord) +{ + x=coord.x; + y=coord.y; + z=coord.z; +} + +FE_Pos& FE_Pos::operator=(const FE_Pos& a) +{this->FE_Pos(a);return *this;} + +FE_Pos& FE_Pos::operator+=(const FE_Pos& a) +{x+=a.x;y+=a.y;z+=a.z;return *this;} + +FE_Pos& FE_Pos::operator-=(const FE_Pos& a) +{x-=a.x;y-=a.y;z-=a.z;return *this;} + +FE_Pos operator+(FE_Pos const& a, FE_Pos const& b) +{ + FE_Pos copie(a); + copie+=b; + return copie; +} +FE_Pos operator-(FE_Pos const& a, FE_Pos const& b) +{ + FE_Pos copie(a); + copie-=b; + return copie; +} \ No newline at end of file diff --git a/src/FxEngine/math/pos.h b/src/FxEngine/math/pos.h new file mode 100644 index 0000000..51483f4 --- /dev/null +++ b/src/FxEngine/math/pos.h @@ -0,0 +1,19 @@ +#ifndef FE_POS_H +#define FE_POS_H + +class FE_Pos +{ +public: + FE_Pos(); + FE_Pos(const FE_Pos& coord); + FE_Pos& operator=(const FE_Pos& a); + FE_Pos& operator+=(const FE_Pos& a); + FE_Pos& operator-=(const FE_Pos& a); + int x,y,z; +}; + +bool operator==(FE_Pos const& a, FE_Pos const& b); +FE_Pos operator+(FE_Pos const& a, FE_Pos const& b); +FE_Pos operator-(FE_Pos const& a, FE_Pos const& b); + +#endif \ No newline at end of file diff --git a/src/FxEngine/object/coordtable.cpp b/src/FxEngine/object/coordtable.cpp new file mode 100644 index 0000000000000000000000000000000000000000..06d7405020018ddf3cacee90fd4af10487da3d20 GIT binary patch literal 1024 ScmZQz7zLvtFd70QH3R?z00031 literal 0 HcmV?d00001 diff --git a/src/FxEngine/object/coordtable.h b/src/FxEngine/object/coordtable.h new file mode 100644 index 0000000000000000000000000000000000000000..06d7405020018ddf3cacee90fd4af10487da3d20 GIT binary patch literal 1024 ScmZQz7zLvtFd70QH3R?z00031 literal 0 HcmV?d00001 diff --git a/src/FxEngine/object/face.cpp b/src/FxEngine/object/face.cpp new file mode 100644 index 0000000000000000000000000000000000000000..06d7405020018ddf3cacee90fd4af10487da3d20 GIT binary patch literal 1024 ScmZQz7zLvtFd70QH3R?z00031 literal 0 HcmV?d00001 diff --git a/src/FxEngine/object/face.h b/src/FxEngine/object/face.h new file mode 100644 index 0000000000000000000000000000000000000000..06d7405020018ddf3cacee90fd4af10487da3d20 GIT binary patch literal 1024 ScmZQz7zLvtFd70QH3R?z00031 literal 0 HcmV?d00001 diff --git a/src/FxEngine/object/facetable.cpp b/src/FxEngine/object/facetable.cpp new file mode 100644 index 0000000000000000000000000000000000000000..06d7405020018ddf3cacee90fd4af10487da3d20 GIT binary patch literal 1024 ScmZQz7zLvtFd70QH3R?z00031 literal 0 HcmV?d00001 diff --git a/src/FxEngine/object/facetable.h b/src/FxEngine/object/facetable.h new file mode 100644 index 0000000000000000000000000000000000000000..06d7405020018ddf3cacee90fd4af10487da3d20 GIT binary patch literal 1024 ScmZQz7zLvtFd70QH3R?z00031 literal 0 HcmV?d00001 diff --git a/src/FxEngine/object/object.cpp b/src/FxEngine/object/object.cpp new file mode 100644 index 0000000000000000000000000000000000000000..06d7405020018ddf3cacee90fd4af10487da3d20 GIT binary patch literal 1024 ScmZQz7zLvtFd70QH3R?z00031 literal 0 HcmV?d00001 diff --git a/src/FxEngine/object/object.h b/src/FxEngine/object/object.h new file mode 100644 index 0000000000000000000000000000000000000000..06d7405020018ddf3cacee90fd4af10487da3d20 GIT binary patch literal 1024 ScmZQz7zLvtFd70QH3R?z00031 literal 0 HcmV?d00001 diff --git a/src/FxEngine/object/texture.cpp b/src/FxEngine/object/texture.cpp new file mode 100644 index 0000000..74c0a7c --- /dev/null +++ b/src/FxEngine/object/texture.cpp @@ -0,0 +1,14 @@ +#include "texture.h" + +static unsigned char black[1]={255}; + +static unsigned char* textures[]={black}; +static unsigned char sizes[2][]={{8,8}}; + +int FE_getPixelColor(int num, float x, float y) +{ + if (y>1 || y<0 || x>1 || x<0) return -1; + unsigned char texture=textures[num]; + int ix=x*sizes[0][num], iy=y*sizes[1][num]; + return (7-x%8 >>texture[(ix/8+iy*sizes[0][num])/8])&1); // à revoir +} \ No newline at end of file diff --git a/src/FxEngine/object/texture.h b/src/FxEngine/object/texture.h new file mode 100644 index 0000000..9be2772 --- /dev/null +++ b/src/FxEngine/object/texture.h @@ -0,0 +1,8 @@ +#ifndef FE_TEXTURE_H +#define FE_TEXTURE_H + +int FE_getPixelColor(int num, float x, float y); + + + +#endif \ No newline at end of file diff --git a/src/FxEngine/zbuffer/zbuffer.cpp b/src/FxEngine/zbuffer/zbuffer.cpp new file mode 100644 index 0000000..d691e8e --- /dev/null +++ b/src/FxEngine/zbuffer/zbuffer.cpp @@ -0,0 +1,32 @@ +#include "zbuffer.h" + +int FE_ZBuffer::m_sign=1; +unsigned short* FE_ZBuffer::m_data=calloc(8192,sizeof(unsigned short)); + +void FE_ZBuffer::clear() +{ + m_sign*=-1; + while (m_data==NULL) + {} + int* clearVal=(int*)m_data; + int indice=0; + + // TODO ** ajouter le DMA pour les architectures sh4 + for (indice=0; indice<4096; indice++) + clearVal[indice]=0; +} + +bool FE_ZBuffer::setDist(int x, int y, int dist) +{ + short ndist=(short)dist; + x%=FE_ZB_SIZE_X; + y%=FE_ZB_SIZE_Y; + const int indice=x*y; + if (m_data[indice]=0 || m_data[indice]>ndist) + { + m_data[indice]=ndist; + return true; + } + else + return false; +} \ No newline at end of file diff --git a/src/FxEngine/zbuffer/zbuffer.h b/src/FxEngine/zbuffer/zbuffer.h new file mode 100644 index 0000000..bb22f60 --- /dev/null +++ b/src/FxEngine/zbuffer/zbuffer.h @@ -0,0 +1,20 @@ +#ifndef FE_ZBUFFER +#define FE_ZBUFFER + +// nouveuaté ! le zbuffer occupe tout l'écran, le rendu 3d offre donc de meilleures possibilités +#define FE_ZB_SIZE_X 128 +#define FE_ZB_SIZE_Y 64 + +class FE_ZBuffer +{ +public: + static void clear(); // does not really clear the zbuffer, but changes encoding sign for the next frame ** on 1st frame, allocates data + static bool setDist(int x, int y, int dist); // if you are allowed to draw the pixel on vram +private: + static unsigned short* m_data; + static int m_sign; +} + + + +#endif \ No newline at end of file diff --git a/src/credits.h b/src/credits.h new file mode 100644 index 0000000..6310072 --- /dev/null +++ b/src/credits.h @@ -0,0 +1,8 @@ +#ifndef CREDITS_H +#define CREDITS_H + +#define AUTHOR "Milang" +#define NAME "1v1 3D" +#define VERSION "Alpha Build 1.00" + +#endif \ No newline at end of file diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..b295f14 --- /dev/null +++ b/src/main.c @@ -0,0 +1,12 @@ +#include +#include + +int main(void) +{ + dclear(C_WHITE); + dtext(1, 1, "Sample fxSDK add-in.", C_BLACK, C_NONE); + dupdate(); + + getkey(); + return 1; +}