Visible stat bumps in game

So, I just wrote a little subroutine to carry out stat bonuses in game, and make them optionally visible, and I’m curious as to people’s thoughts on them. I know some people really like them, and are vocal about it, but I’m not quite certain how many people actually like them.

  • Not only should there be no stats mentioned in the game, there shouldn’t be a stats screen!
  • Stat bonuses appearing in game are a distraction. They shouldn’t be included.
  • It really depends on the game/my mood/something else. There should be a choice.
  • Stat bonuses notices are great. They should be included wherever possible.
  • Not only should there be stat bonuses visible, it would be great if every variable was visible in game (such as from the stats screen, but an expanded list).

0 voters

In case anyone wants to see, this is the subroutine I'm using.
*label stat_bump
*params s x
*if param_count >= 3
	*temp m param_3
	*temp m false
*if param_count >= 4
	*temp f param_4
	*temp f false
*temp r s
*temp o false
*comment param_1 s:("variable"(numeric)) Stat: Input is either stat, or opposed pair (setup below)
*comment param_2 x:(numeric) Amount of change
*comment param_3 m:(boolean) Minus: subtract rather than add. (optional: defaults to false)
*comment param_4 f:(boolean) Flat: Use flat addition/subtraction rather than fairmath. (optional: defaults to false)
*comment r:report stat; o:opposed(second of an opposed pair); y:amount of change
*if (m = "+") or (m = "%+")
	*set m false
*if (m = "-") or (m = "%-")
	*set m true
*comment fixes above
*if s = "mature"
	*set s "cute"
*if s = "honesty"
	*set s "charm"
*if s = "retro"
	*set s "modern"
*comment set opposed pairs above, where *if s = "non_variable"; then *set s "variable"
*if r != s
	*set o true
*if r = "julia_like"
	*set r "Julia like"
*if r = "julia_love"
	*set r "Julia love"
*if r = "isiah_like"
	*set r "Isiah like"
*if r = "isiah_love"
	*set r "Isiah love"
*if r = "sam_like"
	*set r "Sam like"
*if r = "sam_love"
	*set r "Sam love"
*if r = "julia_isiah"
	*set r "relationship between Julia and Isiah"
*if r = "isiah_sam"
	*set r "relationship between Isiah and Sam"
*if r = "sam_isiah"
	*set r "relationship between Sam and Isiah"
*comment set display names above, where *if r = "variable_name"; then *set r "stat name"
*temp y {s}
*if f
	*if (o or m) and not(o and m)
		*set {s} - x
		*set y - {s}
		*set {s} + x
		*set y ({s} - y)
	*if (o or m) and not(o and m)
		*set {s} %- x
		*set y - {s}
		*set {s} %+ x
		*set y ({s} - y)
*if announce
	[i]--  $!{r} @{m decreased|increased} by ${y} to @{o ${100-{s}}|${{s}}}  --[/i]

Mostly they are good when possible, but I also would say it depends on the story. Did visible ones in my contest entry (had pondered a toggle for visibility as part of a potential Easy/Hard Mode, but decided against it, felt like with the time limit it might have taken too long to figure out how to implement it right). For my new story, won’t have any, because it is less ‘game-y’. I would say it comes down to whether it is primarily a gamebook, or an interactive story. If the former, definitely visible. If the latter, could go either way but probably not visible.


And, this is my subroutine!
Well, one of them.

The subroutine of mine
*label exchange
*params item gain count
*comment 1/2/3 = +/-/0
*temp i_name ""
*if (item#1) = "i"
	*goto item
*if (item#1) = "w"
	*goto weapon

*label weapon
*if "${item}" = "wpn_shiv"
	*set i_name "shiv@{(count <= 1) |s}"
*elseif "${item}" = "wpn_slingshot"
	*set i_name "slingshot@{(count <= 1) |s}"
*if gain = 1
	*if {item} = 0
		*set sjt_own &("${item};")
	*set {item} +count
	*if gamemode != 3
		[[i]You got @{(count = 1) a|${count}} ${i_name}[/i]]
*elseif gain = 2
	*set {item} -count
	*if gamemode != 3
		[[i]You lost @{(count = 1) a|${count}} ${i_name}[/i]]
*elseif gain = 3
	*if gamemode != 3
		[[i]Lose all ${i_name}@{({item} > 1) s|}[/i]]
	*set {item} 0
*if {item} <= 0
	*set {item} 0
	*gosub removal

And this is when you get a new item (shiv)

*gosub_scene F.Manage exchange "wpn_shiv" 1 1
1 Like

Yea, inventory based (and using some arrays). Interesting, although I kinda doubled my effort in that when writing my subroutines, since I was planning on making them as a drag and drop list.

The more stats the better

Min-max-ing stats is a compulsion of mine that cannot be satiated but anything close to that is good enough

But in all seriousness, if showing stats somehow affect the story negatively then feel free to hide some (not all of them though). If a game didn’t have ANY stats, then it’d have to be pretty damn good for me to even consider playing

1 Like

Does the story heavily involve stats? If it does, do stats change dramatically as you play? Then yes, I do need to know how my stats are affected.

If it’s more narratively focused such as Highlands, Deep Waters, or stats run along a fairly static paradigm ie XoR, I don’t.

1 Like

Drag and drop list?
You mean something like bulleted list that can be rearranged?

Otherwise, this is my subroutines for my various “exp-based” stats.

*label getroll
*params exp
*if exp = "exp_crc"
	*set bar_exp exp_crc
	*goto combatstats
*elseif exp = "exp_lrc"
	*set bar_exp exp_lrc
	*goto combatstats
*elseif exp = "exp_sword"
	*set bar_exp exp_sword
	*goto histats
*elseif exp = "exp_dagger"
	*set bar_exp exp_dagger
	*goto medstats
*elseif exp = "exp_longbow"
	*set bar_exp exp_longbow
	*goto histats

*label combatstats
*if {exp} >= 57
	*set bar_exp 100
	*set addroll 5
*elseif {exp} >= 47
	*set bar_exp -47
	*set bar_exp round(bar_exp*(100/10))
	*set addroll 4
*elseif {exp} >= 25
	*set bar_exp -25
	*set bar_exp round(bar_exp*(100/30))
	*set addroll 3
*elseif {exp} >= 8
	*set bar_exp -8
	*set bar_exp round(bar_exp*(100/17))
	*set addroll 2
*elseif {exp} < 8
	*set bar_exp round(bar_exp*(100/8))
	*set addroll 1

*label medstats
*if {exp} >= 34
	*set bar_exp 100
	*set addroll 3
*elseif {exp} >= 21
	*set bar_exp -21
	*set bar_exp round(bar_exp*(100/13))
	*set addroll 3
*elseif {exp} >= 11
	*set bar_exp -11
	*set bar_exp round(bar_exp*(100/10))
	*set addroll 2
*elseif {exp} >= 3
	*set bar_exp -3
	*set bar_exp round(bar_exp*(100/8))
	*set addroll 1
*elseif {exp} < 3
	*set bar_exp round(bar_exp*(100/3))
	*set addroll 0

*label lowstats
*if {exp} >= 22
	*set bar_exp 100
	*set addroll 3
*elseif {exp} >= 13
	*set bar_exp -13
	*set bar_exp round(bar_exp*(100/9))
	*set addroll 3
*elseif {exp} >= 7
	*set bar_exp -7
	*set bar_exp round(bar_exp*(100/6))
	*set addroll 2
*elseif {exp} >= 3
	*set bar_exp -3
	*set bar_exp round(bar_exp*(100/4))
	*set addroll 1
*elseif {exp} < 3
	*set bar_exp round(bar_exp*(100/3))
	*set addroll 0

*label histats
*if {exp} >= 41
	*set bar_exp 100
	*set addroll 3
*elseif {exp} >= 26
	*set bar_exp -26
	*set bar_exp round(bar_exp*(100/15))
	*set addroll 3
*elseif {exp} >= 15
	*set bar_exp -15
	*set bar_exp round(bar_exp*(100/11))
	*set addroll 2
*elseif {exp} >= 5
	*set bar_exp -5
	*set bar_exp round(bar_exp*(100/10))
	*set addroll 1
*elseif {exp} < 5
	*set bar_exp round(bar_exp*(100/5))
	*set addroll 0
1 Like

No no, that’s relatively easy to code. I mean drag and drop as in they are easy for anyone to just drop in their game and use. Meaning minimal required parameters (e.g. with mine you can see there’s 4 parameters that can be entered, but only 2 required), plenty of error catches [e.g. m (a.k.a. param_3) is supposed to be boolean, but accepts "+" / "-" too], minimal variables (this one only requires one, and even that I can turn remove and make a parameters fairly easy), etc.

Partly is I’m thinking of, when I rewrite the CS documentation, of packing a bunch of subroutines together as part of like a “here’s an example of some of the more advanced things you can do, and you can insert these into your game as is if you want”.


Oh, I guess I missed your point :sweat:
So, we’re creating something like a “template code,” right?

Ah, I felt silly all of a sudden…

1 Like