Is this a bit too ambitious for a highschooler?
Yes
 0%  [ 0 ]
No
 19%  [ 4 ]
This is way too ambitious for a highschooler. Go for it.
 80%  [ 17 ]
Total Votes : 21

As the title may suggest, I want to try making a version Toby Fox's Undertale, but on a calculator. I just had this idea today, but I recently had searched the internet for something like this but I couldn't find anything. I've started already, and so far I've created a movement system for while in combat, which could probably use some improvement in terms of speed.
Which calculator is this for, and what language? Do you have any screenshots you would like to share? I could also help with speed optimization if you would like. Good luck on your project!
Always worth a shot! Nobody's going to shame you for giving up on a project you can't finish. There's many users on here who have a huge backlog of unfinished projects.
spiCE_456 wrote:
Which calculator is this for, and what language?

I'm making this on a TI 84 Plus using basic.
Znak_Pares wrote:
spiCE_456 wrote:
Which calculator is this for, and what language?

I'm making this on a TI 84 Plus using basic.


Do you plan on using libraries like Celtic CE?
AchakTheFurry wrote:
Do you plan on using libraries like Celtic CE?

I'm not really familiar with using libraries, so I think no... I'm also doing this on a school calculator (since it's the best calculator I have access to) I think I'll manage without libraries
I was pondering this project, and I was wondering if there is a really efficient way to store level data. Could I use base 36 and convert it to two base 6 symbols? What about using base 216 for three base 6 symbols? I was thinking that I could use 12 different symbols for the "tilemap" and use 216 symbols to get 3 of the tilemap symbols, up to the sixth one, then if it is the sixth one, don't use that tile in the level itself, but add six to the next tile generated. Is this making sense? Is there a better way to do it?
You can definitely re-base your data, but would need to be "uncompressed". In TI-Basic, use strings to store the compressed/re-based data.

If you have twelve tiles for the tilemap to choose from, you only need 4 bits to store this info. 4 bits is a Hex number (0-9,A-F), which would be one character per tile.

If you go to 6 bits with these 64 characters: A-Z, theta, 0-9, "[]{}()<>?!.,':+-*/^=sin(cos(tan(ln(log(e^(10^(", then you can store three 4-bit numbers (12 bits) in just two characters.

Two characters for 3 tilemap entries will be less efficient than your nested base-6 approach, but will be much easier to enter data by hand, make data converters, etc, on a school calc than needing to find 216 one-byte tokens http://tibasicdev.wikidot.com/one-byte-tokens. It also makes uncompressing the data much more simple than having to traverse a decision tree on every character.
Since most of any level is blank space, could I instead of using 0-9 as part of the 64 characters that represent other characters, could I use 0-9 as numbers that represent how much blank space there is between one character and the next? For example, A9A would mean that there are 9 blank spaces between whichever characters are represented by A. Would this work?
Absolutely. What you are describing is called run length encoding. I use RLE for storing tile data in my latest project, Bloxorz

If using 4-bit (hex) values for each type of tile, choose 16 characters for the tiles (A-P, probably, with Z being blanks), and then if tiles repeat, prepend or append it with the number of repeats.

So a map that looks like:
Code:
   AAAA     
  AAAAA   
 ABBBBA   
ABCDCBA 

Would be encoded as (with the counts appended as needed):

Code:
Z3A4ZZA5ZAB4AABCDCBA


So when decoding the map data, if a number is encountered, repeat the most recent character that many times. To keep it simple you can limit this to 3-9 repeats (as putting a 1 is redundant, and putting a 2 takes up the same amount of space as just having two characters), or you can have multiple number digits to repeat things 10+ times (Z23A4Z44)
Thanks for your insights. I think I'll use something like this. Each level can be stored in a string that starts with the level height, width, and any other extra level type, then followed by the actual level map itself, which I can convert either into a matrix or a graph (to use pxl-test)
An update to the project: A level loader has been implemented, along with a character and movement
There's nothing wrong with doing ambitious projects. Either you complete it and learn a bunch or you don't complete it but you still learn a lot while getting to that point. Good luck!
It has been a while since I have last worked on this project, with school fully starting and all, but I haven't stopped. I only have the first two rooms right now, and I was wondering if anyone could help me optimize the level loading code. I'm going to add the files to my github, which I'll link to my profile
I also just want to say here: I'm aware that I made a typo on GitHub. It should say Undertale, not Undertail
If you have a section of code you'd like help optimizing, please feel free to post it here.
This monstrosity:

Code:

{8,4,8,4,8,4,1}->|LPOS
ClrDraw
{0,0,0,0,0,0,1}->|LLVL
"0123456789ABCDEF"->Str1
Goto SL
Lbl CL
"CREATE LEVEL"
"HIOP *^^D->Str3
"X"->Str4
16+expr(sub(Str2,1,2)->|LLVL(1)
8+expr(sub(Str2,3,2)->|LLVL(2)
0->|LLVL(5)
0->|LLVL(6)

For(R,5,(length(Str2)-1),2
   inString(Str1,sub(Str2,R,1)->|LLVL(3)
   inString(Str1,sub(Str2,R+1,1))-1->|LLVL(4)
   For(S,1,|LLVL(3)
      Str4+sub(Str3,|LLVL(4),1)->Str4
   End
   |LLVL(5)+|LLVL(3)->|LLVL(5)
   If |LLVL(4)<5:Line(|LLVL(5)-1,~1|LLVL(6)+62,|LLVL(5)-|LLVL(3),~1|LLVL(6)+62
   If |LLVL(4)>8:Line(|LLVL(5)-1+|LLVL(1),~1|LLVL(6)+62,|LLVL(5)-|LLVL(3)+|LLVL(1),~1|LLVL(6)+62
   
   If |LLVL(5)>=|LLVL(1):Then
      0->|LLVL(5)
      |LLVL(6)+1->|LLVL(6)
   End
End
0->N



Combined with:
"STORED LEVELS"
If |LLVL(7)=1:Then
   "1601F1F1318521F101D5B1192101452655B11921014526F5352111F5A52121B501F1319511F1F1F1->Str2
   8->|LPOS(1)
   4->|LPOS(2)
End
If |LLVL(7)=2:Then
   "040581198141A53131C52121D5211165166511116516651111F51111F51111F51111E52121C53131A541811981->Str2
   10->|LPOS(1)
   12->|LPOS(2)
End


Goto CL


This all runs very slowly and takes around half a minute to load a single level
  
Register to Join the Conversation
Have your own thoughts to add to this or any other topic? Want to ask a question, offer a suggestion, share your own programs and projects, upload a file to the file archives, get help with calculator and computer programming, or simply chat with like-minded coders and tech and calculator enthusiasts via the site-wide AJAX SAX widget? Registration for a free Cemetech account only takes a minute.

» Go to Registration page
Page 1 of 1
» All times are UTC - 5 Hours
 
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

 

Advertisement