-
Content Count
1,852 -
Joined
-
Last visited
Posts posted by adamantyr
-
-
RESTORE command question... I'm sure I'm dreaming, but in the event of a failure, I want to re-draw / reset the level. Easiest way to do that is RESTORE the data for the level, but I want to do math to do that... Doesn't look possible... Ideas?
I looked into this myself, RESTORE works with line numbers only, and they have to be statics, it won't accept variables or logical statements.

The technique I used was the following:
1000 ON L GOSUB 20000,20100 1010 REM LEVEL BUILDING CODE HERE . . . 20000 RESTORE 30000 20010 RETURN 20100 RESTORE 30100 20110 RETURN . . . 30000 REM DATA FOR LEVEL 1 30100 REM DATA FOR LEVEL 2
Adamantyr
-
Cmon, let's see some BoCC projects announced, even if it's just a game idea without a screenshot! My intention with my game post was to inspire, not demoralize!

A=b=c=0 is crap don't recommend that
My game is good and will be released when done - first level works and 2nd is almost done - hopefully 30+ fit
Adamantyr
Wow, I had no idea I planned 30 levels.
(Need to clean up the quotes there, dude!)Adamantyr
-
Some BASIC programming tips:
- One or two letter variables
- Subscripted variables are noticeably slower to work with. Better to move subscripted values into placeholders in a loop
- ALWAYS declare your subscripts in a DIM statement, otherwise BASIC will default-reserve 10 entries for each one
- Type up your code in a text editor first. This works way better than BASIC, which has lousy line number management tools
- Numeric variables consume 4 bytes each, try to reuse them as much as possible
- You can use this technique to set a lot of variables to the same value in one line: "A=B=C=0" But it's not stable... I had times when the first variable was initialized to -1
- DATA statements with RESTORE and loops is the most efficient way to initialize graphics, color, sound, and other data
- You can do some clever math tricks in IF/THEN statements, but the bigger they are the slower they will be. Keep the logic simple if you can
Cmon, let's see some BoCC projects announced, even if it's just a game idea without a screenshot! My intention with my game post was to inspire, not demoralize!

Adamantyr
-
And now... vertical portals!
To set a portal in any direction, you press the fire button (or Q) and then push a cardinal direction. (Diagonals are ignored)
I threw a cube back into test chamber 1 to do some testing with. Feel free to try and get it over on the other side of the chamber. Or up next to the exit.
The cube will no longer displace one square after being pushed through.. a limitation of going to a two-axis portal system. This can create some complicated puzzle issues, as you may have to get creative to get the cube into another area and then right behind it. (You'll portal in on top of it, but don't worry, it's there)
Next steps are inclusion of dynamic and event-based features:
- Triggers to use with the cube
- Energy balls flying around (and potentially through portals)
- Electric beams
- Areas that can open/close based on trigger state (Need a nice door graphic other than the exit I think...)
- Moving platforms (probably more like an elevator that's triggered)
Adamantyr
-
I was doing some work on a game once that like this one had gravity, it was like load runner, anyway even though GCHAR was slow the other ways I tried were slower, even storing the screen in a map array and reading from it.
Good to know... I didn't think that would change much. With TI-BASIC, just cutting down on the number of lines of code between loops is a big help.
For example, I broke the game loop for falling out from the general movement loop because I didn't want it going through and validating a bunch of stuff that you couldn't even do WHILE falling.
(Yeah, you can't "steer" while falling. That's intentional; the screen is too small and the math too tight to do complicated physics.)
Adamantyr
-
Okay, made some changes to the controls... I decided I wanted to use a joystick instead, and the fire button to do portals. You no longer directly control which portal is fired. It starts with one, then alternates between them.
I was hoping that going to joystick would speed things up a bit, with less key tracking. No such luck... I think the main slowdown is the GCHAR to check that you got floor underneath you. Not much I can do about that; it's a side-game and gravity matters.
On the PLUS side, my new control system actually brought a feature back I'd cut, jumping! I only discovered it because of another state check that allowed you to push up when a ladder was underneath you, but it was easy to extend it to be implemented all the time.
Next step is to investigate vertical portals...
Adamantyr
-
Here's a good thing to try:
1) Step away from the computer
2) Get a nice pad of graph paper... 4-5 squares an inch is ideal
3) Draw your 32x24 size border area, a 8.5x11 sheet of paper is well big enough for this
4) Start designing an "ideal" dungeon, one that you want your program to make
5) Look at what you drew, and start asking why you drew this chamber here, that passage there, etc.
Basically, what you're looking for is the PROCESS of maze development. Then you just write down the code to support it.
Adamantyr
-
I gave it a try. I like it! However, I couldn't get to the door. It started on test chamber 2. Is that normal? But I couldn't get across to the right hand side using the orange and blue portals...
Oh yeah, I forgot I set it on Level 2 so I could check the screen building was good. It's possible to get to the door.

Right now, I'm considering if I want to add vertical portals. That totally changes the game dynamics, though, and I'll have to do a "button+direction" combo to indicate where you want to shoot the portal.
Tracking two different keys may also be part of the cause of the drag on the controls. If I reduced it to one and just had it alternate between orange and blue, it may be faster.
Adamantyr
-
Hey Adam--- could you zip up the program and attach it to this thread? I'm still having difficulties inserting the proper character here...
Yeah, that's probably best...
Adamantyr
-
what's the small TM after the N?
Ah HA... yeah, everyone's got the same problem. The paste function on Classic99 isn't translating the ASCII character right. You'll have to enter it in by hand.
These lines:
20000 DATA "4=2b;;4=3a5L4B>a6544La323B=c634Kc>16N™0" 20101 DATA "[email protected]`22;=`217J™0"
Go to the TM character in TI BASIC and press CONTROL+SHIFT+Y
That will insert character 153.
Adamantyr
-
Another quick update...
I have two test chambers designed using my new "encoded" system. It took about 120 bytes to define the second one, so I feel pretty good about getting at least 15 chambers into the game... I will have to focus on making levels that compress more easily into this system. Also need to create a spreadsheet to generate them more easily...
I fixed the controls so you can do something new... I am noticing that the player is slowing down inch by inch as I add more functionality.
That's the problem with TI BASIC, tracking more than a few things starts to really impact it. I think it's still playable in its current form, and most of the code to do stuff while you're moving is done.100 DIM DX(2),AR(2),AC(2),AD(2) 110 DX(0)=1 120 DX(1)=-1 130 CALL CLEAR 140 FOR I=1 TO 22 150 READ C,C$ 160 CALL CHAR(C,C$) 170 NEXT I 180 FOR I=1 TO 16 190 READ F,B 200 CALL COLOR(I,F,B) 210 NEXT I 220 PRINT TAB(10);"APERTURE": : : : : : : : : : : : : : 230 PRINT " PRESS ANY KEY TO START" 240 CALL KEY(0,K,S) 250 IF S=0 THEN 240 260 L=2 270 GOSUB 8000 290 X=Y=D=AR(0)=AR(1)=AC(0)=AC(1)=T=0 500 CALL VCHAR(R,C,D+144) 501 GOSUB 5000 510 IF B=99 THEN 580 520 CALL GCHAR(R+1,C,G) 530 IF(G=120)+((G>=136)*(G<=138))THEN 1500 540 IF G<>97 THEN 580 550 Y=1 560 X=0 570 GOTO 600 580 Y=0 600 CALL KEY(3,K,S) 605 IF S=0 THEN 670 610 IF(K=83)*(Y=0)THEN 800 620 IF(K=68)*(Y=0)THEN 830 630 IF(K=69)*(Y=0)THEN 860 640 IF(K=88)*(Y=0)THEN 900 650 IF K=66 THEN 1000 660 IF K=79 THEN 1020 670 IF Y=0 THEN 510 ELSE 720 700 CALL GCHAR(R+Y,C+X,G) 701 IF G=104 THEN 1200 702 IF G=112 THEN 1230 703 IF(G=120)+((G>=136)*(G<=138))THEN 1500 704 IF G=128 THEN 2000 705 IF G=153 THEN 3000 710 IF(G<>97)*(G<>99)THEN 510 720 CALL VCHAR(R,C,B) 730 R=R+Y 740 C=C+X 750 B=G 760 GOTO 500 800 X=-1 810 D=1 820 GOTO 700 830 X=1 840 D=0 850 GOTO 700 860 IF B<>99 THEN 510 870 Y=-1 880 X=0 890 GOTO 700 900 CALL GCHAR(R+1,C,G) 910 IF G<>99 THEN 600 920 Y=1 930 X=0 940 GOTO 720 1000 PO=0 1010 GOTO 1030 1020 PO=1 1030 CALL VCHAR(R,C,D+146) 1035 PX=DX(D) 1040 PR=R 1050 PC=C+PX 1060 CALL GCHAR(PR,PC,G) 1070 IF G=96 THEN 1110 1080 IF(G<>97)*(G<>99)*(G<>128)THEN 500 1090 PC=PC+PX 1100 GOTO 1060 1110 IF AR(PO)=0 THEN 1130 1120 CALL VCHAR(AR(PO),AC(PO),96) 1130 AR(PO)=PR 1140 AC(PO)=PC 1150 CALL VCHAR(PR,PC,104+(PO*) 1160 CALL GCHAR(PR,PC-1,G) 1170 AD(PO)=ABS((G=97)+(G=99)+(G=128)+(G=146)+(G=147)) 1180 GOTO 500 1200 PO=0 1210 PD=1 1220 GOTO 1250 1230 PO=1 1240 PD=0 1250 IF(AR(PD)=0)THEN 501 1260 CALL VCHAR(R,C,B) 1270 R=AR(PD) 1280 C=AC(PD)+DX(AD(PD)) 1290 D=AD(PD) 1300 CALL GCHAR(R,C,B) 1310 GOTO 500 1500 CALL SOUND(500,-6,2) 1510 CALL VCHAR(R,C,B) 1520 FOR I=1 TO 1000 1530 NEXT I 1540 GOTO 270 2000 CALL GCHAR(CR,CC+DX(D),CG) 2001 IF CG=104 THEN 2300 2002 IF CG=112 THEN 2320 2010 IF(CG<>97)*(CG<>99)THEN 501 2020 CALL VCHAR(CR,CC,CB) 2030 CALL VCHAR(R,C,B) 2040 B=CB 2050 CB=CG 2060 CC=CC+DX(D) 2070 R=R+Y 2080 C=C+X 2090 CALL VCHAR(CR,CC,128) 2100 CALL VCHAR(R,C,D+144) 2110 CALL GCHAR(CR+1,CC,CG) 2120 IF CG=120 THEN 2200 2130 IF CG<>97 THEN 600 2140 CALL VCHAR(CR,CC,CB) 2150 CR=CR+1 2160 CB=CG 2170 CALL VCHAR(CR,CC,128) 2180 GOTO 2110 2200 CALL VCHAR(CR,CC,97) 2210 CR=CC=0 2220 GOTO 600 2300 PO=1 2310 GOTO 2330 2320 PO=0 2330 IF AR(PO)=0 THEN 501 2340 CALL VCHAR(CR,CC,CB) 2345 CALL VCHAR(R,C,B) 2346 B=CB 2347 R=CR 2348 C=CC 2350 CR=AR(PO) 2360 CC=AC(PO)+DX(AD(PO))*2 2370 CALL GCHAR(CR,CC,CB) 2380 GOTO 2090 3000 L=L+1 3010 GOTO 270 5000 T=T+1 5010 IF T=4 THEN 5040 5030 RETURN 5040 T=0 5050 RETURN 8000 CALL CLEAR 8010 PRINT "TEST CHAMBER";L: : : : : : : : : : : : : : : : : : : : : : : 8020 CALL HCHAR(2,1,98,736) 8030 FOR I=1 TO 21 8040 CALL HCHAR(2+I,2,96,30) 8050 NEXT I 8060 ON L GOTO 8100,8120,8140,8160,8180,8200,8220,8240,8260,8280 8100 RESTORE 20000 8110 GOTO 8500 8120 RESTORE 20100 8130 GOTO 8500 8140 RESTORE 20200 8150 GOTO 8500 8160 RESTORE 20300 8170 GOTO 8500 8180 RESTORE 20400 8190 GOTO 8500 8200 RESTORE 20500 8210 GOTO 8500 8220 RESTORE 20600 8230 GOTO 8500 8240 RESTORE 20700 8250 GOTO 8500 8260 RESTORE 20800 8270 GOTO 8500 8280 RESTORE 20900 8290 GOTO 8500 8500 READ T$ 8510 I=1 8520 T=ASC(SEG$(T$,I,1))-48 8530 IF T=0 THEN 9000 8535 IF T=5 THEN 8500 8540 I=I+1 8550 R=ASC(SEG$(T$,I,1))-48 8560 I=I+1 8570 C=ASC(SEG$(T$,I,1))-48 8580 I=I+1 8590 B=ASC(SEG$(T$,I,1)) 8600 I=I+1 8610 ON T GOTO 8620,8640,8680,8720 8620 CALL VCHAR(R,C,B) 8630 GOTO 8520 8640 H=ASC(SEG$(T$,I,1))-48 8650 I=I+1 8660 CALL HCHAR(R,C,B,H) 8670 GOTO 8520 8680 H=ASC(SEG$(T$,I,1))-48 8690 I=I+1 8700 CALL VCHAR(R,C,B,H) 8710 GOTO 8520 8720 V=ASC(SEG$(T$,I,1))-48 8730 I=I+1 8740 H=ASC(SEG$(T$,I,1))-48 8750 I=I+1 8760 FOR J=1 TO V 8770 CALL HCHAR((R-1)+J,C,B,H) 8780 NEXT J 8790 GOTO 8520 9000 READ T$ 9010 R=ASC(SEG$(T$,1,1))-48 9020 C=ASC(SEG$(T$,2,1))-48 9030 B=ASC(SEG$(T$,3,1)) 9040 CR=ASC(SEG$(T$,4,1))-48 9050 CC=ASC(SEG$(T$,5,1))-48 9060 CB=ASC(SEG$(T$,6,1)) 9100 RETURN 10000 DATA 96,FFFFFFFFFFFFFFFF,97,0,98,FF88BBBBFF88BBBB,104,1038387C7C383810,112,1038387C7C383810 10010 DATA 120,F9A7D50E6FE5AB70,128,00EE92926C9292EE,129,00C0A0881888A0C0,130,0003051130110503 10020 DATA 131,C0A080808080A0C0,132,0305010101010503,133,C0A0A0A0A0A0A0C0,134,03050505050503 10030 DATA 136,002854385428,152,FF5A,153,FF999999999999FF,99,7E007E007E007E,100,FFFF423C 10040 DATA 144,0018123C50146C40,145,0018483C0A283602,146,0018133E5010282C,147,0018C87C0A081434 11000 DATA 2,4,2,4,2,4,2,4,2,4,2,4,2,4,2,4 11010 DATA 15,16,6,15,10,15,4,12,2,16,8,16,7,16,2,15 20000 DATA "4=2b;;4=3a5L4B>a6544La323B=c634Kc>16N™0" 20010 DATA "A4a000" 20100 DATA "446a4C486a<94D3a4544Ka4348Ba<74BFa654:Ia624>:`34373c93>>c63D8c43DEc438Mc834Ab4263a32?4a22:?a32?Ka25" 20101 DATA "[email protected]`22;=`217J™0" 20110 DATA "G5a000" 20200 DATA "0" 20210 DATA "000000" 20300 DATA "0" 20310 DATA "000000" 20400 DATA "0" 20410 DATA "000000" 20500 DATA "0" 20510 DATA "000000" 20600 DATA "0" 20610 DATA "000000" 20700 DATA "0" 20710 DATA "000000" 20800 DATA "0" 20810 DATA "000000" 20900 DATA "0" 20910 DATA "000000"
The game WILL crash on level 3, because of a lack of data.
Adamantyr
-
Adam--- any idea about how many of these levels will be possible in BASIC?? How much memory does each take?

I'm working on that now. I had never intended to use static HCHAR and VCHAR to build each one. Instead, I'm encoding the data to build each into strings stored in DATA statements.
For example:
20000 DATA "493a5L4>Da654>:a344A:x243>Hc61=L€0" 20010 DATA "=3a=La"
The first string stores screen build data. The first value is the type of action, the following is data. Breaking one down:
4 = Draw Block
9 = Row
3 = Column
a = Character to draw
5 = 5 Rows
L = 28 Columns (ASCII value of 'L' minus 48)
The second string is coordinates for the player and cube. I will probably have a third string to store dynamics like buttons, power emitters, etc.
The only tricky bit is printing characters above 127. The TI console does have some shortcuts; you can press CONTROL+SHIFT to add 64 to the targeted letter value and print it. So CONTROL+SHIFT+A prints 129 (65+64). The 128 character is an oddball, though. To get 128, you do CONTROL+SHIFT+, instead.
So, using this technique, I should be able to keep each level very tight. Level design is going to be a challenge; I'll want each successive chamber to be slightly more difficult. Each one is a puzzle, so I could spend quite a bit of time there.
Adamantyr
-
Here's a video of the bug. hope this helps!
Yeah, got it now... you have to be right up against the wall for it to fail. And I know why... the player graphic and block graphic weren't considered viable empty spots for determining orientation.
A single line fix and it's good:1170 AD(PO)=ABS((G=97)+(G=99)+(G=128)+(G=146)+(G=147))
Adamantyr
-
Error... I actually put a portal behind the block and pushed the block into the portal. The other side of the portal was at the bottom of the stairs... When the block went through, it materialized INSIDE the walls, and so did I. Then when I tried to get out of it, it kicked out an error
Ah, small bug with the portal orientation... plus I had to make it so ladders and empty area were legitimate exit points, may still be some bias against non-empty in there.
Thanks for catching it!
Adamantyr
-
That's pretty cool already! And the response is fast enough to not really distract from the game itself. I already want more levels, so hurry up!
Yeah, keeping things fast in BASIC is really tough... I'm trying to have it so you can shoot off a portal while falling, but it seems the key responses aren't quite fast enough to catch it... or maybe you just need to fall further.
There are a few events I need to track. My plan is to have them complete a whole cycle, rather than try and move with the player, because generally, BASIC sucks at doing more than one object at a time. So the "energy balls" will basically emit and travel their entire length before expiring. (No bounces)
Adamantyr
-
Did some work on this tonight... So far my program is around 3500 bytes in size. I'm not sure how many "test chambers" there will be yet, as many as I can squeeze in to memory.
As a short sneak-peek, here is my code so far. This allows you to move around, go up and down a ladder, fire orange and blue portals and traverse them, and move a cube around.
100 DIM DX(2),AR(2),AC(2),AD(2) 110 DX(0)=1 120 DX(1)=-1 130 CALL CLEAR 140 FOR I=1 TO 23 150 READ C,C$ 160 CALL CHAR(C,C$) 170 NEXT I 180 FOR I=1 TO 16 190 READ F,B 200 CALL COLOR(I,F,B) 210 NEXT I 220 PRINT TAB(10);"APERTURE": : : : : : : : : : : : : : 230 PRINT " PRESS ANY KEY TO START" 240 CALL KEY(0,K,S) 250 IF S=0 THEN 240 260 L=1 270 GOSUB 8000 290 X=Y=D=AR(0)=AR(1)=AC(0)=AC(1)=T=0 300 B=97 500 CALL VCHAR(R,C,D+144) 501 GOSUB 5000 510 IF B=99 THEN 570 520 CALL GCHAR(R+1,C,G) 530 IF G<>97 THEN 570 540 Y=1 550 X=0 560 GOTO 720 570 Y=0 600 CALL KEY(3,K,S) 610 IF K=83 THEN 800 620 IF K=68 THEN 830 630 IF K=69 THEN 860 640 IF K=88 THEN 900 650 IF K=66 THEN 1000 660 IF K=79 THEN 1020 680 GOTO 510 700 CALL GCHAR(R+Y,C+X,G) 701 IF G=104 THEN 1200 702 IF G=112 THEN 1230 703 IF(G=120)+((G>=136)*(G<=138))THEN 1500 704 IF G=128 THEN 2000 710 IF(G<>97)*(G<>99)THEN 510 720 CALL VCHAR(R,C,B) 730 R=R+Y 740 C=C+X 750 B=G 760 GOTO 500 800 X=-1 810 D=1 820 GOTO 700 830 X=1 840 D=0 850 GOTO 700 860 IF B<>99 THEN 510 870 Y=-1 880 X=0 890 GOTO 700 900 CALL GCHAR(R+1,C,G) 910 IF G<>99 THEN 600 920 Y=1 930 X=0 940 GOTO 720 1000 PO=0 1010 GOTO 1030 1020 PO=1 1030 CALL VCHAR(R,C,D+146) 1035 PX=DX(D) 1040 PR=R 1050 PC=C+PX 1060 CALL GCHAR(PR,PC,G) 1070 IF G=96 THEN 1110 1080 IF(G<>97)*(G<>99)*(G<>128)THEN 500 1090 PC=PC+PX 1100 GOTO 1060 1110 IF AR(PO)=0 THEN 1130 1120 CALL VCHAR(AR(PO),AC(PO),96) 1130 AR(PO)=PR 1140 AC(PO)=PC 1150 CALL VCHAR(PR,PC,104+(PO*) 1160 CALL GCHAR(PR,PC-1,G) 1170 AD(PO)=ABS((G=97)+(G=99)+(G=128)+(G=146)+(G=147)) 1180 GOTO 500 1200 PO=0 1210 PD=1 1220 GOTO 1250 1230 PO=1 1240 PD=0 1250 IF(AR(PD)=0)THEN 501 1260 CALL VCHAR(R,C,B) 1270 R=AR(PD) 1280 C=AC(PD)+DX(AD(PD)) 1290 D=AD(PD) 1300 CALL GCHAR(R,C,B) 1310 GOTO 500 1500 CALL SOUND(500,-6,2) 1510 CALL VCHAR(R,C,B) 1520 FOR I=1 TO 1000 1530 NEXT I 1540 GOTO 270 2000 CALL GCHAR(CR,CC+DX(D),CG) 2001 IF CG=104 THEN 2300 2002 IF CG=112 THEN 2320 2010 IF(CG<>97)*(CG<>99)THEN 501 2020 CALL VCHAR(CR,CC,CB) 2030 CALL VCHAR(R,C,B) 2040 B=CB 2050 CB=CG 2060 CC=CC+DX(D) 2070 R=R+Y 2080 C=C+X 2090 CALL VCHAR(CR,CC,128) 2100 CALL VCHAR(R,C,D+144) 2110 CALL GCHAR(CR+1,CC,CG) 2120 IF CG=120 THEN 2200 2130 IF CG<>97 THEN 600 2140 CALL VCHAR(CR,CC,CB) 2150 CR=CR+1 2160 CB=CG 2170 CALL VCHAR(CR,CC,128) 2180 GOTO 2110 2200 CALL VCHAR(CR,CC,97) 2210 CR=CC=0 2220 GOTO 600 2300 PO=1 2310 GOTO 2330 2320 PO=0 2330 IF AR(PO)=0 THEN 501 2340 CALL VCHAR(CR,CC,CB) 2345 CALL VCHAR(R,C,B) 2346 B=CB 2347 R=CR 2348 C=CC 2350 CR=AR(PO) 2360 CC=AC(PO)+DX(AD(PO))*2 2370 CALL GCHAR(CR,CC,CB) 2380 GOTO 2090 5000 T=T+1 5010 IF T=4 THEN 5040 5030 RETURN 5040 T=0 5050 RETURN 8000 CALL CLEAR 8010 PRINT "TEST CHAMBER";L: : : : : : : : : : : : : : : : : : : : : : : 8020 CALL HCHAR(2,1,96,736) 8030 FOR I=1 TO 5 8040 CALL HCHAR(I+8,3,97,28) 8050 NEXT I 8060 FOR I=1 TO 5 8070 CALL VCHAR(14,19+I,97,6) 8080 NEXT I 8090 CALL VCHAR(14,25,99,6) 8091 CALL VCHAR(13,28,128) 8100 R=13 8110 C=3 8120 CR=13 8130 CC=28 8140 CB=97 8150 RETURN 10000 DATA 96,FFFFFFFFFFFFFFFF,97,0,98,FF88BBBBFF88BBBB,104,1038387C7C383810,112,1038387C7C383810 10010 DATA 99,FFFFAA,120,F9A7D50E6FE5AB70,128,00EE92926C9292EE,129,00C0A0881888A0C0,130,0003051130110503 10020 DATA 131,C0A080808080A0C0,132,0305010101010503,133,C0A0A0A0A0A0A0C0,134,03050505050503 10030 DATA 136,002854385428,152,FF18,153,FF999999999999FF,154,8181818181818181,99,7E007E007E007E 10040 DATA 144,0018123C50146C40,145,0018483C0A283602,146,0018133E5010282C,147,0018C87C0A081434 11000 DATA 2,4,2,4,2,4,2,4,2,4,2,4,2,4,2,4 11010 DATA 15,16,6,15,10,15,4,12,2,16,8,16,7,16,2,15
KEY COMMANDS:
E - Up
S - Left
D - Right
X - Down
O - Create orange portal on acceptable surface in facing direction
B - Create blue portal on acceptable surface in facing direction
Adamantyr
(Edited to correct bug described in below responses)
-
See a bunch of lurkers tonight... anyone else working on their BASIC contest entry?
Adamantyr
-
What does that version of RES do different? I've never used it.
Super Extended BASIC has several very useful line number management commands. It was sold from the Triton catalog and was developed by Millers Graphics, I believe.
COPY, MOVE, and DEL commands will let you copy, move, or delete whole sections of code by line number ranges.
RESEQUENCE (shortened to RES, who types out the whole thing?) has the ability to renumber a range of lines rather than the entire program.
Adamantyr
-
I doubt any of these games will require that extra memory, but it's definitely in-bounds if you're working on a real /4a.

Tursi can chime in on this, but I think Classic99 does give us the disk drive in BASIC with the amount of memory that a TI could have without the DSR's taking up room.
On the TI itself, you can also do a CALL FILES(1) followed by NEW to reduce the number of DSR files from the default (3) to 1. That will get you a bit more space to work with.
Adamantyr
-
Alright. I'm really in. Got my idea and started coded. Man do I hate these 1 statement per line things... But, I think I'm gonna be able to do pretty well. Although, I'm already ready to ack Aperture as the winner.
Thing to remember, you got the same code space as Extended BASIC... it's just not as compact.
On the plus side, it's way easier to follow.Worst problem I'm running into is a lack of good line number management tools. I may need to load this up into Super Extended BASIC and use the advanced RES command to reallocate the line numbers in a slightly better way.
Thanks for the vote of confidence, but the game's not finished yet... I'm working out the gravity and controls right now, which are tricky because I'm trying to make the looping as tight as possible so I get the most speed.
Adamantyr
-
Normally I keep my projects under wraps until they're closer to completion... but the lack of posts and stated entries for this truly CHALLENGING contest requires a little preview.
I plan on entering three games, if I can find the time to fashion all three. One will be turn-based strategy, another a side action style, a third a top-down action style.
So, here's the name and a mocked up screenshot for what the final game will HOPEFULLY look like... it depends on how much memory I got to spare on features, and how much drag tracking multiple objects creates.
Synopsis:
You are test subject #99 of the Aperture research and development program, providing quality assurance for new military products. Your most recent acquisition is the Aperture gun, a device capable of creating a twin pair of gates in the fabric of the universe, allowing instant travel between two points.
Unfortunately, the base you're working in has suffered a serious malfunction brought on by a power surge. The main computer responsible for maintaining the complex has sealed the entire complex from the outside and closed itself off from access. The other personnel are dead or trapped... only you can reach the central processing unit and shut down the computer!
Requirements: TI Console, cassette player. (POTENTIALLY the Terminal Emulator II... I'd call that a special edition)
UPDATE:
Finished ZIP file containing both cassette and diskette versions of Aperture, as well as a DSK image for MESS and CF cards:
-
I am not sure I want to live in a world where you can't IF A=1 THEN CALL SOUND (100,110,0) ELSE IF A=20 THEN CALL HCHAR(1,1,128,1) ELSE IF A=1000 THEN PRINT "I forgot how much BASIC sucked!"
That's why it's a contest. Prove what you can do DESPITE the limitations.

Adamantyr
-
A few points...
- TI BASIC is really slow. It is not designed for fast action gaming. Focus on turn-based games over fast arcade action. At the least, keep your number of objects moving to a maximum of three
- There is no command to display text anywhere on screen. Focus on display updates that use symbols and graphics over text
- You got two extra character sets in BASIC over Extended BASIC. Use 'em!
- While you can USE cassette to store data files (Not Polyoptics Hordes game did this), let's not get into that with this contest. Keep all the data local
- Color set changes are probably the best way to have the ILLUSION if not the reality of speed
As a rules addendum, let's allow for key commands or instructions to be kept OUTSIDE the game itself. You are not required to provide in-game instructions or on-screen controls. Old BASIC games usually came with decent instructions and manuals so that the code could focus solely on the game.
Adamantyr
- TI BASIC is really slow. It is not designed for fast action gaming. Focus on turn-based games over fast arcade action. At the least, keep your number of objects moving to a maximum of three
-
Gotcha!! It makes sense that INC and DEC are 16 bit-only operations... My first inclination is to not care about the extra byte in the odd address--- but I'm a newbie.
AB makes perfect sense... I need to be familiar with all the directives and operands and not get stuck using "comfortable" conventions. Thanks again Matthew. I'm going to go through your assembly thread all the way through before I type in any more code. 
For my own part, I stick with data words over bytes for variables unless I really REALLY need to save space. Trust me, it's easier. If you have a more-or-less static workspace, you can access either byte by using static addressing, use a shift to move it into position, or a swap. (The first is probably best in most situations.)
Also started looking through "The Art of Assembly" by Bruce Harrison. Brilliant stuff there as well.

Yes, VERY good articles. A great starting point is his "This is a Football" article, which is where he steps back and tries to explain assembly to the average lay-man.
Adamantyr

BASIC on CART Contest (BoCC)
in TI-99/4A Development
Posted
Looks cool!
Adamantyr