New user thinking about ChoiceScript vs Ren'Py

Hello everyone! I’m a big Interactive Fiction fan (played loads and loads of games when Inform 5 was state-of-the-art), and I’m thinking of writing my own story. I’ve narrowed the choice down to ChoiceScript and Ren’Py. Here’s a very brief description of the game mechanics and plot:

The main character of the game is Steve. Steve starts off as a novice boxer, and has matches against a variety of opponents.The core gameplay loop is a month of “daily activities” where the player chooses activities to modify the stats/abilities/items of the main character, similar to the Princess Maker games. For these 20 days, the player selects one activity per day for Steve. As the game progresses, the player can choose from a wider variety of activities as they are gradually unlocked either with time or with accomplishments. Examples of activities would be rest, train boxing, train cardio, visit acquaintance, go to work, etc. Each activity would have a different effect on Steve’s stats or his money, possession, and so on.

The game has optional romance elements, but they are not a core part of the game and these elements can be turned off. The optional romance’s intensity is at the level of a romance novel - no explicit scenes or descriptions.

At the end of the month, Steve has a scheduled event. For example, the first month’s scheduled event is always a fight in an underground fighting arena against Eric. Subsequent months either have a single event, or may offer two or three choices on what to do, or may depend on choices made by the player throughout the game. Usually the end of month event is a fight against a new opponent.

I’m not sure how the game ends yet.

Here are my ideas on the advantages of ChoiceScript:

  • The game is extremely prose heavy. For example, there are different fight scenes for a narrow loss, major loss, narrow victory, and major victory for each opponent. Each scene is around 700-1000 words in length. The character development scenes for each opponent are around 1000-1200 words in length. From what I’ve read, ChoiceScript is ideal for this.
  • ChoiceScript has a very good system for keeping track of stats and inventory that is easy to use.
  • I don’t have any art assets yet. ChoiceScript games are generally lighter on art, so I could save some money on this!

Advantages of Ren’Py:

  • The Princess-maker like daily activity choice seems much easier to create and visually display in Ren’Py. For example, the “Long Live the Queen” game was made in Ren’Py, and has a similar system.
  • The game theme is based on fighting matches. Ren’Py would make it easier to add in images of fights, or sound effects.

Is my analysis roughly correct? I appreciate any responses - apologies for diving straight in with a question; I’m so excited to create a narrative game!

1 Like

For me, it would boil down to this. Do you want visuals/audio? If so, Ren’py is the better option. Otherwise, ChoiceScript.

ChoiceScript can do visuals, but the delivery is clunky so it works better as some kind of handout or map for the reader. I have also seen it used for headers and MC avatars.

7 Likes

No, I don’t want visuals - I’m no good at drawing or creating art! Can ChoiceScript make a device where the player selects his options for the next few days, like in Princess Maker/Long Live the Queen and similar games? That’s the main thing I was thinking about Ren’Py for.

2 Likes

I don’t know either of those games, sorry, but in the end, the system can do whatever you program it to do. Without a better understanding of the mechanic you’re asking about, I will not say how well it can replicate it, but I’m sure it can do it.

1 Like

Wait, are you talking about an icon to click on to select options? To schedule things? If so, no. You could have something in the stat page for that, but beyond that you’d need custom code or to have segments of the game that come up to make selections.

I see… I am going to convert the first chapter to both ChoiceScript and Ren’Py, and then see which one feels better. Maybe the only way to know is to try it out!

1 Like

Quite a few COG/HG games did something similar, I believe. The latest one I played that had repeated activity loops was Werewolf: The Apocalypse — The Book of Hungry Names, maybe try the free demo and see if that’s what you’re looking to do?

1 Like

As I found out in my own game designs, for loops with CS you will need to do the following:

Without that the game will sometimes have problems with the loop.

Bit off topic, but two wonderful games. Princess Maker is certainly a guilty pleasure of mine.

Good luck on your work!

3 Likes

Hmmm.

Oh! I think I get it!
It would be a table with week long blocks representing a schedule callendar ? :date:

I think is possible? I may be wrong but I remember seeing something in the wiki about headers and tables in choicescript.

You can use a simple weekly system with a pre coded calender. I believe I have a calendar module coded somewhere with my files. If you wish I can convert it to choicescript and post gere.

There is a menu loop with the number of days pool, the player choose the activities sub menus (working, train, part time job, time off/vacation)

Working : biceps, footing, blocking etc.

Train: challenge, simple trek, mock fight

Part time jobs: explore town to unlock this one

Etc.

At the end you pre schedule all days and go back to your daily routine were the game storitellering will take over.

Is that right?

1 Like

Yes, thank you! A weekly system with a pre coded calendar. That’s exactly it - Princess Maker has the same idea. There’s a “schedule” phase where you select what to do each day, and then once you confirm it, it will run through the results.

I hope this helps:

calculate_calender.txt :

*comment ==================================

  THIS IS A CALENDAR FUNCTION FOR

  CHOICESCRIPT! It receives a "days_passed"

  argument and print on the player

  screen the weekday, month and year.

*comment ==================================

*label calculate_calendar

*params days_passed

*comment current_year is your

*comment starting year at the game

*comment for example 1975 or 2005

*temp current_year 1992

*temp current_month 1

*temp current_day 1

*temp remaining_days days_passed

*temp weekday_offset 3  

*comment (Wednesday = 3, 0 = Sunday, 1 = Monday...)

*temp months_in_year 12

*temp_array month_lengths_anno 12

*gosub set_m_lenghts

*temp_array month_names 12

*gosub set_m_names

*temp_array weekday_names 7

*gosub set_d_names

*comment --- Calculate Year ---

*label year_loop

*if remaining_days >= 365

  *if (((current_year - 3) modulo 4) = 0)  

    *comment Check if it's a leap year (603, 607, etc.)

    *if remaining_days >= 366

      *set remaining_days -366

      *set current_year +1

      *goto year_loop

  *else

    *set remaining_days -365

    *set current_year +1

    *goto year_loop

*comment --- Calculate Month ---

*temp month_index 1

*label month_loop

*if month_index <= months_in_year

  *temp days_in_month 0

  *set days_in_month month_lengths_anno[month_index]

  *if (((current_year modulo 4) = 3) and (month_index = 2))  

    *comment Adjust for Leap Year in February

    *set days_in_month +1

 

  *if remaining_days >= days_in_month

    *set remaining_days -days_in_month

    *set month_index +1

    *goto month_loop

  *else

    *set current_month month_index

    *set current_day (remaining_days + 1)

    *goto calculate_weekday

*comment --- Calculate Weekday ---

*label calculate_weekday

*temp current_weekday ((((days_passed + weekday_offset)) modulo 7) + 1)

*if current_weekday = 0

  *set current_weekday 7

*temp day_of_week 0

*set day_of_week weekday_names[current_weekday]

*comment --- Print Final Date ---

[Today is ${day_of_week}, ${month_names[current_month]} ${current_day}, ${current_year} A.D.]

*return

*comment --- Auxiliary sub-routines: ---

*label set_m_lenghts

*comment sorry you may have to edit the

*comment lengths for years other than

*comment the current one (1992)

*set month_lengths_anno[1] 31

*set month_lengths_anno[2] 28

*set month_lengths_anno[3] 31

*set month_lengths_anno[4] 30

*set month_lengths_anno[5] 31

*set month_lengths_anno[6] 30

*set month_lengths_anno[7] 31

*set month_lengths_anno[8] 31

*set month_lengths_anno[9] 30

*set month_lengths_anno[10] 31

*set month_lengths_anno[11] 30

*set month_lengths_anno[12] 31

*return

*comment one can always change the name of the

*comment months and days for their story

*comment for example, a world that is not

*comment planet Earth will not have

*comment earthling months or day names.

*label set_m_names

*set month_names [1] "January"

*set month_names [2] "February"

*set month_names [3] "March"

*set month_names [4] "April"

*set month_names [5] "May"

*set month_names [6] "June"

*set month_names [7] "July"

*set month_names [8] "August"

*set month_names [9] "September"

*set month_names [10] "October"

*set month_names [11] "November"

*set month_names [12] "December"

*return

*label set_d_names

*set weekday_names[1] "Sunday"

*set weekday_names[2] "Moonday"

*set weekday_names[3] "Tuesday"

*set weekday_names[4] "Wednesday"

*set weekday_names[5] "Thursday"

*set weekday_names[6] "Friday"

*set weekday_names[7] "Saturday"

*return



To run it, just run this in any point of you game you need to show the date:

*comment   [possible template]

*temp day 1

*fake_choice

  #Pass a day

    *set day +1

  #Pass 10 day

    *set day +10

  #Pass 100 day

    *set day +100

  #Pass a year

    *set day +364

*gosub_scene calculate_calendar (day)


I hope this helps.

With this code each scheduled event will run a [block] of days of the calender. You can write subroutines (gosubs) for adding flavor minor occurrences for each day as our fighter boy/girl go around doing their balboa things and numbers go up.

Please share with us your dev diary if you have one. Sounds like a good game idea for follow along. If you wish to, I mean.

2 Likes

Wow this is super useful, thank you so much! I made a very bad calendar system, and I’m going to read through this calendar code to understand it, and then implement it in my game. I am very thankful!

I will create a separate thread in “Game Development”, so that the information is in the appropriate category. Love how helpful everyone here is!

Edit: I created a thread at (WIP) Clandestine Circuit - Modern-day Fantasy
I’m primarily hoping to make a fun game, I haven’t thought that much about monetization. The writing comes first!

Edit: I implemented the calendar system. I modified it slightly so that it keeps a tracking day count. perfect!

3 Likes

I am glad I could help. Any script you need I can give you some help.

The community also already automated a lot of processes using cs_lib routines. But sadly there is almost no documentation in how to implement it in game development.

But I saw some good stuff in the Git Hub that may be useful to you my friend.

1 Like