LoginLogin
Might make SBS readonly: thread

BASICTALE

Root / Submissions / [.]

answerCreated:
Download:4KA83XC1
Version:0.1.0Size:
BASICTALE is a project I worked on to help me learn Lowerdash a year ago, and I also did this small thing because of how terrible somebody else did it when it could be easily done better. Have fun! Btw, there is an unfinished 0.2.0 version included, but you can't even fight or anything because that just freezes the game lol. It has the convenience of showing all of the included files and being able to select them, but I personally got bored of this project.

Instructions:

How to start a fight:

There is a dialog that appears that asks for a *.SB file, just input one of the files without writing the .SB extension. - Samples include: EX.SB

Making a fight:

Add basic player and enemy data

The program uses a DICT program to parse the files inside of the *.SB files, there are two that are defined in the program and each field should be pretty self-explanatory.
@HUMAN ' PLAYER DATA
DATA "NAME", "FRISK"
DATA "HP, "99"
DATA "LV", "20" ' LEVEL
DATA "" ' ENDS DICT

@MONSTER ' ENEMY DATA
DATA "NAME", "SKELETON",
'// THE NEXT 2 DONT MATTER
DATA "ATK", "10"
DATA "DEF", "10"
'//
DATA "HP", "2000"
DATA "ACT", "CHECK*TALK" ' ACT OPTIONS SEPARATED BY ASTERISKS
DATA "WAVES", "6" ' WAVES, AS IN, ENEMY FIGHT SEQUENCES I GUESS
DATA "TEXT", "*IT IS THE END." ' TEXT DISPLAYED IN TEXT BOX, SEPARATED BY ASTERISKS
DATA "SPBASE", "1398" ' SPRITE INDEX
DATA "SPANIM", "15,1398,15,1399" ' SPRITE INDEX ANIMATION, DATA SEPARATED BY COMMAS
DATA "" ' ENDS DICT

Making waves/enemy sequences

You should have a command for every WAVE that you defined in the MONSTER data. Like, if you set WAVES to 2, you'd do the following: DEF MONSTER_WAVE0000 C% OUT L%, T%:END DEF MONSTER_WAVE0001 C% OUT L%, T%:END

Parameters of the command

C%: Internal timer, to help with doing sequences like trigonometric calculations for doing wonderful things. L%: Length of the sequence in frames. T%: How long till the WAVE command should be called again in frames.

Here is how to create a bullet in the form of an example:

DEF MONSTER_WAVE0000 C% OUT L%, T%
 ' SPAWN PLACE OF THE BULLET
 VAR STARTX% = 0, STARTY% = C% MOD 240
 ' END DESTINATION OF THE BULLET
 VAR ENDX% = 400, ENDY% = STARTY%
 ' SPEED THAT THE BULLET REACHES THE DESTINATION IN FRAMES
 VAR SPEED% = ABS(ENDX% - STARTX%) * 2
 BATTLE__WAVE_BULLET STARTX%, STARTY%, ENDX%, ENDY%, SPEED%
 l% = 360 ' LENGTH OF SEQUENCE IN FRAMES
 T% = 1 ' NUMBER OF FRAMES BEFORE MONSTER_WAVE0000 IS CALLED AGAIN
END

Adding BGM

It's simply as easy as adding @BGM somewhere in the file and then the MML in a data string below it, if you are defining it at the beginning of a file, remember that you can stop the MML from parsing by putting a 0 as a data input. Example of BGM in action:
@BGM
DATA "T500L16:0[CDEFG]:1[GFEDC]"
DATA 0

Notes:

we now have screenshots

Replying to:Imasheep
this is cool! any games use this?
Right now I'm making a lighter thing very much similar to this. Ima just have a library that can read the data for fights and run it, maybe including built-in attacks. I have tried things like this before and I find it fun.

Replying to:Imasheep
this is cool! any games use this?
@random_god Honestly, that's the approach I would go if you wanted to make something like this in your games. This does not service the original battle system completely to be honest and is too self-dependent to work in other programs since it uses Lowerdash, so it's worth more making something that replaces this and can be used as a library.

Replying to:Imasheep
this is cool! any games use this?
Thanks! So far I have a battle selector, (the main one you would run in the original project, to select a battle) battle settings, (enemy animations if none for specific attacks) and am working on an instruction that runs the battle using a PRG file. The part I'm working on is pretty hard, but that's just reading the data in the other file. I need to make more settings, (like if you want a repeated order of attacks, or a single sequence and then [selective] randomness, etc.) and the actual battle simulator. Also, Ima just say, DON'T USE SPRITES for the actual battle if you are trying this, to anyone else who might be trying this. Here is why: 1) Sprite limits suck 2) If you have a long stick and want to rotate it, then detect collision, you have to do something like moving a sprite across it fast. Sprite limits still suck. The way I am gonna do this is GCOPY the sprite over and GSPOIT the collision.

Replying to:Imasheep
this is cool! any games use this?
Also, jsyk, I'm using the giant attack target thing you made. You can object if you want.

Replying to:Imasheep
this is cool! any games use this?
And now I will make a thread for this.

Replying to:Imasheep
this is cool! any games use this?
Here is the thread: Turkey

There is a possibility that the key doesn't work because SBAPI is not giving a valid response to whether this exists yet it says the key is still uploaded on my 3DS, so either it's SBAPI being weird or my 3DS is jebaiting me.

sans is a keyword lol

Replying to:answer
There is a possibility that the key doesn't work because SBAPI is not giving a valid response to whether this exists yet it says the key is still uploaded on my 3DS, so either it's SBAPI being weird or my 3DS is jebaiting me.
No keys are working, so either sbapi got banned or somehow maintenance is affecting sbapi longer than it affects real sb

I like the music