From 779ae1bab39c23744ed40b499d7664638bddb245 Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Sun, 2 Feb 2020 18:29:49 -0500 Subject: [PATCH] Implement basic character-swapping mechanics, tutorial / intro level --- entity.jor | 23 +++++++++++-- footer.jor | 9 ++--- game.exe | Bin 115800 -> 115804 bytes game.jor | 31 +++++++++++------ game.prj | Bin 5721 -> 5721 bytes lev00001.jor | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++- lev00001.map | Bin 264 -> 264 bytes map.jor | 5 +++ portrait.gfx | Bin 8192 -> 8192 bytes sprite.gfx | Bin 10240 -> 10240 bytes testbed.c | 4 ++- tiles.gfx | Bin 8192 -> 8192 bytes 12 files changed, 146 insertions(+), 21 deletions(-) diff --git a/entity.jor b/entity.jor index 45eb9f7..f496c2f 100755 --- a/entity.jor +++ b/entity.jor @@ -1,5 +1,8 @@ 0 const EVTICK 1 const EVTOUCH +2 const EVACT +3 const EVDEACT +4 const EVTOG : world>tile 4 >> swap 4 >> swap ; userword : tile>world 4 << swap 4 << swap ; userword @@ -10,12 +13,21 @@ : -pos ( x1 y1 x2 y2 -- x y ) negate swap negate swap +pos ; userword -: defentity ( x y dir anim -- ) array ' drop , , , tile>world , , ; +: allotentity ( x y dir anim -- ) ' drop , , , tile>world , , ; +: defentity ( x y dir anim -- ) array allotentity ; +var _responder +: responder _responder @ ; +: entity.user 5 cells + ; : entity.x 4 cells + ; : entity.y 3 cells + ; : entity.dir 2 cells + ; : entity>sprite cell + @ execute ; -: entity>do ( entity event ) swap @ execute ; +: entity>do ( entity event ) + swap dup if + dup _responder ! + @ execute + else drop drop then ; + : entity>pos dup entity.x @ swap entity.y @ ; userword : entity.pos! ( x y entity ) ( dir a -- ) swap drop lookup-frame ; +-1 defsingle {{blank}} 0 defstatic {car} 5 defstatic {car-lit} 1 defstatic {pete-stand} @@ -108,6 +122,11 @@ array frames 46 defsingle {aliem} 13 14 2 5 defmulti {neut} +var _dorubber +: {blank} _dorubber @ if {duck} else {{blank}} then ; +: rubber _dorubber @ not _dorubber ! ; + + : sprite-bob ( x y sprindex -- x y sprindex ) dup 13 >= over 14 <= and if >rot 2dup + ticks + 40 % 20 < if 1 + then dup @ text-color ! cell + @ draw-portrait ; -0 GREEN character pete userword -1 MAGENTA character mary userword -2 BROWN character chuck userword -3 YELLOW character jeanne userword -4 LGRAY character phone userword +0 LGREEN character neut userword +3 LBLUE character jaye userword : noone WHITE text-color ! s" " dup dup dup 8 portraity 16 portraity 24 portraity 32 portraity ; userword diff --git a/game.exe b/game.exe index 6c96d80a45a582767a1c5eec9af91f93f5b0ab78..c395399f54c20fce9701766206e91569137dd4ad 100755 GIT binary patch delta 7965 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 delta 8046 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 diff --git a/game.jor b/game.jor index a40f623..abd2a65 100755 --- a/game.jor +++ b/game.jor @@ -21,10 +21,12 @@ var player.prevdir 1 const MOVING userword 2 const NOCLIP userword 4 const ISNEUT userword +8 const HASNEUT userword : noclip player.state NOCLIP fnot! ; userword : isneut? player.state ISNEUT f@ ; userword +: isjaye? isneut? not ; userword : {jaye} isneut? not player.state MOVING f@ and @@ -35,17 +37,15 @@ var player.prevdir isneut? if NEUTABLE else WALKABLE then mapflag? else drop drop 1 then ; -12 9 N ' {jaye} defentity pjaye +14 9 N ' {jaye} defentity pjaye 17 5 N ' {neut} defentity pneut : player isneut? if pneut else pjaye then ; : sched-move-entity ( entity -- ) :| jobdata move-entity |; sched-with ; : move-player - :| 1 player.state MOVING f! - player move-entity - 0 player.state MOVING f! - |; sched + 1 player.state MOVING f! + isneut? not if ( only jaye can have a party ) player.prevdir @ party each dup player != if @@ -53,7 +53,10 @@ var player.prevdir dup >rot entity.dir ! sched-move-entity rot mapsize ( b x y w h ) @@ -103,7 +106,8 @@ var q-player.y : queue-level q-level ! q-player.y ! q-player.x ! ; userword : player-tick - ^SPACE key-pressed if player.state ISNEUT fnot! then + ^SPACE key-pressed player.state HASNEUT f@ and + if player.state ISNEUT fnot! then 0 ^LEFT key-down if drop 1 W player entity.dir ! then ^RIGHT key-down if drop 1 E player entity.dir ! then ^UP key-down if drop 1 N player entity.dir ! then @@ -143,15 +147,20 @@ var q-player.y var showmouse 1 showmouse ! var glitchlevel +var quaking : full-draw - player entity.x @ 152 - - player entity.y @ 92 - - scroll + quaking @ not if + player entity.x @ 152 - + player entity.y @ 92 - + scroll + else + 0 ticks 3 % 13 * 8 % scroll + then entities each draw-entity more party each draw-entity more - pneut draw-entity + player.state HASNEUT f@ if pneut draw-entity then showmouse @ if mouseworldpos 4 draw-sprite diff --git a/game.prj b/game.prj index b5590aa15c4022b4ecb2e7c0eed6c65837f82936..8cd8ac9337ca2114e8360b6f438a395782f876df 100755 GIT binary patch delta 114 zcmcbqb5m!7IvX=*pW|jNwmqE8Y(U0K{$fVqI}8dezZiZnOE3yB%QD|%zQ~*~IbTqe zU!5_UF@b@BL4-k;;ZBd^tile ( entity -- tile ) entity>pos world>tile tile ; +: entity>tile? ( entity expected - b ) swap entity>tile b@ = ; + +: toggleval ( off on val -- off|on ) over = not if swap then drop ; +: toggletile ( entity off on -- ) + r r@ entity>tile b@ toggleval tile b! invalidate-map ; + +: respondertile! ( tile -- ) responder entity>tile b! invalidate-map ; + +: handle-onoff ( ev on off -- ) + rot toggletile else + drop drop drop then then then ; +: statechange? ( ev -- b ) + dup EVACT = over EVDEACT = or swap EVTOG = or ; + +: blankentity array here >r N ' {blank} allotentity tile? and if + move-player + then + DOOR-OPENED DOOR-CLOSED handle-onoff + |; swap ! ; + +: handle-link ( ev ontile -- ) + swap statechange? if + responder swap entity>tile? if EVACT else EVDEACT then + responder entity.user @ swap entity>do + else drop then ; + +: switch blankentity swap , + :| dup EVTOUCH = isneut? and if move-player then + dup EVTOUCH = if responder EVTOG entity>do then + dup SWITCH-ON SWITCH-OFF handle-onoff + SWITCH-ON handle-link |; swap ! ; + +: computer blankentity swap , + :| dup EVTOUCH = isjaye? and if responder EVACT entity>do then + dup EVTOUCH = isneut? and if move-player then + dup COMP-ON COMP-OFF handle-onoff + COMP-ON handle-link |; swap ! ; + +: chainev ( entity xp -- ) swap dup @ , ! ; immediate + +12 9 door d1 +d1 :noname + dup EVTOUCH = isjaye? and d1 DOOR-CLOSED entity>tile? and if + jaye say" It won't open!" + then chainev ; +d1 12 8 switch s1 +0 15 8 computer c1 + +7 6 door d2 +d2 6 6 switch s2 + +c1 :noname + dup EVTOUCH = isjaye? and if + player.state HASNEUT f@ not if + jaye say" Maybe Neut can help." + neut say" NEUT v0.71.4rc12\ONLINE" + neut say" PRESS SPACE TO TAKE CONTROL" + c1 entity>pos pneut entity.pos! + 1 player.state HASNEUT f! + else + jaye say" Neut is running now.\I can hit the space bar\to control them." + then + then chainev ; + :noname - :| done |; ' entities redefine + reset-level + :| d1 yield s1 yield c1 yield d2 yield s2 yield done |; ' entities redefine + +:| touch-begin 15 8 2= dup if +then touch-last |; ' jaye-touch redefine s" lev00001.map" load-map +( ' intro sched ) + ; ' onload redefine diff --git a/lev00001.map b/lev00001.map index 4df9252a49a6d7c150dcb34f0780f42245bf4b8e..8ef78bfd44984faccf90c8bacbe44debd17011ed 100755 GIT binary patch literal 264 zcma)0?FxWE2-96$9*6&W|7Xp46d?so{6MzpAuebIkiR>9(|WOM{^18=j%?JFySazT g!_TJmtuLNY!ZITFawGpD4<0s=Z1AX}5f|?11f_}t6#xJL literal 264 ycmWe(;ALP&2TTmaiZP;VWhP!Pk#;bmsbgbf!D0tH7BP@pm@ohXBM`y>oCN@diUOSg diff --git a/map.jor b/map.jor index efdae3f..8d01120 100755 --- a/map.jor +++ b/map.jor @@ -18,6 +18,11 @@ array tileflags ( table ) 0 b, ( chair ) 0 b, ( table-brok ) 0 b, +( door-close ) 0 b, +( door-open ) WALKABLE b, +( switch-off ) NEUTABLE b, +( switch-on ) NEUTABLE b, +( window ) 0 b, here tileflags - 1 - const MAXTILE diff --git a/portrait.gfx b/portrait.gfx index 485b9fe55765d6c376c1e90671111305cc6d4595..d6791182208411dd1a1d6266a4cbe975469dd14e 100755 GIT binary patch delta 312 zcmZp0XmFUs)f36Yz`(!`#7s;;#LmFJoS8xIKO@7R=L`%MpBNcxwlgqf^fNGY+~;h# z^I!hJe-I7ggTz7dAax-1AblYHAalUxO=jd;9SAZV3_zv>8Os?MG@KY11Qq~kkT^&s z$h7mE4Rb&=hz|k_pz1*C!DayUgT$F8GqMD4Heve0JW+sUvJP9i>Ss%ahMx`$2Vxl* z9{2)rFA($AGkkcP&F~>Mp5ennONIvrC+}d3o;;adRDglugRCyYhs2!>AMPGwcwjr( kf<1b&FuSMYU6vy%JZA$JW7Nw|D3;sdDp+kp?g=Uuy&PCjG5iB^kD2WdsG-Pt~9lCVV zJb(`oIu{zjA*FwgC-`S@DR|)nC%O0LoF56i!0XlO`|#X=qy#ZgP%egIt_Y>v1@t@! zzQv*0KCAkWsfFYW3$153AQePfsnE>~H2G%(e`y2hW^tvILqc zSQs){Wu`zkiJaiA&y diff --git a/sprite.gfx b/sprite.gfx index 65c7b468b9ed125fa0318e11b611b178f514305c..2e52e110de260d4698a134982ef82ea35fc9a9b0 100755 GIT binary patch delta 823 zcmZvZKTE?v7>5lVnp)u;np6=v9Nd)R=60K_-Q3I|P7Zzm!4yOt74HLNb8t~~_W~ja z4h{~EIq(m~3?9aMF-fa$bEzcN{2=6b-n;j?H?3x?dA6);m$a!9?SvlcSlgy&@O?>z zZozl6GF!bVxh1y@+0kgLVpL&OSYPGVZp9qUEjg4|M}D94(R zY8wXu{+-x&V#h3Cl1Urdq!SaMROCQ`cQXC~N=2^rchrSFc^Wu_iBY>|R0Rx18F1>< z%(X|7-k60f`ma6VL%h)55~MxEhuSlr1$4rgE@2nZMPq)(C$FS!KdC9IcmE#|;eA5? zfW6T@18Y7#HmosKn~nm}1#^ndnUjE)%+;BP?n+Wm8aLr|lKRJUDW^_wv1a7r*H@k5?>%(WZrsBf4+72BF9B&S+wJ z@ZK!XR$4`?6bhW(QNL_g5;IxMStcO&shMVldT3a7#)_+fJO(+=0UWS2b24^gk#3O5 zEythilk{0H$~+DLk()>e@izn?WD&sYee-YL4?FNHo@G%gA))~%;2WVCmn6)v6r&gs zSX4f_l0JM^0nQ}sLCU&nJmX9R{D9#j0db;uu?jvI3FsyGP4Pp2BoDyE_Zu*RrT-<2 zQHW&UGT=eAx~Vr-fWVmFjY+;M`S-sX)BNu;kmzjK7$sG^q7_7gs3q1gxH z^*(-&AMHc)55|i+=%hVu!m;UsJzwwO7yL{fhb^l+!ti^5zsuTm$99blJ+!?!rIlGw z?842s93}4k-g$JXw5-kAL{`zD6V4P}cGl`?Z#A#wjlP>}5Y8NNTwM2W>4oDODSdK0 cO^bLbK^z<~VV9r3K71(cMh+qJFnFD1DUuK)l5 diff --git a/testbed.c b/testbed.c index ae4e3f7..b117807 100755 --- a/testbed.c +++ b/testbed.c @@ -232,7 +232,9 @@ void f_keyIsDown() { } void f_drawSprite() { // ( x y sprite -- ) - drawSprite(&sprites[TOP().i * SPRITE_STRIDE], ST2().i, ST1().i, NULL); + if (TOP().i >= 0) { + drawSprite(&sprites[TOP().i * SPRITE_STRIDE], ST2().i, ST1().i, NULL); + } DROP(3); } diff --git a/tiles.gfx b/tiles.gfx index eaaa7776233c7af4524c5d3822e9f2d7d09e2dd8..159ffcf341322e73ecf22f2391ee7c3f60280e85 100755 GIT binary patch delta 395 zcmZp0XmHrDfMv1(qr>C{Y;5(__iOh<;9em8cOQ($*uVe=Kji<|gQ5H%{vYxm?0-Ob z_7GVH2J+?q0|C4A1MUNkEsP5|8yFiI7brHcb||(uE@15tY+`Jf%*g0x)WF!l2(t@9 zgY-dw{h#~4Ej2)GDL0g@~N90~~d1MGQ_JOUzQITS$h|Nk>T`28LT#X$rRe!q`^><9k;U&Jm6 E0HmwA-2eap delta 270 zcmZp0XmHrDfMsHWgTlLayLX3%zI*o{2p}v}{=`HDhZip%K4fB2Qxg+oV^dPf$RL$J zIgv48qJn}#fB$_rSie3Y0i8clQDI_&8#e