Is there a way to make all the default messages UPPERCASE?

This might not be popular or even wise, but I’m trying to emulate the effect of an old green-screen PC where all the text is in capital letters.

[b]BATTLEMENTS
THE LANDSCAPE IS FROZEN AND BARE. THE WIND HOWLS.

[/b]

I just like the effect.

However, even if all my text is in capitals, I7’s standard messages are in lower case, which spoils everything.

So:

  1. How would one go about changing all the default messages to capitals?
  2. Is there some wizardly trick whereby I can just write “[in upper case]” once instead of hunting down all the default messages?

Thanks for your time!

This is an online-only solution, but you can pretty easily turn all text uppercase in Parchment by adding a * { text-transform: uppercase; } rule to the CSS file. (As a bonus the player has the possibility to switch back to normal case if they want and know how to do it.)

It’s probably simplest to brute force it and change all the messages to uppercase. Try this.

[spoiler][code]“Test”

Include (-

Array LanguageNumbers table
‘ONE’ 1 ‘TWO’ 2 ‘THREE’ 3 ‘FOUR’ 4 ‘FIVE’ 5
‘SIX’ 6 ‘SEVEN’ 7 ‘EIGHT’ 8 ‘NINE’ 9 ‘TEN’ 10
‘ELEVEN’ 11 ‘TWELVE’ 12 ‘THIRTEEN’ 13 ‘FOURTEEN’ 14 ‘FIFTEEN’ 15
‘SIXTEEN’ 16 ‘SEVENTEEN’ 17 ‘EIGHTEEN’ 18 ‘NINETEEN’ 19 ‘TWENTY’ 20
‘TWENTY-ONE’ 21 ‘TWENTY-TWO’ 22 ‘TWENTY-THREE’ 23 ‘TWENTY-FOUR’ 24
‘TWENTY-FIVE’ 25 ‘TWENTY-SIX’ 26 ‘TWENTY-SEVEN’ 27 ‘TWENTY-EIGHT’ 28
‘TWENTY-NINE’ 29 ‘THIRTY’ 30
;

[ LanguageNumber n f;
if (n == 0) { print “ZERO”; rfalse; }
if (n < 0) { print "MINUS "; n = -n; }
#Iftrue (WORDSIZE == 4);
if (n >= 1000000000) {
if (f == 1) print ", “;
print (LanguageNumber) n/1000000000, " BILLION”; n = n%1000000000; f = 1;
}
if (n >= 1000000) {
if (f == 1) print ", “;
print (LanguageNumber) n/1000000, " MILLION”; n = n%1000000; f = 1;
}
#Endif;
if (n >= 1000) {
if (f == 1) print ", “;
print (LanguageNumber) n/1000, " THOUSAND”; n = n%1000; f = 1;
}
if (n >= 100) {
if (f == 1) print ", “;
print (LanguageNumber) n/100, " HUNDRED”; n = n%100; f = 1;
}
if (n == 0) rfalse;
#Ifdef DIALECT_US;
if (f == 1) print " ";
#Ifnot;
if (f == 1) print " AND ";
#Endif;
switch (n) {
1: print “ONE”;
2: print “TWO”;
3: print “THREE”;
4: print “FOUR”;
5: print “FIVE”;
6: print “SIX”;
7: print “SEVEN”;
8: print “EIGHT”;
9: print “NINE”;
10: print “TEN”;
11: print “ELEVEN”;
12: print “TWELVE”;
13: print “THIRTEEN”;
14: print “FOURTEEN”;
15: print “FIFTEEN”;
16: print “SIXTEEN”;
17: print “SEVENTEEN”;
18: print “EIGHTEEN”;
19: print “NINETEEN”;
20 to 99: switch (n/10) {
2: print “TWENTY”;
3: print “THIRTY”;
4: print “FORTY”;
5: print “FIFTY”;
6: print “SIXTY”;
7: print “SEVENTY”;
8: print “EIGHTY”;
9: print “NINETY”;
}
if (n%10 ~= 0) print “-”, (LanguageNumber) n%10;
}
];

-) instead of “Articles” in “Language.i6t”.

Include (-

[ LanguageTimeOfDay hours mins i;
i = hours%12;
if (i == 0) i = 12;
if (i < 10) print " “;
print i, “:”, mins/10, mins%10;
if ((hours/12) > 0) print " PM”; else print " AM";
];

-) instead of “Time” in “Language.i6t”.

Include (-

Constant LanguageAnimateGender = male;
Constant LanguageInanimateGender = neuter;

Constant LanguageContractionForms = 2; ! English has two:
! 0 = starting with a consonant
! 1 = starting with a vowel

[ LanguageContraction text;
if (text->0 == ‘a’ or ‘e’ or ‘i’ or ‘o’ or ‘u’
or ‘A’ or ‘E’ or ‘I’ or ‘O’ or ‘U’) return 1;
return 0;
];

Array LanguageArticles -->

! Contraction form 0: Contraction form 1:
! Cdef Def Indef Cdef Def Indef

 "THE " "THE " "A "      "THE " "THE " "AN "          ! Articles 0
 "THE " "THE " "SOME "   "THE " "THE " "SOME ";       ! Articles 1

			   !             a           i
			   !             s     p     s     p
			   !             m f n m f n m f n m f n

Array LanguageGNAsToArticles --> 0 0 0 1 1 1 0 0 0 1 1 1;

-) instead of “Articles” in “Language.i6t”.

Include (-

Constant NKEY__TX = “N = NEXT SUBJECT”;
Constant PKEY__TX = “P = PREVIOUS”;
Constant QKEY1__TX = " Q = RESUME GAME";
Constant QKEY2__TX = “Q = PREVIOUS MENU”;
Constant RKEY__TX = “RETURN = READ SUBJECT”;

Constant NKEY1__KY = ‘N’;
Constant NKEY2__KY = ‘n’;
Constant PKEY1__KY = ‘P’;
Constant PKEY2__KY = ‘p’;
Constant QKEY1__KY = ‘Q’;
Constant QKEY2__KY = ‘q’;

Constant SCORE__TX = "SCORE: ";
Constant MOVES__TX = "MOVES: ";
Constant TIME__TX = "TIME: ";
Global CANTGO__TX = “YOU CAN’T GO THAT WAY.”;
Global FORMER__TX = “YOUR FORMER SELF”;
Global YOURSELF__TX = “YOURSELF”;
Constant YOU__TX = “YOU”;
Constant DARKNESS__TX = “DARKNESS”;

Constant THOSET__TX = “THOSE THINGS”;
Constant THAT__TX = “THAT”;
Constant OR__TX = " OR “;
Constant NOTHING__TX = “NOTHING”;
Constant NOTHING2__TX = “NOTHING”;
Global IS__TX = " IS”;
Global ARE__TX = " ARE";
Global IS2__TX = "IS ";
Global ARE2__TX = "ARE ";
Global IS3__TX = “IS”;
Global ARE3__TX = “ARE”;
Constant AND__TX = " AND ";
#ifdef SERIAL_COMMA;
Constant LISTAND__TX = ", AND ";
Constant LISTAND2__TX = " AND ";
#ifnot;
Constant LISTAND__TX = " AND ";
Constant LISTAND2__TX = " AND ";
#endif; ! SERIAL_COMMA
Constant WHOM__TX = "WHOM ";
Constant WHICH__TX = "WHICH ";
Constant COMMA__TX = ", ";

-) instead of “Short Texts” in “Language.i6t”.

Include (-

[ ThatorThose obj; ! Used in the accusative
if (obj == player) { print “YOU”; return; }
if (obj has pluralname) { print “THOSE”; return; }
if (obj has animate) {
if (obj has female) { print “HER”; return; }
else
if (obj hasnt neuter) { print “HIM”; return; }
}
print “THAT”;
];

[ ItorThem obj;
if (obj == player) { print “YOURSELF”; return; }
if (obj has pluralname) { print “THEM”; return; }
if (obj has animate) {
if (obj has female) { print “HER”; return; }
else
if (obj hasnt neuter) { print “HIM”; return; }
}
print “IT”;
];

[ IsorAre obj;
if (obj has pluralname || obj == player) print “ARE”; else print “IS”;
];

[ HasorHave obj;
if (obj has pluralname || obj == player) print “HAVE”; else print “HAS”;
];

[ CThatorThose obj; ! Used in the nominative
if (obj == player) { print “YOU”; return; }
if (obj has pluralname) { print “THOSE”; return; }
if (obj has animate) {
if (obj has female) { print “SHE”; return; }
else
if (obj hasnt neuter) { print “HE”; return; }
}
print “THAT”;
];

[ CTheyreorThats obj;
if (obj == player) { print “YOU’RE”; return; }
if (obj has pluralname) { print “THEY’RE”; return; }
if (obj has animate) {
if (obj has female) { print “SHE’S”; return; }
else if (obj hasnt neuter) { print “HE’S”; return; }
}
print “THAT’S”;
];

[ HisHerTheir o; if (o has pluralname) { print “THEIR”; return; }
if (o has female) { print “HER”; return; }
if (o has neuter) { print “ITS”; return; }
print “HIS”;
];

[ HimHerItself o; if (o has pluralname) { print “THEIRSELVES”; return; }
if (o has female) { print “HERSELF”; return; }
if (o has neuter) { print “ITSELF”; return; }
print “HIMSELF”;
];

-) instead of “Printed Inflections” in “Language.i6t”.

Include (-

[ LanguageLM n x1 x2;
say__p = 1;
Answer,Ask:
“THERE IS NO REPLY.”;
! Ask: see Answer
Attack: “VIOLENCE ISN’T THE ANSWER TO THIS ONE.”;
Burn: “THIS DANGEROUS ACT WOULD ACHIEVE LITTLE.”;
Buy: “NOTHING IS ON SALE.”;
Climb: “I DON’T THINK MUCH IS TO BE ACHIEVED BY THAT.”;
Close: switch (n) {
1: print_ret (ctheyreorthats) x1, " NOT SOMETHING YOU CAN CLOSE.";
2: print_ret (ctheyreorthats) x1, " ALREADY CLOSED.";
3: "YOU CLOSE ", (the) x1, “.”;
4: print (The) actor, " CLOSES “, (the) x1, “.^”;
5: print (The) x1, " CLOSE”; if (x1 hasnt pluralname) print “S”;
print “.^”;
}
Consult: switch (n) {
1: "YOU DISCOVER NOTHING OF INTEREST IN ", (the) x1, “.”;
2: print (The) actor, " LOOKS AT ", (the) x1, “.^”;
}
Cut: "CUTTING “, (thatorthose) x1, " UP WOULD ACHIEVE LITTLE.”;
Disrobe: switch (n) {
1: "YOU’RE NOT WEARING ", (thatorthose) x1, “.”;
2: "YOU TAKE OFF ", (the) x1, “.”;
3: print (The) actor, " TAKES OFF ", (the) x1, “.^”;
}
Drink: “THERE’S NOTHING SUITABLE TO DRINK HERE.”;
Drop: switch (n) {
1: if (x1 has pluralname) print (The) x1, " ARE "; else print (The) x1, " IS ";
“ALREADY HERE.”;
2: "YOU HAVEN’T GOT ", (thatorthose) x1, “.”;
3: print "(FIRST TAKING “, (the) x1, " OFF)^”; say__p = 0; return;
4: “DROPPED.”;
5: "THERE IS NO MORE ROOM ON ", (the) x1, “.”;
6: "THERE IS NO MORE ROOM IN ", (the) x1, “.”;
7: print (The) actor, " PUTS DOWN “, (the) x1, “.^”;
}
Eat: switch (n) {
1: print_ret (ctheyreorthats) x1, " PLAINLY INEDIBLE.”;
2: "YOU EAT ", (the) x1, “. NOT BAD.”;
3: print (The) actor, " EATS ", (the) x1, “.^”;
}
Enter: switch (n) {
1: print "BUT YOU’RE ALREADY ";
if (x1 has supporter) print "ON "; else print "IN ";
print_ret (the) x1, “.”;
2: if (x1 has pluralname) print “THEY’RE”; else print “THAT’S”;
print " NOT SOMETHING YOU CAN ";
switch (verb_word) {
‘stand’: “STAND ON.”;
‘sit’: “SIT DOWN ON.”;
‘lie’: “LIE DOWN ON.”;
default: “ENTER.”;
}
3: "YOU CAN’T GET INTO THE CLOSED ", (name) x1, “.”;
4: “YOU CAN ONLY GET INTO SOMETHING FREE-STANDING.”;
5: print "YOU GET ";
if (x1 has supporter) print "ONTO "; else print "INTO ";
print_ret (the) x1, “.”;
6: print "(GETTING ";
if (x1 has supporter) print "OFF "; else print "OUT OF ";
print (the) x1; print “)^”; say__p = 0; return;
7: ! say__p = 0;
if (x1 has supporter) "(GETTING ONTO ", (the) x1, “)”;
if (x1 has container) "(GETTING INTO ", (the) x1, “)”;
"(ENTERING ", (the) x1, “)”;
8: print (The) actor, " GETS INTO ", (the) x1, “.^”;
9: print (The) actor, " GETS ONTO ", (the) x1, “.^”;
}
Examine: switch (n) {
1: “DARKNESS, NOUN. AN ABSENCE OF LIGHT TO SEE BY.”;
2: "YOU SEE NOTHING SPECIAL ABOUT ", (the) x1, “.”;
3: print (The) x1, " ", (isorare) x1, " CURRENTLY SWITCHED ";
if (x1 has on) “ON.”; else “OFF.”;
4: print (The) actor, " LOOKS CLOSELY AT ", (the) x1, “.^”;
5: “YOU SEE NOTHING UNEXPECTED IN THAT DIRECTION.”;
}
Exit: switch (n) {
1: “BUT YOU AREN’T IN ANYTHING AT THE MOMENT.”;
2: "YOU CAN’T GET OUT OF THE CLOSED ", (name) x1, “.”;
3: print "YOU GET ";
if (x1 has supporter) print "OFF "; else print "OUT OF ";
print_ret (the) x1, “.”;
4: print "BUT YOU AREN’T ";
if (x1 has supporter) print "ON "; else print "IN ";
print_ret (the) x1, “.”;
5: print (The) actor, " GETS OFF “, (the) x1, “.^”;
6: print (The) actor, " GETS OUT OF “, (the) x1, “.^”;
}
GetOff: “BUT YOU AREN’T ON “, (the) x1, " AT THE MOMENT.”;
Give: switch (n) {
1: “YOU AREN’T HOLDING “, (the) x1, “.”;
2: “YOU JUGGLE “, (the) x1, " FOR A WHILE, BUT DON’T ACHIEVE MUCH.”;
3: print (The) x1;
if (x1 has pluralname) print " DON’T”; else print " DOESN’T”;
" SEEM INTERESTED.”;
4: print (The) x1;
if (x1 has pluralname) print " AREN’T”;
else print " ISN’T”;
" ABLE TO RECEIVE THINGS.”;
5: "YOU GIVE ", (the) x1, " TO ", (the) second, “.”;
6: print (The) actor, " GIVES “, (the) x1, " TO YOU.^”;
7: print (The) actor, " GIVES ", (the) x1, " TO ", (the) second, “.^”;
}
Go: switch (n) {
1: print "YOU’LL HAVE TO GET ";
if (x1 has supporter) print “OFF “; else print “OUT OF “;
print_ret (the) x1, " FIRST.”;
2: print_ret (string) CANTGO__TX; ! “YOU CAN’T GO THAT WAY.”
6: print “YOU CAN’T, SINCE “, (the) x1;
if (x1 has pluralname) " LEAD NOWHERE.”; else " LEADS NOWHERE.”;
7: “YOU’LL HAVE TO SAY WHICH COMPASS DIRECTION TO GO IN.”;
8: print (The) actor, " GOES UP”;
9: print (The) actor, " GOES DOWN”;
10: print (The) actor, " GOES “, (name) x1;
11: print (The) actor, " ARRIVES FROM ABOVE”;
12: print (The) actor, " ARRIVES FROM BELOW”;
13: print (The) actor, " ARRIVES FROM THE “, (name) x1;
14: print (The) actor, " ARRIVES”;
15: print (The) actor, " ARRIVES AT “, (the) x1, " FROM ABOVE”;
16: print (The) actor, " ARRIVES AT “, (the) x1, " FROM BELOW”;
17: print (The) actor, " ARRIVES AT ", (the) x1, " FROM THE ", (name) x2;
18: print (The) actor, " GOES THROUGH ", (the) x1;
19: print (The) actor, " ARRIVES FROM ", (the) x1;
20: print "ON ", (the) x1;
21: print "IN ", (the) x1;
22: print ", PUSHING “, (the) x1, " IN FRONT, AND YOU ALONG TOO”;
23: print ", PUSHING “, (the) x1, " IN FRONT”;
24: print ", PUSHING “, (the) x1, " AWAY”;
25: print ", PUSHING “, (the) x1, " IN”;
26: print “, TAKING YOU ALONG”;
27: print “(FIRST GETTING OFF “, (the) x1, “)^”; say__p = 0; return;
28: print “(FIRST OPENING “, (the) x1, “)^”; say__p = 0; return;
}
Insert: switch (n) {
1: “YOU NEED TO BE HOLDING “, (the) x1, " BEFORE YOU CAN PUT “, (itorthem) x1,
" INTO SOMETHING ELSE.”;
2: print_ret (Cthatorthose) x1, " CAN’T CONTAIN THINGS.”;
3: print_ret (The) x1, " “, (isorare) x1, " CLOSED.”;
4: “YOU’LL NEED TO TAKE “, (itorthem) x1, " OFF FIRST.”;
5: “YOU CAN’T PUT SOMETHING INSIDE ITSELF.”;
6: print “(FIRST TAKING “, (itorthem) x1, " OFF)^”; say__p = 0; return;
7: “THERE IS NO MORE ROOM IN “, (the) x1, “.”;
8: “DONE.”;
9: “YOU PUT “, (the) x1, " INTO “, (the) second, “.”;
10: print (The) actor, " PUTS “, (the) x1, " INTO “, (the) second, “.^”;
}
Inv: switch (n) {
1: “YOU ARE CARRYING NOTHING.”;
2: print “YOU ARE CARRYING”;
3: print “:^”;
4: print “.^”;
5: print (The) x1, " LOOKS THROUGH “, (HisHerTheir) x1, " POSSESSIONS.^”;
}
Jump: “YOU JUMP ON THE SPOT, FRUITLESSLY.”;
Kiss: “KEEP YOUR MIND ON THE GAME.”;
Listen: “YOU HEAR NOTHING UNEXPECTED.”;
ListMiscellany: switch (n) {
1: print " (PROVIDING LIGHT)”;
2: print " (CLOSED)”;
4: print " (EMPTY)”;
6: print " (CLOSED AND EMPTY)”;
3: print " (CLOSED AND PROVIDING LIGHT)”;
5: print " (EMPTY AND PROVIDING LIGHT)”;
7: #ifdef SERIAL_COMMA;
print " (CLOSED, EMPTY, AND PROVIDING LIGHT)”;
#ifnot;
print " (CLOSED, EMPTY AND PROVIDING LIGHT)”;
#endif;
8: print " (PROVIDING LIGHT AND BEING WORN”;
9: print " (PROVIDING LIGHT”;
10: print " (BEING WORN”;
11: print " (”;
12: print “OPEN”;
13: print “OPEN BUT EMPTY”;
14: print “CLOSED”;
15: print “CLOSED AND LOCKED”;
16: print " AND EMPTY”;
17: print " (EMPTY)”;
18: print " CONTAINING ";
19: print " (ON ";
20: print ", ON TOP OF ";
21: print " (IN “;
22: print “, INSIDE “;
}
LMode1: " IS NOW IN ITS ~BRIEF~ PRINTING MODE, WHICH GIVES LONG DESCRIPTIONS
OF PLACES NEVER BEFORE VISITED AND SHORT DESCRIPTIONS OTHERWISE.”;
LMode2: " IS NOW IN ITS ~VERBOSE~ MODE, WHICH ALWAYS GIVES LONG DESCRIPTIONS
OF LOCATIONS (EVEN IF YOU’VE BEEN THERE BEFORE).”;
LMode3: " IS NOW IN ITS ~SUPERBRIEF~ MODE, WHICH ALWAYS GIVES SHORT DESCRIPTIONS
OF LOCATIONS (EVEN IF YOU HAVEN’T BEEN THERE BEFORE).”;
Lock: switch (n) {
1: if (x1 has pluralname) print "THEY DON’T "; else print "THAT DOESN’T “;
“SEEM TO BE SOMETHING YOU CAN LOCK.”;
2: print_ret (ctheyreorthats) x1, " LOCKED AT THE MOMENT.”;
3: "FIRST YOU’LL HAVE TO CLOSE ", (the) x1, “.”;
4: if (x1 has pluralname) print "THOSE DON’T "; else print "THAT DOESN’T ";
“SEEM TO FIT THE LOCK.”;
5: "YOU LOCK ", (the) x1, “.”;
6: print (The) actor, " LOCKS ", (the) x1, “.^”;
}
Look: switch (n) {
1: print " (ON ", (the) x1, “)”;
2: print " (IN ", (the) x1, “)”;
3: print " (AS ", (object) x1, “)”;
4: print "ON ", (the) x1, " ";
WriteListFrom(child(x1),
ENGLISH_BIT+RECURSE_BIT+PARTINV_BIT+TERSE_BIT+CONCEAL_BIT+ISARE_BIT);
“.”;
5,6:
if (x1 ~= location) {
if (x1 has supporter) print "ON "; else print "IN “;
print (the) x1, " YOU”;
}
else print “YOU”;
print " CAN ";
if (n == 5) print "ALSO ";
print "SEE “;
WriteListFrom(child(x1),
ENGLISH_BIT+RECURSE_BIT+PARTINV_BIT+TERSE_BIT+CONCEAL_BIT+WORKFLAG_BIT);
if (x1 ~= location) “.”; else " HERE.”;
7: “YOU SEE NOTHING UNEXPECTED IN THAT DIRECTION.”;
8: if (x1 has supporter) print " (ON "; else print " (IN “;
print (the) x1, “)”;
9: print (The) actor, " LOOKS AROUND.^”;
}
LookUnder: switch (n) {
1: “BUT IT’S DARK.”;
2: “YOU FIND NOTHING OF INTEREST.”;
3: print (The) actor, " LOOKS UNDER ", (the) x1, “.^”;
}
Mild: “QUITE.”;
Miscellany: switch (n) {
1: “(CONSIDERING THE FIRST SIXTEEN OBJECTS ONLY)^”;
2: “NOTHING TO DO!”;
3: print " YOU HAVE DIED ";
4: print " YOU HAVE WON “;
5: print “^WOULD YOU LIKE TO RESTART, RESTORE A SAVED GAME”;
#Ifdef DEATH_MENTION_UNDO;
print “, UNDO YOUR LAST MOVE”;
#Endif;
#ifdef SERIAL_COMMA;
print “,”;
#endif;
" OR QUIT?”;
6: “[YOUR INTERPRETER DOES NOT PROVIDE ~UNDO~. SORRY!]”;
#Ifdef TARGET_ZCODE;
7: “~UNDO~ FAILED. [NOT ALL INTERPRETERS PROVIDE IT.]”;
#Ifnot; ! TARGET_GLULX
7: “[YOU CANNOT ~UNDO~ ANY FURTHER.]”;
#Endif; ! TARGET_
8: “PLEASE GIVE ONE OF THE ANSWERS ABOVE.”;
9: “IT IS NOW PITCH DARK IN HERE!”;
10: “I BEG YOUR PARDON?”;
11: “[YOU CAN’T ~UNDO~ WHAT HASN’T BEEN DONE!]”;
12: “[CAN’T ~UNDO~ TWICE IN SUCCESSION. SORRY!]”;
13: “[PREVIOUS TURN UNDONE.]”;
14: “SORRY, THAT CAN’T BE CORRECTED.”;
15: “THINK NOTHING OF IT.”;
16: “~OOPS~ CAN ONLY CORRECT A SINGLE WORD.”;
17: “IT IS PITCH DARK, AND YOU CAN’T SEE A THING.”;
18: print “YOURSELF”;
19: “AS GOOD-LOOKING AS EVER.”;
20: “TO REPEAT A COMMAND LIKE ~FROG, JUMP~, JUST SAY ~AGAIN~, NOT ~FROG, AGAIN~.”;
21: “YOU CAN HARDLY REPEAT THAT.”;
22: “YOU CAN’T BEGIN WITH A COMMA.”;
23: “YOU SEEM TO WANT TO TALK TO SOMEONE, BUT I CAN’T SEE WHOM.”;
24: "YOU CAN’T TALK TO ", (the) x1, “.”;
25: “TO TALK TO SOMEONE, TRY ~SOMEONE, HELLO~ OR SOME SUCH.”;
26: "(FIRST TAKING ", (the) x1, “)”;
27: “I DIDN’T UNDERSTAND THAT SENTENCE.”;
28: print "I ONLY UNDERSTOOD YOU AS FAR AS WANTING TO ";
29: “I DIDN’T UNDERSTAND THAT NUMBER.”;
30: “YOU CAN’T SEE ANY SUCH THING.”;
31: “YOU SEEM TO HAVE SAID TOO LITTLE!”;
32: “YOU AREN’T HOLDING THAT!”;
33: “YOU CAN’T USE MULTIPLE OBJECTS WITH THAT VERB.”;
34: “YOU CAN ONLY USE MULTIPLE OBJECTS ONCE ON A LINE.”;
35: “I’M NOT SURE WHAT ~”, (address) pronoun_word, “~ REFERS TO.”;
36: “YOU EXCEPTED SOMETHING NOT INCLUDED ANYWAY!”;
37: “YOU CAN ONLY DO THAT TO SOMETHING ANIMATE.”;
#Ifdef DIALECT_US;
38: “THAT’S NOT A VERB I RECOGNIZE.”;
#Ifnot;
38: “THAT’S NOT A VERB I RECOGNISE.”;
#Endif;
39: “THAT’S NOT SOMETHING YOU NEED TO REFER TO IN THE COURSE OF THIS GAME.”;
40: “YOU CAN’T SEE ~”, (address) pronoun_word, “~ (”, (the) pronoun_obj,
“) AT THE MOMENT.”;
41: “I DIDN’T UNDERSTAND THE WAY THAT FINISHED.”;
42: if (x1 == 0) print “NONE”; else print "ONLY ", (number) x1;
print " OF THOSE “;
if (x1 == 1) print “IS”; else print “ARE”;
" AVAILABLE.”;
43: “NOTHING TO DO!”;
44: “THERE ARE NONE AT ALL AVAILABLE!”;
45: print "WHO DO YOU MEAN, ";
46: print "WHICH DO YOU MEAN, ";
47: “SORRY, YOU CAN ONLY HAVE ONE ITEM HERE. WHICH EXACTLY?”;
48: print “WHOM DO YOU WANT”;
if (actor ~= player) print " ", (the) actor;
print " TO "; PrintCommand(); print “?^”;
49: print “WHAT DO YOU WANT”;
if (actor ~= player) print " ", (the) actor;
print " TO "; PrintCommand(); print “?^”;
50: print "YOUR SCORE HAS JUST GONE ";
if (x1 > 0) print “UP”; else { x1 = -x1; print “DOWN”; }
print " BY “, (number) x1, " POINT”;
if (x1 > 1) print “S”;
51: “(SINCE SOMETHING DRAMATIC HAS HAPPENED, YOUR LIST OF COMMANDS HAS BEEN CUT SHORT.)”;
52: "^TYPE A NUMBER FROM 1 TO ", x1, “, 0 TO REDISPLAY OR PRESS ENTER.”;
53: “^[PLEASE PRESS SPACE.]”;
54: “[COMMENT RECORDED.]”;
55: “[COMMENT NOT RECORDED.]”;
56: print “.^”;
57: print “?^”;
58: print (The) actor, " “, (IsOrAre) actor, " UNABLE TO DO THAT.^”;
59: “YOU MUST SUPPLY A NOUN.”;
60: “YOU MAY NOT SUPPLY A NOUN.”;
61: “YOU MUST NAME AN OBJECT.”;
62: “YOU MAY NOT NAME AN OBJECT.”;
63: “YOU MUST NAME A SECOND OBJECT.”;
64: “YOU MAY NOT NAME A SECOND OBJECT.”;
65: “YOU MUST SUPPLY A SECOND NOUN.”;
66: “YOU MAY NOT SUPPLY A SECOND NOUN.”;
67: “YOU MUST NAME SOMETHING MORE SUBSTANTIAL.”;
68: print “(”, (The) actor, " FIRST TAKING “, (the) x1, “)^”;
69: “(FIRST TAKING “, (the) x1, “)”;
70: “THE USE OF UNDO IS FORBIDDEN IN THIS GAME.”;
71: print (string) DARKNESS__TX;
72: print (The) x1;
if (x1 has pluralname) print " HAVE”; else print " HAS”;
" BETTER THINGS TO DO.”;
73: “THAT NOUN DID NOT MAKE SENSE IN THIS CONTEXT.”;
74: print "[THAT COMMAND ASKS TO DO SOMETHING OUTSIDE OF PLAY, SO IT CAN
ONLY MAKE SENSE FROM YOU TO ME. “, (The) x1, " CANNOT BE ASKED TO DO THIS.]^”;
75: print " THE END “;
}
No,Yes: “THAT WAS A RHETORICAL QUESTION.”;
NotifyOff:
“SCORE NOTIFICATION OFF.”;
NotifyOn: “SCORE NOTIFICATION ON.”;
Open: switch (n) {
1: print_ret (ctheyreorthats) x1, " NOT SOMETHING YOU CAN OPEN.”;
2: if (x1 has pluralname) print "THEY SEEM "; else print "IT SEEMS “;
“TO BE LOCKED.”;
3: print_ret (ctheyreorthats) x1, " ALREADY OPEN.”;
4: print "YOU OPEN ", (the) x1, ", REVEALING ";
if (WriteListFrom(child(x1), ENGLISH_BIT+TERSE_BIT+CONCEAL_BIT) == 0) “NOTHING.”;
“.”;
5: "YOU OPEN ", (the) x1, “.”;
6: print (The) actor, " OPENS “, (the) x1, “.^”;
7: print (The) x1, " OPEN”;
if (x1 hasnt pluralname) print “S”;
print “.^”;
}
Pronouns: switch (n) {
1: print "AT THE MOMENT, ";
2: print "MEANS ";
3: print “IS UNSET”;
4: “NO PRONOUNS ARE KNOWN TO THE GAME.”;
5: “.”;
}
Pull,Push,Turn: switch (n) {
1: if (x1 has pluralname) print "THOSE ARE "; else print "IT IS ";
“FIXED IN PLACE.”;
2: “YOU ARE UNABLE TO.”;
3: “NOTHING OBVIOUS HAPPENS.”;
4: “THAT WOULD BE LESS THAN COURTEOUS.”;
5: print (The) actor, " PULLS ", (the) x1, “.^”;
6: print (The) actor, " PUSHES ", (the) x1, “.^”;
7: print (The) actor, " TURNS “, (the) x1, “.^”;
}
! Push: see Pull
PushDir: switch (n) {
1: print (The) x1, " CANNOT BE PUSHED FROM PLACE TO PLACE.^”;
2: “THAT’S NOT A DIRECTION.”;
3: “NOT THAT WAY YOU CAN’T.”;
}
PutOn: switch (n) {
1: "YOU NEED TO BE HOLDING ", (the) x1, " BEFORE YOU CAN PUT “,
(itorthem) x1, " ON TOP OF SOMETHING ELSE.”;
2: “YOU CAN’T PUT SOMETHING ON TOP OF ITSELF.”;
3: "PUTTING THINGS ON “, (the) x1, " WOULD ACHIEVE NOTHING.”;
4: “YOU LACK THE DEXTERITY.”;
5: print "(FIRST TAKING “, (itorthem) x1, " OFF)^”; say__p = 0; return;
6: "THERE IS NO MORE ROOM ON ", (the) x1, “.”;
7: “DONE.”;
8: "YOU PUT ", (the) x1, " ON ", (the) second, “.”;
9: print (The) actor, " PUTS ", (the) x1, " ON ", (the) second, “.^”;
}
Quit: switch (n) {
1: print “PLEASE ANSWER YES OR NO.”;
2: print “ARE YOU SURE YOU WANT TO QUIT? “;
}
Remove: switch (n) {
1: if (x1 has pluralname) print “THEY ARE”; else print “IT IS”;
" UNFORTUNATELY CLOSED.”;
2: if (x1 has pluralname) print “BUT THEY AREN’T”; else print “BUT IT ISN’T”;
" THERE NOW.”;
3: “REMOVED.”;
}
Restart: switch (n) {
1: print "ARE YOU SURE YOU WANT TO RESTART? ";
2: “FAILED.”;
}
Restore: switch (n) {
1: “RESTORE FAILED.”;
2: “OK.”;
}
Rub: “YOU ACHIEVE NOTHING BY THIS.”;
Save: switch (n) {
1: “SAVE FAILED.”;
2: “OK.”;
}
Score: switch (n) {
1: if (deadflag) print "IN THAT GAME YOU SCORED "; else print "YOU HAVE SO FAR SCORED ";
print score, " OUT OF A POSSIBLE ", MAX_SCORE, ", IN “, turns, " TURN”;
if (turns ~= 1) print “S”;
return;
2: “THERE IS NO SCORE IN THIS STORY.”;
3: print ", EARNING YOU THE RANK OF ";
}
ScriptOff: switch (n) {
1: “TRANSCRIPTING IS ALREADY OFF.”;
2: “^END OF TRANSCRIPT.”;
3: “ATTEMPT TO END TRANSCRIPT FAILED.”;
}
ScriptOn: switch (n) {
1: “TRANSCRIPTING IS ALREADY ON.”;
2: “START OF A TRANSCRIPT OF”;
3: “ATTEMPT TO BEGIN TRANSCRIPT FAILED.”;
}
Search: switch (n) {
1: “BUT IT’S DARK.”;
2: "THERE IS NOTHING ON ", (the) x1, “.”;
3: print "ON ", (the) x1, " ";
WriteListFrom(child(x1), ENGLISH_BIT+TERSE_BIT+CONCEAL_BIT+ISARE_BIT);
“.”;
4: “YOU FIND NOTHING OF INTEREST.”;
5: "YOU CAN’T SEE INSIDE, SINCE ", (the) x1, " “, (isorare) x1, " CLOSED.”;
6: print_ret (The) x1, " “, (isorare) x1, " EMPTY.”;
7: print "IN ", (the) x1, " ";
WriteListFrom(child(x1), ENGLISH_BIT+TERSE_BIT+CONCEAL_BIT+ISARE_BIT);
“.”;
8: print (The) actor, " SEARCHES ", (the) x1, “.^”;
}
SetTo: "NO, YOU CAN’T SET “, (thatorthose) x1, " TO ANYTHING.”;
Show: switch (n) {
1: “YOU AREN’T HOLDING “, (the) x1, “.”;
2: print_ret (The) x1, " “, (isorare) x1, " UNIMPRESSED.”;
}
Sing: “YOUR SINGING IS ABOMINABLE.”;
Sleep: “YOU AREN’T FEELING ESPECIALLY DROWSY.”;
Smell: “YOU SMELL NOTHING UNEXPECTED.”;
#Ifdef DIALECT_US;
Sorry: “OH, DON’T APOLOGIZE.”;
#Ifnot;
Sorry: “OH, DON’T APOLOGISE.”;
#Endif;
Squeeze: switch (n) {
1: “KEEP YOUR HANDS TO YOURSELF.”;
2: “YOU ACHIEVE NOTHING BY THIS.”;
3: print (The) actor, " SQUEEZES “, (the) x1, “.^”;
}
Strong: “REAL ADVENTURERS DO NOT USE SUCH LANGUAGE.”;
Swing: “THERE’S NOTHING SENSIBLE TO SWING HERE.”;
SwitchOff: switch (n) {
1: print_ret (ctheyreorthats) x1, " NOT SOMETHING YOU CAN SWITCH.”;
2: print_ret (ctheyreorthats) x1, " ALREADY OFF.”;
3: “YOU SWITCH “, (the) x1, " OFF.”;
4: print (The) actor, " SWITCHES “, (the) x1, " OFF.^”;
}
SwitchOn: switch (n) {
1: print_ret (ctheyreorthats) x1, " NOT SOMETHING YOU CAN SWITCH.”;
2: print_ret (ctheyreorthats) x1, " ALREADY ON.”;
3: "YOU SWITCH “, (the) x1, " ON.”;
4: print (The) actor, " SWITCHES “, (the) x1, " ON.^”;
}
Take: switch (n) {
1: “TAKEN.”;
2: “YOU ARE ALWAYS SELF-POSSESSED.”;
3: "I DON’T SUPPOSE “, (the) x1, " WOULD CARE FOR THAT.”;
4: print "YOU’D HAVE TO GET ";
if (x1 has supporter) print "OFF "; else print "OUT OF “;
print_ret (the) x1, " FIRST.”;
5: "YOU ALREADY HAVE ", (thatorthose) x1, “.”;
6: if (noun has pluralname) print "THOSE SEEM "; else print "THAT SEEMS ";
"TO BELONG TO ", (the) x1, “.”;
7: if (noun has pluralname) print "THOSE SEEM "; else print "THAT SEEMS ";
"TO BE A PART OF ", (the) x1, “.”;
8: print_ret (Cthatorthose) x1, " ", (isorare) x1,
“N’T AVAILABLE.”;
9: print_ret (The) x1, " ", (isorare) x1, “N’T OPEN.”;
10: if (x1 has pluralname) print "THEY’RE "; else print "THAT’S ";
“HARDLY PORTABLE.”;
11: if (x1 has pluralname) print "THEY’RE "; else print "THAT’S ";
“FIXED IN PLACE.”;
12: “YOU’RE CARRYING TOO MANY THINGS ALREADY.”;
13: print "(PUTTING ", (the) x1, " INTO “, (the) x2,
" TO MAKE ROOM)^”; say__p = 0; return;
14: "YOU CAN’T REACH INTO ", (the) x1, “.”;
15: "YOU CANNOT CARRY ", (the) x1, “.”;
16: print (The) actor, " PICKS UP ", (the) x1, “.^”;
}
Taste: “YOU TASTE NOTHING UNEXPECTED.”;
Tell: switch (n) {
1: “YOU TALK TO YOURSELF A WHILE.”;
2: “THIS PROVOKES NO REACTION.”;
}
Think: “WHAT A GOOD IDEA.”;
ThrowAt: switch (n) {
1: “FUTILE.”;
2: “YOU LACK THE NERVE WHEN IT COMES TO THE CRUCIAL MOMENT.”;
}
Tie: “YOU WOULD ACHIEVE NOTHING BY THIS.”;
Touch: switch (n) {
1: “KEEP YOUR HANDS TO YOURSELF!”;
2: “YOU FEEL NOTHING UNEXPECTED.”;
3: “IF YOU THINK THAT’LL HELP.”;
4: print (The) actor, " TOUCHES “, (himheritself) x1, “.^”;
5: print (The) actor, " TOUCHES YOU.^”;
6: print (The) actor, " TOUCHES ", (the) x1, “.^”;
}
! Turn: see Pull.
Unlock: switch (n) {
1: if (x1 has pluralname) print "THEY DON’T "; else print "THAT DOESN’T “;
“SEEM TO BE SOMETHING YOU CAN UNLOCK.”;
2: print_ret (ctheyreorthats) x1, " UNLOCKED AT THE MOMENT.”;
3: if (x1 has pluralname) print "THOSE DON’T "; else print "THAT DOESN’T ";
“SEEM TO FIT THE LOCK.”;
4: "YOU UNLOCK ", (the) x1, “.”;
5: print (The) actor, " UNLOCKS “, (the) x1, “.^”;
}
Verify: switch (n) {
1: “THE GAME FILE HAS VERIFIED AS INTACT.”;
2: “THE GAME FILE DID NOT VERIFY AS INTACT, AND MAY BE CORRUPT.”;
}
Wait: switch (n) {
1: “TIME PASSES.”;
2: print (The) actor, " WAITS.^”;
}
Wake: “THE DREADFUL TRUTH IS, THIS IS NOT A DREAM.”;
WakeOther:“THAT SEEMS UNNECESSARY.”;
Wave: switch (n) {
1: "BUT YOU AREN’T HOLDING ", (thatorthose) x1, “.”;
2: "YOU LOOK RIDICULOUS WAVING ", (the) x1, “.”;
3: print (The) actor, " WAVES ", (the) x1, “.^”;
}
WaveHands:“YOU WAVE, FEELING FOOLISH.”;
Wear: switch (n) {
1: "YOU CAN’T WEAR ", (thatorthose) x1, “!”;
2: "YOU’RE NOT HOLDING ", (thatorthose) x1, “!”;
3: "YOU’RE ALREADY WEARING ", (thatorthose) x1, “!”;
4: "YOU PUT ON ", (the) x1, “.”;
5: print (The) actor, " PUTS ON ", (the) x1, “.^”;
}
! Yes: see No.
];

-) instead of “Long Texts” in “Language.i6t”.

Rule for listing nondescript items:
let the domain be the location of the player;
if the domain is a room begin;
if the domain is the location begin;
say "YOU ";
otherwise;
say "IN [the domain] YOU ";
end if;
otherwise if the domain is a supporter;
say "ON [the domain] YOU ";
otherwise if the domain is an animal;
say "ON [the domain] YOU ";
otherwise;
say "IN [the domain] YOU ";
end if;
say "CAN [if the locale paragraph count is greater than 0]ALSO [end if]SEE “;
let the common holder be nothing;
let contents form of list be true;
repeat with list item running through marked for listing things begin;
if the holder of the list item is not the common holder begin;
if the common holder is nothing begin;
now the common holder is the holder of the list item;
otherwise;
now contents form of list is false;
end if;
end if;
if the list item is mentioned, now the list item is not marked for listing;
end repeat;
filter list recursion to unmentioned things;
if contents form of list is true and the common holder is not nothing begin;
list the contents of the common holder, as a sentence, including contents, giving brief inventory information, tersely, not listing concealed items, listing marked items only;
otherwise;
say “[a list of marked for listing things including contents]”;
end if;
if the domain is the location, say " HERE”;
say “.[paragraph break]”;
unfilter list recursion.

For printing a locale paragraph about a thing (called the item) (this is the capitalised use initial appearance in room descriptions rule):
if the item is not mentioned begin;
if the item provides the property initial appearance and the item is not handled and the initial appearance of the item is not “” begin;
increase the locale paragraph count by 1;
say “[initial appearance of the item]”;
say “[paragraph break]”;
if a locale-supportable thing is on the item begin;
repeat with possibility running through things on the item begin;
now the possibility is marked for listing;
if the possibility is mentioned begin;
now the possibility is not marked for listing;
end if;
end repeat;
say "ON [the item] ";
list the contents of the item, as a sentence, including contents, giving brief inventory information, tersely, not listing concealed items, prefacing with is/are, listing marked items only;
say “.[paragraph break]”;
end if;
now the item is mentioned;
end if;
end if;
continue the activity.

The capitalised use initial appearance in room descriptions rule is listed instead of the use initial appearance in room descriptions rule in the for printing a locale paragraph about rulebook.

Definition: a thing (called the item) is locale-supportable if the item is not scenery and the item is not mentioned and the item is not undescribed.

For printing a locale paragraph about a thing (called the item) (this is the capitalised describe what’s on scenery supporters in room descriptions rule):
if the item is [not undescribed and the item is] scenery and the item does not enclose the player begin;
if a locale-supportable thing is on the item begin;
set pronouns from the item;
repeat with possibility running through things on the item begin;
now the possibility is marked for listing;
if the possibility is mentioned begin;
now the possibility is not marked for listing;
end if;
end repeat;
increase the locale paragraph count by 1;
say "ON [the item] ";
list the contents of the item, as a sentence, including contents, giving brief inventory information, tersely, not listing concealed items, prefacing with is/are, listing marked items only;
say “.[paragraph break]”;
end if;
end if;
continue the activity.

The capitalised describe what’s on scenery supporters in room descriptions rule is listed instead of the describe what’s on scenery supporters in room descriptions rule in the for printing a locale paragraph about rulebook.

Rule for printing the name of something (called the chosen item):
say the printed name of the chosen item in upper case.

Rule for printing the plural name of something (called the chosen item):
say the printed name of the chosen item in upper case.

Rule for printing the name of a room (called the chosen room):
say the printed name of the chosen room in upper case.

Rule for printing the plural name of a room (called the chosen room):
say the printed name of the chosen room in upper case.

The Testing Room is A Room. The table is an enterable supporter in the testing room. The box is an enterable locked container in the testing room. The map is in the box. The chocolate cake is on the table. The chocolate cake is edible. The key is on the table. The key unlocks the box.[/code][/spoiler]

The brute force method is actually not as arduous as it seems since most of the messages are all located in the same code section. Also, you can speed up the process considerably by using regex, especially since using regex alone makes it a good solution!

Hope this helps.

Yet another alternative, if you use Glulx rather than Z-code, is filter IO:Include (- [ uppercase_filter character; glk_put_char_uni(glk_char_to_upper(character)); ]; -). To force uppercase: (- @setiosys 1 uppercase_filter; -). A startup rule (this is the always force uppercase rule): force uppercase.

Three solutions! Thanks!

The brute force method looks scary since I don’t know I6 code.
However, it has the advantage that I can also change the default messages to ones that fit my game at the same time.
Does this cover every single message or is it just an example?
Is there memory penalty for such a large block of code?

The Glulx method is simpler, no question.
Another advantage of the Glulx method is that it also changes the banner text to capitals which the brute force method seems to miss.
Is there any way to capitalise the banner with the brute force method?

Thanks again, this really helps.

No need to be scared. :sunglasses: As long as you just substitute text inside double quotes, you’re not messing with the way the game functions only with the printed output.

It’s all the messages of that kind. With the brute force method, you’ve got write code for every single one of these messages whether you change them or not. (You can of course just copy and paste climbingstar’s post). To change just a few of the messages download, install, and include one of the Inform 7 extensions Default Messages by Ron Newcomb or Custom Library Messages by Ron Newcomb (they replace the older one’s of the same names by David Fisher).

No, these code blocks replace equally large block of codes that already exist.

Yes, there is. But Inform is sprinkled through with small pieces of text printed from different places in the code (both in I6 code and in I7 code). Using the brute force method, it’s very easy to miss one text string somewhere (and some trouble of locating it). But – you can easily combine the methods, using the Glulx method to change everything to upper case and the brute force method to change the wording of messages.

I’ve found a way to capitalise the banner text:

The new-banner-text is an indexed text that varies. new-banner-text is "[banner text]". The capitalised display banner rule is listed instead of the display banner rule in the startup rulebook. This is the capitalised display banner rule: say "[new-banner-text in upper case]".
Still working on this, however:

>EAT
WHAT DO YOU WANT TO eat?

The Glulx method is certainly more foolproof.
My desire to use the Z-machine is just because the memory limitations force me to focus.

By the way, thanks very much to climbingstar for that big chunk of code - I hope you didn’t capitalise all that stuff by hand!

Since the first version had some messages that weren’t completely capitalised, I’ve given it another shot and come up with this.

[code]“TEST” by CLIMBING STARS

Include Uppercase by Climbing Stars.

The story headline is “AN INTERACTIVE FICTION”.

The Testing Room is A Room. The table is an enterable supporter in the testing room. The box is an enterable locked container in the testing room. The map is in the box. The chocolate cake is on the table. The chocolate cake is edible. The key is on the table. The key unlocks the box.[/code]

I’ve put the working code into an extension, so it shouldn’t bulk the code out. You’ll need “Text Capture by Eric Eve” for it to work, which you can find here.

This method removes the bold text from the bits that should be bold in the banner. Fortunately, you can capitalise it and keep the bold text by simply changing the text in the I6 code. It’s in the extension code.

No, I used regular expressions to do most the work. They come in extremely handy those regular expressions!

Hope this helps.
Uppercase.i7x (49.7 KB)

Aha - I too have been experimenting with Text Capture so it’s good to know I have been on the right track.

In my version I start capturing text at the start of the action-processing rules and then print it at the end of the every turn rules (and catch the parser errors as well).

Code:

[spoiler]Include Text Capture by Eric Eve

[This buffer size seems to prevent any errors.]

Use maximum capture buffer length of at least 1024.

To print captured text:
let T be indexed text;
now T is “[captured text]”;
say T in upper case;

[Startup text]

The caps display banner rule is listed instead of the display banner rule in the startup rulebook.
This is the caps display banner rule:
start capturing text;
say “[banner text]”;
stop capturing text;
print captured text;

The caps initial room description rule is listed instead of the initial room description rule in the startup rulebook.
This is the caps initial room description rule:
start capturing text;
try looking;
stop capturing text;
print captured text;

[Main capture routine]

The start capturing output rule is listed first in action-processing rules.
This is the start capturing output rule: start capturing text;

The stop capturing and print output rule is listed last in every turn rules.
This is the stop capturing and print output rule:
stop capturing text;
print captured text;

[Parser errors]

Before printing a parser error:
start capturing text.

After printing a parser error:
stop capturing text;
print captured text;[/spoiler]

This makes all text caps, even if it is not written in caps in the source.
However, like you say it unboldens bold text.
For my project this is OK because I’m going for a retro look.

My version doesn’t capture everything so quite a few default messages have to be capitalised with the Default Messages extension (notably the error message when you just type GO).

Also, I notice that a couple of things have escaped your extension:

That last one even evades my code …
Sorry, I hope that doesn’t sound ungrateful.
I’ll probably end up using a mash-up of your code and the Text Capture routines.

Many thanks.

Actually, I left this one out deliberately because you can easily capitalise those bits by captalising the first line of your code and defining a story headline in capitals, like so.

It’s much better this way.

It turns out I botched up the I6 code for this bit by replacing the wrong bit of code through a typo. I’ve redone this bit using I7 code rather than I6 code.

They’ve hard coded the text here rather than use the library messages, presumably so that amusing a victorious player works. This should be capitalised now.

Hope this helps.
Uppercase.i7x (50.2 KB)

Awesome, that works perfectly.

Incidentally, if you’re interested I was working on a pure I7 implementation.

It works by starting the capture when a rulebook starts and printing it when it ends:

[spoiler]Include Text Capture by Eric Eve

[This buffer size seems to prevent any errors.]

Use maximum capture buffer length of at least 1024.

[Printing the captured text in upper case.]

To output captured text:
stop capturing text;
say “[captured text]” in upper case;

[Capture and printing rules]

This is the start capturing rule: start capturing text.
This is the stop capturing and print rule: output captured text.

[Startup text]

The start capturing rule is listed first in the startup rulebook.
The stop capturing and print rule is listed last in the startup rulebook.

[Action-processing]

The start capturing rule is listed first in action-processing rules.
The stop capturing and print rule is listed last in action-processing rules.

[Every turn rules]

The start capturing rule is listed first in every turn rules.
The stop capturing and print rule is listed last in every turn rules.

[Asking which do you mean]

Before asking which do you mean: start capturing text.
After asking which do you mean: output captured text.

[Clarifying parser’s choice]

Before clarifying the parser’s choice of something: start capturing text.
After clarifying the parser’s choice of something: output captured text.

[Parser errors]

Before printing a parser error: start capturing text.
After printing a parser error: output captured text.

[Final question]

The start capturing rule is listed first in before handling the final question rules.
The stop capturing and print rule is listed after the print the final prompt rule in before handling the final question rules.[/spoiler]

This works for 90% of text - a few other bits and pieces need to be fixed with the Default Messages extension.

If you don’t mind losing text formatting then it’s another option since it’s quite a bit shorter than the I6 code, and you don’t have to capitalise any text you write yourself.