From 436fea16e48dc290f612fe20d336e1eebe2a95e1 Mon Sep 17 00:00:00 2001 From: stevenhowes <38082088+stevenhowes@users.noreply.github.com> Date: Tue, 6 Apr 2021 19:52:01 +0100 Subject: [PATCH] Tweak to mission2 movement, map editor --- !TheEsc/!MapEdit,ff8 | Bin 0 -> 6592 bytes !TheEsc/!RunImage,ff8 | Bin 19364 -> 19664 bytes !TheEsc/Makefile,fe1 | 35 ++--- !TheEsc/Tools,fe1 | 67 +++++++++ !TheEsc/c/MapEdit | 323 ++++++++++++++++++++++++++++++++++++++++++ !TheEsc/c/Mission2 | 35 ++--- 6 files changed, 422 insertions(+), 38 deletions(-) create mode 100644 !TheEsc/!MapEdit,ff8 create mode 100644 !TheEsc/Tools,fe1 create mode 100644 !TheEsc/c/MapEdit diff --git a/!TheEsc/!MapEdit,ff8 b/!TheEsc/!MapEdit,ff8 new file mode 100644 index 0000000000000000000000000000000000000000..4a0ff47bd5ffd45597262fde7150ae76825b1eba GIT binary patch literal 6592 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 literal 0 HcmV?d00001 diff --git a/!TheEsc/!RunImage,ff8 b/!TheEsc/!RunImage,ff8 index dc4318cc11a17055647a61333ec69c73e72aa6c4..b5639b9b1c56d44a8213dc2de6011a85174adedc 100644 GIT binary patch delta 3153 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 diff --git a/!TheEsc/Makefile,fe1 b/!TheEsc/Makefile,fe1 index 65846c0..efe2412 100644 --- a/!TheEsc/Makefile,fe1 +++ b/!TheEsc/Makefile,fe1 @@ -3,42 +3,43 @@ # Toolflags: CCflags = -c -depend !Depend -IC: -throwback -w +C++flags = -c -depend !Depend -IC: -throwback Linkflags = -aif -o $@ +ObjAsmflags = -throwback -NoCache -depend !Depend +CMHGflags = +LibFileflags = -c -o $@ +Squeezeflags = -o $@ # Final targets: -@.!RunImage: @.o.CTheEscape @.o.Graphics @.o.Sound @.o.Input @.o.Intro @.o.Mission1 @.o.Mission2 C:o.stubs - Link $(Linkflags) @.o.CTheEscape @.o.Graphics @.o.Sound @.o.Input @.o.Intro @.o.Mission1 @.o.Mission2 C:o.stubs +@.!RunImage: @.o.CTheEscape @.o.Graphics @.o.Sound @.o.Input @.o.Intro \ + @.o.Mission1 @.o.Mission2 C:o.stubs + Link $(Linkflags) @.o.CTheEscape @.o.Graphics @.o.Sound @.o.Input \ + @.o.Intro @.o.Mission1 @.o.Mission2 C:o.stubs # User-editable dependencies: - # Static dependencies: @.o.CTheEscape: @.c.CTheEscape - cc $(ccflags) -o @.o.CTheEscape @.c.CTheEscape + cc $(ccflags) -o @.o.CTheEscape @.c.CTheEscape +@.o.MapEdit: @.c.MapEdit + cc $(ccflags) -o @.o.MapEdit @.c.MapEdit @.o.Graphics: @.c.Graphics - cc $(ccflags) -o @.o.Graphics @.c.Graphics + cc $(ccflags) -o @.o.Graphics @.c.Graphics @.o.Sound: @.c.Sound - cc $(ccflags) -o @.o.Sound @.c.Sound + cc $(ccflags) -o @.o.Sound @.c.Sound @.o.Input: @.c.Input - cc $(ccflags) -o @.o.Input @.c.Input + cc $(ccflags) -o @.o.Input @.c.Input @.o.Intro: @.c.Intro - cc $(ccflags) -o @.o.Intro @.c.Intro + cc $(ccflags) -o @.o.Intro @.c.Intro @.o.Mission1: @.c.Mission1 - cc $(ccflags) -o @.o.Mission1 @.c.Mission1 + cc $(ccflags) -o @.o.Mission1 @.c.Mission1 @.o.Mission2: @.c.Mission2 - cc $(ccflags) -o @.o.Mission2 @.c.Mission2 + cc $(ccflags) -o @.o.Mission2 @.c.Mission2 # Dynamic dependencies: - -o.CTheEscape: c.CTheEscape -o.CTheEscape: C:h.swis -o.CTheEscape: C:h.kernel -o.CTheEscape: C:h.kernel -o.CTheEscape: h.Sound -o.CTheEscape: h.Graphics o.CTheEscape: c.CTheEscape o.CTheEscape: C:h.swis o.CTheEscape: C:h.kernel diff --git a/!TheEsc/Tools,fe1 b/!TheEsc/Tools,fe1 new file mode 100644 index 0000000..d6b59ab --- /dev/null +++ b/!TheEsc/Tools,fe1 @@ -0,0 +1,67 @@ +# Project: TheEscTools + + +# Toolflags: +CCflags = -c -depend !Depend -IC: -throwback -w +C++flags = -c -depend !Depend -IC: -throwback +Linkflags = -aif -o $@ +ObjAsmflags = -throwback -NoCache -depend !Depend +CMHGflags = +LibFileflags = -c -o $@ +Squeezeflags = -o $@ + + +# Final targets: +@.!MapEdit: @.o.MapEdit @.o.Graphics @.o.Input \ + C:o.stubs + Link $(Linkflags) @.o.MapEdit @.o.Graphics @.o.Input \ + C:o.stubs + + +# User-editable dependencies: + +# Static dependencies: +@.o.MapEdit: @.c.MapEdit + cc $(ccflags) -o @.o.MapEdit @.c.MapEdit +@.o.Graphics: @.c.Graphics + cc $(ccflags) -o @.o.Graphics @.c.Graphics +@.o.Input: @.c.Input + cc $(ccflags) -o @.o.Input @.c.Input + + + +# Dynamic dependencies: +o.CTheEscape: c.CTheEscape +o.CTheEscape: C:h.swis +o.CTheEscape: C:h.kernel +o.CTheEscape: C:h.kernel +o.CTheEscape: h.Sound +o.CTheEscape: h.Graphics +o.Sound: c.Sound +o.Sound: C:h.swis +o.Sound: C:h.kernel +o.Sound: C:h.kernel +o.Sound: h.Sound +o.Intro: c.Intro +o.Intro: h.Graphics +o.Mission1: c.Mission1 +o.Mission1: h.Graphics +o.Mission2: c.Mission2 +o.Mission2: h.Graphics +o.Mission2: C:h.swis +o.Mission2: C:h.kernel +o.Mission2: C:h.kernel +o.Graphics: c.Graphics +o.Graphics: C:h.swis +o.Graphics: C:h.kernel +o.Graphics: C:h.kernel +o.Input: c.Input +o.Input: C:h.swis +o.Input: C:h.kernel +o.Input: C:h.kernel +o.MapEdit: c.MapEdit +o.MapEdit: C:h.swis +o.MapEdit: C:h.kernel +o.MapEdit: C:h.kernel +o.MapEdit: h.Sound +o.MapEdit: h.Graphics diff --git a/!TheEsc/c/MapEdit b/!TheEsc/c/MapEdit new file mode 100644 index 0000000..2c5108a --- /dev/null +++ b/!TheEsc/c/MapEdit @@ -0,0 +1,323 @@ +#include +#include "swis.h" +#include +#include +#include "Sound.h" +#include "Graphics.h" + +/********************************************\ +Slightly hacked up 'Mission2' as a map editor +\********************************************/ + +extern int tick; +extern int lasttick; +extern int screen; + +#define TILESX 10 +#define TILESY 10 + +// SWI Registers +_kernel_swi_regs inreg; +_kernel_swi_regs outreg; + +// Sprite buffer +unsigned char *buffer; +unsigned char *fontbuffer; +unsigned char *tilebuffer; + +extern int screen; +extern struct CompositionElement composition[128]; +extern int current_element; +int lastprofile = 0; + +int tick = 0; +int lasttick = 0; +extern int screen; + +extern int game1_tick(); +extern void game1_setup(); +extern void screen_nobuffer(); + + +// map[0] is the 'master', [1] and [2] represents what is currently +// believed to be displayed in the corresponding (+1) screen buffer +// and we run a compare to see if re-drawing is needed. 0xFF is used +// for a re-draw being required (so it's set on the tile under the player +unsigned char map[3][TILESX][TILESY]; +unsigned char fullmap[10000]; + +char tilenamebuffer[4]; +char textbuffer[63]; + +struct EntityLocation_s { + short signed int X,Y; +}; + +int readmodkey = 0; + +struct TilePlayer_s { + struct EntityLocation_s location; + struct EntityLocation_s hitbox_bl; + struct EntityLocation_s hitbox_tr; + struct EntityLocation_s mapoffset; + struct EntityLocation_s localtile; + int rawtile; +}; + +struct TilePlayer_s TilePlayer; + +void game2_loadmap(char* filename) +{ + int length; + + // Attempt to get file info + inreg.r[0] = 13; + inreg.r[1] = (int) filename; + _kernel_swi(OS_File,&inreg,&outreg); + + // Length will be in R4 if it exists + length = outreg.r[4]; + + if(length > sizeof(fullmap)) + { + // TODO: Work out why real machine doesn't appear to read size and gives object type 19 + /*screen_nobuffer(); + printf("Map exceeds %d bytes (%d bytes) Object Type %d",sizeof(fullmap),length,outreg.r[0]); + exit(0);*/ + } + + // Attempt to get file info + inreg.r[0] = 16; + inreg.r[1] = (int) filename; + inreg.r[2] = (int) fullmap; + inreg.r[3] = 0; + + _kernel_swi(OS_File,&inreg,&outreg); + +} + +void game2_fillmap(int xoffset, int yoffset) +{ + memcpy(map[0][0],fullmap+yoffset+(xoffset*100),10); + memcpy(map[0][1],fullmap+yoffset+(xoffset*100)+100,10); + memcpy(map[0][2],fullmap+yoffset+(xoffset*100)+200,10); + memcpy(map[0][3],fullmap+yoffset+(xoffset*100)+300,10); + memcpy(map[0][4],fullmap+yoffset+(xoffset*100)+400,10); + memcpy(map[0][5],fullmap+yoffset+(xoffset*100)+500,10); + memcpy(map[0][6],fullmap+yoffset+(xoffset*100)+600,10); + memcpy(map[0][7],fullmap+yoffset+(xoffset*100)+700,10); + memcpy(map[0][8],fullmap+yoffset+(xoffset*100)+800,10); + memcpy(map[0][9],fullmap+yoffset+(xoffset*100)+900,10); +} + +void game2_setup() +{ + screen_flipbuffer(); + screen_clear(); + screen_flipbuffer(); + screen_clear(); + TilePlayer.location.X = 100; + TilePlayer.location.Y = 100; + TilePlayer.hitbox_bl.X = 0; + TilePlayer.hitbox_bl.Y = 0; + TilePlayer.hitbox_tr.X = 60; + TilePlayer.hitbox_tr.Y = 50; + memset(map[0],0xFF,100); + memset(map[1],0xFF,100); + memset(map[2],0xFF,100); + + game2_loadmap("mission2"); + game2_fillmap(TilePlayer.mapoffset.X,TilePlayer.mapoffset.Y); +} + +void game2_tick_input() +{ + int x,y; + // Up arrow + if(input_readkey(57)) + { + TilePlayer.location.Y += 3 * (tick - lasttick); + if(TilePlayer.location.Y > (950)) + { + TilePlayer.location.Y = 100; + TilePlayer.mapoffset.Y += 10; + } + } + + // Down arrow + if(input_readkey(41)) + { + TilePlayer.location.Y -= 3 * (tick - lasttick); + if(TilePlayer.location.Y < (10)) + { + TilePlayer.location.Y = 900; + TilePlayer.mapoffset.Y -= 10; + } + } + + // Right arrow + if(input_readkey(121)) + { + TilePlayer.location.X += 3 * (tick - lasttick); + if(TilePlayer.location.X > (950)) + { + TilePlayer.location.X = 100; + TilePlayer.mapoffset.X += 10; + } + } + + // Left arrow + if(input_readkey(25)) + { + TilePlayer.location.X -= 3 * (tick - lasttick); + if(TilePlayer.location.X < (10)) + { + TilePlayer.location.X = 900; + TilePlayer.mapoffset.X -= 10; + } + } + + // Right Pointy + if(input_readkey(103)) + { + if(tick > readmodkey) + { + fullmap[TilePlayer.rawtile] = fullmap[TilePlayer.rawtile] + 1; + readmodkey = tick + 10; + } + } + + // Left Pointy + if(input_readkey(102)) + { + if(tick > readmodkey) + { + fullmap[TilePlayer.rawtile] = fullmap[TilePlayer.rawtile] - 1; + readmodkey = tick + 10; + } + } +} + +int game2_tick() +{ + int x; + int y; + int udt = 0; + lasttick = tick; + tick = clock(); + + screen_flipbuffer(); + + if(1) + { + game2_fillmap(TilePlayer.mapoffset.X,TilePlayer.mapoffset.Y); + for(x = 0; x < TILESX; x++) + { + for(y = 0; y < TILESY; y++) + { + if(game_hitbox_collide( + (TilePlayer.location.X + TilePlayer.hitbox_bl.X),(TilePlayer.location.Y + TilePlayer.hitbox_bl.Y), + (TilePlayer.hitbox_tr.X - TilePlayer.hitbox_bl.X),(TilePlayer.hitbox_tr.Y - TilePlayer.hitbox_bl.Y), + x*100,y*100, + 100,100 + )) + { + map[1][x][y] = 255; + map[2][x][y] = 255; + TilePlayer.localtile.X = x; + TilePlayer.localtile.Y = y; + } + + if(map[0][x][y] ^ map[screen+1][x][y]) + { + map[screen+1][x][y] = map[0][x][y]; + sprintf(tilenamebuffer,"%i",map[screen+1][x][y]); + draw_tile(tilenamebuffer,x*100,y*100); + udt++; + } + } + } + + draw_sprite("lcarsblack",1000,DISPLAY_Y-164); + + TilePlayer.rawtile = (TilePlayer.mapoffset.Y) + TilePlayer.localtile.Y + (TilePlayer.mapoffset.X * 100) + (TilePlayer.localtile.X * 100); + sprintf(textbuffer,"Tile:%i\nSprite:%i",TilePlayer.rawtile,fullmap[TilePlayer.rawtile]); + draw_spritetext(textbuffer, 1070, 950); + + game2_tick_input(); + + draw_sprite("man",TilePlayer.location.X,TilePlayer.location.Y); + + return 0; + }else{ +/* screen_flipbuffer(); + screen_clear(); + game2_death(); + return 1;*/ + } +} + +int game_hitbox_collide(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2) +{ + if((x1 + w1) >= x2) + if(x1 <= (x2 + w2)) + if((y1 + h1) >= y2) + if(y1 <= (y2 + h2)) + return 1; + + return 0; +} + +void exitfunc () { + screen_flipbuffer(); + screen_clear(); + screen_flipbuffer(); + screen_clear(); + screen_nobuffer(); + free(buffer); + free(fontbuffer); + free(tilebuffer); +} + +int main(int argc, char *argv[]) +{ + int lastoutcome = 1; + int outcome = 0; + + atexit(exitfunc); + + // Set initial display mode + display_mode(DISPLAY_MODE); + screen_clear(); + + // Load sprite library + load_sprites("Spr",&buffer); + load_sprites("Font",&fontbuffer); + + // Clear both buffers or we get gibberish + screen_flipbuffer(); + screen_clear(); + screen_flipbuffer(); + screen_clear(); + + lastoutcome = 1; + + load_sprites("Tiles",&tilebuffer); + + // Mission 2 + while(lastoutcome == 1) + { + outcome = 0; + screen_clear(); + game2_setup(); + while(!outcome) + { + outcome = game2_tick(); + } + lastoutcome = outcome; + } + + free(buffer); + + return 0; +} diff --git a/!TheEsc/c/Mission2 b/!TheEsc/c/Mission2 index 2a31698..df6a6a7 100644 --- a/!TheEsc/c/Mission2 +++ b/!TheEsc/c/Mission2 @@ -32,6 +32,8 @@ struct TilePlayer_s { struct EntityLocation_s hitbox_bl; struct EntityLocation_s hitbox_tr; struct EntityLocation_s mapoffset; + struct EntityLocation_s localtile; + int rawtile; }; struct TilePlayer_s TilePlayer; @@ -165,7 +167,7 @@ void game2_tick_input() if(input_readkey(57)) { TilePlayer.location.Y += 3 * (tick - lasttick); - if(TilePlayer.location.Y > (9*100)) + if(TilePlayer.location.Y > (950)) { TilePlayer.location.Y = 100; TilePlayer.mapoffset.Y += 10; @@ -176,7 +178,7 @@ void game2_tick_input() if(input_readkey(41)) { TilePlayer.location.Y -= 3 * (tick - lasttick); - if(TilePlayer.location.Y < (1*100)) + if(TilePlayer.location.Y < (10)) { TilePlayer.location.Y = 900; TilePlayer.mapoffset.Y -= 10; @@ -187,7 +189,7 @@ void game2_tick_input() if(input_readkey(121)) { TilePlayer.location.X += 3 * (tick - lasttick); - if(TilePlayer.location.X > (9*100)) + if(TilePlayer.location.X > (950)) { TilePlayer.location.X = 100; TilePlayer.mapoffset.X += 10; @@ -198,24 +200,12 @@ void game2_tick_input() if(input_readkey(25)) { TilePlayer.location.X -= 3 * (tick - lasttick); - if(TilePlayer.location.X < (1*100)) + if(TilePlayer.location.X < (10)) { TilePlayer.location.X = 900; TilePlayer.mapoffset.X -= 10; } } - - // Q - if(input_readkey(16)) - { - for(x = 0; x < TILESX; x++) - { - for(y = 0; y < TILESY; y++) - { - map[0][x][y] = 1; - } - } - } } int game2_tick() @@ -244,6 +234,8 @@ int game2_tick() { map[1][x][y] = 255; map[2][x][y] = 255; + TilePlayer.localtile.X = x; + TilePlayer.localtile.Y = y; } if(map[0][x][y] ^ map[screen+1][x][y]) @@ -254,13 +246,14 @@ int game2_tick() udt++; } } - - //draw_sprite("lcarsblack",1000,DISPLAY_Y-164); - - //sprintf(textbuffer,"CPF: %i\nUDT: %i",(tick-lasttick), udt); - //draw_spritetext(textbuffer, 1070, 950); } + draw_sprite("lcarsblack",1000,DISPLAY_Y-164); + + TilePlayer.rawtile = (TilePlayer.mapoffset.Y) + TilePlayer.localtile.Y + (TilePlayer.mapoffset.X * 100) + (TilePlayer.localtile.X * 100); + sprintf(textbuffer,"Tile:%i\nSprite:%i",TilePlayer.rawtile,fullmap[TilePlayer.rawtile]); + draw_spritetext(textbuffer, 1070, 950); + game2_tick_input(); draw_sprite("man",TilePlayer.location.X,TilePlayer.location.Y);