2 minute read

A bit of explanation first

Hi everyone, here is the 5th devlog of Rakugo Project 3.3. Sorry everyone, that I was calling last devlogs as “Rakugo 3.3 Devlog”, but I should to call it “Rakugo Project 3.3 Devlog”. As there is no more Rakugo in the way as it was before as Rakugo 3.x. Now there is Rakugo called also Rakugo.Core, that upcoming version is 1.0.0, it implements core of Rakugo:

  • dialogue system
  • save/load system
  • history system
  • preferences system
  • global variables system
  • etc.

And rest of Rakugo previous features now are implemented in addons.

RakuScript

Its finally happened that I decided to make RakuScript a dialogue scripting system for Rakugo.

Why and what with dialogues as GDScript functions ?

We have to abandon support for dialogue as GDScript functions, because it wasn’t a good way to write dialogues. This approach to dialogue steps turn out to be problematic, and could lead to performance problems and messy in memory after closing game. This mostly by the way how threads works in Godot, we can’t kill them we must finish them - so we should execute whole dialogue each time. It is more explained here, if you are curious. So we decided to create dialogue scripting language for Rakugo - this solution don’t have this issue, as with interpreted dialogue. Instructions are read “line by line”. And we can quit without read all file.

How this RakuScript will look ?

We try to model our langue RakuScript after Ren’Py one, but it wouldn’t be 100% compatible as:

  • Ren’Py has support for only one markup - in RakuScript this is customable as for example AdvancedText adds support for 3 in markups in our langue
  • Ren’Py has build in ui sub-langue - no need for this in Rakugo case
  • Ren’Py has python block and lines we for oblivious reasons will have gdscript ones
  • RakuScript can and will be expendable by other Rakugo addons
  • We have few ideas of our own for this scripting langue

Here are examples of some statements:

# Create character
# character [character_tag] [character_name]
character em "Emily"

# Say narrator
"Hello, world !"

# Character say
# [character_tag] "Here is dialogue text"
em "Hi, I'm <em.name>!" # em.name will be changed to Emily

# Jump
# jump label_name
jump talk_emily

# Dialogue/Label
# label_name:
emily_talk:

# Menu
# menu: or menu label:
# [indent]"text" or [indent]"text" > label (with label it jump on label)
menu:
"talk to emily" > emily_talk
"wait"

# Ask
# [variable_name] = [question] ? [default_answer]
answer = "Are you human ?" ? "Yes"

# You can get answer in GDScript with:
# Rakugo.get_current_stock().get("answer")

We want to know your opinion

We have few ideas of our own for this scripting language, but we need your opinion, as we are not sure if we should implement them or not. Here are links to these ideas issues on GitHub when we can discuss them:

Categories: ,

Updated: