From 3ea8481a271257a2ed5538db5f5c5677111a791a Mon Sep 17 00:00:00 2001 From: Trevor Boddy Date: Thu, 17 Jun 2021 17:59:18 -0400 Subject: [PATCH] here you go --- .gitignore | 13 + Makefile | 145 ++++++++ README.md | 7 + boot/rom_head.c | 43 +++ boot/sega.s | 462 +++++++++++++++++++++++++ build.sh | 3 + compile.sh | 2 + itchcover.png | Bin 0 -> 10667 bytes itchcover.psd | Bin 0 -> 220236 bytes res/bg/ground1.png | Bin 0 -> 2861 bytes res/bg/ground2.png | Bin 0 -> 2408 bytes res/bg/ground3.png | Bin 0 -> 2871 bytes res/bg/ground4.png | Bin 0 -> 2409 bytes res/bg/ground5.png | Bin 0 -> 2869 bytes res/bg/ground6.png | Bin 0 -> 2408 bytes res/bg/ground7.png | Bin 0 -> 2958 bytes res/bg/ground8.png | Bin 0 -> 2510 bytes res/bgm/stage1.vgm | Bin 0 -> 54114 bytes res/bgm/stage2.vgm | Bin 0 -> 55170 bytes res/bgm/start.vgm | Bin 0 -> 4110 bytes res/bullets/bigblue.png | Bin 0 -> 3073 bytes res/bullets/biggreen.png | Bin 0 -> 3067 bytes res/bullets/bigpink.png | Bin 0 -> 2638 bytes res/bullets/bigred.png | Bin 0 -> 3075 bytes res/bullets/bigyellow.png | Bin 0 -> 3070 bytes res/bullets/smallblue.png | Bin 0 -> 2866 bytes res/bullets/smallgreen.png | Bin 0 -> 2865 bytes res/bullets/smallpink.png | Bin 0 -> 2649 bytes res/bullets/smallred.png | Bin 0 -> 2866 bytes res/bullets/smallyellow.png | Bin 0 -> 2869 bytes res/chrome/bossbar.png | Bin 0 -> 2016 bytes res/chrome/easy.png | Bin 0 -> 1930 bytes res/chrome/enemy.png | Bin 0 -> 2247 bytes res/chrome/font.png | Bin 0 -> 3998 bytes res/chrome/frame1.png | Bin 0 -> 1473 bytes res/chrome/frame2.png | Bin 0 -> 1908 bytes res/chrome/frame3.png | Bin 0 -> 1909 bytes res/chrome/frame4.png | Bin 0 -> 1911 bytes res/chrome/frame5.png | Bin 0 -> 1918 bytes res/chrome/girl.png | Bin 0 -> 4071 bytes res/chrome/hard.png | Bin 0 -> 1938 bytes res/chrome/player.png | Bin 0 -> 1539 bytes res/chrome/stage.png | Bin 0 -> 1951 bytes res/enemies/cake.png | Bin 0 -> 1935 bytes res/enemies/gumdropblue.png | Bin 0 -> 2719 bytes res/enemies/gumdropgreen.png | Bin 0 -> 2716 bytes res/enemies/gumdropred.png | Bin 0 -> 2718 bytes res/enemies/gumdropyellow.png | Bin 0 -> 2719 bytes res/enemies/parfait.png | Bin 0 -> 5266 bytes res/enemies/peppermintblue.png | Bin 0 -> 2047 bytes res/enemies/peppermintgreen.png | Bin 0 -> 2022 bytes res/enemies/peppermintred.png | Bin 0 -> 2018 bytes res/enemies/peppermintyellow.png | Bin 0 -> 2039 bytes res/enemies/roll.png | Bin 0 -> 5037 bytes res/enemies/spider.png | Bin 0 -> 2777 bytes res/enemies/waffle.png | Bin 0 -> 5256 bytes res/enemies/yin1.png | Bin 0 -> 2206 bytes res/explosions/player.png | Bin 0 -> 2377 bytes res/full.png | Bin 0 -> 1432 bytes res/half.png | Bin 0 -> 4124 bytes res/least.png | Bin 0 -> 4555 bytes res/player/bullet.png | Bin 0 -> 2303 bytes res/player/player.png | Bin 0 -> 4378 bytes res/player/reimu.png | Bin 0 -> 4065 bytes res/resources.res | 94 +++++ res/sfx/beatgame.wav | Bin 0 -> 23506 bytes res/sfx/bullet1.wav | Bin 0 -> 740 bytes res/sfx/bullet2.wav | Bin 0 -> 1799 bytes res/sfx/bullet3.wav | Bin 0 -> 1487 bytes res/sfx/bullet4.wav | Bin 0 -> 1810 bytes res/sfx/explosion1.wav | Bin 0 -> 4991 bytes res/sfx/explosion2.wav | Bin 0 -> 4303 bytes res/sfx/explosion3.wav | Bin 0 -> 10020 bytes res/sfx/gameover.wav | Bin 0 -> 17927 bytes res/sfx/menuchoose.wav | Bin 0 -> 5741 bytes res/sfx/menuselect.wav | Bin 0 -> 1471 bytes res/sfx/playerhit.wav | Bin 0 -> 9500 bytes res/sfx/playershot.wav | Bin 0 -> 2491 bytes res/sfx/startgame.wav | Bin 0 -> 8068 bytes res/sfx/zoneover.wav | Bin 0 -> 8096 bytes res/start/about.png | Bin 0 -> 5556 bytes res/start/about2.png | Bin 0 -> 5612 bytes res/start/boddy.png | Bin 0 -> 3200 bytes res/start/boddy2.png | Bin 0 -> 3362 bytes res/start/bottom.png | Bin 0 -> 4552 bytes res/start/gradient.png | Bin 0 -> 4773 bytes res/start/logo.png | Bin 0 -> 5163 bytes res/start/logov.png | Bin 0 -> 5560 bytes res/start/top.png | Bin 0 -> 4124 bytes run.sh | 1 + src/background.c | 48 +++ src/background.h | 15 + src/boss.c | 565 +++++++++++++++++++++++++++++++ src/boss.h | 47 +++ src/centipede.c | 195 +++++++++++ src/centipede.h | 43 +++ src/chrome.c | 178 ++++++++++ src/chrome.h | 36 ++ src/controls.c | 16 + src/controls.h | 7 + src/enemies.c | 177 ++++++++++ src/enemies.h | 39 +++ src/explosion.c | 28 ++ src/explosion.h | 15 + src/main.c | 140 ++++++++ src/main.h | 29 ++ src/player.c | 173 ++++++++++ src/player.h | 61 ++++ src/pod.c | 125 +++++++ src/pod.h | 35 ++ src/start.c | 245 ++++++++++++++ src/start.h | 48 +++ src/yin.c | 132 ++++++++ src/yin.h | 23 ++ start.dmf | Bin 0 -> 437 bytes track1.dmf | Bin 0 -> 2547 bytes track2.dmf | Bin 0 -> 2838 bytes 117 files changed, 3190 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 README.md create mode 100644 boot/rom_head.c create mode 100644 boot/sega.s create mode 100755 build.sh create mode 100755 compile.sh create mode 100644 itchcover.png create mode 100644 itchcover.psd create mode 100644 res/bg/ground1.png create mode 100644 res/bg/ground2.png create mode 100644 res/bg/ground3.png create mode 100644 res/bg/ground4.png create mode 100644 res/bg/ground5.png create mode 100644 res/bg/ground6.png create mode 100644 res/bg/ground7.png create mode 100644 res/bg/ground8.png create mode 100644 res/bgm/stage1.vgm create mode 100644 res/bgm/stage2.vgm create mode 100644 res/bgm/start.vgm create mode 100644 res/bullets/bigblue.png create mode 100644 res/bullets/biggreen.png create mode 100644 res/bullets/bigpink.png create mode 100644 res/bullets/bigred.png create mode 100644 res/bullets/bigyellow.png create mode 100644 res/bullets/smallblue.png create mode 100644 res/bullets/smallgreen.png create mode 100644 res/bullets/smallpink.png create mode 100644 res/bullets/smallred.png create mode 100644 res/bullets/smallyellow.png create mode 100644 res/chrome/bossbar.png create mode 100644 res/chrome/easy.png create mode 100644 res/chrome/enemy.png create mode 100644 res/chrome/font.png create mode 100644 res/chrome/frame1.png create mode 100644 res/chrome/frame2.png create mode 100644 res/chrome/frame3.png create mode 100644 res/chrome/frame4.png create mode 100644 res/chrome/frame5.png create mode 100644 res/chrome/girl.png create mode 100644 res/chrome/hard.png create mode 100644 res/chrome/player.png create mode 100644 res/chrome/stage.png create mode 100644 res/enemies/cake.png create mode 100644 res/enemies/gumdropblue.png create mode 100644 res/enemies/gumdropgreen.png create mode 100644 res/enemies/gumdropred.png create mode 100644 res/enemies/gumdropyellow.png create mode 100644 res/enemies/parfait.png create mode 100644 res/enemies/peppermintblue.png create mode 100644 res/enemies/peppermintgreen.png create mode 100644 res/enemies/peppermintred.png create mode 100644 res/enemies/peppermintyellow.png create mode 100644 res/enemies/roll.png create mode 100644 res/enemies/spider.png create mode 100644 res/enemies/waffle.png create mode 100644 res/enemies/yin1.png create mode 100644 res/explosions/player.png create mode 100644 res/full.png create mode 100644 res/half.png create mode 100644 res/least.png create mode 100644 res/player/bullet.png create mode 100644 res/player/player.png create mode 100644 res/player/reimu.png create mode 100644 res/resources.res create mode 100644 res/sfx/beatgame.wav create mode 100644 res/sfx/bullet1.wav create mode 100644 res/sfx/bullet2.wav create mode 100644 res/sfx/bullet3.wav create mode 100644 res/sfx/bullet4.wav create mode 100644 res/sfx/explosion1.wav create mode 100644 res/sfx/explosion2.wav create mode 100644 res/sfx/explosion3.wav create mode 100644 res/sfx/gameover.wav create mode 100644 res/sfx/menuchoose.wav create mode 100644 res/sfx/menuselect.wav create mode 100644 res/sfx/playerhit.wav create mode 100644 res/sfx/playershot.wav create mode 100644 res/sfx/startgame.wav create mode 100644 res/sfx/zoneover.wav create mode 100644 res/start/about.png create mode 100644 res/start/about2.png create mode 100644 res/start/boddy.png create mode 100644 res/start/boddy2.png create mode 100644 res/start/bottom.png create mode 100644 res/start/gradient.png create mode 100644 res/start/logo.png create mode 100644 res/start/logov.png create mode 100644 res/start/top.png create mode 100755 run.sh create mode 100644 src/background.c create mode 100644 src/background.h create mode 100644 src/boss.c create mode 100644 src/boss.h create mode 100644 src/centipede.c create mode 100644 src/centipede.h create mode 100644 src/chrome.c create mode 100644 src/chrome.h create mode 100644 src/controls.c create mode 100644 src/controls.h create mode 100644 src/enemies.c create mode 100644 src/enemies.h create mode 100644 src/explosion.c create mode 100644 src/explosion.h create mode 100644 src/main.c create mode 100644 src/main.h create mode 100644 src/player.c create mode 100644 src/player.h create mode 100644 src/pod.c create mode 100644 src/pod.h create mode 100644 src/start.c create mode 100644 src/start.h create mode 100644 src/yin.c create mode 100644 src/yin.h create mode 100644 start.dmf create mode 100644 track1.dmf create mode 100644 track2.dmf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea4259c --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +.DS_Store +**/.DS_Store +Thumbs.db +**/Thumbs.db +out.bin +out.elf +symbol.txt +blastem/ +boot/rom_head.bin +boot/sega.o +res/resources.o +res/resources.h +dist/ \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f9f0227 --- /dev/null +++ b/Makefile @@ -0,0 +1,145 @@ +# Sample Makefile for Marsdev (SGDK version) + +# Default paths, can be overridden by setting MARSDEV before calling make +MARSDEV ?= ${HOME}/mars +MARSBIN = $(MARSDEV)/m68k-elf/bin +TOOLSBIN = $(MARSDEV)/bin + +# GCC and Binutils +CC = $(MARSBIN)/m68k-elf-gcc +CXX = $(MARSBIN)/m68k-elf-g++ +AS = $(MARSBIN)/m68k-elf-as +LD = $(MARSBIN)/m68k-elf-ld +NM = $(MARSBIN)/m68k-elf-nm +OBJC = $(MARSBIN)/m68k-elf-objcopy +# SGDK Tools +BINTOS = $(TOOLSBIN)/bintos +PCMTORAW = $(TOOLSBIN)/pcmtoraw +RESCOMP = $(TOOLSBIN)/rescomp +WAVTORAW = $(TOOLSBIN)/wavtoraw +XGMTOOL = $(TOOLSBIN)/xgmtool +# Use rescomp jar for SGDK > 1.33 +ifneq ("$(wildcard $(TOOLSBIN)/rescomp.jar)","") + RESCOMP = java -jar $(TOOLSBIN)/rescomp.jar + WAVTORAW = @echo "wavtoraw no longer available!" ## + PCMTORAW = @echo "pcmtoraw no longer available!" ## +endif + +# Some files needed are in a versioned directory +GCC_VER := $(shell $(CC) -dumpversion) + +# Need the LTO plugin so NM can dump our symbol table +PLUGIN = $(MARSDEV)/m68k-elf/libexec/gcc/m68k-elf/$(GCC_VER) +LTO_SO = liblto_plugin.so +ifeq ($(OS),Windows_NT) + LTO_SO = liblto_plugin-0.dll +endif + +# Includes: Local + GCC + SGDK + Newlib +INCS = -Isrc -Ires -Iinc +INCS += -I$(MARSDEV)/m68k-elf/lib/gcc/m68k-elf/$(GCC_VER)/include +INCS += -I$(MARSDEV)/m68k-elf/include +INCS += -I$(MARSDEV)/m68k-elf/m68k-elf/include + +# Libraries: GCC + Newlib (SGDK libs are with release/debug targets) +# If you plan on using Newlib, uncomment the line with -lnosys +LIBS = -L$(MARSDEV)/m68k-elf/lib/gcc/m68k-elf/$(GCC_VER) -lgcc +#LIBS += -L$(MARSDEV)/m68k-elf/m68k-elf/lib -lnosys + +# Force libgcc math routines to be available at link time +LIBS += -u __modsi3 -u __divsi3 -u __mulsi3 -u __umodsi3 -u __udivsi3 -u __umulsi3 + +# Any C or C++ standard should be fine here as long as GCC support it +CCFLAGS = -m68000 -Wall -Wextra -std=c99 -ffreestanding -fcommon +CXXFLAGS = -m68000 -Wall -Wextra -std=c++17 -ffreestanding + +# Extra options set by debug or release target +OPTIONS = +ASFLAGS = -m68000 --register-prefix-optional +LDFLAGS = -T $(MARSDEV)/ldscripts/sgdk.ld -nostdlib -fcommon + +RESS = $(wildcard res/*.res) +CS = $(wildcard src/*.c) +CPPS = $(wildcard src/*.cpp) +SS = $(wildcard src/*.s) + +OBJS = $(RESS:.res=.o) +OBJS += $(CS:.c=.o) +OBJS += $(CPPS:.cpp=.o) +OBJS += $(SS:.s=.o) + +ASMO = $(RESS:.res=.o) +ASMO += $(CS:%.c=asmout/%.s) + +.SECONDARY: out.elf + +.PHONY: all release asm debug + +all: release + +release: OPTIONS = -O3 -fno-web -fno-gcse -fno-unit-at-a-time -fomit-frame-pointer +release: OPTIONS += -fshort-enums -flto -fuse-linker-plugin +release: LIBS += -L$(MARSDEV)/m68k-elf/lib -lmd +release: out.bin symbol.txt + +asm: OPTIONS = -O3 -fno-web -fno-gcse -fno-unit-at-a-time -fomit-frame-pointer +asm: OPTIONS += -fshort-enums +asm: LIBS += -L$(MARSDEV)/m68k-elf/lib -lmd +asm: asm-dir $(ASMO) + +# Gens-KMod, BlastEm and UMDK support GDB tracing, enabled by this target +debug: OPTIONS = -g -Og -DDEBUG -DKDEBUG -fno-web -fno-gcse -fno-unit-at-a-time -fshort-enums +debug: LIBS += -L$(MARSDEV)/m68k-elf/lib -lmd-debug +debug: out.bin symbol.txt + +# This generates a symbol table that is very helpful in debugging crashes, +# even with an optimized release build! +# Cross reference symbol.txt with the addresses displayed in the crash handler +symbol.txt: out.bin + $(NM) --plugin=$(PLUGIN)/$(LTO_SO) -n out.elf > symbol.txt + +boot/sega.o: boot/rom_head.bin + @echo "AS $<" + @$(AS) $(ASFLAGS) boot/sega.s -o $@ + +boot/rom_head.bin: boot/rom_head.c + @echo "CC $<" + @$(CC) $(CFLAGS) $(INCS) -nostdlib -Wl,--oformat=binary $< -o $@ + +%.bin: %.elf + @echo "Stripping ELF header..." + @$(OBJC) -O binary $< temp.bin + @dd if=temp.bin of=$@ bs=8192 conv=sync + @rm -f temp.bin + +%.elf: boot/sega.o $(OBJS) + $(CC) -o $@ $(LDFLAGS) boot/sega.o $(OBJS) $(LIBS) + +%.o: %.c + @echo "CC $<" + @$(CC) $(CCFLAGS) $(OPTIONS) $(INCS) -c $< -o $@ + +%.o: %.cpp + @echo "CXX $<" + @$(CXX) $(CXXFLAGS) $(OPTIONS) $(INCS) -c $< -o $@ + +%.o: %.s + @echo "AS $<" + @$(AS) $(ASFLAGS) $< -o $@ + +%.s: %.res + $(RESCOMP) $< $@ + +# For asm target +asm-dir: + mkdir -p asmout/src + +asmout/%.s: %.c + $(CC) $(CCFLAGS) $(OPTIONS) $(INCS) -S $< -o $@ + +.PHONY: clean + +clean: + rm -f $(OBJS) out.bin out.elf symbol.txt + rm -f boot/sega.o boot/rom_head.o boot/rom_head.bin + rm -rf asmout diff --git a/README.md b/README.md new file mode 100644 index 0000000..c4283d6 --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +**sweetsdigger** + +touhou pride jam 3 entry\ +arcade thing for sega genesis influenced by jeff minter's gridrunner and ZUN's highly responsive to prayers + +written with [sgdk](https://github.com/Stephane-D/SGDK)\ +builds with [marsdev](https://github.com/andwn/marsdev) on mac and linux diff --git a/boot/rom_head.c b/boot/rom_head.c new file mode 100644 index 0000000..5c3c47f --- /dev/null +++ b/boot/rom_head.c @@ -0,0 +1,43 @@ +#include "types.h" + +__attribute__((externally_visible)) +const struct +{ + char console[16]; /* Console Name (16) */ + char copyright[16]; /* Copyright Information (16) */ + char title_local[48]; /* Domestic Name (48) */ + char title_int[48]; /* Overseas Name (48) */ + char serial[14]; /* Serial Number (2, 12) */ + u16 checksum; /* Checksum (2) */ + char IOSupport[16]; /* I/O Support (16) */ + u32 rom_start; /* ROM Start Address (4) */ + u32 rom_end; /* ROM End Address (4) */ + u32 ram_start; /* Start of Backup RAM (4) */ + u32 ram_end; /* End of Backup RAM (4) */ + char sram_sig[2]; /* "RA" for save ram (2) */ + u16 sram_type; /* 0xF820 for save ram on odd bytes (2) */ + u32 sram_start; /* SRAM start address - normally 0x200001 (4) */ + u32 sram_end; /* SRAM end address - start + 2*sram_size (4) */ + char modem_support[12]; /* Modem Support (24) */ + char notes[40]; /* Memo (40) */ + char region[16]; /* Country Support (16) */ +} rom_header = { + "SEGA MEGA DRIVE ", + "TBODDY ", + "SWEETSDIGGER ", + "SWEETSDIGGER ", + "GM 00000000-00", + 0x0000, + "JD ", + 0x00000000, + 0x00100000, + 0x00FF0000, + 0x00FFFFFF, + " ", + 0x0000, + 0x00200000, + 0x002001FF, + " ", + "SWEETSDIGGER ", + "JUE " +}; diff --git a/boot/sega.s b/boot/sega.s new file mode 100644 index 0000000..56302b8 --- /dev/null +++ b/boot/sega.s @@ -0,0 +1,462 @@ +.section .text.keepboot + +*------------------------------------------------------- +* +* Sega startup code for the GNU Assembler +* Translated from: +* Sega startup code for the Sozobon C compiler +* Written by Paul W. Lee +* Modified by Charles Coty +* Modified by Stephane Dallongeville +* +*------------------------------------------------------- + + .globl _hard_reset + + .org 0x00000000 + +_Start_Of_Rom: +_Vecteurs_68K: + dc.l 0x00000000 /* Stack address */ + dc.l _Entry_Point /* Program start address */ + dc.l _Bus_Error + dc.l _Address_Error + dc.l _Illegal_Instruction + dc.l _Zero_Divide + dc.l _Chk_Instruction + dc.l _Trapv_Instruction + dc.l _Privilege_Violation + dc.l _Trace + dc.l _Line_1010_Emulation + dc.l _Line_1111_Emulation + dc.l _Error_Exception, _Error_Exception, _Error_Exception, _Error_Exception + dc.l _Error_Exception, _Error_Exception, _Error_Exception, _Error_Exception + dc.l _Error_Exception, _Error_Exception, _Error_Exception, _Error_Exception + dc.l _Error_Exception, _INT, _EXTINT, _INT + dc.l _HINT + dc.l _INT + dc.l _VINT + dc.l _INT + dc.l _INT,_INT,_INT,_INT,_INT,_INT,_INT,_INT + dc.l _INT,_INT,_INT,_INT,_INT,_INT,_INT,_INT + dc.l _INT,_INT,_INT,_INT,_INT,_INT,_INT,_INT + dc.l _INT,_INT,_INT,_INT,_INT,_INT,_INT,_INT + + .incbin "boot/rom_head.bin" + +_Entry_Point: + move #0x2700,%sr + tst.l 0xa10008 + bne.s SkipJoyDetect + + tst.w 0xa1000c + +SkipJoyDetect: + bne.s SkipSetup + + lea Table,%a5 + movem.w (%a5)+,%d5-%d7 + movem.l (%a5)+,%a0-%a4 +* Check Version Number + move.b -0x10ff(%a1),%d0 + andi.b #0x0f,%d0 + beq.s WrongVersion + +* Sega Security Code (SEGA) + move.l #0x53454741,0x2f00(%a1) +WrongVersion: + move.w (%a4),%d0 + moveq #0x00,%d0 + movea.l %d0,%a6 + move %a6,%usp + move.w %d7,(%a1) + move.w %d7,(%a2) + +* Jump to initialisation process now... + + jmp _start_entry + +SkipSetup: + jmp _reset_entry + + +Table: + dc.w 0x8000,0x3fff,0x0100 + dc.l 0xA00000,0xA11100,0xA11200,0xC00000,0xC00004 + + +*------------------------------------------------ +* +* interrupt functions +* +*------------------------------------------------ + +registersDump: + move.l %d0,registerState+0 + move.l %d1,registerState+4 + move.l %d2,registerState+8 + move.l %d3,registerState+12 + move.l %d4,registerState+16 + move.l %d5,registerState+20 + move.l %d6,registerState+24 + move.l %d7,registerState+28 + move.l %a0,registerState+32 + move.l %a1,registerState+36 + move.l %a2,registerState+40 + move.l %a3,registerState+44 + move.l %a4,registerState+48 + move.l %a5,registerState+52 + move.l %a6,registerState+56 + move.l %a7,registerState+60 + rts + +busAddressErrorDump: + move.w 4(%sp),ext1State + move.l 6(%sp),addrState + move.w 10(%sp),ext2State + move.w 12(%sp),srState + move.l 14(%sp),pcState + jmp registersDump + +exception4WDump: + move.w 4(%sp),srState + move.l 6(%sp),pcState + move.w 10(%sp),ext1State + jmp registersDump + +exceptionDump: + move.w 4(%sp),srState + move.l 6(%sp),pcState + jmp registersDump + + +_Bus_Error: + jsr busAddressErrorDump + movem.l %d0-%d1/%a0-%a1,-(%sp) + move.l busErrorCB, %a0 + jsr (%a0) + movem.l (%sp)+,%d0-%d1/%a0-%a1 + rte + +_Address_Error: + jsr busAddressErrorDump + movem.l %d0-%d1/%a0-%a1,-(%sp) + move.l addressErrorCB, %a0 + jsr (%a0) + movem.l (%sp)+,%d0-%d1/%a0-%a1 + rte + +_Illegal_Instruction: + jsr exception4WDump + movem.l %d0-%d1/%a0-%a1,-(%sp) + move.l illegalInstCB, %a0 + jsr (%a0) + movem.l (%sp)+,%d0-%d1/%a0-%a1 + rte + +_Zero_Divide: + jsr exceptionDump + movem.l %d0-%d1/%a0-%a1,-(%sp) + move.l zeroDivideCB, %a0 + jsr (%a0) + movem.l (%sp)+,%d0-%d1/%a0-%a1 + rte + +_Chk_Instruction: + jsr exception4WDump + movem.l %d0-%d1/%a0-%a1,-(%sp) + move.l chkInstCB, %a0 + jsr (%a0) + movem.l (%sp)+,%d0-%d1/%a0-%a1 + rte + +_Trapv_Instruction: + jsr exception4WDump + movem.l %d0-%d1/%a0-%a1,-(%sp) + move.l trapvInstCB, %a0 + jsr (%a0) + movem.l (%sp)+,%d0-%d1/%a0-%a1 + rte + +_Privilege_Violation: + jsr exceptionDump + movem.l %d0-%d1/%a0-%a1,-(%sp) + move.l privilegeViolationCB, %a0 + jsr (%a0) + movem.l (%sp)+,%d0-%d1/%a0-%a1 + rte + +_Trace: + jsr exceptionDump + movem.l %d0-%d1/%a0-%a1,-(%sp) + move.l traceCB, %a0 + jsr (%a0) + movem.l (%sp)+,%d0-%d1/%a0-%a1 + rte + +_Line_1010_Emulation: +_Line_1111_Emulation: + jsr exceptionDump + movem.l %d0-%d1/%a0-%a1,-(%sp) + move.l line1x1xCB, %a0 + jsr (%a0) + movem.l (%sp)+,%d0-%d1/%a0-%a1 + rte + +_Error_Exception: + jsr exceptionDump + movem.l %d0-%d1/%a0-%a1,-(%sp) + move.l errorExceptionCB, %a0 + jsr (%a0) + movem.l (%sp)+,%d0-%d1/%a0-%a1 + rte + +_INT: + movem.l %d0-%d1/%a0-%a1,-(%sp) + move.l intCB, %a0 + jsr (%a0) + movem.l (%sp)+,%d0-%d1/%a0-%a1 + rte + +_EXTINT: + movem.l %d0-%d1/%a0-%a1,-(%sp) + move.l eintCB, %a0 + jsr (%a0) + movem.l (%sp)+,%d0-%d1/%a0-%a1 + rte + +_HINT: + movem.l %d0-%d1/%a0-%a1,-(%sp) + move.l hintCB, %a0 + jsr (%a0) + movem.l (%sp)+,%d0-%d1/%a0-%a1 + rte + +_VINT: + movem.l %d0-%d1/%a0-%a1,-(%sp) + ori.w #0x0001, intTrace /* in V-Int */ + addq.l #1, vtimer /* increment frame counter (more a vint counter) */ + btst #3, VBlankProcess+1 /* PROCESS_XGM_TASK ? (use VBlankProcess+1 as btst is a byte operation) */ + beq.s _no_xgm_task + + jsr XGM_doVBlankProcess /* do XGM vblank task */ + +_no_xgm_task: + btst #1, VBlankProcess+1 /* PROCESS_BITMAP_TASK ? (use VBlankProcess+1 as btst is a byte operation) */ + beq.s _no_bmp_task + + jsr BMP_doVBlankProcess /* do BMP vblank task */ + +_no_bmp_task: + move.l vintCB, %a0 /* load user callback */ + jsr (%a0) /* call user callback */ + andi.w #0xFFFE, intTrace /* out V-Int */ + movem.l (%sp)+,%d0-%d1/%a0-%a1 + rte + + +*------------------------------------------------ +* +* Copyright (c) 1988 by Sozobon, Limited. Author: Johann Ruegg +* +* Permission is granted to anyone to use this software for any purpose +* on any computer system, and to redistribute it freely, with the +* following restrictions: +* 1) No charge may be made other than reasonable charges for reproduction. +* 2) Modified versions must be clearly marked as such. +* 3) The authors are not responsible for any harmful consequences +* of using this software, even if they result from defects in it. +* +*------------------------------------------------ + +ldiv: + move.l 4(%a7),%d0 + bpl ld1 + neg.l %d0 +ld1: + move.l 8(%a7),%d1 + bpl ld2 + neg.l %d1 + eor.b #0x80,4(%a7) +ld2: + bsr i_ldiv /* d0 = d0/d1 */ + tst.b 4(%a7) + bpl ld3 + neg.l %d0 +ld3: + rts + +lmul: + move.l 4(%a7),%d0 + bpl lm1 + neg.l %d0 +lm1: + move.l 8(%a7),%d1 + bpl lm2 + neg.l %d1 + eor.b #0x80,4(%a7) +lm2: + bsr i_lmul /* d0 = d0*d1 */ + tst.b 4(%a7) + bpl lm3 + neg.l %d0 +lm3: + rts + +lrem: + move.l 4(%a7),%d0 + bpl lr1 + neg.l %d0 +lr1: + move.l 8(%a7),%d1 + bpl lr2 + neg.l %d1 +lr2: + bsr i_ldiv /* d1 = d0%d1 */ + move.l %d1,%d0 + tst.b 4(%a7) + bpl lr3 + neg.l %d0 +lr3: + rts + +ldivu: + move.l 4(%a7),%d0 + move.l 8(%a7),%d1 + bsr i_ldiv + rts + +lmulu: + move.l 4(%a7),%d0 + move.l 8(%a7),%d1 + bsr i_lmul + rts + +lremu: + move.l 4(%a7),%d0 + move.l 8(%a7),%d1 + bsr i_ldiv + move.l %d1,%d0 + rts +* +* A in d0, B in d1, return A*B in d0 +* +i_lmul: + move.l %d3,%a2 /* save d3 */ + move.w %d1,%d2 + mulu %d0,%d2 /* d2 = Al * Bl */ + + move.l %d1,%d3 + swap %d3 + mulu %d0,%d3 /* d3 = Al * Bh */ + + swap %d0 + mulu %d1,%d0 /* d0 = Ah * Bl */ + + add.l %d3,%d0 /* d0 = (Ah*Bl + Al*Bh) */ + swap %d0 + clr.w %d0 /* d0 = (Ah*Bl + Al*Bh) << 16 */ + + add.l %d2,%d0 /* d0 = A*B */ + move.l %a2,%d3 /* restore d3 */ + rts +* +*A in d0, B in d1, return A/B in d0, A%B in d1 +* +i_ldiv: + tst.l %d1 + bne nz1 + +* divide by zero +* divu #0,%d0 /* cause trap */ + move.l #0x80000000,%d0 + move.l %d0,%d1 + rts +nz1: + move.l %d3,%a2 /* save d3 */ + cmp.l %d1,%d0 + bhi norm + beq is1 +* AB and B is not 0 +norm: + cmp.l #1,%d1 + bne not1 +* B==1, so ret A, rem 0 + clr.l %d1 + move.l %a2,%d3 /* restore d3 */ + rts +* check for A short (implies B short also) +not1: + cmp.l #0xffff,%d0 + bhi slow +* A short and B short -- use 'divu' + divu %d1,%d0 /* d0 = REM:ANS */ + swap %d0 /* d0 = ANS:REM */ + clr.l %d1 + move.w %d0,%d1 /* d1 = REM */ + clr.w %d0 + swap %d0 + move.l %a2,%d3 /* restore d3 */ + rts +* check for B short +slow: + cmp.l #0xffff,%d1 + bhi slower +* A long and B short -- use special stuff from gnu + move.l %d0,%d2 + clr.w %d2 + swap %d2 + divu %d1,%d2 /* d2 = REM:ANS of Ahi/B */ + clr.l %d3 + move.w %d2,%d3 /* d3 = Ahi/B */ + swap %d3 + + move.w %d0,%d2 /* d2 = REM << 16 + Alo */ + divu %d1,%d2 /* d2 = REM:ANS of stuff/B */ + + move.l %d2,%d1 + clr.w %d1 + swap %d1 /* d1 = REM */ + + clr.l %d0 + move.w %d2,%d0 + add.l %d3,%d0 /* d0 = ANS */ + move.l %a2,%d3 /* restore d3 */ + rts +* A>B, B > 1 +slower: + move.l #1,%d2 + clr.l %d3 +moreadj: + cmp.l %d0,%d1 + bhs adj + add.l %d2,%d2 + add.l %d1,%d1 + bpl moreadj +* we shifted B until its >A or sign bit set +* we shifted #1 (d2) along with it +adj: + cmp.l %d0,%d1 + bhi ltuns + or.l %d2,%d3 + sub.l %d1,%d0 +ltuns: + lsr.l #1,%d1 + lsr.l #1,%d2 + bne adj +* d3=answer, d0=rem + move.l %d0,%d1 + move.l %d3,%d0 + move.l %a2,%d3 /* restore d3 */ + rts diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..d0c2e7c --- /dev/null +++ b/build.sh @@ -0,0 +1,3 @@ +rm res/resources.o res/resources.h out.bin out.elf symbol.txt +make +./blastem/blastem out.bin \ No newline at end of file diff --git a/compile.sh b/compile.sh new file mode 100755 index 0000000..6e24737 --- /dev/null +++ b/compile.sh @@ -0,0 +1,2 @@ +rm out.bin out.elf symbol.txt +make \ No newline at end of file diff --git a/itchcover.png b/itchcover.png new file mode 100644 index 0000000000000000000000000000000000000000..9509844279b0b2eab145972dadb309c4bb9e5c09 GIT binary patch literal 10667 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 literal 0 HcmV?d00001 diff --git a/res/bg/ground2.png b/res/bg/ground2.png new file mode 100644 index 0000000000000000000000000000000000000000..a024545796ffbfc10daa69cd77647c8f5a891447 GIT binary patch literal 2408 zcmb_edu$X%9KQN!DbFUYSb1)@VA{goKDxJeyY>p@uFwOn9PJ5JG%&Y2*RI^%E_>Vd zTHcWU0YYLTHYzO$M1(3YjX{FQLy=+-K_XFJO^Lju+5}1og5d16JqjsE)JyhecINv% zzTbQ^v&%e%6Z-WY)Z1h-^>Yh(czQjJ{_A%xZb1#@ne5F+?F&g6x`)E~PWq9JqX@cvADqs*}6sUio=lT42%%*to4>*NwKTPmKx~&JxvvSHdP!pJd~S zGreDzYBD7}Cwoiu68B_5RDxz8DL!b91XYAKnR3QNR3OfVI_86=a>$Oi?%s=IvSi1n zTildeb-*&Ypjv~))rDTMdbY?*_?TQQCn6vRL8t>P5)6dGLd1?o{R*gW43jt(h3K>G zc%BguD{*@;hoV7@GgE{}Q54E({)uK$;!$~b7i(!(Mn00=XsK1NQNO0f(TcIbPypz;q)#KP8b$7S=D7F zgc%-zPbt^!I7+pHLr{&m4TU@FgepcxfJ)M4%HR|QN@5JBmTQ4%a7iR#00v=54VP9u7t~!N4SnnKM(-b*6ohP=rNaIFcu=L=T{&aodxL;9rjkKkSu~>rCbwXeg#T1 z-C&~%4h;fb(Y%Th=vpaHSIQW}m>Dd?SR0CFIJ3`erC7}Gx7m2nnu%cVUcxN%mKDhjIj+?WJu3Wf53p*$s;HBmo`# zBUlmzzoG>JDux^crI1uZr8pKVvEWbwiiQFk*>xXxIUF8M@yh`;5iXiA4s+!@IGX1; zf-%$4blq;j6$SC(8og7#uK8I^$|9nYq3JeGd`&+n<<)%b}I;U z_iAJ%A&=Qs2}m@Q2q-}d!O}iJ*d&S~c-rQNyw7Ttc-q(!QI!b=au}_DRp%xvhI2Z5 z0U3)5O8}y=VeGhQC#Q>hVO8JMAmWAaeQ`m2`v&D}KEaXfUr7)$TtjlzbGi zFsOJuE!xj9jEIgDp7U`83qdyFW33#KZL?WumanH?7Wc zie(^F3emAm;{TrLlj*sGL3g4(Zrvv(%076GbeKIvhcu4s4sDVT%QiaK?Py2K934XU zh0%@OROlsk*TE2~l!k6H`QA(4n@n+gT+TdiNzK9O$7^e_UPD^j?k&u@)UtHq@)s*k zpN(uv9)VFGWTqvj&24vHI5atah$$`(_pG%iCU2ZNu}^dV`SC};J5#%4bz8!Wh%0V> zOXJ%+`d*Fmq+k^gpB7g#@ye?DJNn=GbKi$aM~~N@Uy#(2G4j`qGnq~GsorhQw2{Y-tV$V`e)hr!AMDEwbACQ- zRHMH6B0nho*%1ZIfJN`^+E=svt@W3;rlg$yt=XEDvG3-!Q>kwhZ!gZf*L1t&3vbfO z_N=>o>t0`9Joe_alJmbDYDzqx^6{1}HJ^+bK6-A#;LPBxJC31e)*PLBw>~F#_>om? z^{}sRaRcx4A0S>#9J@0it0{H!Q?1(W(XTav#i@S`%KE*q{mmO+#OJNo@HK`TVJ{G%WJLly9-P=XH`rXa?H*d-!rcKLg&_TvzGh~-DWxf literal 0 HcmV?d00001 diff --git a/res/bg/ground3.png b/res/bg/ground3.png new file mode 100644 index 0000000000000000000000000000000000000000..c1e62ef840cb73e4f08a9fe02bba0234b53c7452 GIT binary patch literal 2871 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 T4iOug#6PD-L$1D2S2X|MYz+|; literal 0 HcmV?d00001 diff --git a/res/bg/ground6.png b/res/bg/ground6.png new file mode 100644 index 0000000000000000000000000000000000000000..c7fc640aa946a0406966ab65cf9fc5574461a4f2 GIT binary patch literal 2408 zcmb_eYf#iy6b@P|!U&9y7Okx@j#jGKB)i#1QWuH~0>UD~s%!t0Y;pq`cQ@%Ku#4I% zBI7td+OcD?RxLV+Q-@LMLyLWA(OQ3K9ovrJV-&|nwJHu(YSB@9vn(q*Xq~n@lf5_h zp8K8io%@}8v#cOLYjE7iI0Qik=VWIT!uAdQiR};nH|(yw1{<;<&y@+=5lIuK?#SG9 zygD;AR4&}FqEa?CUp`%wdv0aL@uvA#S~rdH=KcZ>?bz1TdFyJwiC!ISkdi$|MUeQR z`V)h!Tc3;|1BXj4x8`={vApavaDwashLBHz)(A2=Eu?V#T%e&IP$K#5*p09EVyGn8 zvDs!P=~Nt`RLY(g07diiUHrVcJR@Lfsp#Yo3jusUsQ&39Sh^Ku&)mj7#cRw z=Gw7z-686B7N8C}08op8#CejmpjO5pa2}5LcqXAn(nt{`O;9vWlB|hgX&R0EFz7BI zh-_iT)QB_qX2(i3O<@Tl7z`SMCW9O(At;7n2+~LxjX1Qx)e67Hg>b(*wg({tsC+3^0dLs3z!Sg=e88`% z(3XnYDy6a}tEKW2prg}|IDolzI-@@NjK$}Rx=^*ua!4bRkUp(dSA_zILZHfJ0Ul(Q z!!XC{Y!ucJ0GuWVT(a!#*{On_kWr)2U_>YAdqYx2i@{^Ck~AucHXFlRQ&4n*lj9}7 zPA{bw7|7r>V8`@TIBCX7#zh%fvy~-HI7zc4*=_2S1xc*vZEC?OlZ&#kq>ZI4kC;L| z37p3Lqp`rVq8#vXFd34MD*=S!FTv1gidl#3l>^YR9$oM89EYPIAd8Y0PN;=hQ_!4D zhlOG+7Tjo{!r?ldY>r>mI6n_^GVB;koI#QVNJ%73f{npBvyI1T&SJwE6D{HbZvrAP zGdypjd)8;je3>o}eSLSS2r>^b9)?GWW)Deo9Bu)C!vzln@`zRjH$(P7qyR;8d=J|6 zfCQ_R^Y%v7qY@yZ$trLH1q2)jz>L$Bhr?|GN#YD;69MC~S_OvEOCqc?Hd|8R{#Qhb ztO&dv>3JnIEG(Ae^@6cuysi`=V3A>|k9<6n=g9hCDS)6)QAxLVRTi}%7XaxcFn9k+ zp~RDjsa*NfX;GrZXyoCM!dN^OoCcf;_s~`gZnD|T6iu3~{KNH+(xS{R$^tddl1z`H z|8H86bn>N~zXZTzo521((Pz_hH-p|p`z+mOB}zYfj&v`3j1Hk6*WKDA9+z!+uGi5H zw>dln?+d*fy{X_!^sWPbn5h7~$!07YUyC3y-{xebyWG`3%s%#EH5xnWhIIcy)o)<5 ztB`Iy)qc>i0gb7QaSr+@_QdC}zLq8$+mP7Uq{=(ja@LY73*U?lUN$MSF6|n2x-PA? zIXCVypS5uXa3?O>j5JOh+8DR5aN5>uu1W0!8?D8kv{0=LON%Pw_wRi7`6cm*+2V7` z{^hgMzZ{dYaN7E>el{7Z4#n5lU+%p9%Jqi4zmBxDFT!${4L);sLE>^}RcC^8S5jB| z1;-1U_s#EmCvnuuvbL6ihH7Qiu3@*UinCJ2SnsV)zkZ;0-nh7wO0mAqJ>rU(nwW5M zAbJw%+WcwZ^{Z>@Pma4ZKXF>a+0m1hUi@|2xw>^nW`YGHIe+E$@|oa+b>rWEDbCOD z>_E45y3^}(%}0+Vr=aPpE0Dv72N;%A56cX0scoH=xOYZ+%y%^{2Ma!4ydmz+gEK!i zZ&_UW#q5rfwrfK+^xLz$dC1Y!`}s**-98^K-0Lbn@p@~v)c^eG-`oDwR{e3~LPu9| zeciE}$v^FGYzu~xP1BJ*_JXd1*~3FMr@*->3GoM%mI5jG*;@^_FE%MB_cYaXEZCV> w`(nbJwP#nH8lZOFyzEAOsnfV#prxY*#8&Hlxq5uE@ literal 0 HcmV?d00001 diff --git a/res/bg/ground7.png b/res/bg/ground7.png new file mode 100644 index 0000000000000000000000000000000000000000..78e337ec006ac7934cb93863e76f0c17aa521837 GIT binary patch literal 2958 zcmb_e3se(V8jf{ae1KS_#g&S~P#>t1naN|4nGz8QN`wGntPw?-S0E+H#5_nqU8{(; z3h1d%R9HbRF4%&kVnI>r6W?`h)z(+VwfMjnXxBHL08;F+UC-|3oXNd&?{~ld|Ni^` z_s*yBv17e@4d^8h2)tBL$^^b0?S6W6=l=_~&u!uxBtAwH$+v&)J8VpOWYOvD$WhL8 z=6MzxT)5}j`3cdNb2Cm?&%A!ND9{jnimfj%t$uL-<{KjnZnB={sL57=pm#s_(@n5u zU4MbV;~l+5YtyP@2%0krNrt0Xq0?yQ(E>q8sMAc+X{-&P*c81<0p8iM8wB)>0-PjO zBWiO5o2rk>w6GI0V>NVU8jUkx=qMn>N$>gwm*D&EVHgD3Aht9G z80IzzXw~sR1ZQCZOo%`g5p*wMAyT#CEoS|XXz#3VT z&B|lZPOLeVvvJl`?hmLtr(ZI_$5yTGwDC$`jK)qAR$F8`FQX$MuS8ol8D*$%L<}Jk0zulLYL3zCGP*)B2o-BkIe|(D zsr)4FBmX0qp$Q#lF_L^R^hPp;h0UfE5akHW@QoxLv<7+Aw?31 zlCv~KG9s3iN@$9q+U4@=l^kt%r-yred#NxS&2#+bo`l48xLhZPbP`eq;j{#Ua4C*L z424sC08pBi;xD|3v*`J1B@JC!-Ci*~qgcj}49YSP%dk>Nf>I8rxAOa+(NSa**clx?gC1y0EP|xn1)~6Icc!om*fFesMLb^1a>sf{D$A4p zNtU!*w{kk0gS4<=DSYhyrwoPvNSKvO|8rTW4ikxJ{z$gSxfGQk zQW^c*`j=&)QVojnIZq(?i;Vt%%jyUxol2TgSpL|C!T(<9>*aI1g04beS-P()RPypU z(!T6>a$xsy-JYB9@6)zzuFKKRZ*$uae_yz}oi`Q#(s|dhCO%RY{wBNZ|F%LP=zc|| z4AW?{jjN`7wh8f!h%4UFIh4t(&Z}tlOP;Lt z8@*@g`1nhgAN*bMxkvNjWXqPuS@is-r(Wx;3yw77n?;U3-|Z~Fbu4N3k)-Lq-{gk* z?Adm9Kx;wV;90Tn{}jM|5qV|B)1is2HQ~uwqi*)}@Z2+eb?dZ7Sv{Kn&?|AUk17MU z$L3Y|3@dHAJJ+}P{yS+NpY)HZIJ%+4G5dS}9NY1?6*b`*4blyu-;r7;Fe_Hkyyp2H zS74HA$dYe}B}ZGP27EjFe#o50mL35~PJyj@<)BAvT1ND0zF6Off)aeQ7*f8wfdTyw zJ)0Z)`Ic{`&x@1q-Az96reS~3>;zXuwg0o_w*&GvCDx@r9AN0zxP9iqvHcp3Y;c%* z2rI|e`Kbf<>G3gNKfh(yiT&n3`*C4-m^ey%t!#VU?E~wz6Y+^F>55w)#Y~eH4qV@R z!OZHA6G7HH(j`x?T|T)tYfEFbcc$0C|@b!f0x!yMw;UK~;Kjb$)_p&z#a6mq&Sl!Bp=ms~x93S61Tt z){VdD(k=iKuV2Xf#b?p!!+|&Q&UZ6<_giT9n!h&sP8Ixk>qyg?k&hR6epo4dGJb2x z<0(}o9}h0OE6NM;*Ic{Mdu3~%Pc{v_81$oh+Bj_D$^PVeV{*lVBgx5fG>t@&R+H`|I)Fd z0u?>=p4O{D_GD4t%57Iav%cqh>EeSt@k2ajg9%$@!N-o3p5{p(`>YW`uqi%nz&nmVydEmjCv$6T`v2#(C ztHQ9Y;&aDR?+@M^kn2L<0M^{q9oEMAA4Ikf)vzXl5?ZNw_$@azIA zahK-VmNhQF;*Xvle*cOqPQ|TA%Uu!N=hM=F{>jc=aLa}fKG4qZV$0r43@j>*`6|++ z+1#@trwW}sJSrFq`7oto^p^pytdS~qN$gjqiR_I@L(0;<6DSwFYWl{llI;gwmXB+u zWWKk}&(*x{Y@=wn@*k<}uBI9Gt4~BZ*xuZ?9*kZzuS#+Fmr%;PcIXjsf06sER}~qn J{4zXw-mkNjSM2}* literal 0 HcmV?d00001 diff --git a/res/bg/ground8.png b/res/bg/ground8.png new file mode 100644 index 0000000000000000000000000000000000000000..cb16b34fe5ab9b6d021e7b68e1f4962cdd0c4d8a GIT binary patch literal 2510 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 literal 0 HcmV?d00001 diff --git a/res/bgm/start.vgm b/res/bgm/start.vgm new file mode 100644 index 0000000000000000000000000000000000000000..71b80b9585a3268124372f22574bc1b28eb0a348 GIT binary patch literal 4110 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 V^7N6RRoM}HXkfVX^UZs{{2xPQ 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 literal 0 HcmV?d00001 diff --git a/res/bullets/bigyellow.png b/res/bullets/bigyellow.png new file mode 100644 index 0000000000000000000000000000000000000000..1f3f8d00a8be00f0fb5aad68afe009bdf7fb80eb GIT binary patch literal 3070 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 W`@Y)gPj}}7+;nA6`Gf7xz49-TyFVrX literal 0 HcmV?d00001 diff --git a/res/bullets/smallred.png b/res/bullets/smallred.png new file mode 100644 index 0000000000000000000000000000000000000000..bc8056e939eb4a451738f0b726667558c35e3e5c GIT binary patch literal 2866 zcmc&$ONbmr7#@vaT#5Jqi8-|$kf^EYs_N>lt|pVPyR%6aow#fkjEG>pdUx2F>9M;v zI~(z!A}FGupa)SQ2p&8b#Djv*Ve6D;Qz$^+g^bip1FH&3huXDzia=AspDs# znA+PrYW{kh-2UnZ=e|6A*Ei3soPGDfj z+H;-0NU>OR$4iCIk;aTOnP%1rs~BmFLx+p1kxFW%b~_YP;$h|yhA@tO5i{ltelDoX zOcKx5_Yai8Q_Wo{if-(A%gf8vWxtwc^BxgGc$j*WB9K7&N~e%L)X8_QG1P6Yvu3ww zrX8nblqy{+YA%?%>O;Fbr0wK`I6=g`p6q(0ic6pRg58C*Nb`ks6Y=5ai$F#X$-7Hg zt8cNH7IH&j8e@KuaB7;#%72Ou!y8Ygtu$+-rnJL#F1(+foSezhq}hTG`RsuS zXL@QfBq9tEtrFKUI!@B8Eg@#jww$+Kw=>^2x6z2FJ9!~H+D_MNE`+DrY?@daj*aF9 z(MbD(R;> z9~e-;d4L#!c8mn@L|TQ33>1}o6k0REtdz)z5?!t&4#71}sEm}5l!cq?rUBD|rVJ^q zBw~J`kfez~loLOsNgz3<_2@U zZ{dLBxtH(GrR@p-gFF2KU9B_k-zC`pw(bxF$?U&^lU2DKp6TFWcq+6Vh*Sn=zVqMg z{|U~E4@}p`=eEDl{)Ak&g>1d*)Mt0@{^jovPiK>3*}e789=qYmTJx->2t)Ke^-CKbKCwC9a-*lzZnMdFKwjD?GFK c$5;EldhRyy_FKDeEKjD>Q-|trPCWS7KP5hh`v3p{ literal 0 HcmV?d00001 diff --git a/res/bullets/smallyellow.png b/res/bullets/smallyellow.png new file mode 100644 index 0000000000000000000000000000000000000000..853fd677e1c350941bae783e1fd72cf20fa5b250 GIT binary patch literal 2869 zcmb_eON)E^7s39{q*AOr3)v2{_gC$=B{t-=jYE|xcb{Kw{L0|%2sy9p3F+6 z)%O(FZKYRVUt21z+S-^rm>;a|j&<59OOq;Fo@sSJx>VY{b*3Zr5t}>8PBq#U_t*D7 za-D{$xK9K%TDXHuUyqJ?p{ZgDox#Gs&MbLq^qn(Zu}sklA8F|3Q% zp6m2P@*@>@TVc>SSetN0(yn#FGDaHX(BYzNq>@^x#~g|&@i6lULm0=th#7PGKNrk( zO%m^`?&uqXr;1z8^G@t})6>)CX}_Fyr#vEr@G$i#MIeE)*>)~xP&->cuc2x)-EDO8 zM%s1?jZ&q@@`?*o=X_{&25Q?`KTZ%aZ$@@JQpSZ(J;6>r&C{%&E+Ibnd;`enf%49= zZnMYOXwNon%eM0jWXZq)#I{x&h%d^e)fz}=`RH+QqaTn(rL)P|j`jB0EIroMcJw${ zTwi$8iATCt=4p2_O`G$XnwWRbp|s4L4K=A7?ZV-W3m~>Cb6atXydfMQpG*=KQxao} zFpDvs6Rklh7@5mOg=tL04Z^8uB(wi1ItXt(k~Y(BEj0xX*SY?Fd}L&zn$()^cRI3bYlzj}w2hS9B48<{ES% zS{dVm1{81(AtTU^kpMlBR$(FoMI|4G)=V%fB{HHw7b}TFaE%ixBPAqd;nKEgz;vJ~ zLrN=&m>(!4X(ABi#1Cl_NRH{!XhwZwBdFrYXAChN5hN@`+4?pNEyq$5HU#a9(ASzE zp7;VW69EfV)C(kBLaT5h%@DKz0Ko)Fo+RLR6d`4;0!ISMDaAZ8YH4&}6w#bxWK9AY z!!kf30{S#jA_|EK7$r-iBcCf3DUAqbx`;U>i(!qDB%y|D5rjkzL2HR43&w~K6P!`7 z9Tg?RBF3~3MqraHjg~C%1t);UL;)u9p|=u=sDT3DJj4kZ!W?>0$xs^J205lt0#&Xc-QWudRg9)Eq~~>&kmk^=2~**%8@s}z4G#b{KuUSrdJQ| o{-S4PoLHN9jP2bd z%K=2ifdf~hRtTwA4)nb00f|#D91v2)feR8yAPyV~*NU0^HB@P-01?HW@%Wqfeee0r z%t!6k7xb zQ0cR;e*S*%$`2op@1DH-%Xc?l>0kMl-MRJo$sfP}dg|4_1ba5!c`H|x=g!LODdone zFDlA2dfeGB_M2BR&e+~@t3!_us2^&Z7u5?REC2?qAnIt)PjWn}XcJs4`f}LN)JaHjP|>zzLUq5{ zR;xT?s;fglA#_yF*O6;GK736zp$QFS8qfy_VaLO^t-mPuVa*3yk)+>q> z8^&-r)Q6VNv#x=B-#4IXm?jVrARi|M8G$4}KS!vsoMv%a#5_?YA_@3mQPD)DQwoE0 z0h{DAnS@}*h@=M6p`eZM}o#okd@JSXPh!)m*xC0qpW@;$~-UGq_~ME+iY8|PXaVSSkcmwb+hx(m z5KcpzJdC69a;O6k?3fm|O>Fr9+7Cj7okCKOzYPv4j(9d8LX3Doy39zEuBI*|##P?u znMf?FTOMyztL=A>cD)0n>FHA(J#Wna{6rdMNE7=TBEk$f>}1P@Wh1Rzz$M*uL!p%e8G# zCT;*MTK0$wZSkLqC#rcpi^XCk{bf{HRVWaB-!o00BH%%Y1eh0qz;{AmSq#~sQ}$8l z$|W&z8QzI=@%_iMMYhM@nf3ayIx!X|R4$l`Mx|3&sLh7s6?!~T=GpvVj|tGnxMZ3= z=TR{v8Qba#?f#WRjYkp7$7?SO!}w(zLu2OccDC@jxqSxL*n zmN_^7e@$y9C+(4>%fzm2X#bq(llghdV43L3rThO7HRMJrHIB{Lv%a;jYC90+J%G8??g2>X!H(uf^`O*87Jr7_{OA_N#hjnmDdiyVX<=MX1BNfe+Whzfwvl1)odxWU1*aIx!IOXU-T zVC<>HH_|k+1fkRE6gzT}#&tn7O;do9AW48BK(ZF5s0+em|B#_f5*+(c>eGw9be33ajM(KtY?PJV#uM2NzAFPd#z)i6m>h)K0v;+fQ<@4J?x8^nfNC5)dVY z5y>jM5L0%MAvv~!7J4;(MwyB%dJo9tUSJs@Lu;#4|{*Yzz?BK5Db3H3r2xo3D@i=QUarwb(e?*;j zrl?QbX%I$whvxTT3H8zripfl!)pQ5;61J0{p!S``Lro=;X_!FM6c;EWbbzTM8R(8K zL&?((L)3=Jj}p(!D5^s<-ktbCX>kLEb;8z9fxr87cIMgbd-0Ed>;Ftg$kxri&xC(l zu=j1t8q1p5d&L&+>^9#r*h9YQkdRd>W?Ra{-gJy@M^9GEGqs8H!K>orr^lu~c{lp@ z_dlE8J+pE1wMRccd+hX~@pqb6&z*UG{JQz}8|l60@%PggzMgl-3hlAuw?2IDgZo$J vuWqjIp1P);dvMq5ru^F<;Y%A|c5XjX+qXIW(3_uSJ6^T2P~JFx`h~v$p?_yk literal 0 HcmV?d00001 diff --git a/res/chrome/enemy.png b/res/chrome/enemy.png new file mode 100644 index 0000000000000000000000000000000000000000..25af6ee41faa3ecdc567bc3f6873ee460da04061 GIT binary patch literal 2247 zcmb_eU1%It7+o90S}hc`7!~O_5lPUybLV$whHOf*yG@p4Vn`Mmm6qJOb7yzR?#wtd z$!-!si3kd|FG0~FN()NsgGJw>#iCD!YF~?V^*?{#^+Y))yW1amI!q+) zxi3EMNSt`PJCV5SBd0JOO&eo6_9{tac_vBLDn3Og68#5jKEkskVoXwW+%$Xj)AKCj zSZVgKY(T@$kdia97?7#O@d93)#hS$)9ANruIwh!(2r;!v*$wqtnr-mv^g15qSf&Aq zX4C9o9FUndCYX#D5JpKtfFV?vl$NxRiLhxt$p}#3IVf?w1R&H!O_wC5^wEmh)yDytG8gjZGG=2e81HrrEyL#GrfZ)A;CS(GuwBPc*31Cw4n?% z!89?nMU4nN%Uq9}@ycFccvf8VjpO-DW+L!xr%WG&lfy$yK9^B=O;Lc5w7qX%@$RAQsyib~Y*K&ZIYKt0h87w{b}m7J7D6MFANs z(&F#Hhul{3Lo~m=cxVeE;c20WP5vvPbtX&(IzE z#e8d`K*Yw5=y>y~ukVfD;Xq`h_j#rn$HFZ-Pz zzN(+|}Lhq3V^TT7SV{`J}M zQ~MtHc-P_j`tZ^#7fk-!OLt!Qo;@;lt@zcueevf)J~y8IaA;=vU$unV ABLDyZ literal 0 HcmV?d00001 diff --git a/res/chrome/font.png b/res/chrome/font.png new file mode 100644 index 0000000000000000000000000000000000000000..298e4673886df96ca96f7a344f1cec80a1518c80 GIT binary patch literal 3998 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 aLPd`{#8{cvuuAbS*umDx=8DzsZ~p~aF=b@{ literal 0 HcmV?d00001 diff --git a/res/chrome/frame1.png b/res/chrome/frame1.png new file mode 100644 index 0000000000000000000000000000000000000000..7860cc8f3c95f0556cc2bb2ed3f54a43e560d706 GIT binary patch literal 1473 zcmbVM%Zt=V9FB@I&LRkU@Np?4h_WWBq}y&&7-j5koklY@GYyV6D^=CqVUko#YNor# zizs_oW&eO(mIc9+2R#pa5cafJ5yXQYyeS?$xL(Doe#Aw52P*aY>ifNazqS_6?wH*- zt7+Pf=6roo&NFJvY?1#r4;MD%1Y76Z4LR@KdHBrz#_h+yG)@lI=(`*Ck-z?V@pS3j z^WTP#H?F>Xa{EAZ?h*U<{@snY|GnD$bEL?&r}LL`P5Wt=8k@8~{@kN!Tla_UWwGp^ zM})^FraWNgAWkJ((@vZkq?oKQ0Rq+y6HkBr_X8b-)YC5>^P!*CSTCGk&)CxXLYu6w z5SQwwPJ$ByBne_BFc`#9lB0pAk9d(>t7A(CBZye>^f@IEEc-1`;~4`L6B-1<3aGj! z#Q`Qka1=Puu`O7(?6LtND!Hg!29r;h;xgJni}f=TVRGl`Jt0zLS^a+B?3YZQbuHU< zT?;yv;}{ZQ z8DWhzDe>S`v9!kp&wKncb`;lzH7TlP3=5vMIgh51YE4;yrwXYz#A zv0$FA;%2~OM#*kF4ssxJN(L+=2**%grUJzRe;b(7urvHBloHh8S&XHh!Weg%l_uSh zG~Y+fBo{a#tXcPTsj3-<6a}neA7|7x99*gz<)B(Mj+b0$&}s<=9hoz<)0w`nbF!*p zIDJpQ^ZkV^ltqN2ALl7zglatEna`>6vJO6+H*2+4#yepoFY?8+r$Mt(tJrR(VmPL) zQhk(iXgtiEFcmFH!DO`39wJiFT+!P&;C9=(BvY+*8vv*`K+}W(p kwP$`O6kpR0ZM(Tg+j2+S{p{$i2dYsv8w>S&r!QZB4|pETm;e9( literal 0 HcmV?d00001 diff --git a/res/chrome/frame2.png b/res/chrome/frame2.png new file mode 100644 index 0000000000000000000000000000000000000000..1f03c272d7096e4859d8eb182d1aa02792c012a3 GIT binary patch literal 1908 zcmb_dO^6&t80|!mbs?Z2h@RTcB|)pZ`e%A(noPoGW;Qz{y^gyBu8_l4S5?n6+uhaa z?%kPLZ~h!|@E{1H2O(Dv=Hy}VAb2t0NtEEhOKyq>4@U41f?v&_8`)i!;6P7xSG{`m zzVCZgb-TNM?cDM!%Zj3$>#Vglpk0#B(lhY?=MU=#(BSTkUK`q%pTDqrw|(dS2kpzF zJ@)uL^Wx{<{`$-2^#>o0?;pJL+s}7ijj#X6@7?|4;ID_jpM5QsWY1-5Zx@Pkb5%ZP zUi`SZqA1UP7xlKvE&ql`MWPcX0l>B=Z0bcdH}!240!(Ej-P8%>Q^Lwl>@ zV?S&1LA17?^UeMB9^K!eb*5dptX>*XT z)h)lPHbu@=SI3BA?5fqe&PYIL5WKEh*fI_57^Z_T_UyXnIO^=D!E!kZy^YrDY%%z1 zXoIrMJi{0chx*XgMcy~edcAI7%djj22vm&Il8jJVoS!qactP_hDrw`^!2 zbs9sGEojqXmM6%VF(R2^>R84!2m1cW&?H%)i?Y23tIYHsNnG^C88vW-gY>2BH+jKpYdtVt5fv<~4IpN|E=3i075+&RJB; z(jE1JPiT}%-iuPxYzl9Yk~cJ2H-ue;&7Orl%l7OV!j6aW6zYQ&7%9n7V8``r`w6gM zQ8+#g)c3tkT9hQEywhrEAWDxS<^^V@64qH21py9`gDFPDa%w1KZcwvoHlr?^=z{qz zL3d>W<@~90nV`V2$dOkgwgrq9aw`r-Rmz2htNB0tl=Q;R>J@e5Lz?sdGN=GcdB#OKArekYUzNaeGUh$p*?*#r?dR=wRmC^ z{-5C(@_?QC%=oVbCu4^WV<_gN3r=|Xy0}~5V{tq26f%{=-81^>=2viUz0_%~^p-xQ njBIaj|NZ@=Pi~)CzDE`1{Rd}X_~^4YB}D18*IQp+-G28UF(O?y literal 0 HcmV?d00001 diff --git a/res/chrome/frame3.png b/res/chrome/frame3.png new file mode 100644 index 0000000000000000000000000000000000000000..72aa06773ff6fd6fb23caaf95361577acb16a93a GIT binary patch literal 1909 zcmb_dO^D<~7>%wh}G6c8k_|MD^->5Fr8FP zGSl7TMO^lvAb9ZNMVPAx_dJLS3!+yM77t#;i{in9?!k-rRsT6FGsCdhkglZa)%)J} z)vK!aIvY1GUU=bxq9_;J>&;DQm*lf_4*vi6ZsQOd+_}|lLA(6y%G$lw!GpW4tD`;k z_Z{={C-;B(aqH$!AB-OyzWwVD2QLn8e$T(X_vzuoKYx4j<$)x7I$OV8D9Y<=@_FL9 zj~c6ra{imRyIpPvw|puRoiGt{eUxN?R+KB(Mj4?yyi`Npi_^OH`{!S2YRu}|Yt;Y; zS%dfE_5GZ0?QeAH{toq+cI~QqW#j`v!b_r#l0jPdqq;WX_2FH18=5+Slsk28RR&bI zgO1t|IaeJWBZ{%3);yh&kkBxEMYXVH8rU{W8)58MJm0p}*-wLTIg9+w=GrV6eATsn zS!TXr42MH~SkXn^GfdC(3~U*eg#dwyaaxiQN{dT#h9)m)9%p4NQdKgNQ0$g<4Wv$U zNU{ZOTFmMM6*ER8GfW-JoaVqFI31cK3v^Mo_8`hk@3F*1cbsu!lNVw)r@Xbt)AG_h z7^921*=|0VWXh<)2Rs2-0m95hsH`taQS`+Lc`Sw(*<^kr=cE*QSBSxUr8;vK)v|P3 zT?q({Q^|W-YMM>qO;Yl@Cf5yN2Vt{oVc)9w6&GRK$9M`2zzU3%cpQup>kW) zH7fnUnKtW=k1O+;5}MKu`y5D5amf@`h^QQroUis^NzULy<0Sb7**jglLu;X9I|OlV zfk&#CBG+ z@_?QC%=oVbCu2trV_3{d7o70&b#b@A$KrP4DO4(lyXVUf-~Sr!t>@d#)$Y>Al#zFo mm(JgRW^HZd&fVoVo>I>Jr7S-@_~K`IxwTsx&CjmC`R+gP|5{T3 literal 0 HcmV?d00001 diff --git a/res/chrome/frame4.png b/res/chrome/frame4.png new file mode 100644 index 0000000000000000000000000000000000000000..76083468de39cefda4c6122587703cdf9b68232c GIT binary patch literal 1911 zcmb_dJB-{!7&eJ?xGb$D^P~5E2DqW*^Q4-JMPmmh2hNeDnR^ z|CpJNdh0jNoxN~YQIvDtwf2T+m*u;BT6`aUyS^_P*t^y5i1z#omsam}?mqmWb9FMJ z|GaNr{_MdoKW^Uq`QzP(`|tkx{oR-2o8Pgo?|r`i=i}c`y%tNdGuhf(g`(VEmG5&e ze$rY|l%=nt{#Lo=-|`4gbWC}`^huHlw4z+OHpwvAW~CaiL6kPNKfb)LsS#~zZ`OV2 zXDv32*7kC?xwqaYd)vgN+O@0dm5C<^5>{e$lEi7@O`6)2*Asm?Y-s8fQf@c36=_i2 z@_TBF=S;PA2nd9>+HiG>15AS8b=88FX+UI{2ter7Tn{02{%FEnPD5{_y*f80{+imb zEHlqA#^bR*uIW4<7^dsG2DA*z0s;Yw-L%9LkQNsg3~g4BJj%+5r>bPc0pBT`nvgp4 zA;~J*w3x?9M9i4r%rJE*eOds0|9EJUROq7YjD(fB-b0Ct{%*#M4OZ}-oUqP_rRBwi zF-oen*-jo$J*C88F-ruj5W>vLR5s)#FNXXGKdR}};)myNrmZc;0 zl8;H0O5V#-(|ieQ^j_#bFILYIb1LsV=d;&B=}o zpj!Q(86MV!S+TTiOqxKgRD{&6^xE+ zSrj!~;D`sHI&%R=^*U&{A#@0V2s=bmDe*#{Cs${%yXYp8S{hV z-BzoY^Dv6VM6q$>y4vluY}2)cPTiD+FJuUJ*P=pXd3U~*HrYG#UL2{@`t&f7+oGuv zSr1HvX*L`k66TXRG+RF&GC_JwmCRrT56dym*~&nqO$ z0VEOt0)k9n*K341^}w=euyFoR@s3xos`lB$&qGUwI2|x?&>GsayK}OVKROprZNmT4 z9YY?lvpO^WTY}TM1BbCl=5$D$@UmOoE#jxTomeU&m5aOQ?{Dsm#JzQ)+g|A}e@ZBR qPkD9e!Sf&fa33z6uHF94P|p8!>ZQM4IrB(fZ{5y%`-|&u-}x6V9$Etc literal 0 HcmV?d00001 diff --git a/res/chrome/frame5.png b/res/chrome/frame5.png new file mode 100644 index 0000000000000000000000000000000000000000..4ff731d38830dfbc14a99ab62d83ea23e8aee653 GIT binary patch literal 1918 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�YoKo)E678Vl zYKjr^*eMm)9uc_|d`~ay7&Qi?BWI}ERuH>U$#e2Wd&a1)XnI)SroU=XWDB7~VCwS* zakkmkiK-i+L-uLz)<>}T-LdYta8%yB(SWefqwyX>Oyv7F7KJWksF}wW34N^+`9q}` z>HV3&2L1D92LlN?mBXk0Bsx}NM1>~LDMhd~(yz(Ww>4yMmn(4J!;o#xo{y`Xe5{$d z5>|jv<|%e(2|f$aZwr5CIyCt?z9P4;a|!bIq}j(~PggUkm8%WuBLu_<7&%vEBq^hi zemeS0%>%#O4FcQQbf-w~(~j+A9Q>L6vWlL`Cx4c@_&{{h*Q>7#M`O?142mgn)v(*a z4=#RU&)f+ZO<~1KZS&2#Opi)D9?gpq`_f!?%EUKh<Q5?;^V11^_? zNDDjg=uW-T)9>U1Pjy;9b5Sa30XZUG2)Nl7k6jcK>r!>Szu)2&UKEl)c>H*_E_l+o zBTBz7W=BS~nq5W^b67OQ{0S>yw#Jnubn5f5;r85mznQu1^%*3?6>)p-7CT_R-qm`G zjfl*2=&qoUlNobT_)YwdO?vI7V)Gv4iAKm;Ea-q>^p?XL~HC)1J1Rl&heZ+M?PKbMO{ziz_ zwQY?gQul?;v0-)JCkqY;mu~iy$Q*~mXOb?J5(tHHQ@T;*;J!+yIlmUIhUUJr{hUk9 zf#WR%-xG8YcYaqJhtZ>zo!N!}9SA*~Q)d2P)7BM}Y5zLx>r9s*n$EXtD!??)@2KZt zk&>FG?c>q_{_*wEq^7acx-wspExr}h*dmwiiz!bDDbj$bL*HM%Z+h=udAMT2jV69s znlPfwE_o?x5bi{jGVx#M$}?(Wy2@!1GGb89CNn571XC&ROFlP;m3z3{v@jqwnzbS* zs@r1sT%E?%@$mbaQI-G{)7zMx6|=97(m|C=q9w}}*m;^*C2Ecfs*&LKJIVQaOlLUG z=L(%${CZIYpu@|P>P(zTAWG-rAtn6lr|wa&ztLgl0*jV7gDgg?vi3PiNKxvWgxK`U z5gSkBs_xmfLv8gzq=Ex)$qUF@y7`daH6U(g8?Uk&vroIKNop3B8|euixNKH=S8aFE-tCk?1b7`PoW|jeB<;oLViNTR&Ag z(r(&+y&;XC{p!~r7iX@V?yRr9a&_a}zWU7flr@sc@fVCrR%O)ZjXdjUgp+~K3`0O4g4^A@SPenGf)@shy1c0qVn zHK7?ylA1fc5|YK0xe8uc#=0#WJ;EPu8;rmsG2+`^-H(iRLFn=tY@RHO0^fzi%LQQ~ zF~~2O^ZXi98g13%h7U?`FZhi(wN)aMgMWYI=k z5SXjI7`z~*^`m~CSjNOQ3PdRblbE_d8>hIS5!SoLZ7h;H@rWNs3@fErmL}6o;X`RX zFGWXjsmVO*$2JrlRXPC?7f3`KAtt3Jv$%iYSWu%ejcRm@IMUB)G=VW05){+0LTP`u};4NYn%IZyQ5)s->rMyz<9{vWbPPV{GWm+wl+KsZr*LBL6wi7oV(-646}o<}{} zR*f*yI~2bMi>MQ~P)H`KET`L$m$;St5o+Gqd7B_r#*lRnNh3hPN*-u>P6Cdtt5C6I zOUtQ);D7he>mZ^{(Ddgi%K4ZtxOXcE3WzV~fx1|Snzz0UI?b`kO&Btb*KDBRr zcH_ivkH2&1J+gP>wHG(NlNYaBpReEe;MjHCB&|oEJihkA$!|MfWHVEz4_vN6>(5tf uKVSIehs~cZyubU*=bA}U;i6ft8Xv> literal 0 HcmV?d00001 diff --git a/res/chrome/player.png b/res/chrome/player.png new file mode 100644 index 0000000000000000000000000000000000000000..f0145fdaf37c8182ec36753f0ce0f862d03bfeaa GIT binary patch literal 1539 zcmbVMTWH=?9FMDoxeLrq*ye-8R7Q&?IZ4xYIV`KS`MQ3rsa^X?tKjA2dK+-FCV|(+y520uzYIemm5EsZy z6^@d!JH8N+nT5#$UYN(aBMk55_tYUH@JWLBy6*)stQ$g;7qWGFEDL-SlFS>zNGgz@ zv!?h_8WDa_0wM-rkRQ?|2iXYQ_Cvf1R7D1wtY{(tuwRFo#foHobW!r0Cb z%1IJJS+3P;QmtR2QAt*GU6+9>tE$KlV%!K4R2PG|r^8^97)NfHxHRBXMr6}UVhBvt zmJNQG(FSqbPt0R-9fh(Yfz+lZ(7_oltVCW@xPxWl5uXG}%&U{z4JfcKN`8Lh>&;tJXwt3DD`M$Q783sn!(LXg5z$? z!qsTk#0)vuUU@FxOdg1En%{m=|v$ zp=74MoYrE?68Y~&Ht+sYw;ecZ2I(?uLu`{ZG7_-v6|pw;g!#!!ti>J5n)Ri$y$ANavi#3$;iK;%g->MT9;miVs0hCOY<}qe@uRDSv+J)E z4!0Wit(W9OXTJXV`-NjSR@&=p%fDPZ`$+BB74psMCu@KF{_9Zl1qfG3%v+@F`Z;0a{8s|++BxCL zvjtUf3#`T-90!IZHJeSbnG$JOmSkPmC8$V>0vG~BZ9hgW;74P9hCGRI=mxP%eLi7C7OlrQ zfw|g^!3zeoe$>ko%b3(cfh3DCiKzp$@cCLW6nKi)~AERB8uAnkNyhhnN%^%;H$zv7ka@8dd0R;uyRhL=za(Awe+>OO)37 zm743b@QNa;{J4p*>nFU25<9&kB#&Z}6Oy_Cm;o?dk~Jd*4OItFH6ZLlO(q2!#b`^g zW{ius(tToql{HWVGH2x%B- zS%`s}#x~G3oCO&@o7PDtm4zhLKcA<#p42co-_^5CG2<9y&cGR+q*a^(8i5F8QmO+G z#ss8^gJeCcTAG6UY$rmOeNw2lnKkjsW{jGQpaMx6WMw4_R7XL;a$p+hie+Kwq;#Ul z0{@TQXcmYHlBqJw=?>&2-Ol|8HMVzNR|(Q>j6p_GG@xcx2-rXXT7)=i z1|!*FMc&5w&0@SW=X>n9g8VXJ_opP>c{n@M?Eessl-!$Lok{|xM!h|e+=vX=7h!524JJE|7*Q>Fdy)K}z@p{e_Z%117)|Ml?c=*I_^-xG(6 z{H4WbuKu)-yLs*Emp86oId@=XZR`Y6`M1lj$$JZL-rW1!6Cd7vYht%?@Z|OIJFxP_ zr$4;>(eSRS^X=)~mzSS?Fuy?p7dqzx7ev-!`CJa_VM D0I+lh literal 0 HcmV?d00001 diff --git a/res/enemies/cake.png b/res/enemies/cake.png new file mode 100644 index 0000000000000000000000000000000000000000..1b0c8b5d0ef1b498dea22ebc066f3cc54c592537 GIT binary patch literal 1935 zcmbVNe^3-v9A6Pfktme>furNLHYvv4?i~x@{h18Xq_#-0nN0#OvIhr%1XiS14;W&wsn!P=an`-Rm&b)o^?fbmX z_xE?#XQn?NF@D;32!bMPY1S+-&sWE|(coRzT6F_VSmq*o3YeoK=cM{l8qcpunddEI zeqE)DssEz)`|O2RHddTJwDQ`8#;4p1&$1_d&4+IP+!yk!TO|t<)AD2pDo9nws3*5t zk|8Mc7H7{@a>+#mEqJsPBRE*C*CPTn1eub&B1M<53hZEA9B)Pjj&UXPoX39lLP^AcdKent`44^c|YNU|yr z&LuNpiy*OZf)>-z7?uDh8nq1NplF997S>~W9g5+o4%c895oaWD91c7P5GOHCBFmZ@ z5C(Q;q*zfz0!7Qq%eCckT0wH5I-}8uVtQ1s*8qe@uHY5QtKsEYBMeqnrX@~PIDv;% zM#>?SDrN+zI&6bS4ASy)z)!$qsFxB^ofcDV@&g$-Ab3oM_H}eXBs1sxch7&-};x z84?GIh;sjbo?wg!i{KU{Qeadss~POiBqEKILAWXcHIdD}99X$I*q=NEMXUL3Mrbv# zEQ16-bN|~j!?fkaEFk@xa1X;|!Ksu}5}WJ-Ui=pcg#z_awHAjhLH}%||Lk{lI|2vI zKwSpg5ZDA88Oww2C4n~8Mw@I96f)LkO}6K*sjKbW-ULUcB*sqP_w9p+MZ}gC{^NHm zA|I=rd;GFx*Uo<9`jIy}466L3e<=ZKS#1j0GIVywn4LAJ!uYt#<`(%{K{|GPz#D&Ss7=g= z+QW%@SLE#0&3C$ISi+XZ&-Si6(K^YOzP!*1*JR(C{jltnm^tj8b(bgi51oBZ@kTs; zJ7H#MTmPzUV@{pq4=0Vz$&bE%lZbC_kLj$OicV_WdS=<@+kKr$mX1AF(x=*mx}2gW z>R@xnRbS+L;mY8rhe?B@w0p^PZO4WsJK$+0=AtB_Wr^?p% zHPu+~)@mi{8WJAz#FRI3!?o9Y4opj0HFGHO_zi1wWqscM8J-ClR|hQjzLXm9SDV`g z3ztNfe3nz~YdXDKXt=y<@8m9;m-PTS~h1g9Xc~ Fe*>j@xj+B_ literal 0 HcmV?d00001 diff --git a/res/enemies/gumdropblue.png b/res/enemies/gumdropblue.png new file mode 100644 index 0000000000000000000000000000000000000000..4f87d840df0b10e21ac52df5e778228691f84550 GIT binary patch literal 2719 zcmd5;O=uid9N$L8S_p*Fi}v7jaxg{T&iBmDkZnzOH_ei6jLCwLdhpGAZ#F}A=S^oO zyPNi4+Tz!tV4>g#B2+x7SSXZQ6ithQJy;LbAgI+`L=kNd_1Nm0{g}j>G*NqSVRqiU z`Mux&`#=8|$H(^eZh2r!DwXOjj^roUonu$u=DXPcqgRg2u$wr(uUugF`}+olPZdrs zK3mw;tmB(UrJZkF`03lp(WPT^i{}pg{PoEl)zQo3vr})M`~CVaJr7r7vitmzC&N_g zsp0tAwCzN0i0!@LmZzer(mo5(S{h<%lXSD@Gju97xVz~?G(#fJCKcDq@>f6jnCD!a z<)6?>V#&{uX?NscKqe24mC?Z&WMY2zE^e@CF@hS2AlIx_z0hiA`4+Fm*73H$b1g_T zljVnEf!tJSoXgRGaC%wFw+>?5ZU%4oGi+cAgY3-0#URS(^6Hg^W&Mg06W%1 zez+ryJ!SdnDDo{qXfzt>hLWa1MUYI>6hv8&Wxx<1obw{s1YX$RWyq5d1+E{t)Z=1C zXw%s!%QIEmHq`ut)(bm+VjdHk&=;h%7~9kWVwB+g*`V4Ij*&pBq(;0bWLPP|GB=e< z34B%BS}j3`QK8N>>e#j_IxNrmM3^8UoedBv)S1Nou3}*{L6%*!f#VFG9QLPaM8j#i zh7*$4i7R|77Z4cHpiF7C8|LvY3n$BIl^ZBQd{x1~tf>?ABm~2)tYM*iY^hw1{q?CK-FXgn6{<^N0T*CR#b)PQulnGqS-hB;`8ld zz!Wi##B-KuW5dj78qgi60OF_;Ff)z^5Ks*j1E^`(!)`BRmsVtA;d?1+bY`d#CbYrTwX&cjo zk=`at+OUv1Q3D2KsKT7Tfjkt}Qa^(T z6Y3uBw7ev5xQKGgRkEfWOaga><5o&ZRN(HQymiB5Lme8})_|$0CQylP0NY?I)4`@H zO4!E#r!cK+&c=GsswMOHUU?_8PKZCE?RFsC+9}%4`F3gy$H~_EI9aRpgpHOJ`&wD7 zr6x`GpS8obeEMJ8YFq{_!&gib-7Pkv#LHwjVh_o9MLbrm0UMq!eRUn=*=!+Ek z-o6HZeEqlMzh2HLR~G*ePP|gN_91%p%*}h}>kmnl=NI3J$G~D?EdSn~r;q#z=xuut literal 0 HcmV?d00001 diff --git a/res/enemies/gumdropgreen.png b/res/enemies/gumdropgreen.png new file mode 100644 index 0000000000000000000000000000000000000000..5370b5a1ba62a6d84882da6b46d96beccdbd1e39 GIT binary patch literal 2716 zcmd5;TWB0r7+$TH+7jtQA6gNaP6Siy*}3fO%+A#Pg;x$@kJ0p2o|Lx-l-H+&jXg^QmJ?fY_e>ioG!zW?Opw#vRm^8VRZ&RzcH(v3SR5!r2C@4+CE zIMf|oH*7wU>tcH|c6m4)F6}oEb&?QMlO(H-$Iywy&RtaxqA?P3CK<8aEdS$M@A90D zv-|_;l34O`WYq4R_Q}w6Ul~o0AszF(I=P)ygAq6+gk06BxPej4@-<$At)p#$=W38} zEX#LA0=ePR0GFda;nbuEkSMC0rYA8pAu`STI9Ze>K~w}u0itN6bVE_N#*b&>d~6wm z`R;}=_LSvE!_YGXVRCXZIhjgQe?*XUT^B@IkY&ISAeeGPSOsp--eky=0Qt5T+SKJD zMrhLUFv~Ml>oz!EOzQ>>KQWI9Rp<#)QjBb>0Wpek-nd_>3CBnv72*>a35vCK`S zQVd^_)^TEV5EdqwMh)9mLC=$A`U98q#2t zws1oHI(CI;X#|4G{Zd5WZ`5vsc;=7h-^3F-5x2~I70F;Bw0QRIuKPLrpl6P z$Z12=fv6awScjHa9$^^5mB4A$NXb`$DYmVtRiPLe7WEy-oNPOAgb1EHQj=CH8AUe; zp^Hc{pXHgVN!!MTl1Zr&OM0NDBnv2(qJfMenIMyq<%~j*MdVcTe4e85C;_7L^rT%lC`9+<;FlyTV=sgFSn=Vj-tWx~c*> zDMeLN%U+|`4p@|@8g)2Cjx<&ko2wqKt^yG`@xM zGHY=46#sY1H(ZNGp*uoYmlpVz<{;`$5Pw-bJm^E#oQWS~dCR8`2R*N1BNzowm~e5U z<;8i!g_K*Wl9qBX@$F@fTP`J5fxC|KRt=L0Rj6Sz4fM341BIv>Fg3Q)Evze|giZW^ z3e&3QtgQ#NE}5%(<@L-uA^M2c+kx=+PEmi(*HfcAO19d^$yli;thKDz*UDfmHEy#1 ztR2?n)BoC5qcW%&zHFLkZm|(1TE@c>dx*y?;<9S>+3>X3`%;<>UXK>@UFD8BXKvr^ z`EBcO+9>Z>__KfSp?99Y`QD534{tg1TX<^W%;sw1=?_2n^toeqZ~W;YaO))tAD@2x z=vUbbj~~eFzW=>1?i#q~>+j~iH9Jo%mS3HJ+4<ydA^{Cwc;U;FPoc>MAUZ_NMx*n?NvXJ%*oxo8F~7W(q9?K%9!U$GW=JOBUy literal 0 HcmV?d00001 diff --git a/res/enemies/gumdropred.png b/res/enemies/gumdropred.png new file mode 100644 index 0000000000000000000000000000000000000000..a8dd5985eb39906aadb258e7537355c4764e6450 GIT binary patch literal 2718 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 literal 0 HcmV?d00001 diff --git a/res/enemies/peppermintblue.png b/res/enemies/peppermintblue.png new file mode 100644 index 0000000000000000000000000000000000000000..270078ba2930bf00eb07e36b65cd6d78f4055b8d GIT binary patch literal 2047 zcmb_de`p(398WhYb}-t33@r%f6|`l&+`Hs1$sNtM+N3tD>1q?SEt~A!y_e){a(CWc zleANWj)9Z4QXKRT$9}PYrr3gtvN@}Bpw0@@mKCS7qk`a%sef2q|Iq2X{IW_{%P??x z@7{gh=lkpP-uF;<*CU%Z)o*gST$>{up&l|)Q+@Gi3&g{APS7%&nXP=$2Y0dCwT=Z z`vf0ie83-IypZ=WvR6nj9Ka~Ra{-x0u*|mGRLPNo>6NUGSBNnBc_<71gu*}oc!n29 z8byH@7||yuup$ElI4@28ZMRKN>t<9(PR<=Y7jz|cs1_;SQ0auk@KdE(TBQn7lAz+K zJxD7~nK7bE%jzn5TAxQn+FS|~(lv@-gjssR&OsBmCP_}$AuslJ?prXsw(|*IMuC7& zWO%RWXLw&Cz(6_SXMhI*uO9$eM5M@TIPZ}F5pq$vcjkPFT}eSLiOK!R(sv%t`ZT*n zI4jTA{}~SJ+?z$6vHzA};oFKkmK3wFL@sV;T4@>NrP6e;MlxlRmQvksEt7UM6A87( z8^=dK{cP+2RoA{)doUG=UH_9Cpw+h~Z&W|_&b6AF#pB{bJ8K{07Os!gf4%qj>Z*$! zm(Kq-9=UYn#-TB_`NZMa#ob#*V9S-Mn-j^Lot+lnThRBXzNmlFbs4_+=*H)N`bs}@ z|Cgbw=Z;QKOw3;1I(sI*+?kzjI{wV@xhn(ce#)T`&@Cte$&S?{>$`!LgYq5q{5{k1n6K3EPsyXWu=_x>?; Z%XKu^y|;0C!<^G*BjK*la3ffwc{7507n1Z$>T7T5ohy|heLllMlP_c?>l_K~j8dECPL`0-IdtXLLV^9zF zW_I?O=lyzS-qG%^hZ-C1ZU}`!jhT*A4;>l$Y`X1c`v2h9WBqgh-JQ8K9q-!I+&+_@ zoO?FCyEKTeKO^io`Tlp8d-r`aHavI!@WQ3Z?dHDE$?VLT^UF(%H|;b7vfG`GN4!wz zV0-Xv*!+B3G8Ec)(#ZAsec4VG*~Ku#wnoCGqC?T4(5}{!15rQm8I9x(E5ZKo&busQ z-~@X>&VsDdMhZs9h)a4$x^ifwA1Rn^-OcPOsg$5de8`lFrsb)n1Y71+={#8GS*8r} z`x9(3Fv#>}yO}oIB}_C7I0QhHi78)Uh;8 z*=!xYDs8b?M|*yHka|>&ZB?|F8+HiaLp*!HMI=2)EjHC0a|*U^dj5!k72At~sS1RKD{}GCjs@rZ6(mWYOm?ykr<;&KxSv6yMKC}?Yq!KK3HEbAI z)gy61(RGPKI3DFBS;kykR|pr=L`;aJ5rX8}{*;Xdf*J<;4dQNit7!x(<2qH*(*DgKImlOB#;HqY5WQlo%&P z^*9GLJ;nhMgGdYjO~JItYd9~efC{;y+<)hMl^qqJl_&K6bbM{i|P$z1dJ*r&V9iP3ZSesuKsto7QlW5OBx^`{@(yYTkjh11jGWNzxv*cXdacYb`N zb7sR-xZ_Lap3~Nnysh=|_MeyejlW!iD&v4!+S6<3D`)T6@FQ zt3~Ix%u_K5HMim;P_RG%-R4klvX|(Q(7t*6u^8 z1Jkdhww1=v?R~=L55KrFGt@UbQJy~b{MCyGHs<@j#b*vp9=rbAPb;?OeX><{&(m%o zu&djD?pgOvqB9V<|1C2!>@gb7npT|s_4rAa zF;Sd-Dy#z4PT-u`Gw$G_@&1fHKBCKr?byb&mlR4+z#e2ug}mh|r8ryRRp{Jb=2@l! z@kZior|*y%R?|#^IGBk90jC2HVWM&nK@IAf*2aiH6nG%1bDn1_JYOspgT+vgI9XnhWtj&eFNz#RaBkW1V2QKbO?8GOc6GX#>cv?aYBh&~-JrGHTAgUc_!6{vAqf1ODnO(+aQ3K^uQ*3KkMp>IEzhM`p@F4k zQq=~0LE1v0fp)#r7>%fw+k$8}Q?@Zbh+Q)3=r}b-J#MN8X6J}U+#I<}9*xh9Y-}ar zVCWGiLrA{fsdSx%5yhayw5m`yEuVL@@26&hlhDI)*6$k!A{-DhLQDw@ir+v<0iX(1 zsT2_O;DX?Y0_1;y2{MiHe?pP27{n<+S|_srvzWK7Y{i?ZD!rELK}*NI$v8_x4VorW zWFZ{YW3dRQM-79Mq-cnX88E_yks$ymL-I^akNQ2V+aqcpm7o@m8af97kT@w! z6PCkLn3E%#fprZaAcX4n1CB{I5zH^2r_m!NLGr{=3G%D#E4ZR0rN?w>yUMjaF@$&5 zW_gpTh)03CukSdk`;Enjtu31iRAyXjax3kD6|DG@yxgU|OJb7i z-F1J6xiJHdYjW&~0|IIho8qT!n6ei1Ux)kYUFd?)a=eoYhp-~QwHFusA_9q9zVH?ME& znoLa0?n!JdjcAK6GVObh|MEkB&-wB4?9{Fc=O$WmJ>Q{Ill!NxEc|*~N6sg^!|s04 z4FsO*@~>4J-iUPu0=Mrq(gWUryhBp0d=P4uf`X;IjnRR?mTe^)s>8@56qGT{DEZrw zVIaoZ1o;haQTOe%~k{P=HA@5h=t-egk<4 zfGSkRR?wgamj#C6Vj+xK2hMW)N+gnMyQSmXfCHK~qJ^c$CCa zgNC6=YJ}Aw6a-4)M3v&%Frp%ipiw#(iUndIic#03< zGKwKSM2Ui;BUJ$!U^tTaJ8sO%S&nRJe$9P9S9~RP8!m2Mx%P$hqi1WQoIzBqBtg}8 zdz4iDHY1I!O&iP9>E;wwX^UBeNmpoo73NyHSA-7g%;1{dguUn+$#>z%%Hnli(IOE+ zq-P2PGsH|No);Xw~J;U57I>cXzbC zy|H;yj6F@9xcAMehffLbT?&sWL)OBFPnT0&g}K#D?=GG@{l)Jyca~Cv@87@gquEW< zGc8xf4jdgjl$^M$oi^#st?7F_kNj$)WBbs>SHE32+Vl9};I+ehPTuz!t@K|!w)=tW zseP$W3dX@{_fcoymvZ`s4NIUjF#cv)2Mc&AoHv S1!J{;ye1Q=_@PIidEqbmqo#cT literal 0 HcmV?d00001 diff --git a/res/enemies/roll.png b/res/enemies/roll.png new file mode 100644 index 0000000000000000000000000000000000000000..96d7b4819ca0f123d11e170f0499e452af45b6f7 GIT binary patch literal 5037 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 literal 0 HcmV?d00001 diff --git a/res/enemies/spider.png b/res/enemies/spider.png new file mode 100644 index 0000000000000000000000000000000000000000..e5c9b4a8dcad6c501d3a748a5c0d33bba8d965d5 GIT binary patch literal 2777 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 t9^bS!`1ZMORbDNZ*qHeA%4o}r(_24En=_N_ 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 J52h|$_9rATB~<_b literal 0 HcmV?d00001 diff --git a/res/full.png b/res/full.png new file mode 100644 index 0000000000000000000000000000000000000000..97bd9fbe06726b852dd7385b982ffba91df7c5c7 GIT binary patch literal 1432 zcmbVMOK8+U7>*C576c0(R6N8K#G-j_+9g9{sk>Xd)YQ^0Siysnnc3aYBomWqceh@| z$3elH7cYWW4|*;h1W$Sr5k%07H$_44aTRCw5k!18Fqzjk-~axvEzFDu4u*5j$>aNXH@<#(zx7Bc$aW^PXEI4TJ0r%HJvU3!lC=F(P+Mlp-bsLHq(Mx5 zqP3%hqa|r_s+~ZzLYVB6Mi9Ho#|IA;Il!)RdfYR-q(qv*?0QO;*5_+zeFZsKnK~v< zwgD%I2!nDv3gZm4U8Tzl_*xw6irj^;6<3)S0_A0IK`zmh$P=2OBEy)Fi;jk&50UR5 zl`X?Eb;H(8TQv+&aDZ*g{ZHZIQd|d%<(a-PzH^l(V+qjpR;#783K~rty6HHMZdkfy zsT`qZotVM48fT*ehBC=e8YC>Bu`C#&Pgj|%a8-LYL`hB?XMI0$kLhig=%!`}o4P=Z za$K^ShF#$p=_Di(iCM<6W{%}<^1K}WOWG*P(HX0(agF-6{SuwkItkGiNk&&wL@H}s z;^;uJq)8dgn)EkzJ^s)4 zr_z8I5ezralg9{@Xh>6!V&P?x!QD&(vq8qg)#=y75;@;rg@N2n9srTZZ&yJgummgp z<6zUC>Cv{Dgp>Xu+&x%E>#PM+GTq=_{D*|nx%#@O#hxYl&qj9deyH04oHqlp%-ay( zk>?rM3uHgpSNd{H{Ir-ju$*Z|5qW@JZ^W}TT&t3Ws Dk=?=O literal 0 HcmV?d00001 diff --git a/res/half.png b/res/half.png new file mode 100644 index 0000000000000000000000000000000000000000..f6f1f687413d60e2529b912ab0f25816f08477f5 GIT binary patch literal 4124 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 Tvn#*wyCoiHYgTZ;{oH>6>M#Ia literal 0 HcmV?d00001 diff --git a/res/least.png b/res/least.png new file mode 100644 index 0000000000000000000000000000000000000000..8d463906934a5d5998b6799e9a46a4eaa353803a GIT binary patch literal 4555 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 literal 0 HcmV?d00001 diff --git a/res/player/player.png b/res/player/player.png new file mode 100644 index 0000000000000000000000000000000000000000..854e831797923261b313b1e20d77bfa548120eb6 GIT binary patch literal 4378 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 literal 0 HcmV?d00001 diff --git a/res/sfx/bullet1.wav b/res/sfx/bullet1.wav new file mode 100644 index 0000000000000000000000000000000000000000..29759e6704feb96512976dcc5dd9e03025f529bf GIT binary patch literal 740 zcmWIYbaT7I#J~{l80MOmTcRMqz`(!=go4^Y2AIvkkdj!ExC5x>!jE3wn2*aewU1wm zWhno@*pOlU|9)kbga4=KGR*(KC6K}N|C=5IhS>j)+6@?N|9@ZT&%ki_|Ltx&28MnA zU(5;NXVCcn|6;EfCj;C6|1Vc&=`%2>{Qv)cbCok614HZo|L=CR1StaTy!`+Fm%~%i ztObGWP5=M@zqh43*;W$dn$JMqhf~X%6CD(pLHvV2{{OdU)=emmuvO*;i7*&~g#Q11 zbYlJVhRk4lZ3$MeFayH|umn)~&7+&<_toaa_}UpLi*Z3^LDYPx3Ly3U#jP{@H!Yjh z-%^>M8WZg0WM!p`sDuZ z_U4A#s`8S;{G6ZcU%z3)#*G^{ZQ8tf%a$!$w{G3GZTt4^JAh#4&Yin}U^fWt0fD_>un!9M z6Axfo_U(fh0VKf&?%4x2eD`jUJwO1o5ePtb@7Mu!#P;pmzyRo|ty_VP+p=Xd7;FLo Ypqn>t+yDaW*RNlAXfml(NE;G@Hqu&0{`@Vyb$K{W^@%%rY|MTqGk%L}d z_-YIb_`u(j%@e)30mCp8_%nYS7Q}ij7S0qgC!h!0G>U^k)+$typ*3FTjnO`o zP_SbdMbB#eP=IZ_MAZ8Ec0?GcC&F{W?L=sQh6wcyOdBG$(h@N~r26m`BC)lWOpI4D z?1==no7{r`(iXqRluRA^oNW5*QeKb)nZiEmBy;#wtIXS)N;((*MrFTkmLE2>VqV%= zD*bSvl<#Frbz^qI0Vb2|vrL`o zIo;DnefZpuU!QL*PKycgaeK>>d_lvxR(r#H(sUoXDQ>kle>p4I8)y>=E(=!jBJYQJh>Mxi6dw%Zu(B=-kYD#jlJV_>%BqoXz;zgpkSfMaRAmHRe4+~?lm`rA9D1*VE)9E3AMxzCTV@MDZNC`0J{~yLRSR3{b1K@+0b_~r84u%70 zG;~r3oJgm`$&63{*I+VPAPj^9xF8!G2OPlVaw9=hR8%zJ@pyb75C~#`P$-Ozjg12$ zktiM{BqWH%;zS^kNTgD!3?wBb$>s87kdl&;3KR-O8c-^g=|H7YWq{1g%q)_(G@t~Of-pG mBs3A4NiC#S$|=feN}ItMgZ3pIOFE5pE!X{mo)z@|pML=YBbg-t literal 0 HcmV?d00001 diff --git a/res/sfx/bullet3.wav b/res/sfx/bullet3.wav new file mode 100644 index 0000000000000000000000000000000000000000..c63ee487efe478a5d35ae7f06d4ff736e729d266 GIT binary patch literal 1487 zcmX|=c}$yS7{F_yW{EMGF(!*Ky2Kb`7PBlGqcIv69dkObIVq*3=hv3r_wn_hH>I?N zmaDA=xjK+zP+-6q-se4crl4T{ z84`(nvhWm7qCR?gP%`Me)?I#>CZR+J5_M{%okst{ra14 zyO6VAf$h6<-=F`%g(%RikX%G5mLM@)pwdc8kbl5QF_7pC#!ZAzNK94}(nv!OnM@X2 zgX~~>AhJ1GM2{Y`SZogGA`++PWFztYK@ ztuhn90H|j7?CF-=b&Y3j>0xkrSP?^6eR>W95TYaNT1^$@1nSNXicY z_2Olgb*VvgBG3>kyX@pT3Mj>Q9r0}wp{m~f*}dHb05ufsu28m<*c^e{XLhtbn{G00 z*s#-~-I~T!#Z)M@Mw#5u5{ARu9@oYY05q9(`+Cvhnu0J~*wlO02Z@37ZCx&!O~M2% zZx~H$b0`2e_r?@Co(vGG$#pL?nSgLoZmdzgcgBhFzOdF!9!b;^lt>yFiC;xH*^;Y; z_S=hus`GXaxn;GNh&aDmQ8cy^zzdeH-jq^Smdo%z=3ZH*h?f>*Sf^;wrO{%;!VNCg zj*^~*7}Ys9OT(H-ADxTPDrc_Yz?ht=q4};&p$(-oIM=7WCDl_C7%&9WlTLco)p6{? znUaaCPKNi&7#Evo$@rCWrt|Ws6buH7EgBp3GEF1HF!qFaqr(A~;?j^4e^2qD2%9@N zP=h{3h#MP-aiF&THVn9-{yrWQxY#QI8ZNJ*uUE}2>+Lo{Tpo`P_x8AWqVBFB3Z?w zxw%Rx5{o6q=AS%baiFPD4L~AoXl#^Aw9%*^$Woa#`eV6N=8c36QkhIHuM3A&GIb~v z1hQOF7HaUw6^{CPyIi4AD*bhJuu@rFTccAdRVui)#;;Ntf#M3VXtW-`->lVYbtb>BQmfPZyk1zR)9Y>CN~d0LuJpL|dKiXXo(d}rTPxg7 z*Z`K>U2ZlS?d9b*BUoma%V{#1>`tfEWHy^E4u>6VHoM(g2A0)kvsx?`D_CIrABU^L Av;Y7A literal 0 HcmV?d00001 diff --git a/res/sfx/bullet4.wav b/res/sfx/bullet4.wav new file mode 100644 index 0000000000000000000000000000000000000000..a91d9231d4389a4fd2f18631626a3b95511e75a0 GIT binary patch literal 1810 zcma)4X;4#F7`xI9>KXuo5NQh80003(cq+~qfVm$byqf9w6#)4VzHX))pp35|yjSGC z5&(15bv4^{DFC*JjmbPT0MJ3~=gOdssILdY4=TG^E#|#SdG`SoYabg)nuobY%&kkOwJ?q z`C1*@Z4+*_9Yylfm@>s{D_S1Vs>IEYPUkV~*W0^oR0f2c?*KpI!NNY~4 zr}=7ZfuMeD&E8R!@q!(V)CX6@3}WxY{k|$uxV!mUv_AlL%YVh@o0}?yh~Z(Sy9k?W zqI$6jpNw>t@aaTreROL8Ebys*g57ry&Nt?9LfowM)nfrcI)ZKZY)n;qgca;+WuS>y z4YtL#zr_CRUDU<4MW2lY(W&kujb1&fneDiRyvoecKBN5E>G}LhnC`Ci+(jUJJ z^(gZNu@v_`rg|E9mq5omL!}M?pWnIIRU;R~1$)|CY+18xF0Pse<@QdikG_0xMb%g; z@AISG#BFXx&utbzzbae{QHBUz7~Z{$fWzb6D*B4YA?eVxpdbdQNyr0@TV6K zNBcYKiln^5G=HMwZnMoBw3gxs>+M1%#|Iy&zw&x&d_dJwT_{aW2&eeC5UkA%^;T;v zMx(T?$?U@RVRe{~Gn3<&`r4IcatSw{5lklTx3w}e(qF%7#p3yMzTHWT5G%Sze*1tX zet0=`Yv}CB=9-dR36B*;JLF4rBG_1%8g0^9qqTg=l8rW`NMUiy+40A-sQc~HiSa9E zyIYkNh1p_WVr)1yz=!DUuy?n`cH_A-_fqp)o?#}xi?Dp7L?=m+tHQ8#oWrrQ{Py|~nFF)4N zH*odt)U#Jlr|#Vt8R%DawKmi$N(y9I=|WyID?TQY9!jMIkbOy>?yk;G`y2?id%m}^ zwz9M^w{jr*(_)j;vI`Z;){}idT^YOmaBAYt_2GeYz1XA% zTudZ`9{NKtB{0D6pszQ{)5G1()y4UM)Bb&q4)*p0M>k(eSPY9R%90mV)E;l?=p6k4!%3>+9p=?d?q>k-WUTd;+Lpk#Q^zUzBk~R#044SyO+!sim#+M7OH<%#VGl zlbvlXjmPS1Dl5v0j~3*~a*jwdC1R0Kz~^yOILS$gEEY2%{%~AeY)o`?R8(YSL$8tEU%!jsJNu8yh2e~Rb5kCS68o8D(h>j z(N{~0iwXerK4Z#=S|BJr>dz^1- literal 0 HcmV?d00001 diff --git a/res/sfx/explosion1.wav b/res/sfx/explosion1.wav new file mode 100644 index 0000000000000000000000000000000000000000..7dcad4509eb125d023360897d8c852564b76a743 GIT binary patch literal 4991 zcmYLNNpKw3d1iddQK`haB$bj?O5~DUaV3;gA>*RN4IoI61VL;w7%Vfu>}&7S-P8Lz zGd)Ysj#)6kU>Oh#NkF8yliDm(maA;bhsX!#kdzb0IryAg{(-#wsOoiDftLz6oS?32I#NU7ayKkHqgo|(elcsszdFRH= zmB0G-bS86kO~*|NGa!cD(oQE3Y`p<^TEJo$tKnK=DeY|Ki0)r_*l#@HfAy z=X2RC9t?FliSK{kN1_hL**D+3>G0e3=H0ta=g9ZI7gL3+SLwaI;de%Cd*aPEz5Y1Q zd!}6*y;iAo_8;HR<>pVFx_l*kbd)CPmoFb}Y@GU=w?y&!>#xU1rPphe%RWEb>70B0 z^e=yzK7D%s+1BFXyvtRq-~RgRU;X>9zW%q;#fz6lrqk)ElP5Vjx3v`>yZ-juXReGo z=VM1lk$2u%+bfKW6z?C+%&4DzT1}@;or*M@y^Za|!`RT!S3m#itFIm(-L`FPV!|kz z(Wq?Or4sfpr*a3|3k&?(n)C9=&~WV+zu3FAy|yMGShGnC4HY&Tv$NwPBRfYQe)Lf% zYi(^EJbwJ}!CgTp_xmi7l%&~<7j4^2CgWlMnKRK|Po%A%{uE*q3^`Aq&fhyK7E?=0 zOP+uvEsu^q|6%=~PpWtJCnm^#KdVT|F9K{j8uD z_xC%c(idN@Ub-~ri+}P-$>q{=X?h^JeCPS|_?59vrgRVzFGW^Atsrp0Tl9nLB^p*xmc=vpz{i0?|UjN~edil&7Y=kUo~ueR6+#8mrfrW@ba7?iXKNA6~52yS^yW#hz+U=$B@zK#qm#e$8S*wW{=JSPdeC)#c zAN=6rwQDIg)9v;)H*Z{@bh{T8=0-=wCr|cot@C`gT1_$G(b1s`mwP>FdOA+xp-_S# zR2^XE4+hSj9S?oP`(UCYbw6Gk_a5~ZasU@Zp*P)qsgB=I~R`LzJ2f6vuY;4x!I}L(U|+p88=Dp?WyO^P0sosJ=*Vf zXRb}7D9JF7o>WIiqcncu!c-{KKWYvSlg;MLgg2XQ_1Z&2!y_ZE#bB|x{rGWzYv<@_ zuiw9OrvkVKXpD?p9lL>|ncKIY zJb%>f-g)|T$vGd5`aGU;S#rCl#%E;NKROzU`z~EFj*j;CZXX>5N5>6=T3)_(c`7rI zhfh`)7e~(z=ks>8x_{WadGp%Hh-_9LK79K8S-)QhhqD!16jj6U%q`(~EF30DE}gD5 zt8RDt!GpuQw>LL)99OBXKYAntB3oOk!x2GZUT-iQrWv_XX?5Gv({6C?+StsDe&+*G8uAm(jNf`i~YVXrJ_;J zG#ibz!^5KwZl_Xlx7+LU2ZQF?+V0+VvzaqAk}N-bxZPXtcHxBIzt_Vs=jhcNH;}cp z{;jP{Mx?0Tjy*bhV`4&4^lY})Y;^|`@wkSEy$oaJ_{GIAf^TeyH*YTaeBjB-O4`(T z-pE?*wuNEEMs92@$n&jL8_08I`@rA2b zBM8Q_)!p6g?YzTbv^#ryTb)jLG2Cp%FJEqM)ES1viF_W|EfGYzUGmzsKsexX%}h=j zMsanuxl$9w!rGc+bc$u0cki~EIf886y4COJ!ePZUWI5sS%sS@-0l&{XHg^5$RZ>#2 zS&<}bE1jJkoxl?bzE;yEk*0kU6XkY==kxXY*4FOPkrc!C_gki!VzAj+RFcA>D2i(N z!q!%=+eHHr*zoX>rLaIChG5&_alB?w>C-HJwk@Q-v zy}s_4UPRHgql07;_Krl*Y_?D;@hLW$q-o0GaL&%gFeDIwy$AyF`BH|F$>5WdwVibY z@r;kJY=9)j$5Av9jW)I+z6QrFFUG;-gM*T-1cQ!=$zYHLa-qs=>_XmQ(PRB|lL=Cc?^!jF|rY0w~_4PY zTV2~`6G*LAUs$?oAdMP_I45rPfv$Q!s%S_`x7Xc&06{V(%gdA8z%^c zQOjjrRw3&f8>W)&_W?J4Zy+8gX+{(|hKU3N%gc#mvRG>L`zlVTD!?!v#Y!a>t|Xpx zyBXkOwYa(2r~pSPtyavR+}W{Mwq7p?0+XZwy@dja094RKqG*HE8Y{gXm_F<9SXL^L zNO6LyqJf|&=GNCyZzz+g!8;n5osAHLrsX@GR;xTePv-O8^=cq6NMl;#IG{pJE3L0X z+vSp0SHpoYiiQKBLLs9lNCbl{)3lY(s;ZeuQ&imJ$<|63#;4PY3|Y?EHjZNm5|1P4 zbgA8@5JJ~=!$8r<;-XqAX&OE^hY)PFS}v6cECrzrg6>=iuuQD2>B;2U zTDwv)6bZ-E-EP(dYY@PZ0`^6h{7~-HYL!aKvWlfrEP}~08jdv@N+2Mpda>B(c4-2P zX97?r*C8AfTPzmx`PKE}+*~T3k47WF{8byn^p%yU*X#3h6j&NX)qFk{!%`_AxI}{FdEEdSN_xGz znQJrz3?oU3VOW+SNdm{q)q*5}p|T8T-fpf`DmqPThLlJkzyT>L9w#V>g{%Wf>&<4G z=W&cyl(;`Y5D;QE$q0g$0aS``Lsg;vgR{lZsccqe7~POil#}I9D3VBU66f~=*=N(4 zY_{BJN~9E@xR55s8u{IL%UU z95RLxk1@p}9gAxkL{nD9cpO4+n3^b(C2RWn7Itk3(#rj zRMkkQaa^=*fnj+b$_CTW6@?)P*jiCEU4<6Qk_3TaiFjO=VTLfMDJZyDECcv39_IxH zvM%l6e|eHB#9v4B)}<= z0MP2XD$9T@T~ASzsw$F1VZfk}J41&6=^2QhnaRikkD}llhT(Af1_iaKX|g1uD68vP z%OpvL;|x<51fJud+6HwrK$ry_X%a+}=OL8YEYPoMs)7K%0$2d*0t+F7@j+BYkq5=H z3@pVk;0%zpEc2Y8X~42PC&GgP4;0fB1{?s}P=lie^FRQ8>GW}nWuRh&q-mN8VHh0i zB#uLH2Jr>5mT6isG}u7bxfDy1u&po{R>l;hDkC23B%w4rT{3&0IWNXGkn2%RfWWZB0$5y z?Gy(B8vqo*$72ja&fqQZ15X&3r>fw#q5vAj0b)Q02SH(ZPzRlGRsdEoA57yo&@9U$ zgac9o0Rb6AcMxJ&1|0wi7#CrhBnZd5!sB={yrGp!!3Vs7^<-(F6+U23Xbs+A7a-@@ zUdS$}6$Sz`2R|nbK0*D!36MWHb38aOV_?ld;qT>7E1(mGz~AH1!N)gKzUhY{nELxJ aFz1i0KPft%0uSi<%Lrk#@fA$KCHqm6Iwd+BiN}vUQP?ESZu>!aPI*1aI5`aUX*jVD7;T1{mBk zI0%s71wsTbQKBe{q9ocf8TyQ@*fH%?CEom$ZNTN)Miue$#o&FrpYG@BM*r=Oj?e$| zwbwM))E}9hf!AUA+Hc_XUvI#owf>LSjJklX)_lg9{OcB;G5WsB(PZt%eNjPIZH*0O z;y?3WyXx-19=2uXy+tK8E{VVW z?WY&zxx^Npnxn{gWTwfA^zga{Lc}ICc8; zUw?Xh>eO|&+cY`({r~>WZue1?*Je`>j4UlJE-YwHox1YT$AABO?Sl`z)#}~G>K9*Z zTCHrQqB?ul<00$y*<9|^@4r7j{>zIO-~RjGqp!a%SL#3i{I7rhb3>NVfJd$F@9fkX z3>*8q#p3kLOnqbH!S>qOvp2oo>d{ePeDu^Q&5u8Bueavh zeK*GiTrQg}d~!0cQX!J`)%QoEqeib+X*BLXcyw~IIXS6nZ;w?9y}iROS9Wt#bEW;y ze^%YQx4E%_7!1e9U;Xscw?{`$_x6rIe=soMOsA{$dZk?5*{Nrd2XDSv z+S!T6u@A2!D=Uxo_wQ|1jmG}=cC}7-r++MwSUx&>b#h`I^PHS)2ZM60_T<^~7caK+ z`Es?I%P70M1(j;pXgvScJ9azs=+S2{Up{;Mczhgv@nYKTzH#;}LD|oo87r69wzm`U z!q;CPfAY!d+}wa_s8pI?U$6 zXS4V3Z}06XZg=||Z{Q>Z^0!y78ihi@Yq@aYVp|(quWNd=v$MeuJ~(&w?2V3|S}id) zCM+yetJA%`p2v?f9?#`B-$|!4xg6a2^wUo%DtmYs@96MyoXtA&)?3|v|HqdvcdN#B zb`D;?JUlo^#}hL%sbDZWKW`nMa5(7Yu zk4#QZjE@fvYVG#^_ujkM-u~`8?_IuZuGfQOW2t=B>&<`rZPI8o=qJ0o`$k72i;EMz zy(*RWlTV6X@9tN}U0prH!ymoggN3l|AYyZh-heuz3UF`3_a_(IJz;HP1H5e9;k0my? zzn?mP-X=-mCI!u8@qD;f<_ZOI*Rr8i^ZbZ?Be-kKA$fXJZ{VFPOBshwzawa zUb~$r7H8+@uV1)$^{Sy-jo~=WkT#pc;~Bbn^VTiZ{QUgFLL5bVZ+3n8<0mLA9l^nEpKf>$=quHFck6|jgd;_@h1mMONz@?JUGbEba%Iwrez@6 z)2F+;4_8)X6vatW)j7PqT}!1#uV24)>tD73J-snt#dgMPQWzP~T>$?feD zg7jUxX0coP`i2aKF|D?|v{bFGK7WqgzFn#>;<$TokZ&}`Ro%C5o7UIEy}bj2gNutL z45LNSG(6nXGdVjef*waAkMG|iv$vPfXe=(*>gJ-;6@>D?abr+3JT*mt zhOe&=-X2_EPpQ>TlB_HMa;()lF*MZI)6?7Q+}pcbECy`0NF+8rOyYXl= znNE+7TNoym&C(c_ZW;oL4rtaEi$%1vQ`*=VxdU0p5oF3>@cIKZ?d;Y;D!1r_1GXIt>{}Zfy8RM{D&NpD(_$ zGE*q_2g`B|kE52dXd`Fux`1Q-N@JW}ytCkk5NG8a6H!iwUnc+i2K^hG%AS2ofz8y(UvS zov+vH%gdz81xnmnW}{KR7Ys5wSF44C#PV`XtMxJr8pL3jT5ejLEHEn#sV?8nt3ld|o|VVO{Q0~h%T~Q!rvo-4cDuzg6^juD1D;BWLIfHh=)EA|80PVy z>2zUsHWiEUJRgllXgUtF*IeFW0qVvCA&~?=iv%Gg5?-f==Lx8$cw8yS&>kw4LN3R% ztR!*Jo6Tl}9(pU>O&E<<5EY&ahiMoFM3JIGMx)tgLkI#11Rnvngma3`630p-?Q9lvD~j?UdD`*V{2HH9eh5CM5~i z>qF7#^bEiswcANa$|*9-;vNqXje2ZT1cABTA&&Dp9301Bn2^u=&1Q$gL(>e)ijq_) z=0YKG2fBK>Qt6lEwgkX?Y6gZXVX&|H^_(7^- zLNFM~=NS}*(!nq$kqB5UI0f&F(?k7XkrY5 z9L?pj=``vA9z#WQ&AGpXiioNg&0tSAf#kc6s2^U4g`|fG(}+!2N92> zem}@D%c9_TA^}R}_v4WWAS8;c-A*YA3@BcA5Y#^k=@m1XtSl=E)SR5nW^=hTjLr@R z5)67gJ`9T_lOZG+k3(1x3&}9DoaQ(@5a1JuTrLxjM{qn61&aiOK?DI;VVH+$E19H% zK{f(Eq@wY7$mK#qA%I7c63rqOSe6cl*;ouf5`+loKqwUO`49wSSvU+2263WEe;mLK z#}kqu#G#gwNfIaHaVe2VND}5pqEQaVIRKC2z(2@YG)j}CuW5iAih$vnOgfcf2_ltF z5JU(;prj$cp%8R%3daQz1}7RpAV@L{Nn!l{U?{}$JUB}bJoH=8SdPVUfRy4mieyr$ zC{2ekEEK{yPKbetaVZXAN)izWzy`y>*LaFT{0NA@AjA?0U_JywG!60#p<@^cbOp}D zMGys!Bg5es#3cb^;YnWL8HS5SSqeH66^YO&3SNU7&~{qCOhMBahJ|1uJEBP7L<=-1 zS}wvtSE8tJD1@RIlpsh|a|zf(ynqcJ#uGL}{{_F+Zu2t;=a-wCy4>7oJr29SS}R`IZ5`eE9Bu_`ZvFDs-2DGlbN%ba F{{iM&PGOS`EugzQr<*2k!+&jT!~hDwdbs`MQ?3`>(k!xO30LC2{_2 z9T88*FXb2C*W$^;d0{wfxrh8Sm*IC8tY!tzYjB+YuTb{`(OA=Eq1D|NmrH?&KU^8=O5&LD|Fa?*Z34ng2i6 z_XQn;D?#{sP|aYKL7hq*PSeQ~ft(3u?@o2CK|6xV%%j1Xcc%t-sJ}zU!L?VO3&x-B zU?W&{L=avNrsxdn!P7%{261l?#buj^F*=A^kbZsk8RPIzJzOh@sbN)N!j?}qaB*|TT-3Gg8JjP-UBpnVt1-7H=$wvcm}x%@f*p&ymc4(0ioJhK=AybG!JAB8h#Y;%VYGql^lUqg*W z4iyg-hCJd=)`+V9EuXw_!7riOzsrvrr$0k1uJt!Tf98k3U}#zI$2b1g6n-4OeEISv zjvamp_G~{}OZ^)Eg~{pF3`4@!=+XSseev8`Klb_Wzt{aN-M&4~pCA4B^Bh0!_VXmf z>TkebFt@>`{0Kd>-31-A5$<#tqjt-~M>!4_ajHR$k-2WDajz zE)A{ZHMVmMS(A)V`96pDBSBxhx1Y{x`nfgBAlz< z`yC7KoRzDe!dJBIXDH{+-qLbdg!wEn+=$qAFjVei;g2dh*(Da3-f(;B+ibwRx`ri> zjmgfv44x${T6Uhl%sMt^A~0#vEVkPzY~@|-fV{`<7QRD3Mk;1VT+OhKncN#9xZvE$ zhQvWO*WbtGq^WX-ohKPSXGh|5ZeUm+)!Z~2^IL|0u>8cpk6d0J8lshKyIeLIjb_%_ z;!cKZtY-H8_doE!1CM;qynk|yTdNWM?61sKh^-Vu0&{v6$(#amhk{XzyWBaqgB=Ub zTXuWWvv!Kp5Si?gQf**Zx)>4TW_W^Wb?@^GgI^-Jvtf*ZGs?`v=h+|gmLp^(h_g&L ze`KPCatmTJI~T8gf?%UxsszD0#MxsmaMbnCLo=9U9b@a+B#BLyZ!pu!z7#Q+72geq zpQA?2T!4@>bL3e+d-p&5@WW%qyvCd^HZVuCo>gC{sU3Z>|sWfRVWRJ zSmsS-C(2L<8NI8_<{Y&aVBa)aQI`EdD&pu3;1FZ9hf%)J-`Cf7hAIBdh^$elA^ef8y+Y%544auPNH>(P5|GFpp;$c=JD z`+2~HruZ9w1?C{jMJU6c0_XN~U;=)8^(3T2ZAjOG?yD3E6)4Yeq1dnjEvY0Jej&<& z@=z~dK(E)3>@mhm`1fQK@ERyCnLT^X9HyV}(9qC@FHf5`EnEk@iH7PT#PK7rrXPq$ zo56KRb&;jp#mLHk!j=`<0%W6whaRB?$*izy>OY1|>&vgd{&O3e)1UtM!w*b+TmgC} z_)c^RDL27apF^(#;~`77WtU@lB$5qc~~Ai@vaym|8)il5`hJo3nTaK_#ROrJ4hMjJBO+S=Ly6Kw$I z$=Ct#sxUG#axFZxg^-xc?*;xFKnI`uAP&?uHa4z-FFT8SdrzH0LF>X-Uw!3*VOkE$ zF%Ir#$8k9%7ySuvHfs8Q{0@k7HAAZ;iGs>KqnfW@j%5H0GYlkVM zf%Wk;#Lp>^08E0XTmXAZ65Pv1$o>^zWC@1hH4s=g!)bmLd{z-lrP3Do{ROzy4>me` zy1PB#O*6RL15dpNLUJyQ_dxl(xm4WLN`=HL&G6Z?K^$? z^dO7@BuprtHG_2}%)gi|TjF83+F)k?4z>{(`xB51e)Re0pPvDr<>~3^@4Wy1doY%6 zxYuP6dk;X2%YyS0c$hCd{`li^cmNt$M0;CWjzB_i5mNdo_uMlUmf5aTr%r8}K7Go4 z_uV%ZBJyuXkA4uAoeU1`p_5KX11%V4f|TV$$a^6_seuQbl%5_7Iytb$S5BR}bWdYr z7YwRaDouqk84GVWhdMh?!=BevT55+pAXg|9L*q)=6hHgs=4V&0UX5L~3Qe~&H*Oq< z@1BYA@i{PHmrf|p)`kAyCTB3~fL6N}55nzGldvF+U(HFIX$;9y64dx21hVVdIN9esT#Iy#IC z7DVLd+xz=_PnTQ;X==`V{pO|6&1N+MdDj; z9jUI?!@AOFUY#^)`P#KHvFUHU)!EQcS5s3~T)gPH=W6QhlP8Clmsi%*SO`KQ5+!Wi zYBcHM;tI~6f3vx{v$waDB0?!W@M9!pwG<2>gu!-$Y)re(6OuEWjEEiIOa2-;b3^eB;=85SmQXsD{RW@O+7okXH{ zxuC0_o{VT&Z*NxECW1(hO{}i=xE!IOE2E-j&kj#XQK@s|@+Qx zRrH>$t4m)IE*7s_me$<7XHSWah>ay3@XpYq2!Qr z;lhN}%_~+cS(1TaDwQCI@|4%rZGCOswrzQNG2szWQOA3ls;n_FYgQ>MOAUr?Tf>*d zn9Xvz!J&(dO-|MBEM2}lK1Hk}V`8#IN$WNpI%JThMQy||N?YjAE?rvQWESM4r*Bwa z)^)JH&gG(sy5qH5w>ccG9p#u>rQWqmos$~3-Qy8wsjYBZJ3JZdVsk`JXK7i9OTBts zW8*Fe2Utp~Kwx#s(_~IpMTJ_KxMh2`n8qU_A|n&i=nB)e+>VYichliIowcn^gDGT5 z>*8@tDisP!n~S9?qsd~?(((dhIld|^C8ecBkerxE)fXlvi$oF$r8Sv7wdKXG63@;W z3`XtOtNmkGny+3j05l^raj%MO-=MJA>0+qXShq9F*mP-%A7H#F_e%4%-SOrR{J zy11^U+LS3asN%CcWoEO*qSIFFYH4%HZ7sVYsVGiLRwy<^8l7gN*^;p-OGy|E`l4!U zMrwTQy6x=;>Z&nJE>|dGV-?DbjD!TrAQNY%B`4V$u?Y^Np4D(2)E?CzCEj`VMnRel<<0HZqjzM)o9RYaLQ8BR3a}BGX{v!c$*Y zODa5-g(icku~v$el~>z9>}Ms;aD5v_>Mf(An8pX17@B)T9x% z)MOovo18|SLaozjJ++F0jMPN6$!67QX`{K2%8~0ZrBLa>gf3S`K3*Ww;1~rDGbxKA zG=eOlFi%a}Oz_M^5|gzQ&yg$OEtAq~bw;~OAhncMO66r{jl}``lFKg5OP5nJ%%KsA z6&|-EFH^4f;IbVSaZZ*J*SU9;x}Bw^Duc(O%a#xVp-MHW#~OZq`Y3Hane9kSe9p zq*W@_CS|TDPpr4PjT#kc!byiwr^Dq0NvIS`txZ}W5lf3qv_vA4D$P1lDb3FnQ-vlK zj%KdiOcz>;40@+VEW#{yeV#<^#KjoguD(!BxYTl|)2@&fV3f(K6%)7+*W_ckNMkS; znydy&ES2XgXq8e<(=d)As?ch&I7un4kU0#vM1e_2a}gm{;FQfsYcV;k)2n0!1u_+- zfj1J1$!NrsGMkYqBosDEQ9zm~xs=wMtORK_(MnP+HPY$=!UStW1=G1uC&Ngs*+lB} zMnWw&k!k{0%PFnSM61;}sU=CRfyM~6OrtlOje0_FG?^%+g;Y_vS}9k;z>%cUs4LWB zT8bnoT5BYf8ogel)zT)D$*7|+twyCMDI=~@Le{4tNm8#RaSZk*H38|r-hks2juU!x zAt)NhFaxN7cWO$jRZ}!-1b-xfYiJ0X6isR3$*qTmS!cgHvhsPsn61n6WkkM+i zT8&;?q|>W3YL%u?qbkto3pKeKZAn>4X@yF!)D-LVy7KbkYHdY@p-`DslBbttDk}HZ zSC-V|X|mM1om-MNrj~BsCo{;C3KeCgC3_CMUa>>1YCLef`}muc6{)fqaoP@@>W!+x zHodu_eD}Vd>b3$+i>^tzr?ji*?bBx)_e#YXk_2hw+TAIJJ<`&|#2lk>OZeQd%~^>$ zX~VAUZL*T~PkNh7`BnL{)(k_*uFmvTOCsXhPF?OeeDE!EYrS427stQ4c1!!9z9yk_ z_@Cch-&?K7EmLQS6CyJU@{|S5=kB66hvF6>L!3m^@*eFEHVh=}DOxo3=F!9Vu__`~E*4 znnV17&|2vi|9E(=OEe$xeFQ=BJ5jVG`?+Tprc^xu3bpY*2(moAqbNMPDePG!?K>1T z#o?O4VcGzYKxZO|3Y;uh?6c?wf5h)sYH4&z-N0YJyaVE8h)+BwW+xJe?W!shW8yZR zzhF;9(fiwD5iDCXNSo1(3xrlKUxX}fyo-v1tQmsLxO`VQg8XP52)?s<4xSJ#v+4N* zcD`9K*LvBw<{2z`{7rl2d zv)O#zp#hjgjfqVS3ePDwnXEZ}-i*}%u!4{q8L@^pVe$L#VHbT^(8?O@x@^7u5|Fh*v_JjD8JA49h_9hiERacBQ%1tTkk z6X`;iiMtFQNsP1_=d<$?4}w@Q+CM`)Dkpp9KKm=SuruEwQ3}7UA}h{vaE3ppX?V!+ zZNzR^0jc-$k|CSvwSED`aZ}X7I!NIo6wBcf7pGeqUxQ0}YEqn?jb0(1N~)Wd6_o8= zVVn?%ptAfxg_lf%+})nYgkAG9XCPMr`9)Yy&oQ?+$`3=nB#e=80WeLlEL*)g*503m zp80kEkZBVkyCFIEUD!=&6!dq|VVe&0;ADSg5y!j;*$vRuFY5gqwjUm}zCg!|T+HJl z&`RR1Td=DDUH|=&k6IYn?*-DKwCeDr-gn|+2r|s zSZ(aISjKJ}vX%VXZ$EXKnDlHO(q(Egg15Ka6`VXTYOK4#a^=dQeL`sxLTd8H=a`tq z%JZ!J%+8X+!VdBZA?rjdNMxC2#gb@dTEXTi`0VwV1{Tcs??Y~?hoYh(8!03t7H%DG z$mQ1EanLF34~XAOmo1hRr!3UB%I{l;)ggY>M^)= zfUZ5Hh1l*6ZKOL*HZMQZ(o4}T9Cf{Cv3w7$=vKwIZ=ZDxfkM6oc+0AlN{QGjY@%nW zuP@}b^lE)QWG?{qZC-q=x~d}o@C2H*{24d85eY(fypguMfiFYIZpg@33e7mU;wL2% z$a|EFi;Lk_VN|rwrhmWjIQBOgsGK0YIpM56U= zR9d|V@MCB|0OaNx92|VGpMg_M^fB_D3-GrZobT+6g={70>H`AiTDvyuajW|@cXXV+ zY2^zlPCu~wGnLP&+@Nxu;8J&YcR9@Iq@wnLfg!JspAQKh;CNL#ow6J0>5%u8JP{tg zj`md?M6z$-vhUGiI6L-{s}u@}^>v8hRfzP)Lk|9$9@n2A#z>`7g&HOrolXyiP>38m zapL2z2)=YMOmK(bHi=sVwhoJ(NPQOXumeh^a?Vu1j~)DkU>d=62Tu~rAb83_0KwCM zbvZej!NI`+D(9TwST}Q?>Z8o?9W|M{z$!P}ay4~yb-H35Yq7VWI)y^9VJ(R$8lvfl zpV`b+7w2x7bbqzEe#f*Z}SzAp3>v6pBYE)3Rh|5RN!fS67$q@?y$54%rj= z4M$mdDpjHD7ab{vZSsmc4a{z7G@1fAH};>d3qQ+qa&lPw%*)AyPw7H=`T0scOtipT z$?Gvi1lAV@IBIvlAtqy0gf9j4E_s8 Ca7AhW literal 0 HcmV?d00001 diff --git a/res/sfx/menuchoose.wav b/res/sfx/menuchoose.wav new file mode 100644 index 0000000000000000000000000000000000000000..e8a5defedbc8752c45fc352cc8847969355dc6fb GIT binary patch literal 5741 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 R&;RRRP5hsM|EI5n{|i8F9M1p% literal 0 HcmV?d00001 diff --git a/res/sfx/menuselect.wav b/res/sfx/menuselect.wav new file mode 100644 index 0000000000000000000000000000000000000000..6d2e5f1cc1bfb8a7681efa32d94fe2130bd1d42e GIT binary patch literal 1471 zcmWIYbaUIz%D@or80MOmTcRMqz`(!=go4^Y2AIvkkdj!EI2ovBrAb+R{aLTfy80Ds zjVkKvchAzRs;}R)$hf?|zW#hfRBe5I?-8HmIw0?CqggeO>OGR?T?3@+Pj{M@g6R4) z?Uu!0#@x-#ra}W529bG!Jkv*YksAU4U?9)c literal 0 HcmV?d00001 diff --git a/res/sfx/playerhit.wav b/res/sfx/playerhit.wav new file mode 100644 index 0000000000000000000000000000000000000000..b0a3f2fbeb0ff76104b2cf5653e10ee4ced574d6 GIT binary patch literal 9500 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 literal 0 HcmV?d00001 diff --git a/res/sfx/playershot.wav b/res/sfx/playershot.wav new file mode 100644 index 0000000000000000000000000000000000000000..e518440c33041c9d8e3a0675ba60331fdeb4c4bf GIT binary patch literal 2491 zcma*oZBNrc902h7PT%P_@V##&zA#aP7$b?s7Xkxfe1JJ+W8i=?R@ObV>*&^Qj4|1x z-B>X^MIMBqWS9(Nj0ERL@XL7DYrDH{OZbtrS9aI^@BaV0^*`?IJ-TAC3_lopH1^(e z{i?-cxdi^M-2e@>ecAHX=CP$fABv*9vYbvU%CA3-#=rAaYB?pc_j<>jHb*pB-JP0U zS^0e$4*LVUyT>QhYEjDMcF%VzA10*o>VBSKsJU=B#88w!AuRAtn&U#0%{J+wsHwMe zG_4dfnMA%?-QSeu(z;wMQZBbU6d4(L@zCLLRMPQybmJFLub&i4rP9w0MJZJ4^}U^1 zZBJT|eBUvfWJ+RMx&HWCf(0)k9vA~ zZexSGZgqFx?|F)wnVIqCkSr8;I-LV|k$cd%*Bc}PJUBQw#2nRXwbLJ`O?)6Qcn48m zGt6UBGjp!)hT1EZsF+$0c|$3)C#zaFc;HSw(DG3g2L+~rQRmHv?b*uf(2 zndoTJ&n_*26S_q@p-M2zg-47#AZh;gZROzy(eG47vBghD+zbYjq5q&<^J~W&)lr zQ{X4VFbz#%eDKXYw!x(s1Y^)}D%h=)a0H4;9l^y>5i?Lnk(U@+iDg0p36Rwp~2dg41q#1g!FytXAHjic~nMvh0xlw&jy6esYZQ+*=b$k~&fFV&GugyCg21pR&?I}pCu7PNY#0Gu IprOC=Kl&c-+yDRo literal 0 HcmV?d00001 diff --git a/res/sfx/startgame.wav b/res/sfx/startgame.wav new file mode 100644 index 0000000000000000000000000000000000000000..5cbaa7986b1c8d7820ac9fff1767465739d61fdc GIT binary patch literal 8068 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 literal 0 HcmV?d00001 diff --git a/res/start/about.png b/res/start/about.png new file mode 100644 index 0000000000000000000000000000000000000000..21bdaac95a7534bd0dcde769ef4a44ce8abf4cdf GIT binary patch literal 5556 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 literal 0 HcmV?d00001 diff --git a/res/start/boddy2.png b/res/start/boddy2.png new file mode 100644 index 0000000000000000000000000000000000000000..fe441b5a1c2bfadec7aaf9a0908e7cda8f1a1e28 GIT binary patch literal 3362 zcmd5<4Q$k87{1|81Vl){h!{!jM2FJr@AcZs4aeP$o#W=*&ag#{d~Ltp8t&TKcDvgM zu%H+unHVI*9~2QIDh7xUacU4T{sas$8u^O^6%>^ONYp@3(XaQ@O&n|riC%KoukG_a z@Atmn^SJ8_4+YYwHxDW z_AHK9=R4H157CpK+wuLE&GldRbnfY$_rtz5H)ZNShaYczwfC2wj}5y$RO#Z zVB}cuTM>AA)p#_>>8TdCB{@@4%xn;-rVNAmtcB2lz|?7Z3n+7;i^(vp8xj1(+wbC- zu14@#p(K^GqOeV`>#|{US3^qanyZK^KCK#?nwJnk7PESK4dMQ)^JL3LJ=eLz#{1&<@rB9%4&1QYHh;~w)79^XXW47B0jCUZ5mF0ywZWHVa%@C#|xIfuy zGhNeZGtUzQ|Fs_qON!bMxTc*l%}jZl8_O&h!vq~}zcorvn%P*0^7;s?(_hu0kOHe|JVkCx>LJUELB#J6RlSpAIa6x}CPtbhI(@t2T z!UVEQ$ibP%H~WGOr4vP@W$%m3B`W-uz;ksHTEA{Fq9#D#{wgX#_9xfS_oO zAw-6U1Q0n^2y+z0hC^kxyKNn1D#-L_^;V@KMnO{mpb-Vjq1jw0ED(YUI6?uOz_6OC zXq<*)eRiW}#czbO^F%b-Xq%dzK`)%98Pl;uJj&A|&l60L_VTHqYpG6m(EfLp zGPD^!SQ=$?tRQ6xC|NI*Ja1YRaMmFEbV=aIT8nWoXEP$I{b!!n>-yu=7)@n34UO535d z0V54j%_s4Tagv3tTp$5?)V2Qy8#t(=Lo3~XcXYrOGgPH= zf9-h1Y3C#!>77c7Rg^rpz!vXgMbXrHGAwj^X~0s-4=oi@`mo(_=EZg+ zFG2j=k;+Z22DMwSw>YK3I~}C`5?uZ7d+5|ch%-9kDvXM>J9y~ zFuL(i)6hWW)JA9Jg@=~R4+JW%O~h(aLeB>)dY5-&V`7I|V$rYuSa?gti<#{q?5&mW z8O^tS;Z{21>|u9yOPinEKj&z$;`wy3$pTWRaqw>i-8 z(d*kn6>m;7Ka02SU$^%7EHm={=_^+E?2c*6-q`g?YQokf^$$Ee{~qFO^@q9I=BHMU z%~jsmat5oY5|~ZfUh2GZN%yk(TTg!X@`7Ez8CPGo?$&qiYS@0?`cs!5U(W8GW<7Rt z>8RO9mW~YH-~8=Qqo1u@F>Ls;!)wQb!#AvIl6P)f(Z$WW`59d6a>gk;o36xKUpS&~ znT@qRKIPy%Zt;$9Udfz-Kb|FOYsO6Kel7az=sWf<8!>6qhVlD0^Wwc$?=?Nit&7Oh Z6*ZO-IXdHs)!sjmM7$xkVfvg!e*%boO5Fee literal 0 HcmV?d00001 diff --git a/res/start/bottom.png b/res/start/bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..3c82f270b0a42e2f5230331be89ac938a41ed8f1 GIT binary patch literal 4552 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 literal 0 HcmV?d00001 diff --git a/res/start/gradient.png b/res/start/gradient.png new file mode 100644 index 0000000000000000000000000000000000000000..0a8ab1aa3494f27816366bfe0cd04f156e4d96f0 GIT binary patch literal 4773 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 literal 0 HcmV?d00001 diff --git a/res/start/logo.png b/res/start/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7cf86a4a8b880435349de7e0f18ce2fc605bb2b0 GIT binary patch literal 5163 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 KE9b0z;C}#2Dgssj literal 0 HcmV?d00001 diff --git a/res/start/logov.png b/res/start/logov.png new file mode 100644 index 0000000000000000000000000000000000000000..6c1ad9d09561f8bd88ac733d800f3d0e0ff741bb GIT binary patch literal 5560 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 literal 0 HcmV?d00001 diff --git a/res/start/top.png b/res/start/top.png new file mode 100644 index 0000000000000000000000000000000000000000..4ea9366960e9c4c8df61bfd63df2cb9ca00028eb GIT binary patch literal 4124 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 Vbj>@f3#;7{kFzn&IpB8g{{Ryy|GEGG literal 0 HcmV?d00001 diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..b27cb9e --- /dev/null +++ b/run.sh @@ -0,0 +1 @@ +./blastem/blastem out.bin \ No newline at end of file diff --git a/src/background.c b/src/background.c new file mode 100644 index 0000000..59f6ab6 --- /dev/null +++ b/src/background.c @@ -0,0 +1,48 @@ +#include +#include + +#include "main.h" +#include "background.h" + + +void resetBackground(){ + for(s8 y = 0; y < BG_TILES_HEIGHT; y++){ + for(s8 x = 0; x < BG_TILES_WIDTH; x++){ + if(x % 8 == 0 && y % 8 == 0){ + if(currentZone < 5) VDP_drawImageEx(BG_B, &ground1, TILE_ATTR_FULL(PAL1, 0, 0, 0, 16), x, y, 0, DMA_QUEUE); + else if(currentZone == 5) VDP_drawImageEx(BG_B, &ground2, TILE_ATTR_FULL(PAL1, 0, 0, 0, 16), x, y, 0, DMA_QUEUE); + else if(currentZone > 5 && currentZone < 10) VDP_drawImageEx(BG_B, &ground3, TILE_ATTR_FULL(PAL1, 0, 0, 0, 16), x, y, 0, DMA_QUEUE); + else if(currentZone == 10) VDP_drawImageEx(BG_B, &ground4, TILE_ATTR_FULL(PAL1, 0, 0, 0, 16), x, y, 0, DMA_QUEUE); + else if(currentZone > 10 && currentZone < 15) VDP_drawImageEx(BG_B, &ground5, TILE_ATTR_FULL(PAL1, 0, 0, 0, 16), x, y, 0, DMA_QUEUE); + else if(currentZone == 15) VDP_drawImageEx(BG_B, &ground6, TILE_ATTR_FULL(PAL1, 0, 0, 0, 16), x, y, 0, DMA_QUEUE); + else if(currentZone > 15 && currentZone < 20) VDP_drawImageEx(BG_B, &ground7, TILE_ATTR_FULL(PAL1, 0, 0, 0, 16), x, y, 0, DMA_QUEUE); + else if(currentZone == 20) VDP_drawImageEx(BG_B, &ground8, TILE_ATTR_FULL(PAL1, 0, 0, 0, 16), x, y, 0, DMA_QUEUE); + } + VDP_setTileMapXY(BG_A, TILE_ATTR_FULL(PAL1, 0, 0, 0, 11), x, y); + } + } +} + +// stage + +void loadBackgroundStage(){ + for(s8 i = 0; i < BG_SCROLL_WIDTH; i++){ + backgroundSpeeds[i] = i < 8 ? BG_SCROLL_WIDTH - i - 2 : i - 1; + backgroundSpeeds[i]--; + } + VDP_setScrollingMode(HSCROLL_PLANE, VSCROLL_2TILE); + resetBackground(); +} + +void updateBackgroundStage(){ + for(s8 i = 0; i < BG_SCROLL_WIDTH; i++) backgroundScrolls[i] -= fix16ToRoundedInt(FIX16(backgroundSpeeds[i] / 2)) - 1; + VDP_setVerticalScrollTile(BG_B, 0, backgroundScrolls, BG_SCROLL_WIDTH, DMA_QUEUE); +} + + +// loop + +void updateBackground(){ + if(gameStarting) loadBackgroundStage(); + else updateBackgroundStage(); +} diff --git a/src/background.h b/src/background.h new file mode 100644 index 0000000..d7b02a7 --- /dev/null +++ b/src/background.h @@ -0,0 +1,15 @@ +#define BG_TILES_WIDTH 32 +#define BG_TILES_HEIGHT 32 +#define BG_SCROLL_WIDTH 16 + +s16 backgroundY; +s16 backgroundScrolls[BG_SCROLL_WIDTH], + backgroundSpeeds[BG_SCROLL_WIDTH]; + +void loadBackgroundStage(), + loadBackgroundBoss(), + loadBackgroundTiles(), + resetBackground(), + updateBackgroundStage(), + updateBackgroundBoss(), + updateBackground(); \ No newline at end of file diff --git a/src/boss.c b/src/boss.c new file mode 100644 index 0000000..8d21399 --- /dev/null +++ b/src/boss.c @@ -0,0 +1,565 @@ +#include +#include + +#include "main.h" +#include "enemies.h" +#include "explosion.h" +#include "player.h" +#include "chrome.h" +#include "boss.h" + + +// shooting + +void bossPatternOne(){ + if(bossClock % 10 == 0 && bossClock % 60 <= 50){ + if(bossClock % 60 == 0) bossInt1 = random() % 1024; + struct bulletSpawner bSpawn = { + .x = FIX16(bossClock % 120 < 60 ? 208 : 48), + .y = BOSS_B_Y, + .type = 1, + .angle = bossInt1, + .speed = FIX16(5) + }; + for(s8 b = 0; b < 6; b++){ + if(bSpawn.angle % 1024 >= 0 && bSpawn.angle % 1024 <= 512) spawnEnemyBullet(bSpawn, eUpdate); + bSpawn.angle += 170; + } + XGM_startPlayPCM(SFX_BULLET_1, 0, SOUND_PCM_CH3); + bossInt1 += bossClock % 120 < 60 ? 32 : -32; + if(bossClock % 30 == 0) spawnExplosion(fix16ToInt(bSpawn.x), fix16ToInt(bSpawn.y), FALSE); + if(bossClock % 20 == 10){ + bSpawn.velocityX = honeEnemyBullet(bSpawn.x, bSpawn.y, 4, 96, TRUE); + bSpawn.velocityY = honeEnemyBullet(bSpawn.x, bSpawn.y, 4, 16, FALSE); + bSpawn.type = 4; + spawnEnemyBullet(bSpawn, eUpdate); + XGM_startPlayPCM(SFX_BULLET_1, 1, SOUND_PCM_CH3); + } + } +} + +void bossPatternTwo(){ + if(bossClock % 60 == 0){ + bossInt1 = 240 + random() % 32; + bossInt2 = bossClock % 120 == 0 ? 48 : -48; + bossInt3 = bossInt2 / 2; + } + if(bossClock % 8 == 0){ + struct bulletSpawner bSpawn = { + .x = FIX16(bossClock % 120 < 60 ? 208 : 48), + .y = BOSS_B_Y, + .type = 4, + .angle = bossInt1 - bossInt2, + .speed = FIX16(5.5) + }; + spawnExplosion(fix16ToInt(bSpawn.x), fix16ToInt(bSpawn.y), FALSE); + for(s8 b = 0; b < 3; b++){ + spawnEnemyBullet(bSpawn, eUpdate); + bSpawn.speed = fix16Add(bSpawn.speed, FIX16(1.5)); + bSpawn.angle += bossInt3; + } + XGM_startPlayPCM(SFX_BULLET_1, 0, SOUND_PCM_CH3); + bossInt1 += bossInt2; + } +} + +void bossPatternThree(){ + if(bossClock % 60 < 18 && bossClock % 6 == 0){ + if(bossClock % 60 == 0){ + bossInt1 = 3; + bossInt2 = bossClock % 120 == 0 ? 68 : -68; + bossInt3 = bossClock % 120 == 0 ? 224 : 288; + bossFix1 = FIX16(bossClock % 120 < 60 ? 208 : 48); + } + struct bulletSpawner bSpawn = { + .x = bossFix1, + .y = BOSS_B_Y, + .type = 3, + .angle = bossInt3, + .speed = FIX16(bossInt1) + }; + if(bossClock % 60 == 0) spawnExplosion(fix16ToInt(bSpawn.x), fix16ToInt(bSpawn.y), FALSE); + for(s8 b = 0; b < 4; b++){ + spawnEnemyBullet(bSpawn, eUpdate); + bSpawn.angle += bossInt2; + } + XGM_startPlayPCM(SFX_BULLET_1, 0, SOUND_PCM_CH3); + bossInt1++; + } + else if(bossClock % 60 >= 30 && bossClock % 5 == 0){ + if(bossClock % 60 == 30){ + bossFix1 = FIX16(32 + random() % 192); + spawnExplosion(fix16ToInt(bossFix1), fix16ToInt(BOSS_B_Y), FALSE); + } + struct bulletSpawner bSpawn = { + .x = bossFix1, + .y = BOSS_B_Y, + .type = 2 + }; + bSpawn.velocityX = honeEnemyBullet(bSpawn.x, bSpawn.y, 4, 96, TRUE); + bSpawn.velocityY = honeEnemyBullet(bSpawn.x, bSpawn.y, 4, 16, FALSE); + spawnEnemyBullet(bSpawn, eUpdate); + XGM_startPlayPCM(SFX_BULLET_1, 1, SOUND_PCM_CH3); + } +} + +void bossPatternFour(){ + if(bossClock % 60 <= 10 && bossClock % 5 == 0){ + if(bossClock % 60 == 0) bossInt1 = 4; + struct bulletSpawner bSpawn = { + .x = BOSS_B_X, + .y = BOSS_B_Y, + .speed = FIX16(bossInt1) + }; + bSpawn.angle = bossClock % 60 == 5 ? 32 : 0; + bSpawn.type = bossClock % 60 == 0 ? 3 : 4; + for(s8 b = 0; b < (bossClock % 60 == 5 ? 5 : 6); b++){ + bSpawn.angle += 64; + if(b > 0) spawnEnemyBullet(bSpawn, eUpdate); + } + XGM_startPlayPCM(SFX_BULLET_1, 0, SOUND_PCM_CH3); + bossInt1++; + } else if(bossClock % 60 >= 30 && bossClock % 5 == 0){ + struct bulletSpawner bSpawn = { + .x = FIX16(bossClock % 10 == 0 ? 208 : 48), + .y = BOSS_B_Y, + .type = 1 + }; + bSpawn.velocityX = honeEnemyBullet(bSpawn.x, bSpawn.y, 4, 96, TRUE); + bSpawn.velocityY = honeEnemyBullet(bSpawn.x, bSpawn.y, 4, 16, FALSE); + spawnEnemyBullet(bSpawn, eUpdate); + XGM_startPlayPCM(SFX_BULLET_1, 1, SOUND_PCM_CH3); + spawnExplosion(fix16ToInt(bSpawn.x), fix16ToInt(bSpawn.y), FALSE); + } +} + +void bossPatternFive(){ + if(bossClock % 60 == 0){ + struct bulletSpawner bSpawn = { + .x = BOSS_B_X, + .y = BOSS_B_Y, + .angle = random() % 1024, + .speed = FIX16(4), + .type = 4 + }; + for(s8 b = 0; b < 16; b++){ + if(bSpawn.angle % 1024 > 0 && bSpawn.angle % 1024 < 512){ + spawnEnemyBullet(bSpawn, eUpdate); + } + bSpawn.angle += 64; + } + XGM_startPlayPCM(SFX_BULLET_1, 0, SOUND_PCM_CH3); + } else if(bossClock % 60 >= 30 && bossClock % 60 < 45 && bossClock % 5 == 0){ + struct bulletSpawner bSpawn = { + .x = BOSS_B_X, + .y = BOSS_B_Y, + .type = bossClock % 60 >= 38 ? 3 : 4 + }; + bSpawn.velocityX = honeEnemyBullet(bSpawn.x, bSpawn.y, 5, 128, TRUE); + bSpawn.velocityY = honeEnemyBullet(bSpawn.x, bSpawn.y, 5, 16, FALSE); + spawnEnemyBullet(bSpawn, eUpdate); + XGM_startPlayPCM(SFX_BULLET_1, 0, SOUND_PCM_CH3); + } + if(bossClock % 60 >= 30 && bossClock % 5 == 3){ + struct bulletSpawner bSpawn = { + .x = FIX16(bossClock % 30 < 15 ? 208 : 48), + .y = BOSS_B_Y, + .type = bossClock % 15 > 6 ? 1 : 2 + }; + if(bossClock % 15 == 0){ + bossFix1 = bSpawn.x; + bossFix2 = bSpawn.y; + } + spawnExplosion(fix16ToInt(bSpawn.x), fix16ToInt(bSpawn.y), FALSE); + bSpawn.velocityX = honeEnemyBullet(bossFix1, bossFix2, 4, 32, TRUE); + bSpawn.velocityY = honeEnemyBullet(bossFix1, bossFix2, 4, 16, FALSE); + spawnEnemyBullet(bSpawn, eUpdate); + XGM_startPlayPCM(SFX_BULLET_1, 1, SOUND_PCM_CH3); + } +} + +void bossPatternSix(){ + if(bossClock % 5 == 0 && bossClock % 120 < 110){ + if(bossClock % 120 == 0){ + bossInt1 = 0 + random() % 32; + bossInt2 = 512 - random() % 32; + bossInt3 = 1; + } + struct bulletSpawner bSpawn = { + .x = FIX16(48), + .y = BOSS_B_Y, + .angle = bossInt1, + .speed = FIX16(7), + .type = bossClock % 240 < 120 ? 4 : 2 + }; + if(bossClock % 10 == 0) spawnExplosion(fix16ToInt(bSpawn.x), fix16ToInt(bSpawn.y), FALSE); + for(s8 b = 0; b < 2; b++){ + if(bSpawn.angle % 1024 < 512) spawnEnemyBullet(bSpawn, eUpdate); + bSpawn.angle += 512; + } + XGM_startPlayPCM(SFX_BULLET_1, 0, SOUND_PCM_CH3); + bSpawn.x = FIX16(208); + bSpawn.angle = bossInt2; + if(bossClock % 10 == 5) spawnExplosion(fix16ToInt(bSpawn.x), fix16ToInt(bSpawn.y), FALSE); + for(s8 b = 0; b < 2; b++){ + if((bSpawn.angle < 0 && abs(bSpawn.angle) % 1024 > 512) || (bSpawn.angle >= 0 && bSpawn.angle < 512)) spawnEnemyBullet(bSpawn, eUpdate); + bSpawn.angle += 512; + } + bossInt1 += 5 * bossInt3; + bossInt2 -= 10 * bossInt3; + bossInt3++; + } +} + +void bossPatternSeven(){ + if(bossClock % 120 < 100){ + if(bossClock % 120 == 0) bossInt1 = 0; + if(bossClock % 15 == 0){ + struct bulletSpawner bSpawn = { + .x = BOSS_B_X, + .y = BOSS_B_Y, + .angle = 0 + bossInt1, + .speed = FIX16(8), + .type = 2 + }; + for(s8 b = 0; b < 16; b++){ + if(bSpawn.angle % 1024 > 32 && bSpawn.angle % 1024 < 480) spawnEnemyBullet(bSpawn, eUpdate); + bSpawn.angle += 64; + } + XGM_startPlayPCM(SFX_BULLET_1, 0, SOUND_PCM_CH3); + bossInt1 += 24; + } + if(bossClock % 10 == 5){ + struct bulletSpawner bSpawn = { + .x = BOSS_B_X, + .y = BOSS_B_Y, + .type = 3 + }; + bSpawn.velocityX = honeEnemyBullet(bSpawn.x, bSpawn.y, 5, 128, TRUE); + bSpawn.velocityY = honeEnemyBullet(bSpawn.x, bSpawn.y, 5, 16, FALSE); + spawnEnemyBullet(bSpawn, eUpdate); + XGM_startPlayPCM(SFX_BULLET_1, 1, SOUND_PCM_CH3); + } + } +} + +void bossPatternEight(){ + if(bossClock % 30 == 0){ + struct bulletSpawner bSpawn = { + .x = FIX16(bossClock % 60 == 0 ? 208 : 48), + .y = BOSS_B_Y, + .angle = random() % 1024, + .speed = FIX16(8), + .type = 1 + }; + spawnExplosion(fix16ToInt(bSpawn.x), fix16ToInt(bSpawn.y), FALSE); + for(s8 b = 0; b < 8; b++){ + if(bSpawn.angle % 1024 > 0 && bSpawn.angle % 1024 < 512){ + spawnEnemyBullet(bSpawn, eUpdate); + bSpawn.angle += 48; + spawnEnemyBullet(bSpawn, eUpdate); + } else bSpawn.angle += 48; + bSpawn.angle += 80; + } + XGM_startPlayPCM(SFX_BULLET_1, 0, SOUND_PCM_CH3); + } else if(bossClock % 30 == 15){ + struct bulletSpawner bSpawn = { + .x = FIX16(bossClock % 60 == 15 ? 192 : 64), + .y = BOSS_B_Y, + .angle = random() % 1024, + .speed = FIX16(6), + .type = 4 + }; + spawnExplosion(fix16ToInt(bSpawn.x), fix16ToInt(bSpawn.y), FALSE); + for(s8 b = 0; b < 16; b++){ + if(bSpawn.angle % 1024 > 0 && bSpawn.angle % 1024 < 512) spawnEnemyBullet(bSpawn, eUpdate); + bSpawn.angle += 64; + } + XGM_startPlayPCM(SFX_BULLET_1, 1, SOUND_PCM_CH3); + } +} + +void bossPatternNine(){ + if(bossClock % 60 < 40 && bossClock % 6 == 0){ + struct bulletSpawner bSpawn = { + .x = FIX16(64 + random() % 128), + .y = BOSS_B_Y, + .type = 3 + }; + spawnExplosion(fix16ToInt(bSpawn.x), fix16ToInt(bSpawn.y), FALSE); + for(s8 b = 0; b < 4; b++){ + bSpawn.type = b % 2 == 0 ? 3 : 4; + bSpawn.velocityX = honeEnemyBullet(bSpawn.x, bSpawn.y, 5, 192, TRUE); + bSpawn.velocityY = honeEnemyBullet(bSpawn.x, bSpawn.y, 5, 8, FALSE); + spawnEnemyBullet(bSpawn, eUpdate); + } + XGM_startPlayPCM(SFX_BULLET_1, 0, SOUND_PCM_CH3); + } +} + +void bossPatternTen(){ + if(bossClock % 15 == 0){ + struct bulletSpawner bSpawn = { + .x = FIX16(64 + random() % 128), + .y = BOSS_B_Y, + .type = bossClock % 30 == 0 ? 4 : 3, + .angle = random() % 1024, + .speed = FIX16(bossClock % 30 == 0 ? 7 : 5) + }; + spawnExplosion(fix16ToInt(bSpawn.x), fix16ToInt(bSpawn.y), FALSE); + for(s8 b = 0; b < 16; b++){ + if(bSpawn.angle % 1024 > 0 && bSpawn.angle % 1024 < 512) spawnEnemyBullet(bSpawn, eUpdate); + bSpawn.angle += 64; + } + XGM_startPlayPCM(SFX_BULLET_1, 0, SOUND_PCM_CH3); + } + else if(bossClock % 60 > 15 && bossClock % 60 < 30 && bossClock % 2 == 0){ + struct bulletSpawner bSpawn = { + .x = BOSS_B_X, + .y = BOSS_B_Y, + .type = bossClock % 4 == 0 ? 2 : 1 + }; + bSpawn.velocityX = honeEnemyBullet(bSpawn.x, bSpawn.y, 6, 96, TRUE); + bSpawn.velocityY = honeEnemyBullet(bSpawn.x, bSpawn.y, 6, 8, FALSE); + spawnEnemyBullet(bSpawn, eUpdate); + XGM_startPlayPCM(SFX_BULLET_1, 1, SOUND_PCM_CH3); + } +} + +void bossPatternEleven(){ + if(bossClock % 60 < 30 && bossClock % 4 == 0){ + struct bulletSpawner bSpawn = { + .x = FIX16(bossClock % 120 < 60 ? 208 : 48), + .y = BOSS_B_Y, + .type = 3 + }; + if(bossClock % 60 == 0) bossInt1 = 4; + if(bossClock % 60 == 0 || bossClock % 60 == 12) spawnExplosion(fix16ToInt(bSpawn.x), fix16ToInt(bSpawn.y), FALSE); + bSpawn.velocityX = honeEnemyBullet(bSpawn.x, bSpawn.y, bossInt1, 64, TRUE); + bSpawn.velocityY = honeEnemyBullet(bSpawn.x, bSpawn.y, bossInt1, 8, FALSE); + spawnEnemyBullet(bSpawn, eUpdate); + XGM_startPlayPCM(SFX_BULLET_1, 0, SOUND_PCM_CH3); + bossInt1++; + } + if(bossClock % 15 == 5){ + struct bulletSpawner bSpawn = { + .x = BOSS_B_X, + .y = BOSS_B_Y, + .type = 2, + .angle = bossClock % 30 == 5 ? 32 : 0, + .speed = FIX16(6) + }; + for(s8 b = 0; b < 16; b++){ + if(bSpawn.angle % 1024 > 0 && bSpawn.angle % 1024 < 512) spawnEnemyBullet(bSpawn, eUpdate); + bSpawn.angle += 64; + } + XGM_startPlayPCM(SFX_BULLET_1, 1, SOUND_PCM_CH3); + } +} + +void bossPatternTwelve(){ + if(bossClock % 60 < 35 && bossClock % 6 == 0){ + if(bossClock % 60 == 0){ + bossInt1 = 320; + bossInt2 = 192; + } + struct bulletSpawner bSpawn = { + .x = FIX16(bossClock % 12 == 0 ? 208 : 48), + .y = BOSS_B_Y, + .speed = FIX16(7), + .angle = bossClock % 12 == 0 ? bossInt2 : bossInt1, + .type = 4 + }; + for(s8 b = 0; b < 4; b++){ + spawnEnemyBullet(bSpawn, eUpdate); + bSpawn.angle += bossClock % 12 == 0 ? 64 : -64; + } + XGM_startPlayPCM(SFX_BULLET_1, 0, SOUND_PCM_CH3); + bossInt1 -= 8; + bossInt2 += 8; + } + if(bossClock % 3 == 1 && bossClock % 30 < 15){ + struct bulletSpawner bSpawn = { + .x = BOSS_B_X, + .y = BOSS_B_Y, + .type = 1 + }; + if(bossClock % 30 == 1){ + bossFix1 = honeEnemyBullet(bSpawn.x, bSpawn.y, 7, 0, TRUE); + bossFix2 = honeEnemyBullet(bSpawn.x, bSpawn.y, 7, 0, FALSE); + } + bSpawn.velocityX = bossFix1; + bSpawn.velocityY = bossFix2; + spawnEnemyBullet(bSpawn, eUpdate); + XGM_startPlayPCM(SFX_BULLET_1, 1, SOUND_PCM_CH3); + } +} + +void bossPatternThirteen(){ + if(bossClock % 5 == 0){ + if(bossClock == 0){ + bossInt1 = 0; + bossInt2 = 1024; + } + struct bulletSpawner bSpawn = { + .x = FIX16(bossClock % 10 == 0 ? 208 : 48), + .y = BOSS_B_Y, + .type = 3, + .angle = bossClock % 10 == 0 ? bossInt2 : bossInt1, + .speed = FIX16(6) + }; + spawnExplosion(fix16ToInt(bSpawn.x), fix16ToInt(bSpawn.y), FALSE); + for(s8 b = 0; b < 5; b++){ + if(bSpawn.angle % 1024 > 0 && bSpawn.angle % 1024 < 512) spawnEnemyBullet(bSpawn, eUpdate); + bSpawn.angle += 205; + } + XGM_startPlayPCM(SFX_BULLET_1, 0, SOUND_PCM_CH3); + bossInt1 += 19; + bossInt2 -= 15; + if(bossInt1 >= 1024) bossInt1 = 0; + if(bossInt2 <= 0) bossInt2 = 1024; + } + if(bossClock % 60 == 35 || bossClock % 60 == 36){ + struct bulletSpawner bSpawn = { + .x = BOSS_B_X, + .y = BOSS_B_Y, + .type = bossClock % 60 == 35 ? 2 : 1, + .angle = bossClock % 60 == 35 ? 0 : 32, + .speed = FIX16(bossClock % 60 == 35 ? 5 : 8) + }; + for(s8 b = 0; b < 8; b++){ + if(b > 0 && (bossClock % 60 == 35 || (bossClock % 60 == 36 && b < 7))) spawnEnemyBullet(bSpawn, eUpdate); + bSpawn.angle += 64; + } + XGM_startPlayPCM(SFX_BULLET_1, 1, SOUND_PCM_CH3); + } +} + +void hitBossPattern(u8 i){ + if(!hitBossPatterns[i]){ + hitBossPatterns[i] = TRUE; + bossClock = BOSS_SWITCH_TIME; + killBullets = TRUE; + } +} + +void shootBoss(){ + switch(bossType){ + case 1: + if(bossHealth < 50){ + hitBossPattern(0); + if(bossClock >= 0) bossPatternTwo(); + } else if(bossClock >= 0) bossPatternOne(); + break; + case 2: + if(bossHealth < 50){ + hitBossPattern(2); + if(bossClock >= 0) bossPatternFour(); + } else if(bossHealth < 100){ + hitBossPattern(1); + if(bossClock >= 0) bossPatternFive(); + } else if(bossClock >= 0) bossPatternThree(); + break; + case 3: + if(bossHealth < 50){ + hitBossPattern(4); + if(bossClock >= 0) bossPatternEight(); + } else if(bossHealth < 100){ + hitBossPattern(3); + if(bossClock >= 0) bossPatternSeven(); + } else if(bossClock >= 0) bossPatternSix(); + break; + case 4: + if(bossHealth < 50){ + hitBossPattern(8); + if(bossClock >= 0) bossPatternThirteen(); + } else if(bossHealth < 100){ + hitBossPattern(7); + if(bossClock >= 0) bossPatternTwelve(); + } else if(bossHealth < 150){ + hitBossPattern(6); + if(bossClock >= 0) bossPatternEleven(); + } else if(bossHealth < 200){ + hitBossPattern(5); + if(bossClock >= 0) bossPatternTen(); + } else if(bossClock >= 0) bossPatternNine(); + break; + } +} + + +// collision + +void hitBoss(){ + bossHealth--; + // bossHealth -= 10; + if(bossHealth <= 0) finishBoss(); +} + +void collideBoss(){ + if(bombing && bossClock % 10 == 0) bossHealth--; + for(s16 j = 0; j < PLAYER_BULLET_LIMIT; j++) if(playerBullets[j].active) { + bossCollisionDistance = getApproximatedDistance( + fix32Sub(fix16ToFix32(playerBullets[j].pos.x), BOSS_X), + fix32Sub(fix16ToFix32(playerBullets[j].pos.y), BOSS_Y)); + if(bossCollisionDistance < BOSS_COLLIDE_OFFSET){ + spawnExplosion(fix16ToInt(playerBullets[j].pos.x), fix16ToInt(playerBullets[j].pos.y), TRUE); + hitBoss(); + removePlayerBullet(j); + } + } +} + +void finishBoss(){ + bossActive = FALSE; + bossLoaded = FALSE; + zoneOver = TRUE; + bossClock = BOSS_SWITCH_TIME; + for(s8 x = 0; x < 8; x++) for(s8 y = 0; y < 8; y++) VDP_setTileMapXY(BG_A, TILE_ATTR_FULL(PAL1, 0, 0, 0, 11), x + 12, y + 4); + for(s8 x = 0; x < BOSS_TILE_COUNT; x++) VDP_setTileMapXY(BG_A, TILE_ATTR_FULL(PAL1, 0, 0, 0, 11), x + 1, BOSS_TILE_Y); + + + // VDP_drawImageEx(BG_A, &chromeEnemy, TILE_ATTR_FULL(PAL1, 1, 0, 0, 190), 1, BOSS_TILE_Y, 0, DMA_QUEUE); +} + + +// loop + +void loadBoss(){ + bossType++; + // bossType = 4; + switch(bossType){ + case 1: + bossHealth = 100; + break; + case 2: + bossHealth = 150; + break; + case 3: + bossHealth = 150; + break; + case 4: + bossHealth = 250; + break; + } + bossLoaded = FALSE; + bossActive = TRUE; + bossMax = bossHealth; +} + +void updateBoss(){ + if(bossActive) { + if(bossLoaded){ + collideBoss(); + if(!gameOver) shootBoss(); + } else if(bossClock == BOSS_LOAD_TIME){ + VDP_drawImageEx(BG_A, + (bossType == 1 ? &roll : (bossType == 2 ? &waffle : (bossType == 3 ? &cake : &parfait))), + TILE_ATTR_FULL(PAL1, 0, 0, 0, 92), 12, 4, 0, DMA_QUEUE); + bossLoaded = TRUE; + bossClock = -1; + } + bossClock++; + if(bossClock >= 600) bossClock = 0; + } +} \ No newline at end of file diff --git a/src/boss.h b/src/boss.h new file mode 100644 index 0000000..e955811 --- /dev/null +++ b/src/boss.h @@ -0,0 +1,47 @@ +#define BOSS_LOAD_TIME 15 + +#define BOSS_X FIX32(16 * 8) +#define BOSS_Y FIX32(8 * 8) +#define BOSS_B_X fix32ToFix16(BOSS_X) +#define BOSS_B_Y fix32ToFix16(BOSS_Y) +#define BOSS_X_OFFSET FIX16(8 * 10) +#define BOSS_X_OFFSET_NEG fix16Sub(FIX16(0), BOSS_X_OFFSET) + +#define BOSS_COLLIDE_OFFSET FIX32(40) + +#define BOSS_SWITCH_TIME -90 + +s16 bossClock, bossInt1, bossInt2, bossInt3, bossType, bossHealth, bossMax; +f16 bossFix1, bossFix2; +s32 bossCollisionDistance; + +bool hitBossPatterns[8]; +bool bossActive, bossLoaded; + +void loadBoss(), + + bossPatternOne(), + bossPatternTwo(), + + bossPatternThree(), + bossPatternFour(), + bossPatternFive(), + + bossPatternSix(), + bossPatternSeven(), + bossPatternEight(), + + bossPatternNine(), + bossPatternTen(), + bossPatternEleven(), + bossPatternTwelve(), + bossPatternThirteen(), + + hitBossPattern(u8), + + drawBoss(), + collideBoss(), + hitBoss(), + finishBoss(), + shootBoss(), + updateBoss(); \ No newline at end of file diff --git a/src/centipede.c b/src/centipede.c new file mode 100644 index 0000000..0c1ab4e --- /dev/null +++ b/src/centipede.c @@ -0,0 +1,195 @@ +#include +#include + +#include "main.h" +#include "enemies.h" +#include "centipede.h" +#include "player.h" +#include "pod.h" +#include "explosion.h" + + +// spawn + +void spawnCentipede(){} + + +// movement + +void moveCentipede(s16 i){ + if(centipedes[i].flipping){ + centipedes[i].pos.y = fix16Add(centipedes[i].pos.y, (centipedes[i].flippedY ? fix16Sub(FIX16(0), centipedes[i].speed) : centipedes[i].speed)); + centipedes[i].flipClock++; + if((centipedes[i].flippedY && centipedes[i].pos.y <= centipedes[i].nextY) || (!centipedes[i].flippedY && centipedes[i].pos.y >= centipedes[i].nextY)){ + centipedes[i].flipping = FALSE; + centipedes[i].pos.y = centipedes[i].nextY; + } + } else { + centipedes[i].pos.x = fix16Add(centipedes[i].pos.x, (centipedes[i].flippedX ? fix16Sub(FIX16(0), centipedes[i].speed) : centipedes[i].speed)); + if(centipedes[i].pos.x >= CENTIPEDE_LIMIT_RIGHT || centipedes[i].pos.x <= CENTIPEDE_LIMIT_LEFT){ + centipedes[i].flippedX = centipedes[i].pos.x >= CENTIPEDE_LIMIT_RIGHT; + if(!centipedes[i].flippedY && centipedes[i].pos.y >= CENTIPEDE_LIMIT_BOTTOM){ + centipedes[i].flippedY = TRUE; + if(i == lastCentipede && lastCentipede < centipedeCount){ + struct podSpawner pSpawn = { + .x = FIX16(fix16ToInt(centipedes[i].pos.x) / 16 * 16), + .y = FIX16(fix16ToInt(centipedes[i].pos.y) / 16 * 16), + .random = FALSE + }; + spawnPod(pSpawn); + } + // can add another head + }else if(centipedes[i].flippedY && centipedes[i].pos.y <= CENTIPEDE_LIMIT_TOP) centipedes[i].flippedY = FALSE; + centipedes[i].flipping = TRUE; + centipedes[i].nextY = centipedes[i].flippedY ? fix16Sub(centipedes[i].pos.y, FIX16(16)) : fix16Add(centipedes[i].pos.y, FIX16(16)); + } + if(centipedes[i].flipClock > 0) centipedes[i].flipClock = 0; + } +} + + +// change sprite + +void animateCentipede(s16 i){ + if(centipedes[i].definition > 0){ + switch(centipedes[i].definition){ + case 1: + SPR_setDefinition(centipedes[i].image, &imgGumdropRed); + break; + case 2: + SPR_setDefinition(centipedes[i].image, &imgGumdropGreen); + break; + case 3: + SPR_setDefinition(centipedes[i].image, &imgGumdropBlue); + break; + } + centipedes[i].definition = 0; + } +} + + +// collision against centipede + +void hitCentipede(s16 i){ + spawnExplosion(fix16ToInt(centipedes[i].pos.x), fix16ToInt(centipedes[i].pos.y), TRUE); + centipedes[i].health -= CENTIPEDE_HIT; + XGM_startPlayPCM(random() % 2 < 1 ? SFX_EXPLOSION_1 : SFX_EXPLOSION_2, 1, SOUND_PCM_CH4); + currentScore += 7; + if(centipedes[i].health < 0){ + struct podSpawner pSpawn = { + .x = FIX16(fix16ToInt(centipedes[i].pos.x) / 16 * 16), + .y = FIX16(fix16ToInt(centipedes[i].pos.y) / 16 * 16), + .random = FALSE + }; + spawnPod(pSpawn); + destroyCentipede(i); + currentScore += currentZone >= 10 ? 2500 : 1500; + XGM_startPlayPCM(SFX_EXPLOSION_3, 2, SOUND_PCM_CH4); + } else if(centipedes[i].health < 33) centipedes[i].definition = 1; + else if(centipedes[i].health < 67) centipedes[i].definition = 2; +} + +void turnCentipede(s16 i, s16 j){ + centipedes[i].flippedX = centipedes[i].flippedX ? FALSE : TRUE; + centipedes[i].turning = TRUE; + centipedes[i].turnClock = 0; + if(centipedes[i].pos.x < pods[j].pos.x) centipedes[i].pos.x = fix16Sub(pods[j].pos.x, FIX16(8)); + else if(centipedes[i].pos.x >= pods[j].pos.x) centipedes[i].pos.x = fix16Add(pods[j].pos.x, FIX16(8)); +} + +void collideCentipede(s16 i){ + // against pods + for(s16 j = 0; j < POD_COUNT; j++) if(pods[j].active) { + centipedePodCheck = getApproximatedDistance( + fix16ToFix32(centipedes[i].pos.x) - fix16ToFix32(pods[j].pos.x), + fix16ToFix32(centipedes[i].pos.y) - fix16ToFix32(pods[j].pos.y)); + if(centipedePodCheck < CENTIPEDE_POD_OFFSET) turnCentipede(i, j); + } + + if(bombing && centipedes[i].clock % 20 == 0) hitCentipede(i); + // against player bullet + centipedeCollided = FALSE; + for(s16 j = 0; j < PLAYER_BULLET_LIMIT; j++) if(playerBullets[j].active) { + if(fix16Sub(playerBullets[j].pos.y, CENTIPEDE_BULLET_OFFSET) <= fix16Add(centipedes[i].pos.y, CENTIPEDE_COLLIDE_OFFSET) && + fix16Add(playerBullets[j].pos.y, CENTIPEDE_BULLET_OFFSET) >= fix16Sub(centipedes[i].pos.y, CENTIPEDE_COLLIDE_OFFSET) && + fix16Sub(playerBullets[j].pos.x, CENTIPEDE_BULLET_OFFSET) <= fix16Add(centipedes[i].pos.x, CENTIPEDE_COLLIDE_OFFSET) && + fix16Add(playerBullets[j].pos.x, CENTIPEDE_BULLET_OFFSET) >= fix16Sub(centipedes[i].pos.x, CENTIPEDE_COLLIDE_OFFSET)){ + centipedeCollided = TRUE; + hitCentipede(i); + removePlayerBullet(j); + } + } + // against player + if(centipedes[i].clock % 4 == 0 && (!centipedeCollided && centipedes[i].pos.y >= fix16Sub(playerPos.y, FIX16(32)))){ + if(fix16Sub(playerPos.y, CENTIPEDE_PLAYER_OFFSET) <= fix16Add(centipedes[i].pos.y, CENTIPEDE_COLLIDE_OFFSET) && + fix16Add(playerPos.y, CENTIPEDE_PLAYER_OFFSET) >= fix16Sub(centipedes[i].pos.y, CENTIPEDE_COLLIDE_OFFSET) && + fix16Sub(playerPos.x, CENTIPEDE_PLAYER_OFFSET) <= fix16Add(centipedes[i].pos.x, CENTIPEDE_COLLIDE_OFFSET) && + fix16Add(playerPos.x, CENTIPEDE_PLAYER_OFFSET) >= fix16Sub(centipedes[i].pos.x, CENTIPEDE_COLLIDE_OFFSET)){ + // hitCentipede(i); + // turnCentipede(i); + // hit player here + } + } +} + +void destroyCentipede(s16 i){ + centipedes[i].active = FALSE; + centipedes[i].flippedX = FALSE; + centipedes[i].flippedY = FALSE; + centipedes[i].flipping = FALSE; + centipedes[i].flag1 = FALSE; + centipedes[i].pos.x = CENTIPEDE_DUMP_X; + centipedes[i].pos.y = CENTIPEDE_DUMP_Y; + SPR_releaseSprite(centipedes[i].image); +} + + +// loop + +void loadCentipede(){ + centipedeCount = 4; + if(currentZone >= 5) centipedeCount++; + if(currentZone >= 10) centipedeCount++; + if(currentZone >= 15) centipedeCount++; + for(s16 i = 0; i < centipedeCount; i++){ + centipedes[i].active = TRUE; + centipedes[i].pos.x = FIX16(16 + 16 * i); + centipedes[i].pos.y = CENTIPEDE_LIMIT_TOP; + // centipedes[i].speed = FIX16(currentZone >= 10 ? 4 : 2); + centipedes[i].speed = FIX16(2); + centipedes[i].image = SPR_addSprite(&imgGumdropRed, fix16ToInt(centipedes[i].pos.x), fix16ToInt(centipedes[i].pos.y), TILE_ATTR(PAL1, 0, FALSE, FALSE)); + centipedes[i].definition = 3; + centipedes[i].health = i % 2 == 0 ? 80 : 100; + centipedes[i].opposite = i % 2 == 1; + SPR_setDepth(centipedes[i].image, 3); + } +} + +void resetCentipede(){ + for(s16 i = 0; i < centipedeCount; i++) destroyCentipede(i); +} + +void updateCentipede(){ + zoneOverCheck = TRUE; + tempLastCentipede = 0; + for(s16 i = 0; i < centipedeCount; i++) if(centipedes[i].active) { + tempLastCentipede++; + zoneOverCheck = FALSE; + moveCentipede(i); + collideCentipede(i); + animateCentipede(i); + if(centipedes[i].turning){ + centipedes[i].turnClock++; + if(centipedes[i].turnClock >= 30) centipedes[i].turning = FALSE; + } + SPR_setPosition(centipedes[i].image, fix16ToInt(centipedes[i].pos.x) - CENTIPEDE_OFFSET, fix16ToInt(centipedes[i].pos.y) - CENTIPEDE_OFFSET); + if(centipedes[i].opposite){ + if(centipedes[i].clock % 40 == 0) SPR_setFrame(centipedes[i].image, 1); + else if(centipedes[i].clock % 40 == 20) SPR_setFrame(centipedes[i].image, 0); + } + centipedes[i].clock++; + if(centipedes[i].clock >= 600) centipedes[i].clock = 120; + } + lastCentipede = tempLastCentipede; + if(zoneOverCheck) zoneOver = TRUE; +} diff --git a/src/centipede.h b/src/centipede.h new file mode 100644 index 0000000..3f73c0e --- /dev/null +++ b/src/centipede.h @@ -0,0 +1,43 @@ +#define CENTIPEDE_MAX 8 +#define CENTIPEDE_OFFSET 8 +#define CENTIPEDE_LIMIT_LEFT FIX16(8) +#define CENTIPEDE_LIMIT_RIGHT FIX16(GAME_WIDTH - 8) +#define CENTIPEDE_LIMIT_TOP FIX16(32) +#define CENTIPEDE_LIMIT_BOTTOM FIX16(GAME_HEIGHT - 16) + +#define CENTIPEDE_COLLIDE_OFFSET FIX16(8) +#define CENTIPEDE_BULLET_OFFSET FIX16(8) +#define CENTIPEDE_PLAYER_OFFSET FIX16(2) +#define CENTIPEDE_POD_OFFSET FIX32(4) + +#define CENTIPEDE_DUMP_X FIX16(GAME_WIDTH + 64) +#define CENTIPEDE_DUMP_Y FIX16(0 - 64) + +#define CENTIPEDE_HIT 6 +// #define CENTIPEDE_HIT 100 + +struct centipede { + Sprite* image; + Vect2D_f16 pos; + bool flippedX, flippedY, flipping, active, flag1, turning, opposite; + s16 clock, flipClock, definition, health, turnClock; + f16 speed, nextY; +}; + +s16 centipedeCount, lastCentipede, tempLastCentipede; +s32 centipedePodCheck; +f16 centipedeSpeed; + +struct centipede centipedes[CENTIPEDE_MAX]; + +bool centipedeCollided, zoneOverCheck; + +void loadCentipede(), + moveCentipede(s16), + collideCentipede(s16), + animateCentipede(s16), + destroyCentipede(s16), + splitCentipede(s16), + turnCentipede(s16, s16), + resetCentipede(), + updateCentipede(); \ No newline at end of file diff --git a/src/chrome.c b/src/chrome.c new file mode 100644 index 0000000..983195b --- /dev/null +++ b/src/chrome.c @@ -0,0 +1,178 @@ +#include +#include + +#include "main.h" +#include "chrome.h" +#include "boss.h" +#include "player.h" + + +// lives + +void loadChromeLives(){ + VDP_drawImageEx(BG_A, &chromePlayer, TILE_ATTR_FULL(PAL1, 1, 0, 0, 160), 1, 1, 0, DMA_QUEUE); +} + +void updateChromePlayerLives(){ + if(chromePlayerLives != playerLives){ + for(s8 x = 0; x < 6; x++){ + VDP_setTileMapXY(BG_A, TILE_ATTR_FULL(PAL1, 0, 0, 0, 11), x + 6, 1); + if(x < playerLives) VDP_drawText("#", x + 6, 1); + } + chromePlayerLives = playerLives; + } +} + + +// bombs + +void updateChromePlayerBombs(){ + if(chromePlayerBombs != playerBombs){ + for(s8 x = 0; x < 6; x++){ + VDP_setTileMapXY(BG_A, TILE_ATTR_FULL(PAL1, 0, 0, 0, 11), x + 1, PLAYER_BOMBS_Y); + if(x < playerBombs) VDP_drawText("*", x + 1, PLAYER_BOMBS_Y); + } + chromePlayerBombs = playerBombs; + } +} + + +// score + +void updateChromeScore(){ + chromeCurrentScore = currentScore; + intToStr(chromeCurrentScore, chromeScoreStr, 8); + VDP_drawText(chromeScoreStr, 12, 1); +} + + +// zone + +void loadChromeZone(){ + intToStr(currentZone, zoneHudStr, 2); + VDP_drawText(zoneHudStr, 29, 1); + VDP_drawImageEx(BG_A, &chromeStage, TILE_ATTR_FULL(PAL1, 1, 0, 0, 170), 24, 1, 0, DMA_QUEUE); +} + + +// states + +void loadChromeZoneOver(){ + chromePlayerLives = 0; + chromePlayerBombs = 0; + intToStr(currentZone, currentZoneStr, 2); + VDP_drawText("stage", 7, 8); + VDP_drawText(currentZoneStr, 13, 8); + VDP_drawText("complete!", 16, 8); + VDP_drawText("NO-MISS", 7, 12); + VDP_drawText(noMiss ? (currentZone >= 10 ? "35000" : "25000") : "00000", 20, 12); + VDP_drawText("STAGE", 7, 14); + VDP_drawText(currentZone >= 10 ? "15000" : "10000", 20, 14); + if(currentZone % 5 == 0){ + VDP_drawText("BOSS", 7, 16); + VDP_drawText(currentZone >= 10 ? "30000" : "20000", 20, 16); + currentScore += currentZone >= 10 ? 30000 : 20000; + } + if(currentZone == 10) XGM_stopPlay(); + currentZone++; + VDP_drawText("next stage", 7, 21); + loadedZoneOver = TRUE; + if(noMiss) currentScore += currentZone >= 10 ? 35000 : 25000; + currentScore += currentZone >= 10 ? 15000 : 10000; + updateChromeScore(); + XGM_startPlayPCM(SFX_ZONE_OVER, 1, SOUND_PCM_CH2); +} + +void updateChromeZoneOver(){ // what the fuck am i on to do this + strcpy(zoneOverTime, zoneOverClock >= 180 ? "3" : (zoneOverClock >= 120 ? "2" : (zoneOverClock >= 60 ? "1" : "0"))); + strcat(zoneOverTime, ";"); + if(zoneOverClock % 60 < 10) strcat(zoneOverTime, "0"); + else if(zoneOverClock % 60 < 20) strcat(zoneOverTime, "1"); + else if(zoneOverClock % 60 < 30) strcat(zoneOverTime, "2"); + else if(zoneOverClock % 60 < 40) strcat(zoneOverTime, "3"); + else if(zoneOverClock % 60 < 50) strcat(zoneOverTime, "4"); + else if(zoneOverClock % 60 < 60) strcat(zoneOverTime, "5"); + switch(zoneOverClock % 6){ + case 0: strcat(zoneOverTime, "0"); break; + case 1: strcat(zoneOverTime, "1"); break; + case 2: strcat(zoneOverTime, "2"); break; + case 3: strcat(zoneOverTime, "3"); break; + case 4: strcat(zoneOverTime, "4"); break; + case 5: strcat(zoneOverTime, "5"); break; + case 6: strcat(zoneOverTime, "6"); break; + case 7: strcat(zoneOverTime, "7"); break; + case 8: strcat(zoneOverTime, "8"); break; + case 9: strcat(zoneOverTime, "9"); break; + } + VDP_drawText(zoneOverTime, 21, 21); + zoneOverClock--; + if(zoneOverClock <= 0) nextZone(); +} + +void loadChromeGameOver(bool beatIt){ + XGM_stopPlay(); + loadedChromeGameOver = TRUE; + VDP_drawText(beatIt ? "beat game!" : "game over!", 11, 10); + VDP_drawText(currentScore > highScore ? "NEW HI SCORE" : "FINAL SCORE;", 10, 13); + VDP_drawText(chromeScoreStr, 12, 15); + if(beatIt){ + VDP_drawText("special thanks", 9, 19); + VDP_drawText("TOUHOU GAMEDEV DISCORD", 5, 21); + } else VDP_drawText("press any button", 8, 18); + if(currentScore > highScore) highScore = currentScore; + XGM_startPlayPCM(beatIt ? SFX_BEAT_GAME : SFX_GAME_OVER, 2, SOUND_PCM_CH2); +} + +void loadChromeBeatGame(){ + gameOver = TRUE; + loadChromeGameOver(TRUE); +} + + +// boss + +void updateChromeBoss(){ + if(bossActive){ + if(lastBossHealth != bossHealth){ + VDP_drawImageEx(BG_A, &chromeEnemy, TILE_ATTR_FULL(PAL1, 1, 0, 0, 190), 1, BOSS_TILE_Y, 0, DMA_QUEUE); + bossLimit = fix16Div(fix16Mul(fix16Div(FIX16(bossHealth), FIX16(bossMax)), BOSS_TILE_PX), 8); + for(s16 x = 0; x < BOSS_TILE_COUNT; x++){ + if(bossHealth <= 1 || FIX16(x) >= bossLimit){ + VDP_setTileMapXY(BG_A, TILE_ATTR_FULL(PAL1, 0, 0, 0, 11), x + BOSS_TILE_X, BOSS_TILE_Y); + } + } + for(s16 x = 0; x < BOSS_TILE_COUNT; x++){ + if(bossHealth > 1 && FIX16(x) < bossLimit) VDP_setTileMapXY(BG_A, TILE_ATTR_FULL(PAL1, 1, 0, 0, 8), x + BOSS_TILE_X, BOSS_TILE_Y); + } + lastBossHealth = bossHealth; + } + } +} + + +// loop + +void loadChrome(){ + VDP_loadTileSet(bossBar.tileset, 8, DMA); + updateChromeScore(); + loadChromeZone(); + loadChromeLives(); + zoneOverClock = ZONE_OVER_CHROME_LIMIT; +} + +void updateChrome(){ + if(zoneStarting) loadChrome(); + else { + if(zoneOver){ + if(!loadedZoneOver) currentZone == 20 ? loadChromeBeatGame() : loadChromeZoneOver(); + updateChromeZoneOver(); + } else if(gameOver){ + if(!loadedChromeGameOver) loadChromeGameOver(FALSE); + } else { + updateChromePlayerLives(); + updateChromePlayerBombs(); + updateChromeBoss(); + if(chromeCurrentScore < currentScore) updateChromeScore(); + } + } +} \ No newline at end of file diff --git a/src/chrome.h b/src/chrome.h new file mode 100644 index 0000000..232d469 --- /dev/null +++ b/src/chrome.h @@ -0,0 +1,36 @@ +// #define ZONE_OVER_CHROME_LIMIT 1 +#define ZONE_OVER_CHROME_LIMIT 240 +// #define ZONE_OVER_CHROME_LIMIT 60 + +#define BOSS_TILE_X 6 +#define BOSS_TILE_Y 3 +#define BOSS_TILE_COUNT 25 +#define BOSS_TILE_PX BOSS_TILE_COUNT * 8 + +#define PLAYER_BOMBS_Y 26 + +s16 frameTileIndex, zoneOverClock, zoneOverStage, lastBossHealth, bossTileIndex; +s8 chromePlayerLives, chromePlayerBombs; +s32 chromeCurrentScore; + +fix16 bossLimit, lastBossLimit; + +bool loadedZoneOver, loadedChromeGameOver; + +char currentZoneStr[2], + zoneHudStr[2], + currentZoneApp[1], + zoneOverTime[8], + chromeScoreStr[10]; + +void loadChrome(), + loadChromeZoneOver(), + loadChromeLives(), + loadChromeGameOver(bool), + updateChromeZoneOver(), + updateChromeScore(), + loadChromeBeatGame(), + updateChromePlayerLives(), + updateChromePlayerBombs(), + updateChromeBoss(), + updateChrome(); \ No newline at end of file diff --git a/src/controls.c b/src/controls.c new file mode 100644 index 0000000..fffd3ee --- /dev/null +++ b/src/controls.c @@ -0,0 +1,16 @@ +#include +#include "controls.h" + +void updateControls(u16 joy, u16 changed, u16 state){ + if(joy == JOY_1){ + if(changed){} + controls.left = (state & BUTTON_LEFT); + controls.right = (state & BUTTON_RIGHT); + controls.up = (state & BUTTON_UP); + controls.down = (state & BUTTON_DOWN); + controls.a = (state & BUTTON_A); + controls.b = (state & BUTTON_B); + controls.c = (state & BUTTON_C); + controls.start = (state & BUTTON_START); + } +} \ No newline at end of file diff --git a/src/controls.h b/src/controls.h new file mode 100644 index 0000000..b46e76e --- /dev/null +++ b/src/controls.h @@ -0,0 +1,7 @@ +struct controls { + bool left, right, up, down, a, b, c, x, y, z, start, mode; +}; + +struct controls controls; + +void updateControls(u16, u16, u16); \ No newline at end of file diff --git a/src/enemies.c b/src/enemies.c new file mode 100644 index 0000000..2674560 --- /dev/null +++ b/src/enemies.c @@ -0,0 +1,177 @@ +#include +#include + +#include "main.h" +#include "enemies.h" +#include "player.h" +#include "yin.h" +#include "centipede.h" +#include "pod.h" +#include "boss.h" + + +// bullets + +void spawnEnemyBullet(struct bulletSpawner spawner, void(*updater)){ + s16 i = -1; + for(s16 h = 0; h < ENEMY_BULLET_LIMIT; h++) if(!bullets[h].active && i == -1) i = h; + if(i > -1 && !gameOver){ + bullets[i].active = TRUE; + bullets[i].grazed = FALSE; + bullets[i].pos.x = spawner.x; + bullets[i].pos.y = spawner.y; + bullets[i].speed = spawner.speed ? spawner.speed : FIX16(2); + bullets[i].angle = spawner.angle ? spawner.angle : 0; + bullets[i].flag1 = spawner.flag1 ? TRUE : FALSE; + bullets[i].flag2 = spawner.flag2 ? TRUE : FALSE; + bullets[i].flag3 = spawner.flag3 ? TRUE : FALSE; + bullets[i].flag4 = spawner.flag4 ? TRUE : FALSE; + bullets[i].int1 = spawner.int1 ? spawner.int1 : 0; + bullets[i].int2 = spawner.int2 ? spawner.int2 : 0; + bullets[i].int3 = spawner.int3 ? spawner.int3 : 0; + bullets[i].int4 = spawner.int4 ? spawner.int4 : 0; + bullets[i].velocity.x = spawner.velocityX ? spawner.velocityX : fix16Mul(cosFix16(spawner.angle), spawner.speed); + bullets[i].velocity.y = spawner.velocityY ? spawner.velocityY : fix16Mul(sinFix16(spawner.angle), spawner.speed); + bullets[i].updater = updater; + bullets[i].clock = 0; + switch(spawner.type){ + case 1: bullets[i].image = SPR_addSprite(&imgSmallRedBullet, bullets[i].pos.x, bullets[i].pos.y, TILE_ATTR(PAL1, 0, FALSE, FALSE)); break; + case 2: bullets[i].image = SPR_addSprite(&imgBigRedBullet, bullets[i].pos.x, bullets[i].pos.y, TILE_ATTR(PAL1, 0, FALSE, FALSE)); break; + case 3: bullets[i].image = SPR_addSprite(&imgSmallBlueBullet, bullets[i].pos.x, bullets[i].pos.y, TILE_ATTR(PAL1, 0, FALSE, FALSE)); break; + case 4: bullets[i].image = SPR_addSprite(&imgBigBlueBullet, bullets[i].pos.x, bullets[i].pos.y, TILE_ATTR(PAL1, 0, FALSE, FALSE)); break; + case 5: bullets[i].image = SPR_addSprite(&imgSmallPinkBullet, bullets[i].pos.x, bullets[i].pos.y, TILE_ATTR(PAL1, 0, FALSE, FALSE)); break; + case 6: bullets[i].image = SPR_addSprite(&imgBigPinkBullet, bullets[i].pos.x, bullets[i].pos.y, TILE_ATTR(PAL1, 0, FALSE, FALSE)); break; + } + if(spawner.type % 2 == 0){ + bullets[i].xOffset = 8; + bullets[i].yOffset = 8; + SPR_setDepth(bullets[i].image, 2); + } else if(spawner.type % 2 == 1){ + bullets[i].xOffset = 4; + bullets[i].yOffset = 4; + SPR_setDepth(bullets[i].image, 1); + } + SPR_setPosition(bullets[i].image, fix16ToInt(bullets[i].pos.x) - bullets[i].xOffset, fix16ToInt(bullets[i].pos.y) - bullets[i].yOffset); + } +} + +void checkEnemyBulletCollision(s16 i){ + enemyBulletCollisionDistance = getApproximatedDistance( + fix16ToFix32(playerPos.x) - fix16ToFix32(bullets[i].pos.x), + fix16ToFix32(playerPos.y) - fix16ToFix32(bullets[i].pos.y)); + if(enemyBulletCollisionDistance < intToFix32(bullets[i].xOffset) && !playerRecovering){ + spawnExplosion(fix16ToInt(bullets[i].pos.x), fix16ToInt(bullets[i].pos.y), TRUE); + destroyEnemyBullet(i); + hitPlayer = TRUE; + killBullets = TRUE; + // SND_startPlayPCM_XGM(SFX_EXPLOSION2, 15, SOUND_PCM_CH2); + } else if(!bullets[i].grazed){ + bullets[i].grazed = TRUE; + currentScore += 50; + // SND_startPlayPCM_XGM(SFX_GRAZE, 15, SOUND_PCM_CH2); + } +} + +void updateEnemyBullet(s16 i){ + bullets[i].pos.x = fix16Add(bullets[i].pos.x, bullets[i].velocity.x); + bullets[i].pos.y = fix16Add(bullets[i].pos.y, bullets[i].velocity.y); + bullets[i].updater(i); + enemyBulletCount++; + bullets[i].clock++; + if(bullets[i].pos.x < FIX16(0 - bullets[i].xOffset) || bullets[i].pos.x > FIX16(256 + bullets[i].xOffset) || + bullets[i].pos.y < FIX16(0 - bullets[i].yOffset) || bullets[i].pos.y > FIX16(224 + bullets[i].yOffset) || + killBullets || bullets[i].clock >= 600 || zoneOver){ + destroyEnemyBullet(i); + } +} + +void destroyEnemyBullet(s16 i){ + SPR_releaseSprite(bullets[i].image); + bullets[i].active = FALSE; + bullets[i].clock = 0; + bullets[i].pos.x = FIX16(GAME_WIDTH); + bullets[i].pos.y = FIX16(32); +} + +void drawEnemyBullet(s16 i){ + SPR_setPosition(bullets[i].image, + fix16ToInt(bullets[i].pos.x) - bullets[i].xOffset, fix16ToInt(bullets[i].pos.y) - bullets[i].yOffset); + if(bullets[i].pos.y > fix16Sub(playerPos.y, ENEMY_BULLET_COLLISION_CHECK) && + bullets[i].pos.y < fix16Add(playerPos.y, ENEMY_BULLET_COLLISION_CHECK) && + bullets[i].pos.x > fix16Sub(playerPos.x, ENEMY_BULLET_COLLISION_CHECK) && + bullets[i].pos.x < fix16Add(playerPos.x, ENEMY_BULLET_COLLISION_CHECK)){ + checkEnemyBulletCollision(i); + } +} + + +// utils + +void eUpdate(s16 i){if(i){}} + +void updateEnemyBulletVelocity(s16 i){ + bullets[i].velocity.x = fix16Mul(cosFix16(bullets[i].angle), bullets[i].speed); + bullets[i].velocity.y = fix16Mul(sinFix16(bullets[i].angle), bullets[i].speed); +} + +fix16 honeEnemyBullet(fix16 x, fix16 y, s16 speed, s16 lerp, bool isX){ + honeX = playerPos.x; + honeY = playerPos.y; + if(lerp > 0){ + honeX = fix16Add(fix16Sub(honeX, FIX16(lerp)), FIX16(random() % (lerp * 2))); + honeY = fix16Add(fix16Sub(honeY, FIX16(lerp)), FIX16(random() % (lerp * 2))); + } + honeSpeed = fix32ToFix16(getApproximatedDistance(fix16ToFix32(x) - fix16ToFix32(honeX), fix16ToFix32(y) - fix16ToFix32(honeY))); + return isX ? fix16Mul(fix16Div(fix16Sub(honeX, x), honeSpeed), FIX16(speed)) : fix16Mul(fix16Div(fix16Sub(honeY, y), honeSpeed), FIX16(speed)); +} + + +// kill bullets dramatically + +void updateKillBullets(){ + if(enemyBulletCount >= ENEMY_BULLET_LIMIT) killBullets = TRUE; + if(killBullets){ + if(killBulletsClock % 4 == 0 && killBulletsClock < 20){ + spawnExplosion(32 + random() % 192, 32 + random() % 128, FALSE); + } + killBulletsClock++; + if(killBulletsClock >= 30){ + killBullets = FALSE; + killBulletsClock = 0; + } + } +} + + +// loop + +void loadEnemies(){ + loadYins(); + loadCentipede(); + loadPod(); +} + +void resetEnemies(){ + resetYins(); + resetCentipede(); + resetPod(); + for(s16 i = 0; i < ENEMY_BULLET_LIMIT; i++) destroyEnemyBullet(i); +} + +void updateEnemies(){ + if(zoneStarting && !bossActive) loadEnemies(); + else { + if(bossActive) updateBoss(); + else { + updateYins(); + updateCentipede(); + updatePod(); + } + if(gameClock % 2 == 0){ + enemyBulletCount = 0; + // for(s16 i = 0; i < ENEMY_LIMIT; i++) if(enemies[i].active) updateEnemy(i); + for(s16 i = 0; i < ENEMY_BULLET_LIMIT; i++) if(bullets[i].active) updateEnemyBullet(i); + updateKillBullets(); + } else for(s16 i = 0; i < ENEMY_BULLET_LIMIT; i++) if(bullets[i].active) drawEnemyBullet(i); + } +} \ No newline at end of file diff --git a/src/enemies.h b/src/enemies.h new file mode 100644 index 0000000..a3234fc --- /dev/null +++ b/src/enemies.h @@ -0,0 +1,39 @@ +#define ENEMY_BULLET_LIMIT 64 +#define ENEMY_BULLET_COLLISION_CHECK FIX16(14) + +struct enemyBullet { + bool active, flag1, flag2, flag3, flag4, grazed; + Vect2D_f16 pos, velocity; + fix16 speed; + Sprite* image; + s16 xOffset, yOffset, clock, angle, int1, int2, int3, int4; + void (*updater)(s16); +}; + +struct bulletSpawner { + bool flag1, flag2, flag3, flag4; + fix16 speed, velocityX, velocityY, x, y; + s16 angle, type, int1, int2, int3, int4; +}; + +struct enemyBullet bullets[ENEMY_BULLET_LIMIT]; + +bool killBullets; + +s32 enemyBulletCollisionDistance; +s16 killBulletsClock, enemyBulletCount; +s8 podBulletSpeed, yinBulletSpeed; + +fix16 honeX, honeY, honeSpeed, + honeEnemyBullet(fix16, fix16, s16, s16, bool); + +void loadEnemies(), + spawnEnemyBullet(struct bulletSpawner, void *), + checkEnemyBulletCollision(s16), + updateEnemyBullet(s16), + drawEnemyBullet(s16), + updateKillBullets(), + eUpdate(s16), + destroyEnemyBullet(s16), + resetEnemies(), + updateEnemies(); \ No newline at end of file diff --git a/src/explosion.c b/src/explosion.c new file mode 100644 index 0000000..316c5cb --- /dev/null +++ b/src/explosion.c @@ -0,0 +1,28 @@ +#include +#include +#include "main.h" +#include "explosion.h" + +void loadExplosion(){ + explosionClock = 0; + explosionClockPlayerShot = 0; + explosionImage = SPR_addSprite(&imgExplosionPlayer, EXPLOSION_DUMP_X, EXPLOSION_DUMP_Y, TILE_ATTR(PAL1, 0, FALSE, FALSE)); + explosionImagePlayerShot = SPR_addSprite(&imgExplosionPlayer, EXPLOSION_DUMP_X, EXPLOSION_DUMP_Y, TILE_ATTR(PAL1, 0, FALSE, FALSE)); + SPR_setDepth(explosionImage, 3); + SPR_setDepth(explosionImagePlayerShot, 1); +} + +void spawnExplosion(s16 x, s16 y, bool isPlayerShot){ + SPR_setPosition(isPlayerShot ? explosionImagePlayerShot : explosionImage, x - EXPLOSION_SPRITE_OFFSET, y - EXPLOSION_SPRITE_OFFSET); + isPlayerShot ? (explosionClockPlayerShot = 0) : (explosionClock = 0); + // XGM_startPlayPCM(random() % 2 < 1 ? SFX_EXPLOSION_1 : SFX_EXPLOSION_2, 1, SOUND_PCM_CH4); +} + +void updateExplosion(){ + if(explosionClock >= EXPLOSION_LIMIT || paused) SPR_setPosition(explosionImage, EXPLOSION_DUMP_X, EXPLOSION_DUMP_Y); + if(explosionClockPlayerShot >= EXPLOSION_LIMIT || paused) SPR_setPosition(explosionImagePlayerShot, EXPLOSION_DUMP_X, EXPLOSION_DUMP_Y); + explosionClock++; + explosionClockPlayerShot++; + if(explosionClock >= 600) explosionClock = 60; + if(explosionClockPlayerShot >= 600) explosionClockPlayerShot = 60; +} \ No newline at end of file diff --git a/src/explosion.h b/src/explosion.h new file mode 100644 index 0000000..e6e8033 --- /dev/null +++ b/src/explosion.h @@ -0,0 +1,15 @@ +#define EXPLOSION_DUMP_X GAME_WIDTH + 32 +#define EXPLOSION_DUMP_Y GAME_HEIGHT + 64 + +#define EXPLOSION_SPRITE_OFFSET 12 +#define EXPLOSION_LIMIT 20 + +s16 explosionClock, + explosionClockPlayerShot; + +Sprite* explosionImage; +Sprite* explosionImagePlayerShot; + +void loadExplosion(), + spawnExplosion(s16, s16, bool), + updateExplosion(); \ No newline at end of file diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..c543dfd --- /dev/null +++ b/src/main.c @@ -0,0 +1,140 @@ +#include +#include + +#include "main.h" +#include "controls.h" +#include "chrome.h" +#include "start.h" +#include "boss.h" +#include "background.h" +#include "enemies.h" +#include "player.h" +#include "explosion.h" + +void loadResources(){ + VDP_loadFont(font.tileset, DMA); + VDP_loadTileSet(half.tileset, 10, DMA); + VDP_loadTileSet(least.tileset, 11, DMA); + VDP_loadTileSet(full.tileset, 12, DMA); + VDP_setPalette(PAL1, font.palette -> data); + VDP_setTextPalette(1); + + XGM_setPCM(SFX_MENU_SELECT, sfxMenuSelect, sizeof(sfxMenuSelect)); // shit + XGM_setPCM(SFX_MENU_CHOOSE, sfxMenuChoose, sizeof(sfxMenuChoose)); + XGM_setPCM(SFX_START_GAME, sfxStartGame, sizeof(sfxStartGame)); + XGM_setPCM(SFX_PLAYER_SHOT, sfxPlayerShot, sizeof(sfxPlayerShot)); + XGM_setPCM(SFX_ZONE_OVER, sfxZoneOver, sizeof(sfxZoneOver)); + + XGM_setPCM(SFX_BULLET_1, sfxBullet1, sizeof(sfxBullet1)); + + XGM_setPCM(SFX_EXPLOSION_1, sfxExplosion1, sizeof(sfxExplosion1)); + XGM_setPCM(SFX_EXPLOSION_2, sfxExplosion2, sizeof(sfxExplosion2)); + XGM_setPCM(SFX_EXPLOSION_3, sfxExplosion3, sizeof(sfxExplosion3)); + + XGM_setPCM(SFX_GAME_OVER, sfxGameOver, sizeof(sfxGameOver)); + XGM_setPCM(SFX_BEAT_GAME, sfxBeatGame, sizeof(sfxBeatGame)); + +} + +void loadGame(){ + currentZone = 1; + started = TRUE; + zoneStarting = TRUE; + gameStarting = TRUE; + noMiss = TRUE; + yinBulletSpeed = 4; + podBulletSpeed = 3; + currentScore = 0; + loadExplosion(); + XGM_startPlay(&bgmStage1); +} + +void resetGame(){ + VDP_clearPlane(BG_A, TRUE); + VDP_clearPlane(BG_B, TRUE); + DMA_waitCompletion(); + startClock = 0; + zoneOver = FALSE; + started = FALSE; + gameOverClock = 0; + paused = FALSE; + gameOver = FALSE; + loadedChromeGameOver = FALSE; + loadedZoneOver = FALSE; + zoneStarting = FALSE; + gameClock = 0; + playerLives = 2; + playerBombs = 3; + bossType = 0; + noMiss = TRUE; + SPR_reset(); + for(s8 i = 0; i < BG_SCROLL_WIDTH; i++) backgroundScrolls[i] = 0; + VDP_setVerticalScrollTile(BG_B, 0, backgroundScrolls, BG_SCROLL_WIDTH, DMA_QUEUE); + VDP_setScreenWidth320(); + loadStart(); +} + + +void updateGame(){ + if(started && !paused){ + updateBackground(); + updateEnemies(); + updatePlayer(); + updateExplosion(); + gameClock++; + if(gameClock >= 1800) gameClock = 0; + } + updateChrome(); + if(zoneStarting) zoneStarting = FALSE; + if(gameStarting) gameStarting = FALSE; + if(doZoneStart){ + zoneStarting = TRUE; + doZoneStart = FALSE; + } + if(!gameOver && started && gameClock >= 15 && !zoneOver){ + if(controls.start && !pausing){ + pausing = TRUE; + paused = paused ? FALSE : TRUE; + } else if(!controls.start && pausing) pausing = FALSE; + } else if(gameOver){ + if(gameOverClock < 600) gameOverClock++; + if(gameOverClock >= 120 && (controls.a || controls.b || controls.c || controls.start)) resetGame(); + } +}; + +void nextZone(){ + if(currentZone == 21){ + resetGame(); + } else { + SPR_reset(); + loadExplosion(); + if(currentZone % 5 == 0) loadBoss(); + resetBackground(); + resetEnemies(); + resetPlayer(); + doZoneStart = TRUE; + zoneOver = FALSE; + loadedZoneOver = FALSE; + gameClock = -5; + noMiss = TRUE; + XGM_startPlayPCM(SFX_START_GAME, 1, SOUND_PCM_CH2); + if(currentZone == 11) XGM_startPlay(&bgmStage2); + } +} + +int main() { + XGM_setLoopNumber(-1); + JOY_init(); + JOY_setEventHandler(&updateControls); + loadResources(); + SPR_init(0, 0, 0); + loadStart(); + playerLives = 2; + playerBombs = 3; + while(1){ + started ? updateGame() : updateStart(); + SPR_update(); + SYS_doVBlankProcess(); + } + return (0); +} \ No newline at end of file diff --git a/src/main.h b/src/main.h new file mode 100644 index 0000000..f32b980 --- /dev/null +++ b/src/main.h @@ -0,0 +1,29 @@ +#define GAME_WIDTH 256 +#define GAME_HEIGHT 224 + +#define SFX_MENU_SELECT 64 +#define SFX_MENU_CHOOSE 65 +#define SFX_START_GAME 66 +#define SFX_PLAYER_SHOT 67 +#define SFX_ZONE_OVER 68 + +#define SFX_BULLET_1 69 + +#define SFX_EXPLOSION_1 73 +#define SFX_EXPLOSION_2 74 +#define SFX_EXPLOSION_3 75 + +#define SFX_GAME_OVER 76 +#define SFX_BEAT_GAME 77 + +bool gameOver, noMiss, paused, pausing, zoneOver, zoneStarting, gameStarting, noMiss, doZoneStart; + +s16 gameClock, currentZone, gameOverClock; +s32 currentScore, highScore; + +void loadResources(), + loadGame(), + resetGame(), + updateGame(); + +int main(); \ No newline at end of file diff --git a/src/player.c b/src/player.c new file mode 100644 index 0000000..899f997 --- /dev/null +++ b/src/player.c @@ -0,0 +1,173 @@ +#include +#include +#include "player.h" +#include "main.h" +#include "enemies.h" +#include "controls.h" + + +// movement + +void updatePlayerBounds(){ + if(playerPos.x < PLAYER_LIMIT_LEFT) playerPos.x = PLAYER_LIMIT_LEFT; + else if(playerPos.x > PLAYER_LIMIT_RIGHT) playerPos.x = PLAYER_LIMIT_RIGHT; + if(playerPos.y < PLAYER_LIMIT_TOP) playerPos.y = PLAYER_LIMIT_TOP; + else if(playerPos.y > PLAYER_LIMIT_BOTTOM) playerPos.y = PLAYER_LIMIT_BOTTOM; +} + +void updatePlayerMove(){ + playerVelocity.x = FIX16(0); + playerVelocity.y = FIX16(0); + if(controls.left){ + if(controls.down){ + playerVelocity.x = MOVEMENT_NORMALIZE_NEG; + playerVelocity.y = MOVEMENT_NORMALIZE; + } + else if(controls.up){ + playerVelocity.x = MOVEMENT_NORMALIZE_NEG; + playerVelocity.y = MOVEMENT_NORMALIZE_NEG; + } + else playerVelocity.x = MOVEMENT_NEG; + } else if(controls.right){ + if(controls.down){ + playerVelocity.x = MOVEMENT_NORMALIZE; + playerVelocity.y = MOVEMENT_NORMALIZE; + } + else if(controls.up){ + playerVelocity.x = MOVEMENT_NORMALIZE; + playerVelocity.y = MOVEMENT_NORMALIZE_NEG; + } + else playerVelocity.x = MOVEMENT_POS; + } else if(controls.up || controls.down) playerVelocity.y = controls.up ? MOVEMENT_NEG : MOVEMENT_POS; + playerPos.x += fix16Mul(playerVelocity.x, controls.b ? PLAYER_SPEED_FOCUS : PLAYER_SPEED); + playerPos.y += fix16Mul(playerVelocity.y, controls.b ? PLAYER_SPEED_FOCUS : PLAYER_SPEED); + updatePlayerBounds(); + SPR_setPosition(playerSprite, fix16ToInt(playerPos.x) - 11, fix16ToInt(playerPos.y) - 16); +} + + +// shooting + +void spawnPlayerBullet(){ + static s16 i = 0; + for(s16 j = 0; j < PLAYER_BULLET_LIMIT; j++) if(!playerBullets[j].active) i = j; + playerBullets[i].active = TRUE; + playerBullets[i].pos.x = playerPos.x; + playerBullets[i].pos.y = fix16Sub(playerPos.y, FIX16(8)); + XGM_startPlayPCM(SFX_PLAYER_SHOT, 0, SOUND_PCM_CH4); +} + +void removePlayerBullet(s16 i){ + playerBullets[i].pos.x = FIX16(PLAYER_BULLET_DUMP_X); + playerBullets[i].pos.y = FIX16(PLAYER_BULLET_DUMP_Y); + SPR_setPosition(playerBullets[i].image, PLAYER_BULLET_DUMP_X, PLAYER_BULLET_DUMP_Y); + playerBullets[i].active = FALSE; +} + +void updatePlayerBullets(){ + for(s16 i = 0; i < PLAYER_BULLET_LIMIT; i++) if(playerBullets[i].active){ + playerBullets[i].pos.y = fix16Sub(playerBullets[i].pos.y, PLAYER_BULLET_SPEED); + SPR_setPosition(playerBullets[i].image, fix16ToInt(playerBullets[i].pos.x) - 8, fix16ToInt(playerBullets[i].pos.y) - 8); + if(playerBullets[i].pos.y <= PLAYER_BULLET_UP_LIMIT || playerBullets[i].pos.y >= PLAYER_BULLET_DOWN_LIMIT || zoneOver) removePlayerBullet(i); + } +} + +void updatePlayerShot(){ + if(playerShotClock >= PLAYER_SHOT_INTERVAL && controls.a) playerShotClock = 0; + if(playerShotClock == 0 && !zoneOver) spawnPlayerBullet(); + playerShotClock++; + if(playerShotClock >= 600) playerShotClock = PLAYER_SHOT_INTERVAL; +} + + +// bomb + +void spawnBomb(){ + killBullets = TRUE; + SND_startPlayPCM_XGM(random() % 2 < 1 ? SFX_EXPLOSION_1 : SFX_EXPLOSION_2, 15, SOUND_PCM_CH2); + spawnExplosion(random() % GAME_WIDTH, random() % GAME_HEIGHT, FALSE); +} + +void updatePlayerBomb(){ + if(bombing){ + if(bombClock % BOMB_INTERVAL == 0) spawnBomb(); + bombClock++; + if(bombClock >= BOMB_LIMIT){ + bombClock = 0; + bombing = FALSE; + } + } else if(controls.c && playerBombs > 0){ + bombing = TRUE; + playerBombs -= 1; + } +} + + +// get hit + +void updatePlayerHit(){ + if(hitPlayer){ + hitPlayer = FALSE; + playerRecovering = TRUE; + playerPos.x = PLAYER_INIT_X; + playerPos.y = PLAYER_INIT_Y; + playerLives -= 1; + noMiss = FALSE; + XGM_startPlayPCM(random() % 2 < 1 ? SFX_EXPLOSION_1 : SFX_EXPLOSION_2, 1, SOUND_PCM_CH4); + spawnExplosion(fix16ToInt(playerPos.x), fix16ToInt(playerPos.y), TRUE); + // if(playerLives < 0) playerLives = 0; + if(playerLives < 0) gameOver = TRUE; + } + if(!gameOver && playerRecovering){ + if(recoverClock % RECOVER_INTERVAL == 0) SPR_setVisibility(playerSprite, HIDDEN); + else if(recoverClock % RECOVER_INTERVAL == RECOVER_INTERVAL_HALF) SPR_setVisibility(playerSprite, VISIBLE); + recoverClock++; + if(recoverClock >= RECOVER_MAX){ + SPR_setVisibility(playerSprite, VISIBLE); + recoverClock = 0; + playerRecovering = FALSE; + } + } +} + + +// loop + + +void loadPlayer(){ + playerShotClock = PLAYER_SHOT_INTERVAL; + playerPos.x = PLAYER_INIT_X; + playerPos.y = PLAYER_INIT_Y; + playerSprite = SPR_addSprite(&imgPlayer, playerPos.x, playerPos.y, TILE_ATTR(PAL1, 1, FALSE, FALSE)); + SPR_setDepth(playerSprite, 4); + for(s16 i = 0; i < PLAYER_BULLET_LIMIT; i++){ + playerBullets[i].image = SPR_addSprite(&imgBullet, PLAYER_BULLET_DUMP_X, PLAYER_BULLET_DUMP_Y, TILE_ATTR(PAL1, 1, FALSE, FALSE)); + SPR_setDepth(playerBullets[i].image, 4); + } +} + +void resetPlayer(){ + playerPos.x = PLAYER_INIT_X; + playerPos.y = PLAYER_INIT_Y; + SPR_releaseSprite(playerSprite); + for(s16 i = 0; i < PLAYER_BULLET_LIMIT; i++) if(playerBullets[i].active){ + playerBullets[i].active = FALSE; + SPR_releaseSprite(playerBullets[i].image); + } +} + +void updatePlayer(){ + if(zoneStarting) loadPlayer(); + else { + updatePlayerBullets(); + if(!gameOver && !paused){ + if(zoneOver) SPR_setVisibility(playerSprite, HIDDEN); + else { + updatePlayerMove(); + updatePlayerHit(); + } + updatePlayerShot(); + updatePlayerBomb(); + } else if(gameOver) resetPlayer(); + } +} \ No newline at end of file diff --git a/src/player.h b/src/player.h new file mode 100644 index 0000000..5ab04e3 --- /dev/null +++ b/src/player.h @@ -0,0 +1,61 @@ +#define PLAYER_LIMIT_LEFT FIX16(4) +#define PLAYER_LIMIT_RIGHT fix16Sub(FIX16(GAME_WIDTH), PLAYER_LIMIT_LEFT) +#define PLAYER_LIMIT_TOP PLAYER_LIMIT_LEFT +#define PLAYER_LIMIT_BOTTOM fix16Sub(FIX16(GAME_HEIGHT), PLAYER_LIMIT_LEFT) + +#define MOVEMENT_NORMALIZE FIX16(0.707) +#define MOVEMENT_NORMALIZE_NEG FIX16(-0.707) +#define MOVEMENT_POS FIX16(1) +#define MOVEMENT_NEG FIX16(-1) + +#define PLAYER_SPEED FIX16(3.25) +#define PLAYER_SPEED_FOCUS FIX16(2) + +#define PLAYER_INIT_X FIX16(GAME_WIDTH / 2) +#define PLAYER_INIT_Y FIX16(GAME_HEIGHT - 32) + +#define PLAYER_BULLET_LIMIT 3 +#define PLAYER_SHOT_INTERVAL 10 +#define PLAYER_BULLET_SPEED FIX16(8 * 4) + +#define PLAYER_BULLET_UP_LIMIT FIX16(8) +#define PLAYER_BULLET_DOWN_LIMIT FIX16(GAME_HEIGHT + 16) + +#define PLAYER_BULLET_DUMP_X GAME_WIDTH + 16 +#define PLAYER_BULLET_DUMP_Y GAME_HEIGHT + 16 + +#define RECOVER_INTERVAL 30 +#define RECOVER_INTERVAL_HALF 15 +#define RECOVER_MAX RECOVER_INTERVAL * 6 + +#define BOMB_LIMIT 200 +#define BOMB_INTERVAL 10 + +struct playerBullet { + bool active, downward; + Vect2D_f16 pos; + Sprite* image; +}; +struct playerBullet playerBullets[PLAYER_BULLET_LIMIT]; + +Sprite* playerSprite; + +Vect2D_f16 playerPos, playerVelocity; + +s16 playerShotClock, recoverClock, bombClock; +s8 playerLives, playerBombs; + +bool hitPlayer, playerRecovering, bombing; + +void loadPlayer(), + updatePlayer(), + updatePlayerBounds(), + updatePlayerMove(), + updatePlayerShot(), + updatePlayerBullets(), + spawnPlayerBullet(), + spawnBomb(), + updatePlayerBomb(), + resetPlayer(), + updatePlayerHit(), + removePlayerBullet(s16); \ No newline at end of file diff --git a/src/pod.c b/src/pod.c new file mode 100644 index 0000000..70108c0 --- /dev/null +++ b/src/pod.c @@ -0,0 +1,125 @@ +#include +#include + +#include "main.h" +#include "enemies.h" +#include "pod.h" +#include "explosion.h" +#include "boss.h" + + +// spawn + +void spawnPod(struct podSpawner spawner){ + s16 i = -1; + for(s16 h = 0; h < POD_COUNT; h++) if(!pods[h].active && i == -1) i = h; + if(i > -1){ + pods[i].active = TRUE; + pods[i].pos.x = spawner.x; + pods[i].pos.y = spawner.y; + pods[i].clock = 0; + pods[i].random = spawner.random; + pods[i].image = SPR_addSprite(&imgSpider, fix16ToInt(POD_DUMP_X), fix16ToInt(POD_DUMP_Y), TILE_ATTR(PAL1, 0, FALSE, FALSE)); + } +} + + +// shoot + +void podPatternOne(s16 i){ + struct bulletSpawner bSpawn = { + .x = pods[i].pos.x, + .y = pods[i].pos.y, + .type = 4, + .angle = random() % 1024, + .speed = FIX16(podBulletSpeed) + }; + for(s8 b = 0; b < 3; b++){ + spawnEnemyBullet(bSpawn, eUpdate); + bSpawn.angle += 341; + } + XGM_startPlayPCM(SFX_BULLET_1, 0, SOUND_PCM_CH3); +} + +void podPatternTwo(s8 i, s8 mod, s16 aMod){ + struct bulletSpawner bSpawn = { + .x = pods[i].pos.x, + .y = pods[i].pos.y, + .type = 4, + .angle = random() % 1024, + .speed = FIX16(podBulletSpeed) + }; + for(s8 b = 0; b < 3 + mod; b++){ + spawnEnemyBullet(bSpawn, eUpdate); + bSpawn.angle += aMod; + } + bSpawn.speed = FIX16(podBulletSpeed + 1); + bSpawn.type = 3; + bSpawn.angle += aMod / 2; + for(s8 b = 0; b < 3 + mod; b++){ + spawnEnemyBullet(bSpawn, eUpdate); + bSpawn.angle += aMod; + } +} + +void shootPod(s16 i){ + if(currentZone == 1) podPatternOne(i); + else if(currentZone < 5) podPatternTwo(i, 0, 342); + else if(currentZone < 10) podPatternTwo(i, 1, 256); + else podPatternTwo(i, 2, 204); +} + + +// die + +void killPod(s16 i){ + pods[i].active = FALSE; + pods[i].pos.x = POD_DUMP_X; + pods[i].pos.y = POD_DUMP_Y; + SPR_releaseSprite(pods[i].image); +} + + +// loop + +void loadPod(){ + if(currentZone % 5 == 1 && currentZone > 1) podBulletSpeed++; + currentPodCount = 0; + if(currentZone >= 3) currentPodCount = 1; + if(currentZone >= 6) currentPodCount = 2; + if(currentZone >= 11) currentPodCount = 3; + if(currentZone >= 16) currentPodCount = 4; + if(currentPodCount > 0){ + for(s16 i = 0; i < POD_COUNT; i++){ + pods[i].pos.x = POD_DUMP_X; + pods[i].pos.y = POD_DUMP_Y; + pods[i].random = FALSE; + pods[i].clock = 0; + } + } +} + +void resetPod(){ + for(s16 i = 0; i < POD_COUNT; i++){ + pods[i].active = FALSE; + pods[i].pos.x = POD_DUMP_X; + pods[i].pos.y = POD_DUMP_Y; + SPR_releaseSprite(pods[i].image); + } +} + +void updatePod(){ + for(s16 i = 0; i < POD_COUNT; i++) if(pods[i].active) { + if(pods[i].clock >= POD_TIME_LIMIT){ + if(!gameOver) shootPod(i); + killPod(i); + spawnExplosion(fix16ToInt(pods[i].pos.x), fix16ToInt(pods[i].pos.y), FALSE); + XGM_startPlayPCM(SFX_BULLET_1, 1, SOUND_PCM_CH3); + } else { + if(pods[i].clock % 60 == 0 && pods[i].clock > 0) SPR_setAnimAndFrame(pods[i].image, pods[i].clock / 60, pods[i].clock % 40 == 0 ? 0 : 1); + SPR_setPosition(pods[i].image, fix16ToInt(pods[i].pos.x) - 8, fix16ToInt(pods[i].pos.y) - 8); + } + if(zoneOver) killPod(i); + pods[i].clock++; + } +} \ No newline at end of file diff --git a/src/pod.h b/src/pod.h new file mode 100644 index 0000000..270b7e0 --- /dev/null +++ b/src/pod.h @@ -0,0 +1,35 @@ +#define POD_COUNT 16 + +#define POD_DUMP_X FIX16(GAME_WIDTH + 32) +#define POD_DUMP_Y FIX16(GAME_HEIGHT + 32) + +#define POD_TIME_LIMIT 150 + +struct pod { + bool active, random; + s16 clock; + Vect2D_f16 pos; + Sprite* image; +}; + +struct podSpawner { + f16 x, y; + bool random; +}; + +struct pod pods[POD_COUNT]; + +s16 currentPodCount; + +Vect2D_f16 currentPodPos[POD_COUNT]; + +bool foundRandomPodMatch; + +void loadPod(), + podPatternOne(s16), + podPatternTwo(s8, s8, s16), + shootPod(s16), + destroyPod(s16), + killPod(s16), + resetPod(), + updatePod(); \ No newline at end of file diff --git a/src/start.c b/src/start.c new file mode 100644 index 0000000..b54766e --- /dev/null +++ b/src/start.c @@ -0,0 +1,245 @@ +#include +#include + +#include "main.h" +#include "controls.h" +#include "player.h" +#include "start.h" + + +// background + +void loadStartBg(){ + for(s8 y = 0; y < START_BG_HEIGHT; y++) + for(s8 x = -1; x < START_BG_WIDTH; x++) if(y > START_BG_HEIGHT - 2) VDP_setTileMapXY(BG_B, TILE_ATTR_FULL(PAL1, 0, 0, 0, 14), x, y); + loadStartGradient(); +} + +void loadStartGradient(){ + for(s8 x = 0; x < START_BG_WIDTH; x++){ + VDP_drawImageEx(BG_B, &startGradient, TILE_ATTR_FULL(PAL1, 0, 0, 0, 200), x, START_GRADIENT_Y, 0, DMA_QUEUE); + for(s8 y = 0; y < 12; y++) VDP_setTileMapXY(BG_A, TILE_ATTR_FULL(PAL1, 0, 0, 0, 11), x, y + START_GRADIENT_Y); + } +} + + +// logo + +void loadStartLogo(){ + s8 logoCount = 0; + for(s8 i = 0; i < START_LOGO_LINES; i++) startLogoScrolls[i] = random() % 4 - 2; + VDP_setScrollingMode(HSCROLL_LINE, VSCROLL_2TILE); + VDP_drawImageEx(BG_B, &startLogo, TILE_ATTR_FULL(PAL1, 0, 0, 0, 15), 3, START_LOGO_Y, 0, DMA_QUEUE); + VDP_drawImageEx(BG_B, &startLogoV, TILE_ATTR_FULL(PAL1, 0, 0, 0, 100), 3, START_LOGO_Y + 4, 0, DMA_QUEUE); + animateStartLogo(); +} + +void animateStartLogo(){ + if(startClock % 8 == 0){ + for(s8 i = 0; i < START_LOGO_LINES; i++){ + if(aboutShowing){ + startLogoScrolls[i] = 0; + } else { + if(i < START_LOGO_LINES / 3 || (i >= START_LOGO_LINES / 3 && i < START_LOGO_LINES / 3 * 2 && startClock % 16 == 0) || + (i >= START_LOGO_LINES / 3 * 2 && startClock % 32 == 0)){ + startLogoScrollsFlip[i] ? startLogoScrolls[i]-- : startLogoScrolls[i]++; + if(startLogoScrolls[i] >= (2)) startLogoScrollsFlip[i] = TRUE; + else if(startLogoScrolls[i] <= ( -2)) startLogoScrollsFlip[i] = FALSE; + } + } + } + VDP_setHorizontalScrollLine(BG_B, 72, startLogoScrolls, START_LOGO_LINES, DMA_QUEUE); + } +} + + +// menu + +void loadStartMenu(){ + VDP_drawText(">", START_MENU_X - 1, START_MENU_Y); + VDP_drawText("START GAME", START_MENU_X, START_MENU_Y); + VDP_drawText("ABOUT", START_MENU_X, START_MENU_Y + 2); + VDP_drawText("LIVES", START_MENU_X, START_MENU_Y + 4); + VDP_drawText("BOMBS", START_MENU_X, START_MENU_Y + 6); +} + +void updateStartLives(){ + if(currentStartMenu == 2 && (controls.left || controls.right) && !updatingStartCount){ + if(controls.right && playerLives < 6) playerLives++; + else if(controls.left && playerLives > 0) playerLives--; + updatingStartCount = TRUE; + } else if(!controls.left && !controls.right && updatingStartCount) updatingStartCount = FALSE; + if(startCurrentLives != playerLives){ + startCurrentLives = playerLives; + VDP_clearTileMapRect(BG_A, START_MENU_X + 6, START_MENU_Y + 4, 6, 1); + for(s8 x = 0; x < playerLives; x++) VDP_drawText("#", x + START_MENU_X + 6, START_MENU_Y + 4); + } +} + +void updateStartBombs(){ + if(currentStartMenu == 3 && (controls.left || controls.right) && !updatingStartCount){ + if(controls.right && playerBombs < 6) playerBombs++; + else if(controls.left && playerBombs > 0) playerBombs--; + updatingStartCount = TRUE; + } else if(!controls.left && !controls.right && updatingStartCount) updatingStartCount = FALSE; + if(startCurrentBombs != playerBombs){ + startCurrentBombs = playerBombs; + VDP_clearTileMapRect(BG_A, START_MENU_X + 6, START_MENU_Y + 6, 6, 1); + for(s8 x = 0; x < playerBombs; x++) VDP_drawText("*", x + START_MENU_X + 6, START_MENU_Y + 6); + } +} + +void updateStartMenu(){ + if(currentStartMenu != lastStartMenu && !aboutShowing){ + VDP_clearTileMapRect(BG_A, START_MENU_X - 1, START_MENU_Y + lastStartMenu * 2, 1, 1); + VDP_drawText(">", START_MENU_X - 1, START_MENU_Y + currentStartMenu * 2); + lastStartMenu = currentStartMenu; + } + if((controls.up || controls.down) && !selectingStartMenu && !aboutShowing){ + currentStartMenu += controls.up ? -1 : 1; + if(currentStartMenu > 3) currentStartMenu = 0; + else if(currentStartMenu < 0) currentStartMenu = 3; + selectingStartMenu = TRUE; + XGM_startPlayPCM(SFX_MENU_SELECT, 1, SOUND_PCM_CH2); + } else if(!controls.up && !controls.down && !controls.a && !controls.b && !controls.c && !controls.start && selectingStartMenu) selectingStartMenu = FALSE; + updateStartLives(); + updateStartBombs(); +} + +void selectStartMenu(){ + selectingStartMenu = TRUE; + switch(currentStartMenu){ + case 0: + resetStart(); + XGM_startPlayPCM(SFX_START_GAME, 1, SOUND_PCM_CH2); + loadGame(); + break; + case 1: + loadStartAbout(); + XGM_startPlayPCM(SFX_MENU_CHOOSE, 1, SOUND_PCM_CH2); + break; + } +} + + +// about + +void loadStartAbout(){ + aboutShowing = TRUE; + for(s8 x = 0; x < START_BG_WIDTH; x++) + for(s8 y = 0; y < START_BG_HEIGHT; y++) + VDP_setTileMapXY(BG_B, TILE_ATTR_FULL(PAL1, 0, 0, 0, 13), x, y); + VDP_clearTileMapRect(BG_A, 0, 0, START_BG_WIDTH, START_BG_HEIGHT); + aboutY = 2; + VDP_drawText("the story so far", 8, aboutY); + aboutY += 2; + VDP_drawText("MOMOYO IS YOUR REGULAR HARD-", 2, aboutY); aboutY++; + VDP_drawText("WORKING CENTIPEDE WHO LIVES IN", 1, aboutY); aboutY++; + VDP_drawText("THE MOMENT... BUT DOES HER NEW", 1, aboutY); aboutY++; + VDP_drawText("BOSS HAVE HER MAKING NEW PLANS", 1, aboutY); aboutY += 2; + VDP_drawText("USE HER TOOLS OVER 20 STAGES &", 1, aboutY); aboutY++; + VDP_drawText("DIG UP SOME SWEETS TO BRING TO", 1, aboutY); aboutY++; + VDP_drawText("##MEGUMU##", 11, aboutY); + aboutY += 2; + VDP_drawText("how to play", 1, aboutY); aboutY += 2; + VDP_drawText("d=pad MOVE", 1, aboutY); aboutY++; + VDP_drawText("a SHOOT", 1, aboutY); aboutY++; + VDP_drawText("b FOCUS/SLOW", 1, aboutY); aboutY++; + VDP_drawText("c BOMB", 1, aboutY); aboutY++; + VDP_drawText("start PAUSE", 1, aboutY); + aboutY += 3; + VDP_drawText("EVERYTHING BY T.BODDY", 1, aboutY); aboutY++; + VDP_drawText("FOR touhou pride game jam iii", 1, aboutY); aboutY++; + VDP_drawText("TOUHOU PROJECT COPYRIGHT ZUN?", 1, aboutY); aboutY += 2; + VDP_drawText("press any button to go back", 1, aboutY); aboutY++; + startClock = SEGA_LIMIT + 120; +} + +void startGoBack(){ + selectingStartMenu = TRUE; + aboutShowing = FALSE; + currentStartMenu = 0; + VDP_clearTileMapRect(BG_B, 0, 0, START_BG_WIDTH, START_BG_HEIGHT); + VDP_clearTileMapRect(BG_A, 0, 0, START_BG_WIDTH, START_BG_HEIGHT); + startCurrentBombs = -1; + startCurrentLives = -1; + for(s8 y = 0; y < START_BG_HEIGHT; y++) + for(s8 x = -1; x < START_BG_WIDTH; x++) VDP_setTileMapXY(BG_B, TILE_ATTR_FULL(PAL1, 0, 0, 0, 13), x, y); + loadStartBg(); + loadStartLogo(); + loadStartMenu(); + loadStartScore(); + loadStartCredit(); +} + +void updateStartAbout(){ + if(startClock % 120 == 0) VDP_drawImageEx(BG_B, &startAbout, TILE_ATTR_FULL(PAL1, 0, 0, 0, 64), 22, 12, 0, DMA_QUEUE); + else if(startClock % 120 == 60) VDP_drawImageEx(BG_B, &startAbout2, TILE_ATTR_FULL(PAL1, 0, 0, 0, 128), 22, 12, 0, DMA_QUEUE); +} + + +// score & credit + +void loadStartScore(){ + intToStr(highScore, startHighScoreStr, 8); + VDP_drawText("HI", 1, 26); + VDP_drawText(startHighScoreStr, 4, 26); +} + +void loadStartCredit(){ + VDP_drawText("06.2021 T.BODDY", 16, 26); +} + + +// loop + +void loadStart(){ + VDP_loadTileSet(startTop.tileset, 13, DMA); + VDP_loadTileSet(startBottom.tileset, 14, DMA); + for(s8 y = 0; y < START_BG_HEIGHT; y++) + for(s8 x = -1; x < START_BG_WIDTH; x++) VDP_setTileMapXY(BG_B, TILE_ATTR_FULL(PAL1, 0, 0, 0, 13), x, y); + segaImage1 = SPR_addSprite(&startBoddy1, SEGA_X - 56, SEGA_Y, TILE_ATTR(PAL1, 0, 0, 0)); + segaImage2 = SPR_addSprite(&startBoddy2, SEGA_X, SEGA_Y, TILE_ATTR(PAL1, 0, 0, 0)); + // VDP_drawImage(BG_B, &startBoddy, 0, 0); +} + +void resetStart(){ + VDP_clearTileMapRect(BG_B, 0, 0, START_BG_WIDTH, START_BG_HEIGHT); + VDP_clearTileMapRect(BG_A, 0, 0, START_BG_WIDTH, START_BG_HEIGHT); +} + +void updateStart(){ + if(startClock >= SEGA_LIMIT + 15){ + updateStartMenu(); + animateStartLogo(); + if((controls.a || controls.b || controls.c || controls.start) && aboutShowing && !selectingStartMenu) startGoBack(); + else if((controls.a || controls.start) && !aboutShowing && !selectingStartMenu) selectStartMenu(); + if(aboutShowing) updateStartAbout(); + } else if(startClock == SEGA_LIMIT - 25){ + for(s8 y = 0; y < START_BG_HEIGHT; y++) + for(s8 x = -1; x < START_BG_WIDTH; x++) VDP_setTileMapXY(BG_A, TILE_ATTR_FULL(PAL1, 1, 0, 0, 10), x, y); + } else if(startClock == SEGA_LIMIT - 20){ + for(s8 y = 0; y < START_BG_HEIGHT; y++) + for(s8 x = -1; x < START_BG_WIDTH; x++) VDP_setTileMapXY(BG_A, TILE_ATTR_FULL(PAL1, 1, 0, 0, 11), x, y); + } else if(startClock == SEGA_LIMIT - 15){ + SPR_releaseSprite(segaImage1); + SPR_releaseSprite(segaImage2); + } else if(startClock == SEGA_LIMIT - 10){ + VDP_setScreenWidth256(); + } else if(startClock == SEGA_LIMIT - 5){ + loadStartBg(); + } else if(startClock == SEGA_LIMIT){ + for(s8 y = 0; y < START_BG_HEIGHT; y++) + for(s8 x = -1; x < START_BG_WIDTH; x++) VDP_setTileMapXY(BG_A, TILE_ATTR_FULL(PAL1, 1, 0, 0, 10), x, y); + } else if(startClock == SEGA_LIMIT + 5){ + VDP_clearTileMapRect(BG_A, -1, 0, START_BG_WIDTH, START_BG_HEIGHT); + } else if(startClock == SEGA_LIMIT + 10){ + loadStartLogo(); + loadStartMenu(); + loadStartScore(); + loadStartCredit(); + XGM_startPlay(&bgmStart); + } + startClock++; + if(startClock >= 1800) startClock = SEGA_LIMIT + 120; +} \ No newline at end of file diff --git a/src/start.h b/src/start.h new file mode 100644 index 0000000..95eca93 --- /dev/null +++ b/src/start.h @@ -0,0 +1,48 @@ +#define START_BG_HEIGHT 28 +#define START_BG_WIDTH 40 + +#define START_MENU_X 11 +#define START_MENU_Y 15 + +#define START_LOGO_LINES 32 +#define START_LOGO_Y 5 + +#define START_GRADIENT_Y 23 + +// #define SEGA_LIMIT 90 +#define SEGA_LIMIT 60 * 4 + +#define SEGA_X 320 / 2 +#define SEGA_Y GAME_HEIGHT / 2 - 16 + +bool started, selectingStartMenu, aboutShowing, loadedStart; + +s16 currentStartMenu, lastStartMenu, startClock, aboutY; + +s16 startLogoScrolls[START_LOGO_LINES]; +bool startLogoScrollsFlip[START_LOGO_LINES], updatingStartCount; + +s8 startCurrentLives, startCurrentBombs; + +char startHighScoreStr[10]; + +Sprite* segaImage1; +Sprite* segaImage2; + +void loadStartBg(), + loadStart(), + loadStartLogo(), + loadStartMenu(), + loadStartGradient(), + resetStart(), + animateStartLogo(), + startGoBack(), + selectStartMenu(), + updateStartMenu(), + loadStartScore(), + updateStartLives(), + updateStartBombs(), + updateStartAbout(), + loadStartCredits(), + loadStartAbout(), + updateStart(); \ No newline at end of file diff --git a/src/yin.c b/src/yin.c new file mode 100644 index 0000000..bc58623 --- /dev/null +++ b/src/yin.c @@ -0,0 +1,132 @@ +#include +#include + +#include "main.h" +#include "explosion.h" +#include "enemies.h" +#include "yin.h" + + +// movement + +void moveYinHorizontal(s8 i){ + yins[i].pos.x += yins[i].flag1 ? 0 - YIN_SPEED : YIN_SPEED; + if(yins[i].pos.x >= GAME_WIDTH - 10){ + yins[i].flag1 = TRUE; + SPR_setHFlip(yins[i].image, 1); + } else if(yins[i].pos.x <= 10){ + yins[i].flag1 = FALSE; + SPR_setHFlip(yins[i].image, 0); + } +} + +void moveYinVertical(s8 i){ + yins[i].pos.y += yins[i].flag1 ? 0 - YIN_SPEED : YIN_SPEED; + if(yins[i].pos.y >= 112){ + yins[i].flag1 = TRUE; + } else if(yins[i].pos.y <= 56){ + yins[i].flag1 = FALSE; + } +} + + +// shooting + +void yinPatternOne(s8 i){ + if(yins[i].clock % 80 == 40){ + struct bulletSpawner bSpawn = { + .x = FIX16(yins[i].pos.x), + .y = FIX16(yins[i].pos.y), + .type = 1 + }; + bSpawn.velocityX = honeEnemyBullet(bSpawn.x, bSpawn.y, yinBulletSpeed, 0, TRUE); + bSpawn.velocityY = honeEnemyBullet(bSpawn.x, bSpawn.y, yinBulletSpeed, 0, FALSE); + spawnEnemyBullet(bSpawn, eUpdate); + XGM_startPlayPCM(SFX_BULLET_1, 0, SOUND_PCM_CH3); + spawnExplosion(yins[i].pos.x, yins[i].pos.y, FALSE); + } +} + +void yinPatternTwo(s8 i){ + if(yins[i].clock % 40 == 20){ + struct bulletSpawner bSpawn = { + .x = FIX16(yins[i].pos.x), + .y = FIX16(yins[i].pos.y), + .type = yins[i].clock % 80 == 20 ? 2 : 1 + }; + bSpawn.velocityX = honeEnemyBullet(bSpawn.x, bSpawn.y, yinBulletSpeed, bSpawn.type == 1 ? 32 : 0, TRUE); + bSpawn.velocityY = honeEnemyBullet(bSpawn.x, bSpawn.y, yinBulletSpeed, bSpawn.type == 1 ? 32 : 0, FALSE); + spawnEnemyBullet(bSpawn, eUpdate); + XGM_startPlayPCM(SFX_BULLET_1, 0, SOUND_PCM_CH3); + spawnExplosion(yins[i].pos.x, yins[i].pos.y, FALSE); + } +} + +void yinPatternThree(s8 i, s8 count){ + if(yins[i].clock % 80 >= 20 && yins[i].clock % 80 < 30 && yins[i].clock % 5 == 0){ + struct bulletSpawner bSpawn = { + .x = FIX16(yins[i].pos.x), + .y = FIX16(yins[i].pos.y), + .type = yins[i].clock % 8 == 0 ? 2 : 1, + .int1 = 64 + }; + for(s8 b = 0; b < count; b++){ + bSpawn.velocityX = honeEnemyBullet(bSpawn.x, bSpawn.y, yinBulletSpeed, yins[i].horizontal ? bSpawn.int1 : 0, TRUE); + bSpawn.velocityY = honeEnemyBullet(bSpawn.x, bSpawn.y, yinBulletSpeed, yins[i].horizontal ? 0 : bSpawn.int1, FALSE); + spawnEnemyBullet(bSpawn, eUpdate); + bSpawn.type = bSpawn.type == 2 ? 1 : 2; + bSpawn.int1 += 16; + } + XGM_startPlayPCM(SFX_BULLET_1, 0, SOUND_PCM_CH3); + } +} + +void yinShoot(s8 i){ + if((!yins[i].horizontal && !yins[i].last && yins[i].clock % 240 < 80) || + (yins[i].horizontal && yins[i].clock % 240 >= 80 && yins[i].clock % 240 < 160) || + (yins[i].last && yins[i].clock % 240 >= 160)){ + if(currentZone == 1) yinPatternOne(i); + else if(currentZone < 5) yinPatternTwo(i); + else if(currentZone < 10) yinPatternThree(i, 1); + else if(currentZone < 15) yinPatternThree(i, 2); + else yinPatternThree(i, 3); + } +} + + +// loop + +void loadYins(){ + if(currentZone % 5 == 1 && currentZone > 1) yinBulletSpeed++; + for(s16 i = 0; i < YIN_COUNT; i++){ + yins[i].pos.x = i == 0 ? 6 : (i == 2 ? 251 : 128); + yins[i].pos.y = i % 2 == 0 ? (i == 0 ? 64 : 96) : 21; + yins[i].speed = 20; + yins[i].horizontal = i % 2 == 1; + yins[i].last = i % 3 == 2; + yins[i].clock = 0; + yins[i].image = SPR_addSprite(&imgYin1, yins[i].pos.x, yins[i].pos.y, TILE_ATTR(PAL1, 0, FALSE, FALSE)); + if(yins[i].last) yins[i].flag1 = TRUE; + SPR_setDepth(yins[i].image, 1); + } +} + +void resetYins(){ + for(s16 i = 0; i < YIN_COUNT; i++){ + yins[i].pos.x = i == 0 ? 6 : (i == 2 ? 251 : 128); + yins[i].pos.y = i % 2 == 0 ? (i == 0 ? 64 : 96) : 21; + SPR_releaseSprite(yins[i].image); + } +} + +void updateYins(){ + for(s16 i = 0; i < YIN_COUNT; i++){ + if(yins[i].clock % yins[i].speed == 0) yins[i].horizontal ? moveYinHorizontal(i) : moveYinVertical(i); + else if(yins[i].clock % yins[i].speed == 1) SPR_setPosition(yins[i].image, yins[i].pos.x - 4, yins[i].pos.y - 4); + if(yins[i].clock % 5 == 0 && yins[i].speed > 2) yins[i].speed--; + if(zoneOver) SPR_setVisibility(yins[i].image, HIDDEN); + else if(!gameOver) yinShoot(i); + if(!zoneOver) yins[i].clock++; + if(yins[i].clock >= 240) yins[i].clock = 0; + } +} \ No newline at end of file diff --git a/src/yin.h b/src/yin.h new file mode 100644 index 0000000..a41e21c --- /dev/null +++ b/src/yin.h @@ -0,0 +1,23 @@ +#define YIN_COUNT 3 +#define YIN_SPEED 2 + +struct yin { + Sprite* image; + Vect2D_s16 pos; + bool horizontal, last, flag1, flag2; + s16 clock, speed, int1, int2, int3; +}; + +struct yin yins[YIN_COUNT]; + +void loadYins(), + moveYinHorizontal(s8), + moveYinVertical(s8), + yinPatternOne(s8), + yinPatternTwo(s8), + yinPatternThree(s8, s8), + yinPatternFour(s8), + yinPatternFive(s8), + yinShoot(s8), + resetYins(), + updateYins(); \ No newline at end of file diff --git a/start.dmf b/start.dmf new file mode 100644 index 0000000000000000000000000000000000000000..d759be03288bbb6200928b26152af89101aa75de GIT binary patch literal 437 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