SteveB Posted February 22, 2022 Share Posted February 22, 2022 This posting by Alex @HOME AUTOMATION in the thread of @Retrospect hilarious "Deluxe Butt-Plug Simulator" brought the 2018 Sinclair Spectrum game of Scuttlebutt to my attention. I liked the video so much that I thought about a possible port to the TI-99/4a. I contacted the author Karl Hörnell and he was so kind to send me the original artwork of the game. Beautiful Graphics: Karl Simple Graphics: Me I chose to use the character/tile graphics, so the background isn’t as seamless as in the original, the compiled XB256 BASIC is not as fast and flexible as the assembly original, so I made some adjustments. And I adopted the subtitle from the C64 version because I liked it. A giant posterior has turned up in your livingroom and intends to make a mess. Move left and right to catch the waste in your bucket. The bucket has limited capacity. Empty it in the toilet now and then so that it doesn't overflow. Good luck! The game is written in Structured Extended BASIC (SXB), getting translated to Standard Extended BASIC by the free TiCodEd Development Environment. Control your player with "S" for left and "D" for right. Remember to dump the content of your bucket to the toilet on the right before it overflows. Module: Scuttlebutt.bin Full Package: ScuttleButt_1.0.zip Enjoy the game, Steve // ScuttleButt // // Original Game and Graphics by Karl Hörnell 2018 // Adapted for the TI-99/4a by Stefan Bauch 2022 // // DIM SC(6,31), SH(2),P1$(7),P2$(7),TX$(2) GOSUB GameInit REPEAT GOSUB StartGame REPEAT CALL turn(8) :: dir = 1 :: lm = MIN(144,RND*(144-bx)) REPEAT CALL KEY(3,k,s) IF s<>0 THEN BEGIN // walk right IF k=68 THEN BEGIN IF c=0 THEN IF P<22 THEN CALL DrCol(p,4) ELSE GOSUB EmptyBucket IF c=3 THEN CALL RemCol(p,0,SC(,)) IF c=4 THEN CALL DrCol(p,5) IF c=7 THEN GOSUB MoveRight c = c + 1 END // walk left IF k=83 THEN BEGIN IF c=4 THEN CALL DrCol(p,0) IF c=1 THEN CALL RemCol(p,4,SC(,)) IF c=5 THEN CALL RemCol(p,5,SC(,)) IF c=0 AND P>1 THEN GOSUB MoveLeft c = c - 1 END IF c<0 THEN c=0 CALL VWRITE(4872,P1$(C),5040,P2$(C)) END GOSUB CheckButt UNTIL MI=3 OR TurdC=0 CALL UnShit(sh(),turd) CALL Turn(0) IF MI<3 THEN BEGIN bf = 0 :: CALL bucket(bf) CALL Disply(8,7,"Well|done") CALL Disply(10,5,"Wave|00|cleared") CALL DisVal(10,10,2,lv) FOR i=1 TO 10 CALL SOUND(100,220,4) score = score + 1 CALL DISVAL(2,28,4,Score) CALL SOUND(50,220,30) NEXT i GOSUB UpperClear lv = lv +1 :: CALL DisVal(8,29,2,lv) GOSUB LevelPar CALL LOCATE(#9,240,1) :: txl=10+RND*(60-MIN(lv,30)) END UNTIL MI=3 // game over CALL disply(8,9,"GAME|OVER") REPEAT CALL KEY(3,k,s) UNTIL s=1 FOR i=0 TO 5 CALL RemCol(p,i,SC(,)) NEXT i CALL HCHAR(24,1,0,27) UNTIL k=78 OR k=88 END CheckButt: CALL POSITION(#1,by,bx) IF dir=-1 AND bx<lm THEN CALL turn(8) :: dir = 1 :: lm = bx+RND*(144-bx) IF dir= 1 AND bx>lm THEN CALL turn(-8) :: dir =-1 :: lm = 25+RND*(bx-25) CALL POSITION(#9,ty,tx) IF tx>txl AND turd>0 THEN BEGIN CALL LOCATE(#9,240,1) :: txl=10+RND*(60-MIN(lv,30)) IF sh(0)=0 THEN CALL poop(0,sh(),bx) ELSE IF tsim>1 AND sh(1)=0 THEN CALL poop(1,sh(),bx) ELSE IF tsim>2 AND sh(2)=0 THEN CALL poop(2,sh(),bx) ELSE turd = turd +1 turd = turd -1 END FOR sn=0 TO 2 CALL POSITION(#5+sn,sy,sx) IF sy>140 AND sh(sn) THEN IF sy<161 AND sx>p*8+c*2 AND sx<p*8+c*2+25 AND bf<6 THEN GOSUB catch ELSE IF sy>180 THEN GOSUB miss NEXT sn RETURN Catch: CALL SOUND(250,880-(bf=4)*880-(bf=5)*2640,0) score=score+1 TurdC = TurdC - 1 CALL DISVAL(2,28,4,Score) sh(sn)=0 CALL DELSPRITE(#5+sn) bf = bf +1 CALL bucket(bf) RETURN miss: CALL SOUND(500,110,0,110,30,830,30,-4,0) CALL UnShit(sh(),turd) CALL freeze MI = MI + 1 CALL HCHAR(11,29,120,MI) GOSUB SPRITE11 p = p - 2 GOSUB MoveRight CALL RemCol(p,4,SC(,)) CALL RemCol(p,5,SC(,)) CALL delay(2000) IF MI<3 THEN CALL thaw :: GOSUB SPRITE00 bf=0 :: CALL bucket(bf) RETURN MoveRight: CALL RemCol(p,1,SC(,)) P = P + 2 C = -1 CALL window(18,p,23,p+3) CALL disply(18,p,PR$,0) CALL window IF p<20 THEN CALL Disply(24,P-2,FT$) .. ELSE CALL Disply(24,P-2,seg$(FT$,1,29-P)) RETURN MoveLeft: P = P - 2 C = 8 CALL window(18,p+1,23,p+5) CALL disply(18,p+1,PL$,0) CALL window IF P=1 THEN CALL Disply(24,1,seg$(FT$,3,7)) ELSE IF p<20 THEN CALL Disply(24,P-2,FT$) .. ELSE CALL Disply(24,P-2,seg$(FT$,1,29-P)) RETURN EmptyBucket: REPEAT IF s<>0 THEN BEGIN // walk right IF k=68 AND c<3 THEN BEGIN IF c=0 THEN CALL DrCol(p,4) IF c=1 THEN CALL DrCol(p,5) c = c + 1 END // walk left IF k=83 THEN BEGIN IF c=2 THEN CALL RemCol(p,5,SC(,)) IF c=1 THEN CALL RemCol(p,4,SC(,)) c = c - 1 END IF C>0 THEN ON C GOSUB SPRITE08, SPRITE09, SPRITE10 END GOSUB CheckButt IF c=3 AND bf>0 THEN CALL SOUND(300,-7,10) :: bf = bf - 1 :: CALL bucket(bf) CALL KEY(3,k,s) UNTIL c<1 CALL VWRITE(4872,P1$(0),5040,P2$(0)) RETURN StartGame: CALL DISPLY(4,8,"SCUTTLEBUTT") CALL DISPLY(6,5,"Behind|Enema|Lines") i=1 :: j=0 tx$(0) = "Press|any|key|||||||TI|Port|by|Stefan|Bauch||||||Original|Game|by|Karl|H}rnell|" tx$(1) = "This|giant|posterior|has|turned|up|in|your|livingroom|and|intends|to|make|a|mess.|Move|left|and|right|to|catch|the|waste|in|your|bucket.|" tx$(2) = "The|bucket|has|limited|capacity.|Empty|it|in|the|toilet|now|and|then|so|that|it|does|not|overflow.|Good|luck.|" REPEAT a$=seg$("||||||||||||||||||||||||||"&TX$(j),i,26) IF i>LEN(tx$(j))+25 THEN i=1 :: j=j+1 ELSE i=i+1 IF j=3 THEN j=0 CALL disply(10,1,a$) CALL delay(150) CALL KEY(3,k,s) UNTIL s=1 GOSUB UpperClear IF score>hsc THEN CALL DisVal(5,28,4,score) :: hsc=score P = 9 :: C = 0 :: txl = 60 LV = 1 :: MI = 0 Score = 0 :: bf = 0 CALL VWRITE(4872,P1$(0),5040,P2$(0)) GOSUB ScoreTab GOSUB LevelPar GOSUB MoveRight CALL SPRITE(#9,88,3,240,1,0,10) RETURN GameInit: CALL SCRN2 CALL SCREEN2(16) CALL COLOR2(81,16,16) CALL HCHAR(1,1,0,384) // Define Room Characters FOR C=1 TO 68::READ CN,CC$::CALL CHAR2(CN,CC$)::NEXT C CALL DISPLY(4,8,"SCUTTLEBUTT") // Draw Room FOR Y=0 TO 11 FOR X=0 TO 31 READ CP :: CALL VCHAR(Y+13,X+1,CP) :: SC(MAX(0,Y-5),X)=CP NEXT X NEXT Y CALL VCHAR(1,27,129,12) GOSUB ScoreTab CALL COLOR2(81,2,16) FOR i=0 TO 5 FOR j=0 TO 3 PR$=PR$&CHR$(1+j*7+i) NEXT j NEXT i FOR i=0 TO 5 FOR j=1 TO 5 PL$=PL$&CHR$(1+j*7+i) NEXT j NEXT i // Prepare Butt CALL MAGNIFY(3) CALL CHAR(100,"C0C8D0C0E079333C1E07070101000000000000000000081010C3D8F0FE7F0700") CALL CHAR(104,"000000000000002040000C4042F3FF3F00000000000000021A00032F7FFEE800") CALL CHAR(108,"00000006066C1C9C78F0E0E2FDFF0F0000000000000000000404C00B0FFFFC00") CALL CHAR(112,"00000100020009038F1FF8F0E0C000003030F070E0E0C0E00080000000000000") CALL SPRITE(#1,100,2,1,64,#2,104,2,1,80,#3,108,2,1,96,#4,112,2,1,112) // prepare shit and bucket CALL CHAR(116,"081C366DDBB6ED7F000000000000000000000000808080000000000000000000") CALL SPRITE(#8,120,15,113,225) // buffer 8 most used character definitions in CPU-RAM for speed FOR i=0 TO 7 FOR j=1 TO 42 CALL CHAR2(j,"00") NEXT j ON i+1 GOSUB SPRITE00, SPRITE01, SPRITE02, SPRITE03, SPRITE04, SPRITE05, SPRITE06, SPRITE07 CALL VREAD(4872,168,P1$(i),5040,168,P2$(I)) NEXT i // row 24 ... feet string ft$ = chr$(0)&chr$(0)&chr$(7)&chr$(14)&chr$(21)&chr$(28)&chr$(35)&chr$(42)&chr$(0)&chr$(0) RETURN LevelPar: CASE lv OF 1 : turd = 5 2 : turd = 8 ELSE turd = lv * 2 + 4 ENDCASE TurdC = turd tsim = 1 IF lv > 4 THEN tsim = 2 IF lv > 9 THEN tsim = 3 RETURN UpperClear: FOR i=1 TO 12 CALL HCHAR(i,1,0,26) NEXT i RETURN ScoreTab: CALL DISPLY(1,28,"Score") CALL DISVAL(2,28,4, Score) CALL DISPLY(4,28,"High") CALL DISVAL(5,28,4,hsc) CALL DISPLY(7,28,"Wave") CALL DISVAL(8,29,2,lv) CALL DISPLY(10,28,"Fail") CALL DISPLY(11,29,"ooo") CALL HCHAR(11,29,120,MI) CALL bucket(bf) CALL HCHAR(24,1,0,27) RETURN SPRITE00: CALL CHAR2( 1,"00000000011F3E3A625C808083878787474020386778BC9E87838180406060383F3F3F3E1010101010100808080804040201000F344282FF") CALL CHAR2( 8,"00000070880404040C0402FFE0F8F090382F4841C06021B25CC4830303070F1FF8F080000708101020202020101008080402CEFCE20262DE") CALL CHAR2(15,"0000000000000000000000FF0047A0E060B058CC47C100000000FFFCFEFEFFFF7F1E0000C020101008080808081010202040733F4740467B") CALL CHAR2(22,"0000000000000000000000FF01FF02020D111D1109EE3C181010E0000000000080C04040402020202020202020204040808000F02C4241FF") RETURN SPRITE01: CALL CHAR2( 1,"0000000000070F0E18172020202121211110080E191E2F27212020201018180E0F0F0F0F0404040404040202020202010101000F344282FF") CALL CHAR2( 8,"0000001C62C181818301003FF8FEFCE4CE0B1210F01808ACD7F1600000010307FEFCE08000000306040C080808040404020282FCE20262DE") CALL CHAR2(15,"0000000000000000000080FF0011283818EC1673113040800000FFFFFFFFFFFF0F01000000F8060101000000000101020203040404070000") CALL CHAR2(22,"0000000000000000000000FF00FF000003040704C27B0F060404F8008080C0C0E090100808040402828282828204040408FF720464BF0000") CALL CHAR2(29,"0000000000000000000000C040C0808040404040408000000000000000000000000000000000000000000000000000000000C02010F00000") RETURN SPRITE02: CALL CHAR2( 1,"00000000000001030306050808080808080404020306070B0908080808040606030303030301010202020202020202010101000F344282FF") CALL CHAR2( 8,"000000000718F0E0A020C0000F3E7F7F79730204847C86C2EB753C180000000081FFFFF8E00003040408080808040406020282FCE20262DE") CALL CHAR2(15,"000000000080404040C04020FF00840A0E86FB851C040C1020C0403F3F3F7FFFFF83000000F8070000000000000000000000000000000000") CALL CHAR2(22,"000000000000000000000000FF007F0000000181C1701E03010101FEC0E0E0F0F0F8640201018141404040414181C63F4740467B00000000") CALL CHAR2(29,"000000000000000000000000F010F02020D010D01090E0C08000000000000000000000000000000080808000000000F02C4241FF00000000") RETURN SPRITE03: CALL CHAR2( 2,"000001010202020202020101000001010202020202020101000000000000000000000000000000000000000F344282FF") CALL CHAR2( 8,"000000000001067CF8E8887000030F1F1F1E1C0081E19FE1F07A1D0F0600008080E0FFFFFEF840404040808081818282828282FCE20262DE") CALL CHAR2(15,"0000000000C020101010301008FF80E1C243E1BE2107018384C870100F0F0F1F3F7FE1C0000000001F608080000000000000000000000000") CALL CHAR2(23,"0000000000FF001F808080C060301C0700000000FFF0F8F8FCFCFE1E0100000000E01008080404040403040404070000") CALL CHAR2(30,"0000000000FC04FC08083444744424B8F0604040800000000000000000808040202010101010080810FF720464BF0000") CALL CHAR2(42,"0000C02010F00000") RETURN SPRITE04: CALL CHAR2( 7,"0000000F344282FF") CALL CHAR2( 8,"00000000000000011F3E3A625C808083878787474020386778BC9E87838180406060383F3F3F3E1010202040408181818282CEFCE20262DE") CALL CHAR2(15,"00000000000070880404040C0402FFE0F8F090382F4841C06021B25CC4830303070F1FF8F080000708106080800000000000000000000000") CALL CHAR2(23,"000000000000FF0047A0E060B058CC47C100000000FFFCFEFEFFFF7F1E0000C030080402010100000000000000000000") CALL CHAR2(30,"000000000000FF01FF02020D111D1109EE3C181010E0000000000080C04020101008080402028281C141733F4740467B") CALL CHAR2(42,"000000F02C4241FF") RETURN SPRITE05: CALL CHAR2( 7,"00000304080F0000") CALL CHAR2( 8,"00000000000000070F0E18172020202121211110080E191E2F27212020201018180E0F0F0F0F1010202040404020203018FF4E2026FD0000") CALL CHAR2(15,"00000000001C62C181818301003FF8FEFCE4CE0B1210F01808ACD7F1600000010307FEFCE0800007186080804040602040C0202020E00000") CALL CHAR2(23,"0000000080FF0011283818EC1673113040800000FFFFFFFFFFFF1F07000000E018040201010000000000000000000000") CALL CHAR2(30,"0000000000FF00FF000003040704C27B0F060404F8008080C0C0E0A01018080804040402828242414141733F4740467B") CALL CHAR2(37,"0000000000C040C08080404040404080000000000000000000000000000000000000000000000000000000F02C4241FF") RETURN SPRITE06: CALL CHAR2( 8,"00000000000001030306050808080808080404020306070B09080808080406060303030307080810101008080403000F344282FF00000000") CALL CHAR2(15,"000000000718F0E0A020C0000F3E7F7F79730204847C86C2EB753C180000000081FFFFF8E00106081010080C0301C2FCE20262DE00000000") CALL CHAR2(22,"000000000080404040C04020FF00840A0E86FB851C040C1020C0403F3F3F7FFFFF87010000F8040201010000000000000000000000000000") CALL CHAR2(30,"00000000FF007F0000000181C1701E03010101FEC0E0E0F0F0F8E8040402020201018181404040404040213F4740467B") CALL CHAR2(37,"00000000F010F02020D010D01090E0C0800000000000000000000000000000000000000080808080808000F02C4241FF") RETURN SPRITE07: CALL CHAR2( 9,"0101020202020202010100000101020202020202010101000000000000000000000000000000000000000304080F0000") CALL CHAR2(15,"00000001067CF8E8887000030F1F1F1E1C0081E19FE1F07A1D0F0600008080E0FFFFFEF840408080808181814040203018FF4E2026FD0000") CALL CHAR2(22,"000000C020101010301008FF80E1C243E1BE2107018384C870100F0F0F1F3F7FE1C0000006394080800000008080406020C0202020E00000") CALL CHAR2(30,"000000FF001F808080C060301C0700000000FFF0F8F8FCFCFE7A02010101804040402020202020204040733F4740467B") CALL CHAR2(37,"000000FC04FC08083444744424B8F060404080000000000000000000000080808080404040404040808000F02C4241FF") RETURN // Frames for dumping to toilet SPRITE08: CALL CHAR2( 1,"000000000001070908172020202121211110081E3F27614040404060787F7F3F3F3F3F3E1010101010100808080804040201000F344282FF") CALL CHAR2( 8,"0000001E21C000C0C183003FFEFECF98E0000103CDB0E37C000000000007FFFFFCF0C0000708101020202020101008080402CEFCE20262DE") CALL CHAR2(15,"0000000000808081820382840404098A8C9C9810D0F8860101030E3EFEFEFFFF7F1E0000C020101008080808081010202040733F4740467B") CALL CHAR2(22,"0000000000000080403088342B10109190F01008681C34C60301C2241800000080C04040402020202020202020204040C08000F02C4241FF") CALL CHAR2(29,"FFFFFFFFFFFFFFFFFFFFFFFFFFFF7F9F4F33090403071F3F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF") RETURN SPRITE09: CALL CHAR2( 1,"00000000000001030604080808080808040402070F0818103020303C3F3F3F3F3F3F3F3F1010101010100808080804040201000F344282FF") CALL CHAR2( 8,"000000010678C030F830000F3F7F7361621C0080F3EC3F0000000000C0FFFFFFFCF8C0000708101020202020101008080402CEFCE20262DE") CALL CHAR2(15,"0000008060101010106020E08080C020202040F13E7880000000030F3FFFFFFF3F0E0000C020101008080808081010202040733F4740467B") CALL CHAR2(22,"00000000000000000000000102041820509F908380414324386090101F80808080C04040402020202020202020204040C08000F02C4241FF") CALL CHAR2(29,"FFFFFFFFFFFFFFFFEFC7A703132B11111130A0A2A221212120301010FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000") CALL CHAR2(36,"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F3FBFBF9F5FFFFFFFFF000000FF00000000808080C0C0E0F8FE0708102040601F00") RETURN SPRITE10: CALL CHAR2( 1,"0000000000000000000001010101010100000000010306040C0C0F0F1F1F1F1F1F3F3F3E1010101010100808080804040201000F344282FF") CALL CHAR2( 8,"00000000001F3046C38E0001070F0F0F8C8C43E0FE1D0300000000E0FEFFFFFFFFFCE0000708101020202020101008080402CEFCE20262DE") CALL CHAR2(15,"000000003CC2010181020CC4FCF0E8141422C60F37C3FF00000000001FFFFFFF1F070100C020101008080808081010202040733F4740467B") CALL CHAR2(22,"0000000000000000000000000000000000010107098AF02020201013FCE4E3E0E0C0C040402020202020202020204040C08000F02C4241FF") CALL CHAR2(29,"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000C02070101021C10302020684E4F4FEFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000") CALL CHAR2(36,"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF909030363A3478787072F2F2F5F5F000000FF00000000808080C0C0E0F8FE0708102040601F00") RETURN // Frame screaming SPRITE11: CALL CHAR2( 1,"00000000000000000001010202020202010102060F17234141C183838783838182424221110F081010202010100808040201000F344282FF") CALL CHAR2( 8,"0000000F10202060D000030F1F3F3F3C180080601F0284C8F8FF00C28587C37D420E02060890E0203F204040201008080402CEFCE20262DE") CALL CHAR2(15,"0000008040202020500804C4E4F2F2F264040E33E387472F1FFF003F00000081C160380F01000000FF080404080810202040733F4740467B") CALL CHAR2(22,"000000000000000000000000000000000000000080C0A09008FC0CFA1211E909C989E98AFCD090880808101010204040808000F02C4241FF") CALL CHAR2(35,"",42,"") RETURN RoomChar: DATA 128,"FFFF00000000FFFF",129,"C0C0C0C0C0C0C0C0",130,"0303030303030303",131,"1F18181818181F00" DATA 132,"F81818181818F800",133,"FF0000000000FF00",134,"FF0000180000FF00",135,"E72424242424E700" DATA 136,"0808080808080808",137,"1010101010101010",138,"91CBC3BD99FF0000",139,"99999999BDC3D389" DATA 140,"C3C3C3C3C3C3C3C3",141,"9999999999999999",142,"0000FF9999999999",143,"88888486818080FF" DATA 144,"00000000FF0000FF",145,"11112161810101FF",146,"9090909090909090",147,"3F40808186848888" DATA 148,"FF0000FF00000000",149,"FC02018161211191",150,"0909090909090909",151,"03060C181C0E0600" DATA 152,"88888486818080FF",153,"FF80809F90909090",154,"FF0101F909090909",155,"09090909F90101FF" DATA 156,"909090909F8080FF",157,"00FC848C848C8484",158,"000E3860C0033620",159,"FFFFFFFFFFFFFFFF" DATA 160,"4242420404C43800",161,"3C4080800007F800",162,"000000000000FF00",163,"0708102040601F00" DATA 165,"808080C0C0E0F8FE",166,"000000FF00000000",167,"020402042854AA00",168,"8141414143434303" DATA 169,"F3F3F9F9F9F9F9FF",170,"E7E7F3F3F3F3F3F3",171,"FFFFE7E7E7E7E7E7",172,"0000FF001C14141C" DATA 173,"8989898989898989",174,"9191919191919191",175,"89F98F818181F18F",176,"939DF18181838DF1" DATA 177,"2424242424242424",178,"8080808080808080",179,"0101010101010101",180,"3C76CDA589A589A5" DATA 181,"F7DCBAACE8B8F0B0",182,"EF7B5D35171D0F0D",183,"20FFFBFB763C3C7E",184,"2020101008040300" DATA 185,"A41448289020C000",186,"06090605027F407F",187,"18996A9C5DFF00FF",188,"60B05090A0FE02FE" DATA 189,"102A64AA56341818",190,"FFFF3F3F3F9F9F9F",191,"CFCFCFE7E7E7F0F0",192,"FFFFFCFCFCF9F9F9" DATA 193,"F3F3F3E7E7E70F0F",0,"00",124,"00",125,"006C007C4444447C" RoomMap: DATA 0,147,148,149,0,0,0,0,0,0,0,0,0,0,0,0 DATA 0,0,0,0,0,0,0,0,0,0,159,159,159,159,159,159 DATA 0,146,151,150,0,0,0,0,0,153,148,148,154,0,0,0 DATA 180,180,180,180,180,180,180,0,0,0,159,159,159,159,159,159 DATA 0,143,144,145,0,0,0,0,0,146,158,158,150,0,0,0 DATA 173,181,0,177,0,182,174,0,0,0,159,159,190,192,159,159 DATA 0,136,142,137,0,0,0,0,0,156,144,144,155,0,0,0 DATA 173,129,0,177,0,130,174,0,0,0,159,159,191,193,159,159 DATA 0,136,141,137,0,0,153,154,0,0,0,0,0,0,0,0 DATA 173,178,0,177,0,179,174,0,0,0,159,159,159,159,159,159 DATA 0,136,139,137,0,0,146,150,0,0,0,0,0,0,0,0 DATA 175,0,162,177,169,0,176,0,0,0,159,159,159,159,159,159 DATA 0,136,138,137,0,0,156,155,0,0,157,0,183,0,0,0 DATA 173,0,138,177,169,0,174,0,0,0,159,159,159,171,172,159 DATA 130,128,128,128,140,128,128,128,128,128,128,128,128,128,129,0 DATA 173,148,148,148,148,148,174,0,0,0,159,159,159,170,0,159 DATA 130,0,0,0,140,131,133,134,133,135,133,134,133,132,129,0 DATA 173,0,0,0,0,0,174,0,189,0,159,159,159,169,0,159 DATA 130,135,135,135,140,131,133,134,133,135,133,134,133,132,129,0 DATA 173,0,0,0,0,0,174,186,187,188,159,166,166,166,0,159 DATA 130,128,128,128,140,128,128,128,128,128,128,128,128,128,129,0 DATA 173,0,0,0,0,0,174,184,162,185,159,165,0,167,168,159 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DATA 0,0,0,0,0,0,0,0,0,0,0,163,162,161,160,0 SUB turn(x) CALL freeze CALL MOTION(#1,0,x,#2,0,x,#3,0,x,#4,0,x) CALL thaw SUBEND SUB DRCOL(P,C) FOR i=0 TO 5 CALL HCHAR(18+i,p+c,1+i+c*7) NEXT i SUBEND SUB REMCOL(P,C,SC(,)) FOR i=0 TO 5 CALL HCHAR(18+i,p+c,SC(I,P+C-1)) NEXT i SUBEND SUB Bucket(v) CALL CHAR(120,rpt$("00",13-v*2)&seg$("0F1F1F1F0F0F0F070707030303000000",25-v*4,v*4)) CALL CHAR(122,rpt$("00",13-v*2)&seg$("F0F8F8F8F0F0F0E0E0E0C0C0C0000000",25-v*4,v*4)) SUBEND SUB DISVAL(y,x,l,v) a$=STR$(v) :: a$=RPT$("0",l-LEN(a$))&a$ CALL disply(y,x,a$) SUBEND SUB Poop(a,sh(),bx) sh(a)=1 :: CALL SPRITE(#5+a,116,2,16,bx+32,6,0):: CALL SOUND(150,-5,3) SUBEND SUB UnShit(sh(),t) CALL DELSPRITE(#5,#6,#7) FOR i=0 TO 2 IF sh(i)>0 THEN t=t+1 sh(i)=0 NEXT i SUBEND 18 Quote Link to comment Share on other sites More sharing options...
SkyPilot Posted February 22, 2022 Share Posted February 22, 2022 Cute! My score. 2 1 Quote Link to comment Share on other sites More sharing options...
+Ksarul Posted February 22, 2022 Share Posted February 22, 2022 More Buttvasion. . .next will be a horde of flying space arses bombarding the Earth for fun and destruction. Of course, the space plunger launchers will foil their dirty plans. . .and thinking more on this abomination, a successful plunger strike plugs the evil arse, causing it to swell up and explode due to arse biscuit buildup with nowhere to go. 2 Quote Link to comment Share on other sites More sharing options...
XLERB Posted February 23, 2022 Share Posted February 23, 2022 That’s awfully similar to my metaphor for what our job was like when I ran a call center. 1 Quote Link to comment Share on other sites More sharing options...
+DuaneAL Posted February 23, 2022 Share Posted February 23, 2022 This is buttful, er, I mean beautiful! 1 Quote Link to comment Share on other sites More sharing options...
Retrospect Posted February 23, 2022 Share Posted February 23, 2022 Youtube video of my gameplay. Gets awfully difficult in later stages. The brain has to quickly decide when to empty the bucket in accordance to the distance of the nearest botty-bomb. Lovely port of the Spectrum game. 2 Quote Link to comment Share on other sites More sharing options...
tmop69 Posted February 23, 2022 Share Posted February 23, 2022 Interesting gameplay (it seems a "Game & Watch" console game). ? There is a bug in the anim if you move on left part of the screen (a character non removed) as indicated in red in the image below. While adding the joystick support I've noticed that there is no more memory left, so I've moved the runtime in low memory while compiling the code. A suggestion for a couple of improvements (in addition to joystick...) for a V1.1 update: - using sprites for the anim of the hero to not destroy the background; - adding a "splash" anim when you finally grab the object in your bucket (as in the Spectrum / C64 versions). Maybe moving the compiler runtime in low memory would free the needed space for this two improvements. In attachment the SSS with joystick addition (in GROM format) and the modified source with the change. SB SCUTTLE.G 3 Quote Link to comment Share on other sites More sharing options...
Willsy Posted February 23, 2022 Share Posted February 23, 2022 This is... shit. IN A GOOD WAY 1 2 Quote Link to comment Share on other sites More sharing options...
HOME AUTOMATION Posted February 23, 2022 Share Posted February 23, 2022 I'll bet that you just can't imagine my esteem, for being associated with this... 16 hours ago, SteveB said: This posting by Alex @HOME AUTOMATION in the thread of @Retrospect hilarious "Deluxe Butt-Plug Simulator" brought the 2018 Sinclair Spectrum game of Scuttlebutt to my attention. I liked the video so much that I thought about a possible port to the TI-99/4a. I contacted the author Karl Hörnell and he was so kind to send me the original artwork of the game. 39 minutes ago, tmop69 said: Interesting gameplay (it seems a "Game & Watch" console game). ? Yep! This is the one I'm reminded of... Quote Link to comment Share on other sites More sharing options...
+OLD CS1 Posted February 23, 2022 Share Posted February 23, 2022 7 hours ago, HOME AUTOMATION said: Yep! This is the one I'm reminded of... You, my friend, are in luck. 7 hours ago, Willsy said: This is... shit. IN A GOOD WAY We need a special awards section just for these kinds of games. Bonus points if it depicts someone running around catching falling turds with their mouth wide open. 1 2 Quote Link to comment Share on other sites More sharing options...
SteveB Posted February 23, 2022 Author Share Posted February 23, 2022 7 hours ago, tmop69 said: A suggestion for a couple of improvements (in addition to joystick...) for a V1.1 update: - using sprites for the anim of the hero to not destroy the background; - adding a "splash" anim when you finally grab the object in your bucket (as in the Spectrum / C64 versions). Using sprites does not work, as our hero has plenty of white areas which would be transparent. Using a black and white sprite would not work due to the 4-sprite limit .. the player is six chars wide, means 2 x 3 sprites in Magnify(3). The cartrige already uses the low memory and it is still tight, I had to limit the character definitions cached for VREAD/VWRITE. I found the index-error leading to the unremoved character ... didn't see it in all the shit-testing... IF P=1 THEN CALL Disply(24,1,seg$(FT$,3,8)) ELSE Scuttlebut.bin 1 Quote Link to comment Share on other sites More sharing options...
jrhodes Posted February 23, 2022 Share Posted February 23, 2022 Isn't there a thread somewhere on here for "crap games" or something similar to that? I mean, this is literally a crap game, seems to me it would fit right in lol. 2 Quote Link to comment Share on other sites More sharing options...
+OLD CS1 Posted February 23, 2022 Share Posted February 23, 2022 3 hours ago, SteveB said: I found the index-error leading to the unremoved character ... didn't see it in all the shit-testing... Would this be a problem with shit code, or with shit unit testing? 1 3 Quote Link to comment Share on other sites More sharing options...
+OLD CS1 Posted February 23, 2022 Share Posted February 23, 2022 Been playing this and Buttplug Simulator today. I rather enjoy taking a break from the seriousness of Exchange and Outlook oddities to play such assinine games. 2 2 Quote Link to comment Share on other sites More sharing options...
tmop69 Posted February 24, 2022 Share Posted February 24, 2022 14 hours ago, SteveB said: Using sprites does not work, as our hero has plenty of white areas which would be transparent. Using a black and white sprite would not work due to the 4-sprite limit .. the player is six chars wide, means 2 x 3 sprites in Magnify(3). The cartrige already uses the low memory and it is still tight, I had to limit the character definitions cached for VREAD/VWRITE. I found the index-error leading to the unremoved character ... didn't see it in all the shit-testing... IF P=1 THEN CALL Disply(24,1,seg$(FT$,3,8)) ELSE Scuttlebut.bin 32 kB · 7 downloads ok, thanks. I've updated also the joystick version with the fix. I've just noticed another minor glitch. If you continue to move to the right direction, the nose of the hero is showed for few ms on the position of the bucket, then is cleaned. SCUTTLE.G 2 Quote Link to comment Share on other sites More sharing options...
Ed in SoDak Posted February 25, 2022 Share Posted February 25, 2022 On 2/24/2022 at 2:12 AM, tmop69 said: the nose of the hero is showed for few ms on the position of the bucket That explains the lingering odor I detected! Quote Link to comment Share on other sites More sharing options...
SteveB Posted February 27, 2022 Author Share Posted February 27, 2022 On 2/24/2022 at 10:12 AM, tmop69 said: I've just noticed another minor glitch. If you continue to move to the right direction, the nose of the hero is showed for few ms on the position of the bucket, then is cleaned. This more a visible proof that the CALL VWRITE is much faster than the CALL CHAR. For the main eight pictures of the player I buffer the characters in an array of strings with CALL VREAD, but went out of memory for the remaining 4 images, where I still need to use CALL CHAR, being much slower, leading to this visual artefacts. The player is 6x7 charactes big, leading to 42 characters to be redefined on every single move. Quote Link to comment Share on other sites More sharing options...
SteveB Posted February 27, 2022 Author Share Posted February 27, 2022 On 2/23/2022 at 11:38 PM, OLD CS1 said: Would this be a problem with shit code, or with shit unit testing? Well, I never thought I woul have a program with routines like: SUB Poop(a,sh(),bx) SUB UnShit(sh(),t) It's a dirty job ... but someone gotta test it. 1 7 Quote Link to comment Share on other sites More sharing options...
OX. Posted August 8 Share Posted August 8 Always thought this game should begin with the speech "Ready to Fart?" 7 Quote Link to comment Share on other sites More sharing options...
+OLD CS1 Posted August 23 Share Posted August 23 On 8/8/2024 at 11:40 AM, OX. said: Always thought this game should begin with the speech "Ready to Fart?" "Ready to Shart?" 3 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.