This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Topics - nemo
31
« on: August 08, 2010, 02:00:04 pm »
We're all familiar with TI-Basic. I think there should be a similar language for OT calculators. OT basic is not a final name. That can be discussed later. However, if you agree there should be a basic-like language, what are commands and features you would like to see? Named variables? Compiled rather than interpreted? I want radical ideas, things you wish you could do. However, I have one condition. Please no features that are gaming specific!! This is for math programs mainly. No requests for sprite routines or the like obviously targeted for gaming. Command suggestions will be edited in regardless of feasibility.
Note: This topic should have extremely little discussion. Do not shoot down anyone's idea. Don't speculate on whether hardware can handle it or not. We can discuss fine details after the calculators hardware is planned. I ask this so this thread is as uncluttered as possible! Thank you.
Data Structures and Variable Types: -Lists -Matrices -Multidimensional arrays -Strings -Character arrays -Declared Variables -Int, Float, Bool etc. types -Prefixed variables to define their types. (ex. sVAR would be a string) -Vectors
Variable Commands: -ToUpperCase/ToLowerCase -Pic recalling/storing -Undeclare/Delvar function to free up memory -Conversions between data types (i.e. list>Matrix, String>Number, Number>String etc.) -Sum/Mean/Median of a List/Matrix/Array -Random numbers, integers, matrices, lists, other data types -Advanced Array functions
Graphical Commands: -Pxl-On/Off/Change -Pt-On/Off/Change -Line -Circle -Polygon -Graph Function -Shade -Clear Screen -3-D support and polygons -Operating System GUI elements, like DCS libs.
Control Statements: -If (File/Variable Exists)-Else-End -If-Else-End -For -While -Break -Try/Catch -Goto/Lbl
I/O Commands: -Getkey (multiple keypress getkey) -Link Send -Link Receive -Prompt/Input -Disp/Output/Print
Operators: -Multiplicative -Subtraction -Negativity -Addition -Division -Modulus -Assignment -Equality -Inequality operators (greater than, less than etc.) -Exponent -Logical not() -Logical and -Logical or -Logical xor -Increment command (+= in C) -Decrement commmand (-= in C) same with multiply, divide, modulus.
Math Functions: -Every math function in the OTz80 calc that can be used outside a program on the "homescreen" -include sorting lists
Language Design: -Two languages, one interpreted, one compiled? -Syntax highlighting! (great suggestion willrandship) -Search function (ctrl+f) -Numbered lines in the GUI -SkipTo command, to skip to a programmer-defined place in the code, or waypoints like 1/4, 1/2, 3/4 through the code. -Descriptive error messages when a program errors. -Key to break execution of programs (like [On]) -Copy/Paste sections of code -Undo/Redo function. -Token based/Non-token based, still needs to be decided. -Access to foreign characters and lowercase.
32
« on: August 06, 2010, 08:07:44 am »
I remember i put a request in the features wishlist topic for a command in axe that's equivalent to Input in basic. I got a few responses saying there were already existing routines that do this. could someone post one of the existing routines in axe?
33
« on: August 03, 2010, 10:38:10 pm »
i noticed Raylin's rules for making RPG's, and thought it was a good idea to have the same for platform games. This thread is for people who don't think they can handle a full-on RPG yet, but are beyond programming small games and are looking for something more intensive. since i personally don't have many rules for platformers, the thread is titled as omnimaga's, in the hope that the community can contribute. so, in no specific order: 1) Plan out your character's limitations. Can they jump? If so, how high and how far? Do they have any special abilities e.g. lasers or shields? - nemo 2) If you have enemies, make sure you have an idea of what their AI will do. Keep it as simple as possible, without being ridiculously easy. A good example of elegant but effective AI is ztrumpet's Exodus. - nemo 3) Make sure you compress your maps! there are many different compression algorithms out there. if you are a beginner to compression techniques i suggest you start out with a simple one like Run Length Encoding, explained here and implemented in TI-Basic here. However, if you're programming in TI-Basic, your map loading will take a hit on speed. This rule is more for Axe and ASM programs. - nemo 4) Know how many tiles are in your tilemap before you write a decompression routine. figuring out decompressing can be a pain. if you know how many tiles are in your tilemap and their specific properties, once you write a decompression routine, you won't have to worry about it again. - nemo 5) Write a tilemap editor if possible. it'll save you a lot of time when developing levels. - nemo 6) I've always found the physics engine in a platformer to be relatively simple, and save it for last. however, if you aren't sure what type of physics you'll have, i suggest playing around with the code in builderboy's physics tutorial to get some ideas of how to implement basic physics. - nemo 7) Make sure that you make your gravity constant EXCEPT when you are touching the ground. However, the only exception to this rule is Raylin's game, gRaViTy. In that game, in order to gain speed, Raylin made the gravity constant throughout and had the player object determine whether to stop or not. - Raylin 8 ) JUMPING ENGINE FIRST! - Raylin 9) For BASIC programmers, make sure key detection is responsive enough. IN the first version of Exodus that I tested (that was never posted in public) as well as in Deep Thought's Insanity platformer games, when pressing a key, it took an entire frame before responding. This leads to frustration when trying to jump/land on small platforms, as you always end up moving one step further, not moving at all, not jumping at all and falling in the pit. Although speed cannot be helped all the time, try to make sure key detection for movement/jumping is done at the right place in your program (preferably immediately before the sprites are being moved). - DJ Omnimaga
34
« on: July 21, 2010, 01:35:48 am »
Hey guys, so i've been messing around with the ** command in axe parser to help anyone who may want to figure out how to use it, or at least understand it primitively. so here are 90 minutes worth of observations i've made by testing dozens of axe programs, and then PM'd to quigibo to make sure they're correct observations, which was OK'd.
The ** Command
the documentation reads: "The signed multiplication is performed using the high byte as the integer part and the low byte as the decimal part returning a number in the same format." here's a quick way to transfer a decimal number into something axe parser will understand. say you wanted to multiply 2.5 and 3.5. That's 8.75, you say, being superb at arithmetic. well, let's see how we can get axe to do it for us: first, break this down starting with the number 2 and one half. second, we take one half. since this is the first 8 bits, which holds the values 0-255, after that point it overflows into the next byte which holds the integer part two. this is better represented in binary:
0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 32768 16384 8192 4096 2048 1024 512 256 | 128 64 32 16 8 4 2 1 the line separates the high and low bytes. since we want to display one half in the lower byte to the right, we need one half of it. since the lower byte can represent 0-255, or 256 values, to get one half we'll have to divide 256 by two. so we end up with 128. then we need to represent 2 in the higher byte. you'll notice if we divide all the values of the higher byte by 256, they become identical to the lower byte. (32768/256=128, 16384/256=64, etc.) therefore, if we look at the lower byte, figure out what number we're trying to represent (in this case, it's two) and multiply it by 256, we'll get the higher-byte equivalent. which is 2 * 256 so 512. 512+128 = 640. great. we have one number, 2.5. now we need to multiply it by 3.5 do the same thing. what's .5 on our lower-byte scale? 128. and now we add that to 3 * 256, which is 768. total, that's 896. great. now try out this program:
.EXAMPLE 640->A . 2 and a half 896->B . 3 and a half Disp A**B>Dec
What does it give? it gives 2240. look back at the commands list. it says it will give a number in the same format. therefore, to decode it, all you need to do is divide by 256. you'll notice you get 8.75. which is.. 3.5 * 2.5 (: so you have a number x, and a number y. and you want to use this program without thinking in binary. here's the quick way, assuming x and y are in base 10 with decimal parts, just multiply them by 256 to get numbers that the ** command understands. 2.5 * 256 = 640, and 3.5 * 256 = 896.
Quigibo also gave me a quick BASIC program that will convert a number from -128 through 128 into 8.8 form (the form Axe reads in). with the number in Ans:
If Ans<-128 or Ans>128:Then Disp "OUT OF RANGE Return End Ans+256(Ans<0 256iPart(Ans)+iPart(256fPart(Ans
and Quigibo's way to go from 8.8 back to decimal:
ClrHome Input "8.8:",A If A>=2^16 Then Disp "OUT OF RANGE!" Stop End If A>=2^15:Then Disp -(2^16-A)/256 . this is a negative, not a minus sign Else Disp A/256 End
35
« on: July 21, 2010, 01:05:25 am »
i'm wondering how one might make curves in axe. there was a topic awhile back about this, but i couldn't glean any useful information from it. what i need is curves that change very little, such as the attached image.
edit: currently, i have this program. which kind of does what i want, but i'd like it smoother, if anyone has any alternatives.
.AAA 0->C 45->Y Repeat getKey(15) Line(95,Y,95,63 !If C^5 rand^3-1+Y->Y End DispGraph Horizontal - C+1->C End
36
« on: July 20, 2010, 06:02:21 pm »
two more requests for the robot unicorn attack game. i need a star and an explosion sprite. both are 16x16 monochrome. please just 1 frame for the explosion, as it will make a fleeting appearance on the screen, anyway. if you can, i'd like the star sprite to look 3-D.
37
« on: July 18, 2010, 09:13:43 pm »
first, these are monochrome 8x16 (8 pixels high, 16 wide) sprites with a side-view facing to the right. second, i'm only going to use one of these, whichever one looks best. if you're going to make one, please don't spend your time making 5 average sprites. perfect one of them, as i'll only pick one (or perfect all of them, if you want). lastly, if you can make a cycle for movement (preferably with it running), that would make my day (: - ram/mountain goat. (make it 16x16 pixels if 8x16 isn't enough room) - hare/bunny - kangaroo rat- sports car. - unicorn! (make it 16x16 pixels if 8x16 isn't enough room) tl;dr: 8x16 monochrome sideview to the right. pick one, perfect it. give it a run cycle for extra points.
38
« on: July 05, 2010, 09:51:32 pm »
Can someone link me to a website that explains it, or take the liberty to type out how it works? i've heard of some people talking about it and using it in games and i'm curious as to how pucrunch works. I heard it's a mix of RLE and another compression.
39
« on: June 30, 2010, 12:02:09 pm »
how does one make a pop up? as in you have a screen on-calc, the user presses a key and a little window pops up with something to display, then goes away and the same screen before the pop up comes back.
i can think of a way to do it with StorePic, but that'd corrupt my data in L3. this is for my tilemapper. basically, i have tiles in L3. i want to make a pop-up menu to decide which tile you want to place. i need to save the buffer data to a temporary area, draw the pop up menu to the buffer, let the user choose a tile, then recall the data in my temporary area that holds the buffer data before the menu. is there any way without using StorePic or RAM areas L1-L4?
40
« on: June 29, 2010, 12:16:59 pm »
i've been debating releasing this for awhile, but here goes. it's a basic tilemapper. im releasing this right now as a beta (if you can call it that) since all i want is feedback. some limitations: 1) tilemap editor cursor is inaccurate. i'm hoping to fix this by reordering the movement code. 2) you can't export the HEX string of the tilemap. my program won't display it, since it's obnoxiously long to copy anyway. 3) you cannot load/save tiles, even though it gives you an option to load a tilemap. that's for the future. 4) you can only navigate through the program tile editor -> tile mapper, as of right now.
buttons of use in tile editor: arrows - move cursor [2nd] - invert pixel [ + ] - next tile [ - ] - previous tile [Alpha] - start tilemapping
buttons of use in tilemap editor: arrows - move cursor [2nd] - display next tile in tileset. [ + ] - display tile number [Clear] - exit program
this definitely isn't a useful program (yet). some of the things i'm hoping to implement: 1) compression techniques. 1 byte = 1 tile, 1 byte = 2 tiles and RLE. let me know if you want me to support any others. 2) saving/loading tilemaps and their corresponding tilesets. 3) more accurate cursors 4) 16x16 tiles. *maybe* unless i gain enough support, they're out.
TL;DR: download. find some bugs, think of useful features. post 'em.
41
« on: June 23, 2010, 03:20:40 pm »
if you have some time, get to the last level.. and then figure out the most efficient way to beat the puzzle. hint: 2/3 of the whole level is completely unnecessary and can be bypassed. http://www.gamegum.com/game/9833/astronaught-x/
42
« on: June 22, 2010, 06:32:55 pm »
i'm trying to figure out an algorithm in Axe that's quick and efficient for converting a list of numbers to a sprite. assume the hex data (which is stored in base 10) is located in L1. since there are 4 pixels in a byte i figured you could check for each pixel separately to turn it on. the left most pixel can be checked with If X>7 (X being the nibble being drawn) and the right most one can be checked with !If X^2. but i'm unsure how to check whether the middle pixels should be turned on (other than comparing X to a list of possible values) i get the feeling i'm doing this completely wrong.
edit: i reread and decided that may be a little hard to understand so here's an example: the hex string 00050A132346D6FF would be stored as Data(0,0,0,5,0,10,1,3,2,3,4,6,13,6,15,15)
43
« on: June 22, 2010, 12:19:51 pm »
why does this code only display 15 characters rather than 16?
.TEST "0123456789ABCDEF->Str1 Fix 5 // text is displayed on buffer Fix 1 // large text Text(0,0,Str1 DispGraph Fix 0 Fix 4 // reset flags
i get 0123456789ABCDE displayed on my calculator, how can i make it display the F as well?
44
« on: June 16, 2010, 04:31:49 pm »
Suppose i have a sprite moving across the screen from left to right, and i want to press a button and it will make a large sweeping arc and change its direction 180°. this would be its trajectory: Start: ---->--- \ ) / ---<---- ^End
now i'm wondering how i could implement this in axe. keep in mind i want this to be free of any sort of gravity, so the sprite is moving at a constant velocity and all i want to do is change its direction.
45
« on: June 15, 2010, 07:50:26 pm »
"EXP→DispGraph Draws an arbitrary buffer at the pointed location onto the screen." what exactly does this do? i stored 0 to it, and got a nice plaster of RAM displayed on my screen, so i'm assuming you need to store something to L6 and it'll display that..?
|