diff --git a/entity.jor b/entity.jor index 625bd8b..c1e4c22 100755 --- a/entity.jor +++ b/entity.jor @@ -65,6 +65,8 @@ array frames ( 0: car ) 3 1 0 2 frame ( 1: pete stand ) 11 9 7 5 frame ( 2: pete walk ) 12 10 8 6 frame +( 3: mary stand ) 17 20 22 24 frame +( 4: mary walk ) 19 21 23 25 frame : sprindex ( dir frame ) 2 << frames + + b@ ; : defstatic ( frame -- ) create b, does> b@ sprindex ; @@ -83,5 +85,6 @@ array frames 14 defsingle {chair} 15 defsingle {pete-bed} 16 defsingle {horse} -17 defsingle {mary} +3 defstatic {mary} +3 4 2 5 defanim {mary-walk} 18 defsingle {phone} diff --git a/footer2.tif b/footer2.tif new file mode 100755 index 0000000..f3b0665 Binary files /dev/null and b/footer2.tif differ diff --git a/game.exe b/game.exe index 00e8cd0..9fd6918 100755 Binary files a/game.exe and b/game.exe differ diff --git a/game.jor b/game.jor index ff917bd..e93d869 100755 --- a/game.jor +++ b/game.jor @@ -32,13 +32,17 @@ var player.prevdir 1 const MOVING 2 const DRIVING 4 const NOCLIP +8 const ISMARY : player.driving? player.state DRIVING f@ ; : {player} player.driving? if {car} - else player.state MOVING f@ if {pete-walk} - else {pete-stand} then then ; + else player.state MOVING f@ if + player.state ISMARY f@ if {mary-walk} else {pete-walk} then + else + player.state ISMARY f@ if {mary} else {pete-stand} then + then then ; : player.canmove? ( x y -- ) player.state NOCLIP f@ not if diff --git a/game.prj b/game.prj index 0151b14..56192f4 100755 Binary files a/game.prj and b/game.prj differ diff --git a/gameboot.jor b/gameboot.jor index d3b8027..cf3aa81 100755 --- a/gameboot.jor +++ b/gameboot.jor @@ -30,6 +30,10 @@ intern petehous.jor intern road.jor intern jeanne.jor intern trail1.jor +intern mpete.jor +intern mroad.jor +intern mjeanne.jor +intern mtrail1.jor :noname loadfile ; checkpoint _loadlevel ' _loadlevel ' loadlevel redefine diff --git a/map.jor b/map.jor index 75bc722..013fca9 100755 --- a/map.jor +++ b/map.jor @@ -4,6 +4,8 @@ var tileselect : mouseworldpos mousepos scrollpos +pos ; : mousetile mouseworldpos world>tile ; : tile ( x y -- ptr ) mapsize drop * + map + ; +: day s" TILES.TIF" loadtiles invalidate-map ; +: night s" NTILES.TIF" loadtiles invalidate-map ; 1 const WALKABLE 2 const DRIVABLE diff --git a/mjeanne.jor b/mjeanne.jor new file mode 100755 index 0000000..99f49e6 --- /dev/null +++ b/mjeanne.jor @@ -0,0 +1,38 @@ +( J E A N N E ) + +16 18 W ' {horse} defentity e_chuck +14 22 N ' {car} defentity car + +e_chuck :touch + mary say" Good old Chuck." + chuck say" * n e i g h *\(Hi Mary!)" +;entity + +car :touch + move-player 1 player.state DRIVING f! +;entity + +:noname + 0 player.state DRIVING f! +:| CHUCK-HOME flag@ if e_chuck yield then + player.driving? not CHUCK-FOLLOW flag@ not and if car yield then + done |; ' entities redefine + + :| +touch-begin S leaving? dup + if player.driving? not + if pete say" I'm not walking." + else move-player 24 7 road.jor queue-level + then + then +touch-next 6 21 2= dup + if player.driving? not + if noone say" * knock knock *" + jeanne say" C'mon in, Ma." + move-player + then + then +touch-last |; ' player-touch redefine + +s" jeanne.map" load-map +; ' onload redefine diff --git a/mpete.jor b/mpete.jor new file mode 100755 index 0000000..e10bc39 --- /dev/null +++ b/mpete.jor @@ -0,0 +1,36 @@ +( P E T E ) + +13 8 N ' {car} defentity pcar +32 5 W ' {horse} defentity e_chuck + +car :touch + move-player + 1 player.state DRIVING f! +;entity + +e_chuck :touch + mary say" Did Pete steal you?\Again!?" + chuck say" * n e i g h *\(Hi Mary!)" +;entity + +:noname +:| car yield + ( player.driving? not if car yield then ) ( todo: mary's car ) + CHUCK-STOLEN flag@ if e_chuck yield then + done |; ' entities redefine + + :| +touch-begin S leaving? dup + if player.driving? not + if mary say" I shouldn't leave my car here." + else move-player 5 10 mroad.jor queue-level + then + then +touch-next 12 7 2= player.driving? not and dup + if mary say" I don't really want to\call on Pete right now." then +touch-next 30 7 2= dup + if mary say" Yech, what a miserable\swamp." then +touch-last |; ' player-touch redefine + +s" pete.map" load-map +; ' onload redefine diff --git a/mroad.jor b/mroad.jor new file mode 100755 index 0000000..9ac014b --- /dev/null +++ b/mroad.jor @@ -0,0 +1,29 @@ +( O V E R W O R L D ) + +24 4 N ' {horse} defentity chuck + +:noname + :| CHUCK-HOME flag@ if chuck yield then + done |; ' entities redefine + :| +touch-begin E leaving? dup + if mary say" I've no reason to head out that way." then +touch-next 5 9 2= dup + if move-player 13 12 mpete.jor queue-level then +touch-next 13 6 2= dup + if move-player 38 71 mtrail1.jor queue-level then +touch-next 24 6 2= dup + if move-player 13 22 mjeanne.jor queue-level then +touch-next 39 33 2= dup + if mary say" I heard they'll be building\a new play structure this\summer." then +touch-next 32 36 2= dup + if mary say" I'm done for the day." then +touch-next 35 39 2= dup + if mary say" Community center." then +touch-next tile b@ 17 = dup + if mary say" Oh, I wouldn't want to\be a bother." then +touch-last |; ' player-touch redefine + +s" road.map" load-map +; ' onload redefine + diff --git a/mtrail1.jor b/mtrail1.jor new file mode 100755 index 0000000..73561c8 --- /dev/null +++ b/mtrail1.jor @@ -0,0 +1,29 @@ +( T R A I L 1 ) + +39 71 N ' {car} defentity car + +car :touch + move-player 1 player.state DRIVING f! +;entity + +:noname +0 player.state DRIVING f! + +:| player.driving? not if car yield then + done |; ' entities redefine + +:| +touch-begin S leaving? dup + if player.driving? not CHUCK-FOLLOW flag@ not and + if mary say" I'd best drive." + else move-player 13 7 mroad.jor queue-level + then + then +touch-next 3 56 2= dup + if mary say" What on Earth...?" + say" Is this where...?" + then +touch-last |; ' player-touch redefine + +s" trail1.map" load-map +; ' onload redefine diff --git a/ntiles.tif b/ntiles.tif new file mode 100755 index 0000000..23207d9 Binary files /dev/null and b/ntiles.tif differ diff --git a/sprite.tif b/sprite.tif index c29941a..3096c5c 100755 Binary files a/sprite.tif and b/sprite.tif differ diff --git a/testbed.c b/testbed.c index cd0ade6..973e233 100755 --- a/testbed.c +++ b/testbed.c @@ -83,6 +83,24 @@ void fillMap() { } } +void readTiles(char *filename) { + FILE *f; + TifImageMeta_t meta; + + f = fopen(filename, "rb"); + meta = tifLoadMeta(f); + tifLoad(f, meta, tiles, NUM_TILES * 16, 16, 4); + tifLoadEGA(f, meta, OFF_TILES, NUM_TILES * 16, 16); + fclose(f); + + loadTiles(OFF_TILES, tiles); +} + +void f_loadtiles() { + readTiles(TOP().s); + DROP(1); +} + void game_init() { FILE *f; TifImageMeta_t meta; @@ -106,12 +124,6 @@ void game_init() { tifLoadEGA(f, meta, 0, 48, 336); fclose(f); - f = fopen("TILES.TIF", "rb"); - meta = tifLoadMeta(f); - tifLoad(f, meta, tiles, NUM_TILES * 16, 16, 4); - tifLoadEGA(f, meta, OFF_TILES, NUM_TILES * 16, 16); - fclose(f); - f = fopen("SPRITE.TIF", "rb"); meta = tifLoadMeta(f); tifLoad(f, meta, sprites, NUM_SPRITES * 16, 16, 5); @@ -122,7 +134,8 @@ void game_init() { tifLoadEGA(f, meta, OFF_PORTRAITS, NUM_PORTRAITS * 32, 32); fclose(f); - loadTiles(OFF_TILES, tiles); + readTiles("TILES.TIF"); + loadMap(map, 100, 100); scroll(0, 0); } @@ -245,6 +258,7 @@ void game_f_init(char *exe) { CDEF("mapsize!", f_mapsize_set); CDEF("mousepos", f_mousepos); CDEF("mousebuttons", f_mousebuttons); + CDEF("loadtiles", f_loadtiles); CDEF("unfuck", tile_init); f_loadjor("gameboot.jor");