Jump to content

adamantyr

+AtariAge Subscriber
  • Content Count

    1,852
  • Joined

  • Last visited

Posts posted by adamantyr


  1. Okay guys, I thought I'd go ahead and post my idea... It's sort of a borrowed idea from Karsten's daughter. =) I introduce you to "Chugger99", my train simulation. Nothing to this game, really... you're a train engineer who must collect several passengers from different stations. The "lights" next to the train pads where the people sit can either be "all on" or "all off", and if the lights aren't "on" you cannot collect the passengers. Your fuel supply goes down as you go through the game screen, and the only way to refill your fuel is to deposit passengers at the depot. If you run out of fuel, you lose. Still working on the game loop, but here's a screenshot.

     

    I am planning on 5 levels with increasing difficulty. =)

     

    chugger99.jpg

     

    Looks cool!

     

    Adamantyr


  2. 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. :P

     

    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


  3. 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


  4. 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


  5. And now... vertical portals!

     

    post-17978-129006377533_thumb.png

     

     

     

    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


  6. 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


  7. 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


  8. 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


  9. 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


  10. 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


  11. 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. :P 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


  12. 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


  13. 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


  14. 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


  15. 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


  16. 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)


  17. 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


  18. 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


  19. 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


  20. 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.

     

    post-17978-128986308064_thumb.png

     

    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:

    APERTURE.zip


  21. 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


  22. 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


  23. 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

×
×
  • Create New...