From 635888d71f08ece88e3ca08e890f97ad651d5049 Mon Sep 17 00:00:00 2001 From: KikooDX Date: Tue, 11 Feb 2020 11:44:37 +0100 Subject: [PATCH] First commit --- Makefile | 194 ++++++++++ assets-cg/icon-cg-sel.png | Bin 0 -> 8388 bytes assets-cg/icon-cg-uns.png | Bin 0 -> 4629 bytes assets-cg/img/ground.png | Bin 0 -> 99 bytes assets-cg/img/player.png | Bin 0 -> 171 bytes assets-fx/icon-fx.png | Bin 0 -> 7429 bytes build-cg/assets/img/ground.png.o | Bin 0 -> 936 bytes build-cg/assets/img/player.png.o | Bin 0 -> 1576 bytes build-cg/map | 612 +++++++++++++++++++++++++++++++ build-cg/platform.bin | Bin 0 -> 19588 bytes build-cg/src/collide.c.d | 1 + build-cg/src/collide.c.o | Bin 0 -> 792 bytes build-cg/src/draw.c.d | 1 + build-cg/src/draw.c.o | Bin 0 -> 1024 bytes build-cg/src/levels.c.d | 3 + build-cg/src/levels.c.o | Bin 0 -> 584 bytes build-cg/src/main.c.d | 7 + build-cg/src/main.c.o | Bin 0 -> 1380 bytes build.sh | 4 + levels.lua | 29 ++ platform.g3a | Bin 0 -> 48264 bytes project.cfg | 84 +++++ src/collide.c | 14 + src/collide.h | 1 + src/draw.c | 44 +++ src/draw.h | 2 + src/levels.c | 9 + src/levels.h | 1 + src/main.c | 61 +++ transfer.sh | 3 + 30 files changed, 1070 insertions(+) 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-cg/img/ground.png create mode 100644 assets-cg/img/player.png create mode 100644 assets-fx/icon-fx.png create mode 100644 build-cg/assets/img/ground.png.o create mode 100644 build-cg/assets/img/player.png.o create mode 100644 build-cg/map create mode 100755 build-cg/platform.bin create mode 100644 build-cg/src/collide.c.d create mode 100644 build-cg/src/collide.c.o create mode 100644 build-cg/src/draw.c.d create mode 100644 build-cg/src/draw.c.o create mode 100644 build-cg/src/levels.c.d create mode 100644 build-cg/src/levels.c.o create mode 100644 build-cg/src/main.c.d create mode 100644 build-cg/src/main.c.o create mode 100755 build.sh create mode 100644 levels.lua create mode 100644 platform.g3a create mode 100644 project.cfg create mode 100644 src/collide.c create mode 100644 src/collide.h create mode 100644 src/draw.c create mode 100644 src/draw.h create mode 100644 src/levels.c create mode 100644 src/levels.h create mode 100644 src/main.c create mode 100755 transfer.sh diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..94fd233 --- /dev/null +++ b/Makefile @@ -0,0 +1,194 @@ +#! /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 +CFLAGSFX := $(CFLAGS) $(CFLAGS_FX) $(INCLUDE) +CFLAGSCG := $(CFLAGS) $(CFLAGS_CG) $(INCLUDE) + +# Linker flags +LDFLAGSFX := $(LDFLAGS) $(LDFLAGS_FX) +LDFLAGSCG := $(LDFLAGS) $(LDFLAGS_CG) + +# Dependency list generation flags +depflags = -MMD -MT $@ -MF $(@:.o=.d) -MP +# ELF to binary flags +BINFLAGS := -R .bss -R .gint_bss + +# G1A and G3A generation flags +NAME_G1A ?= $(NAME) +NAME_G3A ?= $(NAME) +G1AF := -i "$(ICON_FX)" -n "$(NAME_G1A)" --internal="$(INTERNAL)" +G3AF := -n basic:"$(NAME_G3A)" -i uns:"$(ICON_CG_UNS)" -i sel:"$(ICON_CG_SEL)" + +ifeq "$(TOOLCHAIN_FX)" "" +TOOLCHAIN_FX := sh3eb-elf +endif + +ifeq "$(TOOLCHAIN_CG)" "" +TOOLCHAIN_CG := sh4eb-elf +endif + +# fxconv flags +FXCONVFX := --fx --toolchain=$(TOOLCHAIN_FX) +FXCONVCG := --cg --toolchain=$(TOOLCHAIN_CG) + +# +# File listings +# + +NULL := +TARGET := $(subst $(NULL) $(NULL),-,$(NAME)) + +ifeq "$(TARGET_FX)" "" +TARGET_FX := $(TARGET).g1a +endif + +ifeq "$(TARGET_CG)" "" +TARGET_CG := $(TARGET).g3a +endif + +ELF_FX := build-fx/$(shell basename -s .g1a $(TARGET_FX)).elf +BIN_FX := $(ELF_FX:.elf=.bin) + +ELF_CG := build-cg/$(shell basename -s .g3a $(TARGET_CG)).elf +BIN_CG := $(ELF_CG:.elf=.bin) + +# Source files +src := $(wildcard src/*.[csS] \ + src/*/*.[csS] \ + src/*/*/*.[csS] \ + src/*/*/*/*.[csS]) +assets-fx := $(wildcard assets-fx/*/*) +assets-cg := $(wildcard assets-cg/*/*) + +# Object files +obj-fx := $(src:%=build-fx/%.o) \ + $(assets-fx:assets-fx/%=build-fx/assets/%.o) +obj-cg := $(src:%=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) + @ mkdir -p $(dir $@) + $(TOOLCHAIN_FX)-gcc -o $(ELF_FX) $(obj-fx) $(CFLAGSFX) $(LDFLAGSFX) + $(TOOLCHAIN_FX)-objcopy -O binary $(BINFLAGS) $(ELF_FX) $(BIN_FX) + fxg1a $(BIN_FX) -o $@ $(G1AF) + +$(TARGET_CG): $(obj-cg) $(deps-cg) + @ mkdir -p $(dir $@) + $(TOOLCHAIN_CG)-gcc -o $(ELF_CG) $(obj-cg) $(CFLAGSCG) $(LDFLAGSCG) + $(TOOLCHAIN_CG)-objcopy -O binary $(BINFLAGS) $(ELF_CG) $(BIN_CG) + mkg3a $(G3AF) $(BIN_CG) $@ + +# C sources +build-fx/%.c.o: %.c + @ mkdir -p $(dir $@) + $(TOOLCHAIN_FX)-gcc -c $< -o $@ $(CFLAGSFX) $(depflags) +build-cg/%.c.o: %.c + @ mkdir -p $(dir $@) + $(TOOLCHAIN_CG)-gcc -c $< -o $@ $(CFLAGSCG) $(depflags) + +# Assembler sources +build-fx/%.s.o: %.s + @ mkdir -p $(dir $@) + $(TOOLCHAIN_FX)-gcc -c $< -o $@ +build-cg/%.s.o: %.s + @ mkdir -p $(dir $@) + $(TOOLCHAIN_CG)-gcc -c $< -o $@ + +# Preprocessed assembler sources +build-fx/%.S.o: %.S + @ mkdir -p $(dir $@) + $(TOOLCHAIN_FX)-gcc -c $< -o $@ $(INCLUDE) +build-cg/%.S.o: %.S + @ mkdir -p $(dir $@) + $(TOOLCHAIN_CG)-gcc -c $< -o $@ $(INCLUDE) + +# Images +build-fx/assets/img/%.o: assets-fx/img/% + @ mkdir -p $(dir $@) + fxconv -i $< -o $@ $(FXCONVFX) name:img_$(basename $*) $(IMG.$*) +build-cg/assets/img/%.o: assets-cg/img/% + @ mkdir -p $(dir $@) + fxconv -i $< -o $@ $(FXCONVCG) name:img_$(basename $*) $(IMG.$*) + +# Fonts +build-fx/assets/fonts/%.o: assets-fx/fonts/% + @ mkdir -p $(dir $@) + fxconv -f $< -o $@ $(FXCONVFX) name:font_$(basename $*) $(FONT.$*) +build-cg/assets/fonts/%.o: assets-cg/fonts/% + @ mkdir -p $(dir $@) + fxconv -f $< -o $@ $(FXCONVCG) name:font_$(basename $*) $(FONT.$*) + +# Binaries +build-fx/assets/bin/%.o: assets-fx/bin/% + @ mkdir -p $(dir $@) + fxconv -b $< -o $@ $(FXCONVFX) name:bin_$(basename $*) $(BIN.$*) +build-cg/assets/bin/%.o: assets-cg/bin/% + @ mkdir -p $(dir $@) + fxconv -b $< -o $@ $(FXCONVCG) name:bin_$(basename $*) $(BIN.$*) + +# +# 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-fx: + @ rm -rf build-fx/ +clean-cg: + @ rm -rf build-cg/ + +distclean-fx: clean-fx + @ rm -f $(TARGET_FX) +distclean-cg: clean-cg + @ rm -f $(TARGET_CG) + +clean: clean-fx clean-cg + +distclean: distclean-fx distclean-cg + +install-fx: $(TARGET_FX) + p7 send -f $< +install-cg: $(TARGET_CG) + @ while [[ ! -h /dev/Prizm1 ]]; do sleep 0.25; done + @ while ! mount /dev/Prizm1; do sleep 0.25; done + @ 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-cg/img/ground.png b/assets-cg/img/ground.png new file mode 100644 index 0000000000000000000000000000000000000000..cabab6f4c939516ec7a0aa0f4bf0384664846bde GIT binary patch literal 99 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|WIbIRLo9le vbM$6^p5MrHz@_t9AhR21ACWEsDrE3<^>bP0l+XkKSVtO3 literal 0 HcmV?d00001 diff --git a/assets-cg/img/player.png b/assets-cg/img/player.png new file mode 100644 index 0000000000000000000000000000000000000000..dd8ed35412c896ad52e9e06ac20d6ee600f1d96a GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|QaxQ9Lp(Z@ z|NQ^R$}I9HeSuy=N&*lp+O$xjp|$asUVGzz9-fjoF4a!r*>pAdh?ZZmyurW! zKbTbcJW4IC9KLg&tu@FxxPo=D7!NzQ!6_vPiCs%Iw=%|NnYd|GXKd4A2wWoFZyEaU QB+x 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 literal 0 HcmV?d00001 diff --git a/build-cg/src/collide.c.d b/build-cg/src/collide.c.d new file mode 100644 index 0000000..3b02144 --- /dev/null +++ b/build-cg/src/collide.c.d @@ -0,0 +1 @@ +build-cg/src/collide.c.o: src/collide.c diff --git a/build-cg/src/collide.c.o b/build-cg/src/collide.c.o new file mode 100644 index 0000000000000000000000000000000000000000..d75da40d636a11e9d0ea1640e4aeaa627d15695f GIT binary patch literal 792 zcma)3O)mps5T18ywe;fS!gA0ERcZDEP1ul-hF-))M1n*=qh(i{b`xB@PfG-VIYOV+=wN zR8H-na{2P1T)%>zQf|~veOYG# z@x{7$3z8@aPuT0VnI-BewX?b1<#*W3ogmsQol^(dmR1pBrjs5voIPjPDLD`>I*>{x z^`WuU%35q_MxKz>mK;9N(xeSO-+grm{Ll+17k>4z^lg~5VHWl(_dRqzS2m1Nz98pd z+k@K&C94P^*N#jplf`INo3Y4|RXDUj&S$I)$k|#A+YW1I?HXop7;(dk=45KT(P#YmfxOSh;L0E zE4!~xcc&_yrc&;-m-pn`N6(ZKcymgtHhkN+{B{4aU-xN!mRP&O4~$N( zxD?N7hd=b+jy#jD95}JVZ?kDUiIBy7em<31TzYgpbw|CW&I$jpjqW4{e@+KO7l!T& z06BhrK@#h;UhpDvCG@Q(g8HP$84JL*b3Aj7Q=6-(&%^q=Lvh2=x78|?$d)!Oy~!OS zyy`)zZrA#*x~~-+(VbBp)l=SO)aj6iGn7O76CRC2RAYDcL o0d)kGdZa$aQ0d)OB15^h7J;>Y+2KgBP=H|Nc9 z*uW$&GjHbY%GU1ypE?-(MAPjT%(G~Xf$lKCoj|c*1&X4CvR{R z0h0xgOT`TS6Rky$oqv|+eKpL2;Zy=QwEr16T4_e?^b{QT_b0| z9L#IvBA8i{z|246*nYUfm~)~VisWCHnOH6(yQ%3vZkZ6B{-dvg%G$qJP_p6f^b>HMY715`9}JxyFx_;jvj0^nbD9UPa9Tx(3VIOF&M_3XS+JPF1xdC1fId_Lb_?|t8ol^bI> zIi7=taL|j`V+g!P9)iJILZ#S!9f4Bs*NaiH4BNeP zHn9tBdBL!+iI%i|p$yYiV$UGUOGS=sP1$#=W1{hFT!hwA=X5nH&e%KhM*k>sStu7q z#i3X8FJ<8=pMH~m{(vi;-49MwzxPktbG8~TNKtXHA`9#M?dm|KBfQ;CY{SmC;9Sk4 zV%fsHPh@KkR;*Ze+DSR4v*64-^={x1wAOavs9|Jycu0uPT?6{(r|e_P7cD z{PKnb4(&exa{LYiNz(zVIgj~x3v$7=4TkIW+F6WL2j^X0K|js!^7&OCzvAOjA0PAa zDIcFb#8Y}Qt;9i_&!;k)MRFEs3#4c)E~P=EKG2M;zNBSLy-2c1;wI7QKc6vli@08s z6o?7hePU@Y%q*G|rLkNbVbUPAS@8%2w%;EBf((BI5E(83v@!e{;5frO04EsU1vts@ zo~LFRKw|bE04;T_#aKLNb5b9&fH>|+nyqtub kzH9nsXg$VR4`||-aacfQLTgb8p?cy1_mGcMhby(Xzf%anpa1{> literal 0 HcmV?d00001 diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..e18c47e --- /dev/null +++ b/build.sh @@ -0,0 +1,4 @@ +#/bin/#!/usr/bin/env bash +rm src/levels.c +lua5.3 levels.lua >> src/levels.c +fxsdk build-cg diff --git a/levels.lua b/levels.lua new file mode 100644 index 0000000..1654b51 --- /dev/null +++ b/levels.lua @@ -0,0 +1,29 @@ +levels = {[[ +0000000000 +0........0 +0........0 +0........0 +0........0 +0........0 +0........0 +0s.......0 +0........0 +0000000000 +]] +} + +to_write = "" + +--remove all "\n" from level strings +for i, v in ipairs(levels) do + v = string.gsub(v, "\n", "") + to_write = to_write.." case "..(i-1)..":\n level = \""..v.."\";\n break;" +end + +--finish and write +to_write = [[#include "levels.h" +void get_level(unsigned char level_id, char level[]) { + switch (level_id) + { +]]..to_write.."\n }\n}\n" +io.write(to_write) diff --git a/platform.g3a b/platform.g3a new file mode 100644 index 0000000000000000000000000000000000000000..3e42ba4664c87b1a13efd60aadd4c2378e753018 GIT binary patch literal 48264 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 D+Ol{n literal 0 HcmV?d00001 diff --git a/project.cfg b/project.cfg new file mode 100644 index 0000000..4090d80 --- /dev/null +++ b/project.cfg @@ -0,0 +1,84 @@ +#--- +# fxSDK project configuration file for platform +#--- + +# Project name, should be at most 8 bytes long. +# (You can also specify NAME_G1A or NAME_G3A to override individually.) +NAME := platform + +# Internal name, should be '@' followed by at most 7 uppercase letters. +# WARNING: If this convention is not followed, the add-in might not appear in +# the main menu of the calculator! +INTERNAL := @PLATFRM + +# Output file name. The default is to take , replace spaces with dashes, +# and add .g1a (or .g3a). You can specify a different folder if you want. +TARGET_FX := +TARGET_CG := + +# 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 + +#--- +# Toolchain selection +#--- + +# Toolchain for fx9860g. Please see also CFLAGS_FX below. +TOOLCHAIN_FX := sh3eb-elf + +# Toolchain for fxcg50. Please see also CFLAGS_CG below. +TOOLCHAIN_CG := sh-elf + +#--- +# Compiler flags +#--- + +# Base compiler flags for the fxSDK, you usually want to keep these. +CFLAGS := -mb -ffreestanding -nostdlib -fstrict-volatile-bitfields + +# Platform-specific compiler flags. +# <> If you are using sh3eb-elf, use -m3. (You can do this on both FX and CG.) +# <> If you are using sh4eb-elf, use -m4-nofpu. (Not ideal on FX but works.) +# <> If you are using sh4eb-nofpu-elf, then your compiler will likely use the +# FPU and cause problems on the calculator. Consider another configuration. +# <> If you are using an sh-elf with several targets, specify whichever you +# support. I recommend -m3 on FX and -m4-nofpu on CG. +# Please see also TOOLCHAIN_FX and TOOLCHAIN_CG above. +CFLAGS_FX := -D FX9860G -m3 +CFLAGS_CG := -D FXCG50 -m4-nofpu + +# Additional compiler flags, change to your own taste! +CFLAGS += -Wall -Wextra -Os + +# Include paths. Add one -I option for each folder from which you want to +# be able to include files with #include<>. +INCLUDE := -I include + +# Libraries. Add one -l option for each library you are using, and also +# suitable -L options if you have library files in custom folders. To use +# fxlib, add libfx.a to the project directory and use "-L . -lfx". +LIBS := + +# Base linker flags for the fxSDK, you usually want to keep these. +LDFLAGS_FX := -T fx9860g.ld -lgint-fx $(LIBS) -lgint-fx -lgcc +LDFLAGS_CG := -T fxcg50.ld -lgint-cg $(LIBS) -lgint-cg -lgcc + +# Additional linker flags, if you need any. +LDFLAGS := + +# Additional platform-specific linker flags. +LDFLAGS_FX += -Wl,-Map=build-fx/map +LDFLAGS_CG += -Wl,-Map=build-cg/map + +#--- +# File conversion parameters +#--- + +# Here you can add fxconv options for each converted file, individually. +# The syntax is ".". For example, to specify the parameters for a +# font name "hexa.png", you might write: +# +# FONT.hexa.png = charset:print grid:size:3x5 grid.padding:1 diff --git a/src/collide.c b/src/collide.c new file mode 100644 index 0000000..cd93261 --- /dev/null +++ b/src/collide.c @@ -0,0 +1,14 @@ +#define PLAYER_SIDES 11 + +char collide_with(int x, int y, char level[], char tile, unsigned int level_width) +{ + if ((level[(int)(x/8) + (int)(y/8) * level_width] == tile) || + (level[(int)(x/8) + (int)((y+PLAYER_SIDES)/8) * level_width] == tile) || + (level[(int)((x+PLAYER_SIDES)/8) + (int)((y+PLAYER_SIDES)/8) * level_width] == tile) || + (level[(int)((x+PLAYER_SIDES)/8) + (int)(y/8) * level_width] == tile) || + (level[(int)(x/8) + (int)((y+PLAYER_SIDES/2)/8) * level_width] == tile) || + (level[(int)((x+PLAYER_SIDES/2)/8) + (int)(y/8) * level_width] == tile) || + (level[(int)((x+PLAYER_SIDES/2)/8) + (int)((y+PLAYER_SIDES)/8) * level_width] == tile) || + (level[(int)((x+PLAYER_SIDES)/8) + (int)((y+PLAYER_SIDES/2)/8) * level_width] == tile)) return 1; + else return 0; +} diff --git a/src/collide.h b/src/collide.h new file mode 100644 index 0000000..f90f289 --- /dev/null +++ b/src/collide.h @@ -0,0 +1 @@ +char collide(int x, int y, char level[], char tile, unsigned int level_width); diff --git a/src/draw.c b/src/draw.c new file mode 100644 index 0000000..779fc8b --- /dev/null +++ b/src/draw.c @@ -0,0 +1,44 @@ +#include + +#define PLAYER_SIDES 11 +#define BG_COLOR 0 + +extern image_t img_player; //player texture, 24x24 + +void draw_player(int old_x, int old_y, int x, int y) +{ + if (old_x != x || old_y != y) + { + drect(old_x * 2, old_y * 2, (old_x + PLAYER_SIDES) * 2 + 1, + (old_y + PLAYER_SIDES) * 2 + 1, BG_COLOR); + dimage(x * 2, y * 2, &img_player); + } +} + +void draw_level(char level[], int *player_x, int *player_y) +{ + extern image_t img_ground; //ground texture, 16x16 + unsigned int i = 0; + unsigned int x = 0; + unsigned int y = 0; + while (i != 100) + { + switch (level[i]) + { + case '0': + dimage(x * 2, y * 2, &img_ground); + break; + case 's': + *player_x = x + 2; + *player_y = y + 4; + break; + } + x += 8; + if (x == 80) + { + x = 0; + y += 8; + } + i++; + } +} diff --git a/src/draw.h b/src/draw.h new file mode 100644 index 0000000..ba84a11 --- /dev/null +++ b/src/draw.h @@ -0,0 +1,2 @@ +void draw_player(int old_x, int old_y, int x, int y); +void draw_level(char level[], int *player_x, int *player_y); diff --git a/src/levels.c b/src/levels.c new file mode 100644 index 0000000..02694d9 --- /dev/null +++ b/src/levels.c @@ -0,0 +1,9 @@ +#include "levels.h" +void get_level(unsigned char level_id, char level[]) { + switch (level_id) + { + case 0: + level = "00000000000........00........00........00........00........00........00s.......00........00000000000"; + break; + } +} diff --git a/src/levels.h b/src/levels.h new file mode 100644 index 0000000..9c051de --- /dev/null +++ b/src/levels.h @@ -0,0 +1 @@ +void get_level(unsigned char level_id, char level[]); diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..2bec1c8 --- /dev/null +++ b/src/main.c @@ -0,0 +1,61 @@ +#include +#include "draw.h" +#include "collide.h" +#include "levels.h" + +void jump_test(char *jump_pressed, char *jump_buffer); //test if jump pressed + +int main(void) +{ + char level[100]; + char *level_ptr; + level_ptr = level; + unsigned char level_id = 0; + char jump_pressed = 0; //avoid holding jump + char jump_buffer = 0; //jump buffer, last 3 frames + double vspd = 0; //player vertical speed + char hspd = 0; //player horizontal speed + char on_ground = 6; //remember if player is on solid + int player_x = 0; + int player_y = 0; + int old_x, old_y; + const double jump_spd = -4; //default jump speed + const double grav = 0.2; + dclear(0); //0 -> black + draw_level(level, &player_x, &player_y); + old_x = player_x + 1; //offset to draw it on first cycle + old_y = player_y; + get_level(level_id, level); + while (1) { + draw_player(old_x, old_y, player_x, player_y); + dupdate(); + old_x = player_x; + old_y = player_y; + pollevent(); + //horizontal movement + hspd = 0; + if (keydown(KEY_LEFT)) hspd--; + if (keydown(KEY_RIGHT)) hspd++; + if (!collide(player_x + hspd, player_y, level, '0', 10)) + { + player_x += hspd; + } + //vertical movement + jump_test(&jump_pressed, &jump_buffer); + if (jump_buffer) {}//if jump is pressed + if (keydown(KEY_EXIT)) return 0; //exit + } +} + +void jump_test(char *jump_pressed, char *jump_buffer) +{ + if (keydown(KEY_SHIFT)) + { + if (!*jump_pressed) + { + *jump_pressed = 1; + *jump_buffer = 3; + } + } + else *jump_pressed = 0; +} diff --git a/transfer.sh b/transfer.sh new file mode 100755 index 0000000..515c56d --- /dev/null +++ b/transfer.sh @@ -0,0 +1,3 @@ +#/bin/#!/usr/bin/env bash +cp platform.g3a /media/user/disk/ +umount /media/user/disk/