Hime-Works / Requests

Bug reports and requests that may require longer discussions and is not suitable to leave on the blog
http://himeworks.com/
GNU General Public License v2.0
7 stars 9 forks source link

Text-Based Game Log #158

Open rubydragon44 opened 10 years ago

rubydragon44 commented 10 years ago

This would be great for an open-ended to semi open-ended game.

Any text you input will be inserted into the game log. A given variable will track the given "chapter" or "day" to add data to. (So if this was set to Variable 1 "Day", and Variable 1 is 3, then that means you'd be adding data to Day 3. For example, you could go something like game_log{"###################################"} game_log{"//////////////////////////Day 4//////////////////////////////////"} game_log{"name.actor([$game_variables[1]] cleared Dungeon 5!"} (I know this isn't technically how it works but I don't know how to list the name of an actor of an id set by a variable) game_log{"It rains heavily today."} game_log{"The main party sets course for Ipocil Island."} game_log{"Party \V[2] is defeated without an item loss penalty!"} game_log{"The party loses 500 EXP!"} game_log{"Eric recruits new members to the party in hopes of finding the lost \LB soul lantern. Finally seeing promise in her, Eric decides to let Ulrika join."} (maybe linebreaking, I'm not sure)

Here are some examples of snazzy custom windows http://rmrk.net/index.php/topic,45127.0.html http://www.rpgmakervxace.net/topic/5776-est-notebook-system/ and this is kind of what I'm talking about but I don't care about text size and I don't know if grouping it is the best because what if you want it so that if an event could happen on any day, so you don't group it to a particular day, and you just want that information to follow. That, and with this script, you can add data to a chapter, but you have to specify the y position of the given text instead of the script auto-formatting: http://forums.rpgmakerweb.com/index.php?/topic/11873-vs-progression-window-v15/

When you press left, it will switch to the previous chapter, and if you press right, it will switch to the next chapter, and holding up or down will scroll the log text. {These buttons can be changed /depending on if the set buttons are WASD and Up Down Left Right?}

HimeWorks commented 10 years ago

The scene is not interesting to me. I can provide a logger but you need to explain what "any text you input" means.

So far it just looks like you're making script calls to manually add things to a log.

Roguedeus commented 10 years ago

I have often wondered why there isn't some kind of Action Log Scene that can be accessed from the Main Menu. Something that kept a running list of all the log entries in a scrollable interface. Possibly even indexed by map transitions. Like chapters.

rubydragon44 commented 10 years ago

That's okay if it sounds a bit bland. I think it would work well to keep track of actions and the story thus far, and if there are different routes or the story is situational, then you could remember how your actions lead up. Pretty much, and kind of like V's progression window, (although I kind of doubt it supports message codes, but I'm not for sure if you'd find that contemporary to add, especially text size, which seems like it'd make things more complicated than they need to be, and I can't seem to get it to work, and it doesn't work the same way this would), you use a script call to set what next text is put in the log. It isn't manual for the player, but manual for the game. It isn't like where the player types "Hi lololol", it's meant to be used for anything between a received item, death of the party then a transport back to the checkpoint, interaction with a Touch Encounter enemy, progression to a new area, monolougue, story elements... those things. If you know what you did in a dungeon or in the story then you can help not repeat that mistake the last time, and for multiple routes it helps you not to be overwhelmed or forgetful when there's a lot going on.


###################Day 5###################


After a long night of travel from the day before, Party 1 enters the Dark Forest. Party Hunger, Sleep, and Energy is dropped by 500.


2 Potions were obtained from a chest.


The party leads off into hidden forest clearing.


(then when you reach that forest clearing, there is a scene where you interact with party members, choosing some of the decisions. In this example playthrough, the player has it so that the leader ends up boasting and causing Terrence to leave, taking some of the inventory with him. Although this means one less member, later on this will lead to Terrence gaining a powerful extra set of (optional?) abilities that would really help to get earlier on/ altogether in the game.

After the choices are made, something like the script call game_log{"Angry at Eric, Terrence resents the fact that he'll\LB never have the strength of the demon kin.\LB Instead of being supportive, Eric tells him that that's\LB what I leader is supposed to be like."} is set, adding this next piece to the Game Log:)


Angry at Eric, Terrence resents the fact that he'll never have the strength of the demon kin. Instead of being supportive, Eric tells him that that's what I leader is supposed to be like.


Terrence leaves the party and can be seen heading North to the mountains in the distance. His departing words were: "The next time you see me, Eric... I'll wipe that smirk off your face. Forget the quest. I can see you're going to be a threat and a source of controversy in the future. You will never use your power for true good..."


Terrence took the party's 6 Potions, 2 Hi-Potions, 1 Magic Water, an extra Bastard Sword, 1000 Gold, and 3 Fire Scrolls with him.


(Of course, using this for a half-open-ended system would be optional.)

(I mean, the left and right scrollable "days" or "chapters" is technically an optional feature could be done without, since you could divide days or chapters with the call game_log{"#######Chapter 2#########"} or whatever to divide them, but that may reduce lag and keep it a little organized. I wonder, if you did add the add-to-chapter-of-variable feature, if it would make sense to have it so that when you did open the text Game Log menu, that it opens up to the chapter of the current variable.)

HimeWorks commented 10 years ago

So basically all the developer does is insert extra script calls into their events to add things to the log, and then another scene will display contents from the log.

The log itself could be complex based on chapters as suggested above, and the appropriate script calls would be made.

Roguedeus commented 10 years ago

I can imagine it working like a normal log but Indexed by the current chapter_id value (string value for chapter title?) that is set by script call. (How and when the chapter ID changes can be left to the developer, for simplicity)

Of course, there could also be a basic chronological log (view all) or something.

HimeWorks commented 10 years ago

I think logs in general come in the same shapes and sizes:

You have a Log The Log contains a number of Log Entry objects.

There are different kinds of log entries. Let's consider a very simple text log entry. This kind of entry contains text and a creation timestamp. The timestamp can either be automatically generated or manually specified. The text would follow the same format as message window text.

This kind of log has a very flat nature that looks something like

Log
  - Entry 1
  - Entry 2
  - Entry 3
  ...

We can have multi-level logs, that have Log Group objects

Log
  - Log Group 1
      - Entry 1
      - Entry 2
  - Log Group 2
      - Entry 1
      - Entry 2

We can think of the flat log as a special case where there are no log groups. Ideally, we can have groups containing other groups, as such

Log
   - Log Group 1
       - Log Group a
       - Log Group b
          ....

You can have an infinite number of levels within your log. But I don't think it is necessary at all.

HimeWorks commented 10 years ago

I'm willing to go with the following options

1: Flat log. No log groups or anything. If your log comes in 5 chapters, then simply create 5 separate logs, one for each chapter.

2: Grouped log. Shown in option 2, we have different groups within a log, and each group contains entries.

Both are technically the same, except the first one requires you to create separate logs, while the second one requires you to create separate log groups.

rubydragon44 commented 10 years ago

Hmm, well, I think one would have to see them in action to work. I think I just haven't entirely grasped the concept because it's newly brought up to me.

The idea is to add logs to a particular grouping or whatever with no relevance to the other entries, right? So that you can have non-streamlined gameplay text entries. So you would be adding accomplishments or like entries of story events or actor/relationship changes/ deaths to a given chapter or date (depends on what you want to call them) which I assume you're calling groups in this instance. So a new entry, say saying that you died and were teleported back to camp, would not have to be manually labelled entry number 14, be it, if the game logged you beating the forest dungeon instead of dying and being teleported, that "You beat the Forest Dungeon!" would end up being entry number 14 (if entry numbers are even used. Entry numbers don't seem to be important to me).

Will such things be able to work with variables? Like I'd be able to add an entry to group/day/chapter based on the current day my games on using a variable? And that that entry would appear after the previous entry added to the log of that day? Because if so, that would satisfy my use for this, I know,. lol.

I don't think either option method quite matters as long as it's flexible and gets the job done. Multiple entries for different chapters. If chapters are even used.

And it's so cool that you're considering this :)

HimeWorks commented 10 years ago

Provide an example of how you want your log to look and I will decide which is most appropriate. Your example should consider how players will open the log, what they see when they open it, and how they will navigate through it.

rubydragon44 commented 10 years ago

Sorry, I just read this. Are you thinking something like this? https://drive.google.com/file/d/0B9oxIE0LXB7cOVd2N2x1blFVbmc/edit?usp=sharing

HimeWorks commented 10 years ago

I can instruct users to say

create_log(LOG_SYMBOL, LOG_NAME)
add_log_entry(LOG_SYMBOL, LOG_DATA)

So you might say

create_log(:day1, "Day 1")
add_log_entry(:day1, "something happened")
add_log_entry(:day1, "something else happened")

And then some scene will take this log and show what you have.

rubydragon44 commented 10 years ago

Will this support variables? So far the setup doesn't seem like it. Because the log_symbol wouldn't be controlled with a number (I don't think) so then I couldn't say add_log_entry(:$game_variables[1], "something happened") so that would mean it would only work for streamlined gameplay or if $game_variables[1] == 1 then add_log_entry(:day1, "something happened") and if $game_variables[2] == 1 then add_log_entry(:day2, "something happened") and soforth and if there are different things that can happen on any day (like being defeated and teleported back to camp or the weather being Rainy for that day or whatnot or if it's like Harvest Moon where scenes can happen on an any assortment of days once a condition is met) then you'd be doing a lot of conditioning

HimeWorks commented 10 years ago

You can store symbols in variables as well using the script call box instead of the regular number operations.

I can provide support for numbers as well.

rubydragon44 commented 10 years ago

Yeah but it would break my game in some aspects if variable 1 = :day1 lol So I assume you mean support for variables and integers. Yay :)

The other thing I was curious on was if you were doing text codes. Color doesn't matter but it's okay because it shows what's a technical term and I think text size would just break it but what I was concerned on was like actor_name[variable[x]] or variable[variable[x]] for say I set it so that before I created the log update call, I set Variable 2, "Actor dealing with" to 3, meaning Actor 3, or I could have it so that variable 11 is "Member 1 Actor ID" so I'd have it so that Actor Name who's ID is of Variable 11 (meaning the log's update says something about the name of the actor in Member 1's Slot .

But then I don't know if that would be tedious to implement, especially since that'd be like script codes inside of parenthesis, which I don't even know it that's possible

like let's say Actor 1's Level is 27 then you reduced it by 1 and he's in Slot 1 then you did Variable 2 "Actor Dealing With" = 1

add_log_entry(1, "something happened to actor.name[$game_variables[2]] and his level dropped to actor.level[$game_variables[2]]") which would translate to add_log_entry(1, "something happened to Eric and his level dropped to 26")

(crude example of usage of text script codes)

Or like if that doesn't work/ isn't implemented then you could have it so that Variable 3 "Name Dealing With" = actor.name[$game_variables[2]] Variable 4 "Level Dealing With" = actor.level[$game_variables[2]] add_log_entry(1, "something happened to \V[3] and his level dropped to \V[4]") which would translate to the same thing

rubydragon44 commented 10 years ago

If you weren't willing to implement either the codes like saying actor.level[2] in a log or saying \V[1], I could suffice, I'm just cuwious. Heheh.

HimeWorks commented 10 years ago

Well the message codes will be supported separately, since there are other scripts that could do that. Doesn't really seem like a "log" if you do decide to use variables though.

rubydragon44 commented 10 years ago

Although it wouldn't be as fancy-scrollable, couldn't I go $game_variables[1] "Day 1" += "Hello world, and welcome to my game!" $game_variables[1] "Day 1" += "The quest begins and the hero travels along rails of light in search for his father" (or set the given variable corresponding to the current day) I tried on a fresh project and it didn't work but I tried on my main test project and it did. But then, this doesn't support any sort of codes besides pausing mid sentence then conditioning what to add next $game_variables[1] += " The hero decided to take the" if $game_switches[1] == true then $game_variables[1] += " left path." else $game_variables[1] += " right path." end which if there are a lot of possibilities then there's a lot of conditioning to do

And would doing this cause lag or use up a lot of memory or make the save files huge?