Putting the 'role' back in role-playing games since 2002.
Donate to Codex
Good Old Games
  • Welcome to rpgcodex.net, a site dedicated to discussing computer based role-playing games in a free and open fashion. We're less strict than other forums, but please refer to the rules.

    "This message is awaiting moderator approval": All new users must pass through our moderation queue before they will be able to post normally. Until your account has "passed" your posts will only be visible to yourself (and moderators) until they are approved. Give us a week to get around to approving / deleting / ignoring your mundane opinion on crap before hassling us about it. Once you have passed the moderation period (think of it as a test), you will be able to post normally, just like all the other retards.

Incline Knights of the Chalice 2 - Editor & Module Creation

felipepepe

Codex's Heretic
Patron
Joined
Feb 2, 2007
Messages
17,274
Location
Terra da Garoa
We now have the editor in our hands, it's time to make some modules and try to figure out how this editor works.

This thread is for that, and I also began making a Google Docs file to serve as tutorial & to keep all the tips we collect: https://docs.google.com/document/d/16LKjIU2l-f5nVIqpxypGE3egq9iOO75PoFgm32CNqEQ/edit?usp=sharing

Feel free to leave a comment or suggestion in this thread or in the document itself.

So far all the modules and mods are being hosted here: https://www.nexusmods.com/knightsofthechalice2

Finally, some starter tips:
  • Left-mouse click adds, right-mouse click removes. There's only ONE CTRL+Z level, be careful.
  • KotC2 maps use a grid of squares, each 64x64 pixels. Your maps can have sizes from 1x1 squares to over 100x100 (don’t do this, it’s VERY heavy and unstable), but their height and width must always be a multiple of 64. E.g., a 16x16 square grid would be 1024x1024 pixels.
  • You can plan your map layout in the editor, then use 'Extract Tilemaps to JPEG' to export the layout and use it as foundation for a custom-made map on photoshop or whatever other software.
  • To add loot to a container or activable zone, you must use the 'Add items' or 'Add weapons & armor' tool, select what you want to add on the left-side list, hold CTRL and click on the container/activable zone. Then add a new script to it, using script #17.
  • If you edit an NPC and go to the 'Intelligence' tab, you can set its behavior towards the party and various scripts.
    • Dialogue Script is for when dialogue starts,
    • Death Script for when that NPC dies,
    • End of Fight Script for when a fight with it ends (including if he's an ally)
    • Tactics Script is what the NPC will try to do when combat starts (still respecting rules like initiative, spell slots and actions per turn)
    • Scene Scripts will play continuously DURING COMBAT, even if the NPC is dead. Things like every character taking damage per turn, or reinforcements appearing after X number of rounds.
    • Non-Combat Scripts will play continuously OUTSIDE COMBAT. Things like the NPC shouting stuff outside dialog, or patrolling.
  • You can use Activable zones to add new custom art/props into the map, then use scripts to hide or show it at a certain moment. E.g., a rock falling down and blocking a passage. Note that the art asset can and should be much bigger than the activable zone.
That's it, DISCUSS!
 

The Red Knight

Erudite
Joined
Apr 18, 2017
Messages
485
Some links to the main thread:
felipepepe explaining the Activable zones trick for hiding/showing parts of the map
felipepepe explaining how to create a monster arena

Quick guide for batch-processing custom tokens (that I CBB to paraphrase here; it's about replacing vanilla art but the same algorithms can be used for your custom stuff). Suggested 3rd party tools to use: XnConvert for batch-editing pictures and Bulk Rename Utility for batch-renaming of files.

Codex mods posted in the KotC2 thread and not necessarily up on the Nexus yet:
AdolfSatan's PlayerCharacter tokens pack (uses public domain art)
felipepepe's Classes art + PlayerCharacter tokens pack
The Red Knight's mods (square token replacement for all vanilla ones, token shadow replacement for square tokens, ignore the 3rd link, a giant square token pack with about 10000 files (you can put pics you want through one of the token makers below if you want the vanilla token shape)
Mod for ActingArrow.png (save the included pictures, rename the one you want to ActingArrow.png, replace the original file with it)
______________

Some 3rd party tools and resources that help with module-making:
Token Stamp - online token maker for quick adding of custom token border to tokens (batch mode toggle at the bottom). Recommended by Dickie
TokenTool - token maker program (64-bit) recommended by Darth Roxor
RPG Map Editor 2 - childishly easy-to-use P&P map editor with an option to export as 64x64 grid PNG (= compatible with KotC); available as an online tool or a downloadable 32/64-bit program (Windows but reportedly works using WINE too). Example1, Example2, In-game examples - you have to be careful with placement of some stuff that's implied to be above characters (trees), as it will all be in the background and NPC/PC tokens will walk on it like it's floor. Baked lights work surprisingly well with animated light sourced of KotC2 (in the first picture of in-game examples, the left torch has halo off, the right one has halo on).
Forgotten Adventures map-making assets, recommended by felipepepe
FRUA art assets, recommended by Dorateen
______________

Vanilla file structure, relevant stuff for both modding and module-making (pay attention to color/bit depth of images in different folders - if it differs from vanilla stuff, then it's very likely not going to show up in-game):
KotC2\Graphics\ClassIllustrations - 500x650 classes art, in case you'd want to mod the pictures with custom art
KotC2\Graphics\FramedIcons - 64x64x24bit PNG square images used during dialogues; vanilla ones are 99% copies of stuff in the Tokens subfolder (before it got cut into a round token). Filenames are mostly the same as token ones, sans -1, -2, etc. suffixes for token size, but some vanilla files have somewhat different names.
KotC2\Graphics\Items - 64x64x32bit PNG item art.
KotC2\Graphics\MapBackgrounds - don't use this folder, use the one inside your module instead. It does contain a few .PSD map examples if you want to take a look at them.
KotC2\Graphics\Sprites - 64x64x8bit PNGs; 3 separate pictures for each cardinal direction.
KotC2\Graphics\Tokens - 32bit PNGs with 64x64, 128x128, 196x196 and 256x256 dimensions; used by NPCs and can be chosen for each module
KotC2\Graphics\Tokens\PlayerCharacter - 64x64x32bit PNGs, selectable during player character creation, and in character sheet if you're changing the token to something else. Vanilla module-wise, a few NPCs use tokens from this folder instead of the main folder containing duplicates of those tokens.
KotC2\Graphics\Weapons - 64x64x32bit PNG weapon/armor/shield art.

KotC2\Modules\MODULE-NAME-HERE\CreatureTokens - same as Tokens folder for NPC tokens, except they will only show up for this particular module in the editor (and will make sharing your module easier). Same for other art/audio folders.
KotC2\Modules\MODULE-NAME-HERE\MapBackdrops - where you put 32bit PNGs to be used as map backgrounds, 1000x730 splash screens, or 1000x430 dialogue art.
______________

Other hints:

If you remove a token/art file from the game, it will just display nothing but remember the path to the file, so if you later put the file back in, it will show properly. PNG images with wrong color depth will be selectable too, but will show as empty/transparent until the depth is fixed. Missing settings in scripts, on the other hand, are likely to crash the game (e.g. forgetting to define the NPC for "move NPC" action).

You can navigate the token selector list by home/end keys (first/last token), page up/down keys (seems laggy), mouse wheel, and alphanumerics (you can't type the token's filename in, but pressing a given key will take you to the 1st/2nd/3rd token with filename starting with that letter/number).

Help Database's entry for Skills lists the race/class requirements for the skills that get used in dialogue skill checks (for when you're trying to give all classes a chance to shine, or don't plan on supporting certain races/classes in your module for story reasons and don't want to waste time adding checks for those).

To view props added to the map as something other than transparent green rectangles (they look like that with passability layer visible), select one of the templates in the menu bar to the left to hide the passability layer.

Scripts tend to let you pick the coordinates on map with a mouse click, and you can also place an NPC and read the coords from their stats sheet, so there's no need to count tiles yourself.

"Special" drop-down menu contains Creature/Script/Spell/etc. editors.

You can use red "Canvass" passability square to create the effect of your party being familiar with the location enough to know where they can go, but not knowing what they will currently find there. Example with visible walls at the bottom + some single-square elements (both also revealed on the minmap)
 

Dorateen

Arcane
Joined
Aug 30, 2012
Messages
4,332
Location
The Crystal Mist Mountains
felipepepe or The Red Knight have you found in the script editor a simple command that would check for an individual party member's ability score?

It looks like there is a built in strength check, as well as for combined party strength, even the party skill for the Heroic ability score feats.

But what if I just want to check for a character with Intelligence greater than 16

I haven't seen a way to set those variables and operator.
 

The Red Knight

Erudite
Joined
Apr 18, 2017
Messages
485
have you found in the script editor a simple command that would check for an individual party member's ability score?

It looks like there is a built in strength check, as well as for combined party strength, even the party skill for the Heroic ability score feats.

But what if I just want to check for a character with Intelligence greater than 16
61 - set variable to name of party member with *highest* *strength* (can be changed to other abilities)
54 - Set variable to *current hit points* (can be changed to strength and other abilities, before or after effects)

Example:
  • created variables "highest ability check (character)", "highest ability check (value)", "some index" (not sure what it is for).
  • add label here if the ability value can change mid-dialog (I wanted to have an option to quickly increase strength with a dialogue option for testing but haven't figured out how to add a value to existing value in a variable)
  • 61 - set variable "highest ability check (character)" to party member with *highest* *strength*
  • 54 - set variable "highest ability check (value)" to *strength after effects* of the character "highest ability check (character)", then set in variable "some index" the index of the associated modifier list, if any <- haven't tested if it's necessary to set the index variable too
  • show dialog stuff
  • add dialog answer "[strength 18] yes I can lift this stone" non-selectable if requires skill not available or gold insufficient, requiring "specified variable above or equal to specified number" (...) or variable "highest ability check (value)" equal/above/below *18*
  • display dialog and wait for answer
Couldn't select it with my test character with strength of 15, could select with a new one with 18 strength.
 

Darth Roxor

Royal Dongsmith
Staff Member
Joined
May 29, 2008
Messages
1,878,404
Location
Djibouti
Men,

Brace yourselves, for I've wasted the entire night to bring you the ULTIMATE in kustom KotC2 assets.

I present you, the DOWPAK

http://www.aliendwarfare.at/public/codexlp/dow/DoWpak.zip

It includes all Warhammer 40k Dawn of War 1 infantry units (and more) in token form, as well as what I assume is the FIRST EVER!! kotc2 voicepak, of Commander Boreale himself. You gotta swap in the boreale lines for the files under \kotc2\voice, though obviously you might wanna backup the originals first if you don't intend on staying with Boreale forever for some weird reason.
 

The Red Knight

Erudite
Joined
Apr 18, 2017
Messages
485
Lagole Gon is offering his artz for Codex modules:
- he can paint better stuff than vanilla graphics
- he might be able to draw IWD girls
- he doesn't do hentai (anymore (and never did))
- he is not into tales of feet wizards, either
 

Dorateen

Arcane
Joined
Aug 30, 2012
Messages
4,332
Location
The Crystal Mist Mountains
I'm pleased to get the first bit of reactivity working through the use of the Create Variable command. In the following example, this is the default conversation that pops up when the player clicks on the "talk to NPC" icon with Mugs the cook:
seN1cJK.jpg

The party then runs into the friendly Abbot Wordsmith.
UwiN3BP.jpg

Now the next time the characters talk to Mugs, they get a new dialogue option to ask about the Abbot.
jbDCQzR.jpg

It is a small thing, but important to get this functioning. The backbone of Hearkenwold's quest and story structure was accomplished largely through setting variables, and being able to call back, reference and replace if needed, these checks throughout the conversation system. Looks like I should be able to replicate this process with the KotC scripts.

edit: I fixed the way the name appears under Thespar's portrait to keep the default *creature name* from overlapping the dialogue box. That's why posting screenshots is helpful, as I catch details I hadn't noticed before.
 
Last edited:

felipepepe

Codex's Heretic
Patron
Joined
Feb 2, 2007
Messages
17,274
Location
Terra da Garoa
I've updated the guide with an explanation about the creature editor.

Just to double-check, the game really doesn't allow for "1d6+X" damage, it has to always be a die roll so instead of 1d6+3 all you can do is "1d6+3d1", correct?
 

The Red Knight

Erudite
Joined
Apr 18, 2017
Messages
485
Script to create a trader with multiple trade categories/inventories (e.g. blacksmith with 16 weapons and 16 armors):

Preparation:
* Create the MAIN_TRADER trader NPC, then duplicate him in the Creature Editor as many times as the number of additional inventories you want.
* Use the Equipment tab of each NPC to add stuff they sell. Preferably delete gold and set them to have no random items. The amount of non-stacking items won't display in-game but works (e.g. giving the trader 5 bastard swords will let the player buy 5 of them).
* If you already placed the main NPC on map before making duplicates, remove map locations from the duplicates as otherwise it will make them show up around the main NPC even if you don't see them on said map in the editor.
* If you want all his trade inventories to remain hidden (as in, not viewable through the stat screen's inventory preview) or you want to put something lootable on the main NPC, then make the number of duplicates equal to the number of trade screens you want and don't add any trade goods to the main NPC.


Script:
#66: Create label (*WHATEVER_LABEL*)
#23: Set dialog (*TRADER_TALKS_HERE*) from character (*MAIN_TRADER*) using...
#24: Add dialog answer (*TRADE_OPTION_1*) with...
>>> add all the other trade options you want
#24: Add dialog answer (*LEAVE*) with... <- option to stop talking, can be going back to label of the main dialogue tree instead
#29: Display dialog and wait for a click on a possible answer
#30: If selected answer (*TRADE_OPTION_1*) then
#122: Open inventory screen and start trading with character (*MAIN_TRADER*) <- or instead use the first duplicate trader if the main hasn't got trade goods
#67: Goto label (*WHATEVER_LABEL*)
#36: End if <- you can use "add/insert end if" buttons
>>> Select/click the four above lines (with scripts #30, #122, #67, #36), click "Copy selected lines" from the list to the right.
>>> Select the line with #36 End if, click "Paste after" from the list to the right.
>>> Select the new #30 If... and change TRADE_OPTION_1 to the next trade option you have.
>>> Select the new #122 Open inventory... and change MAIN_TRADER to the first duplicate.
>>> Repeat the above three steps for any other duplicate traders you have.
#30 If selected answer (*LEAVE*) then
#40: End script

In case there's another/easier way to create it, I haven't investigated further since this one worked.

Tip: Doesn't need to be NPC's dialogue script; works fine with just the area trigger nearby (like if you put the shopkeeper behind a counter).

Tip: If you want a custom dialogue icon within the module folder (like for the script #23), put it in either ItemIcons or WeaponIcons folder.

Tip: You can create new items from within the Equipment tab of NPCs (right-click on item, make changes, click Create New - it will appear on the item list, no refreshing/leaving the tab necessary).

Tip: You can't put NPCs on obstacle tiles, but you can place an NPC and then change their tile to an obstacle (in case you don't want players standing on them or they're supposed to block the passage).
________________

felipepepe Dorateen is there any way to limit traders to either buying or selling (e.g. I don't want players to sell any junk they find to a poor vegetable seller), or to select a price modifier (for having one greedy trader and another that offers a discount on everything)? For the latter I tried raising NPCs Charisma but it doesn't affect the prices.
 
Last edited:

CryptRat

Arcane
Developer
Joined
Sep 10, 2014
Messages
3,548
As a dev this thread is a bit depressing, working for years on your own engine to end up with a game which will be much worse than what could have been done in ten times less time than with KOTC 2 engine, but as a player it's very exciting, all this modding support could have been a waste of time but the editor seems to be quite functional so it was definitely not a waste of time.
 

Bester

⚰️☠️⚱️
Patron
Vatnik
Joined
Sep 28, 2014
Messages
10,992
Location
USSR
As a dev this thread is a bit depressing, working for years on your own engine to end up with a game which will be much worse
Jesus Christ man, maybe hire a programmer. KotC2 isn't exactly the Carmack level of engine.
 

Bester

⚰️☠️⚱️
Patron
Vatnik
Joined
Sep 28, 2014
Messages
10,992
Location
USSR
Oh please. It's 2d with portraits sliding around. What could be easier.
 

felipepepe

Codex's Heretic
Patron
Joined
Feb 2, 2007
Messages
17,274
Location
Terra da Garoa
felipepepe Dorateen is there any way to limit traders to either buying or selling (e.g. I don't want players to sell any junk they find to a poor vegetable seller), or to select a price modifier (for having one greedy trader and another that offers a discount on everything)? For the latter I tried raising NPCs Charisma but it doesn't affect the prices.
No, I haven't found a way either...

But you're saying that you can run a script that targets a NPC that's not placed in any map? That's VERY interesting!
 

Dorateen

Arcane
Joined
Aug 30, 2012
Messages
4,332
Location
The Crystal Mist Mountains
I'm in between learning and building right now, but I have an issue I should probably address sooner rather than later. In the Set dialogue command, I noticed that when selecting to display the framed icon, the hyperlink is pointing to the KotC2/Graphics/FramedIcon folder. When I click on the drop down to select a picture, I see no way of navigating to the module's directory. So I have had to put the custom portraits I want to use for NPCs into the game's graphics folder.

Obviously it works, but for distribution reasons, it means I would have to bundle a FramedIcons folder with all the art I'm using and instruct players to copy/merge/replace with the one in their KotC2 Graphics folder.

Did I mess up? Or is there some way to change the hyperlink in the set dialogue command for choosing framed icons? I can't seem to get it to locate the module folder.
 

The Red Knight

Erudite
Joined
Apr 18, 2017
Messages
485
But you're saying that you can run a script that targets a NPC that's not placed in any map? That's VERY interesting!
Yes.

Now I'm trying to make an item (tamed animal) that can be used in battle to summon a friendly creature NPC that unspawns after battle and if it's killed at any point then the item gets destroyed, but I seem to be unable to make an item that's activable in combat. Tried with summoning script only, with summoning script + custom does-nothing summoning spell (to see if it works as script use limit), just the custom spell, and even a normal, existing summon spell (double-checked with the enchanted lamp efreeti summon item to see if I'm forgetting to set something). Tried with different item types (object/consumable/etc.) and even applied a camp rest before combat, just in case it started used-up. In all cases there's no option to use it in combat (and one time I tried to use the script+combat_spell item version out of combat it crashed the game).

TL;DR, I want to make a custom battle-use item but no matter what I apply to it it doesn't show up as an option in combat.
________________
Did I mess up? Or is there some way to change the hyperlink in the set dialogue command for choosing framed icons? I can't seem to get it to locate the module folder.
Try this:
Tip: If you want a custom dialogue icon within the module folder (like for the script #23), put it in either ItemIcons or WeaponIcons folder.
Since you can also use item/weapon icons in dialogues, just "cheat" and put your customs in one of those folders since they are module-specific folders.

Might require making it 32bit instead of 24bit (since I use squares, which essentially makes the tokens and the framedicons look the same, I just copied the 32bit tokens in there and it worked). You can navigate that icon list with a/b/c/etc. keys too, so you can add some prefix letter to your custom icons and quickly jump to them on the list.

Edit: Ah, and it might be one of cases where the image/file list doesn't auto-refresh so if you put stuff in there while you have the module open and it doesn't show up, try exiting the editor and reopening the module, or closing the game and launching it again.

Pierre should add a module-specific framedicons folder in a patch, though.
 
Last edited:

Dorateen

Arcane
Joined
Aug 30, 2012
Messages
4,332
Location
The Crystal Mist Mountains
Thanks, The Red Knight that method works perfectly.

In more exciting news, I managed to get the first quest to show up in the journal. That one was a head-scratcher, I couldn't get it to trigger until I added the script command to play the localized Writing sound, following the example in Augury of Chaos.

2z7CaKH.jpg
 

The Red Knight

Erudite
Joined
Apr 18, 2017
Messages
485
What classes can use either cleric or wizard scrolls, again?
I'm hiding the trading screens for both behind [Religion] (bishop/cleric/monk) and [Arcana] (mage knight/sorcerer/wizard) checks, respectively, for reasons.

__________________________

Stuff that seems to be missing as an option and could/should be patched in:
- locked items, i.e. items that can't be removed from the slot they are in by means other than a script (e.g. a special armor piece that's tied to the character or needs to be worn in a specific location)
- a way to give AND equip items via script (like for forcing the above item onto a character)
- a way to check if a specific piece of equipment is equipped (e.g. a robe that acts as a disguise)

^^^ These I'm trying to bypass by forcing a slightly-penalizing permanent condition on character and checking for that instead. Could also go the route of giving said penalty to an armor and then forcing the player to put it on all characters that need it, manually (but then what if e.g. the player gives the item to a character I'm not checking for and equips it on them; would require various boring safety checks).

- a way to set the party leader with a script using the name stored in a variable?
- a way to modify a variable's value/text instead of overwriting it, for example to track the names of player characters I kill off one by one and then display them as a list, or to make a counter that can be +1ed with various scripts (surely there must be something? haven't found any yet though)
- a way to set the position of a character/NPC from the position stored in a variable (that could for example be set with a spell or use a character stored in another variable as the target to put the new NPC next to) <- for custom summoning spells/items (though there seem to be more obstacles preventing such summons)

... I wonder if I can count by throwing stackable junk into a not-placed NPC's inventory or by modifying their HP
thinking.png


__________________________

Rpguy
Minor bug in the creature/NPC editor:
- put some items into NPC's backpack
- drag one of the added items onto another (to switch places)
- now one of these two items doesn't show that on-hover name tooltip until you left-click on it



Also has this been reported/fixed in the current version?
Script #78: (*GIVE TO*) character (*NAME_FROM_VARIABLE*) the condition (*either NONCURABLE ABILITY REDUCTION or ABILITY REDUCTION*) with duration type (*PERMANENT*) number of rounds (*any value or 0*), origin (*either MADE_UP_NAME or NAME_FROM_VARIABLE or default/none*), caster level (*any value or 0*) and amount (*any value or 0*) <- crashes the game; tested on dexterity; while after that line I also petrify the target and remove petrification a bit later in the same script, it works fine with stuff like "True Seeing"

Giving "No Five Foot Step" or "Cannot Charge" condition (tried out of battle with PERMANENT duration , if that matters) through that does nothing (i.e. no crash but no such condition is applied). "Cannot Inflict AOOs" shows up, but it's too crippling for what I need.

Giving a player character a permanent "Object" condition generally crashes the game after the battle. Plus one time it removed the character, gave me control over the first NPC on the NPC list, and still crashed the game after about 5-6 seconds of me walking around with said NPC. But probably WAD in that you're not supposed to assign that to PCs.

Fake edit, "Move At Three Quarters Speed" seems to be working, so I guess I'll go with that. Custom conditions for marking characters for stuff would be nice, or at least some hardcoded condition or two just for that that have no effects attached to them.



Another that I haven't checked if it's been reported (might be WAD?):
Dropping something on the floor while trading and then picking it up closes the trader's part of inventory (but stays in character's inventory).



Also there is some bug in the editor where if you edit enough NPCs directly on the map, eventually all attempts to edit any NPC on the map will open up a stats window of one of the NPCs you edited previously. Opening the Special->Creature Editor screen, editing someone there(possibly, haven't tested without it), and saving-and-exiting the creature editor, fixes the problem (up until it occurs again).

Not sure how to recreate or what caused it. I had several NPCs with the same display name but different unique names, and I think in both cases it happened to me I may have changed the unique name from autogenerated template one to a more unique one (at least in the first case it happened after about 14th rename). Started relying on the creature list more for edits so I haven't seen it since.

__________________________

Whew, now my module can kill off all the monster races in the party, display a Fallout-y/AoD-y game over slide if that was all you had in the party (and another one if only some party members got killed), and pretend that kobolds are children wearing invisible baggy robes. ( requested by Tweed )
 

felipepepe

Codex's Heretic
Patron
Joined
Feb 2, 2007
Messages
17,274
Location
Terra da Garoa
Yeah, the whole party & formation thing is really limiting... it was the thing that cause the most issue when making the script for my monster arena, as every time you add someone to the party the game will display the formation screen, the player has the option to enable or disable that character AND the whole party will teleport into formation around the party leader.

Then there's issues like removing a party member that's set as avatar makes the party unable to move until you set up a new leader in the formation screen (you can script the screen to open, but not set the avatar/leader).

I wish Pierre had some sort of roadmap... we have no idea when the game is coming out on Steam, how much effort he'll put into improving the editor, if he still intends on editing the Augury of Chaos module, etc...
 

The Red Knight

Erudite
Joined
Apr 18, 2017
Messages
485
- a way to modify a variable's value/text instead of overwriting it
I reread the editor's help entry and I must've skipped over this one before:
cuFXnqW.png

So {used variable} = {variable 1} + 1 or {variable 1} + {variable 2} should be possible after all (but I'll try checking the NPC HP counter option too if I get the chance, might be useful for something). And I hope it won't crash from adding to the same variable I'm reading the value from.

Now if there also was something for {text 1} + {text 2} ...
Maybe if I store a limited number of possible text values as separate text variables, then assign them numeric values forming a sum-free sequence, then add a combination of the numeric values for text variables meeting IF checks and store that in a single number variable, then do a series of IF checks that unloads the added numbers and reads from corresponding text variables... or for less checking/less script list clutter, only IF checks for each text variable, with all possible addition values that include their assigned numeric value separated with slashes (reportedly an allowed input method).

Also
What classes can use either cleric or wizard scrolls, again?
I'm hiding the trading screens for both behind [Religion] (bishop/cleric/monk) and [Arcana] (mage knight/sorcerer/wizard) checks, respectively, for reasons.
is/should be:
Divine scrolls: Bishop/Champion/Cleric/Druid/Paladin/PsychicHealer/Ranger/Sorcerer/StormWarrior, but not Monk (i.e. [Religion] check is not that good for gating scroll access).
Arcane scrolls: MageKnight/Rogue/Sorcerer/Warlock/Wizard

If you want to learn from them:
Wizard Spells -> MageKnight/Sorcerer/Warlock/Wizard
Cleric Spells -> Bishop/Champion/Cleric/PsychicHealer/Sorcerer
Rogue Spells -> Rogue
Ranger Spells -> Ranger
Paladin Spells -> Paladin
Druid Spells -> Druid
______________

Another bug:
Picking up/purchasing a MAGIC SCROLL with a CAST SPELL UPON PER-DAY USE (created OBJECT item -> added spell -> changed to MAGIC SCROLL, since I wanted both the non-consumable scroll and the class restriction on using it) crashes the game.

And another:
Using F10 to find used scripts from the upper (commands) part of the script editor in the bottom list of possible commands works fine if the list is sorted by ID (#) but if it's sorted by "List of possible commands" then it instead jumps to where the script would be if sorted by ID (e.g. script #51 is on 51th position so it jumps to position 51 on the list of scripts; if it's sorted by list of possible commands/alphabetically, then it jumps to the 51th position which this time is script #21 "If already talked to character...").

This one might have already been reported/fixed:
Help list for Spells has "List of Bard Spells" unclickable (should link to Bard's class entry?)

_____________
How to ban specific class/race combos from the module (or penalize them in some other way) and annoy the player:
The first check block is for banning races/classes, the second check block is for penalizing races/classes, the three check blocks at the end are for banned races/classes only.

#51:
Create new variable: (*NUMBER_OF_PARTY_MEMBERS_CHECK*) <- this one will be used later on for checking if anyone survived
#51: Create new variable: (*PARTY_AVATAR_STATUS*)
#51: Create new variable: (*BANNED_CHARACTER_CHECK*)
#62: Set in variable (*NUMBER_OF_PARTY_MEMBERS_CHECK*) the party's (*NUMBER OF NON-PETRIFIED/NON-DEAD/NON-AWAY ACTIVE CHARACTERS*)
#62: Set in variable (*PARTY_AVATAR_STATUS*) the party's (*NAME OF THE AVATAR*)
#66: Create label (*START_BANNED_CHECK*)
>>> The first two scripts #51 and the two scripts #62 - for the variables NUMBER_OF_PARTY_MEMBERS_CHECK and PARTY_AVATAR_STATUS - are for banned races/classes only; not needed for only penalizing races/classes.

>>> The check below is for completely removing a character from the party:
#92: If the party includes at least one non-petrified / non-dead / non-away character of the class (*BANNED_CLASS_HERE*) and race (*BANNED_RACE_HERE*), record that character's name into variable (*BANNED_CHARACTER_CHECK*) and execute the following commands <- preferably check separately for classes and for races; you can check for whole race groups and for particular subraces.
#78: (*GIVE TO*) character (*{BANNED_CHARACTER_CHECK}*) the condition (*DEAD*) with duration type (*PERMANENT*) ... <- actually this line is likely not necessary but I didn't bother testing without it
#125: (*REMOVE*) as a party member the (*PERMANENT*) companion (*{BANNED_CHARACTER_CHECK}*)
#64: Goto label (*START_BANNED_CHECK*)
#36: End if
>>> Copy the above five lines (scripts #92, #78, #125, #64, #36) if you want to check for more races/classes.
>>> Select the line with #36 End if, click "Paste after" from the list to the right.
>>> Select the new #92 If the party includes... and change class and/or race to another one you want removed.
>>> Repeat the above two steps for each additional class, race or class+race combo that you want removed from the party.

>>> The check below is for marking/penalizing a character of given race/class instead of removing them from the party:
#92: If the party includes at least one non-petrified / non-dead / non-away character of the class (*PENALIZED_CLASS_HERE*) and race (*PENALIZED_RACE_HERE*), record that character's name into variable (*BANNED_CHARACTER_CHECK*) and execute the following commands <- reusing the variable
#78: (*GIVE TO*) character (*{BANNED_CHARACTER_CHECK}*) the condition (*INSERT_CONDITION_YOU_WANT*) with duration type (*PERMANENT*) ... and amount (*1*) <- check my previous post for conditions that didn't and did work; the "1" amount is likely not important and a leftover of me trying all sorts of things, feel free to check if it works with the default amount
#78: (*GIVE TO*) character (*{BANNED_CHARACTER_CHECK}*) the condition (*PETRIFIED*) with the duration type (*PERMANENT*) <- if AWAY condition works for you, use that one instead (I had mixed results with it, but it might be fixed now as a side effect of something that I recall getting patched in the Augury module) - though then again what happens if all party members are set to away?
#64: Goto label (*START_BANNED_CHECK*)
#36: End if
>>> Copy the above five lines (scripts #92, #78, #78, #64, #36) if you want to penalize more races/classes.
>>> Select the line with #36 End if, click "Paste after" from the list to the right.
>>> Select the new #92 If the party includes... and change class and/or race to another one you want penalized.
>>> (optionally) Select the first of the new #78 Give to... and change it to some other condition you want to penalize the class/race with.
>>> Repeat the above two+optional steps for each additional class, race or class+race combo that you want penalized.

#78:
(*REMOVE FROM*) character (*{ALL_PARTY_MEMBERS}*) the condition (*PETRIFIED*) with duration type (*PERMANENT*)
#62: Set in variable (*BANNED_CHARACTER_CHECK*) the party's (*NUMBER OF NON-PETRIFIED/NON-DEAD/NON-AWAY ACTIVE CHARACTERS*) <- reusing the variable again
>>> The script #78 is only for the penalized races/classes. The script #62 is only for the banned races/classes. If you're not doing both restrictions, only use one of these.

>>> The check below is for taking the player to the main menu if everyone got banned and removed:
#63: If variable (*BANNED_CHARACTER_CHECK*) (*IS EQUAL TO THE STRING OR VARIABLE*) (*0*) then
>>> Insert intended effect here; below an example for a custom game over slide:
#23: Set dialog (*CUSTOM_GAME_OVER_MESSAGE_HERE*) from character (**) ... and display image (*IMAGE_PUT_IN_MAPBACKDROPS_OF_THE_MODULE*)
#24: Add dialog answer (*WHATEVER_ANSWER_TO_CLOSE_THE_SLIDE_AND_GO_TO_MAIN_MENU*)
#29: Display dialog and wait for a click on a possible answer
#37: End game and bring back game menu
#36: End if

>>> The check below is for taking the player to the main menu if their avatar got banned and removed:
#127: If party includes the non-petrified / non-dead / non-away active character (*{PARTY_AVATAR_STATUS}*)
#35: Else
>>> Insert intended effect here; below an example for a custom game over slide:
#23: Set dialog (*CUSTOM_GAME_OVER_MESSAGE_MENTIONING_AVATAR_DEATH_HERE*) from character (**) ... and display image (*IMAGE_PUT_IN_MAPBACKDROPS_OF_THE_MODULE*)
#24: Add dialog answer (*WHATEVER_ANSWER_TO_CLOSE_THE_SLIDE_AND_GO_TO_MAIN_MENU*) <- if your think your game over message may sound ambiguous but don't want to sound overly 4th-wall-breaking, I went with "[Avatar] Die." answer.
#29: Display dialog and wait for a click on a possible answer
#37: End game and bring back game menu
#36: End if

>>> The check below is for notifying the player that some of the characters got banned and removed:
#63: If variable (*BANNED_CHARACTER_CHECK*) (*IS STRICTLY BELOW THE NUMBER*) (*{NUMBER_OF_PARTY_MEMBERS_CHECK}*) then
>>> Insert indended effect here; below an example for a message with a custom image to mask possible graphical weirdness of removed characters:
#23: Set dialog (*CUSTOM_NOTIFICATION_ABOUT_REMOVED_PARTY_MEMBERS_HERE*) from character (**) ... and display image (*IMAGE_PUT_IN_MAPBACKDROPS_OF_THE_MODULE*)
#24: Add dialog answer (*WHATEVER_ANSWER_TO_CLOSE_THE_MESSAGE*)
#29: Display dialog and wait for a click on a possible answer
>>> Point of reference for the mid-campaign check.
#36: End if

>>> If you want to notify the player some of his characters got penalized, put here a script #92 race/class check and show a message that that race or class got affected. If you want to remove the penalty at any point, use (not here) script #78 to remove the applied condition from all party members (no checks should be necessary for that).


To be more evil, paste this into random places in the module where it would make sense (entering any place that hates a particular race or class, meeting an NPC of race/class combo that's opposing them, etc.) so it may surprise mid-campaign any clever players who mod out the first check. Bonus points if you check immediately after a long battle. Though you'd have to pay attention if there were any changes to party composition (didn't test with split parties) or applied conditions (for the penalized characters) since the start of the module that could interfere with the script.

EDIT CHANGES:
- new variable at the beginning (PARTY_AVATAR_STATUS) + setting its status to avatar's name
- new check if the party leader is gone, after the check if everyone is gone (Party dead? Game over. Player's avatar dead? Still game over. Avatar survived but others died? Let the player continue)
- removed the formation screen call (see below)

Since at the start of the game the avatar = the leader, this solves the formation issue - but if you'd want to go with the idea of killing off some player characters mid-campaign, I guess you could try (haven't checked if actually works) adding these two lines at the beginning with the other variable creations:
#51: Create new variable: (*PARTY_LEADER_STATUS*)
#62: Set in variable (*PARTY_LEADER_STATUS*) the party's (*NAME OF THE PARTY LEADER*)
And then this check into the last check block (the one where only some people got removed), just before the #36 End if (see point of reference line):
#127: If the party includes the non-petrified / non-dead / non-away active character (*{PARTY_LEADER_STATUS}*)
#35: Else
#23: Set dialog (*CUSTOM_NOTIFICATION_THAT_THE_LEADER_NEEDS_TO_BE_REPLACED*) from character (**) ... and display image (*IMAGE_PUT_IN_MAPBACKDROPS_OF_THE_MODULE*)
#24: Add dialog answer (*WHATEVER_ANSWER_TO_CLOSE_THE_MESSAGE*) <- e.g. "Open Formation Screen."
#29: Display dialog and wait for a click on a possible answer
#66: Create label (*PARTY_LEADER_SELECTED_CHECK*)
#126: Display the Formation Screen and (*DO NOT ALLOW MAKING CHARACTERS ACTIVE AND INACTIVE*)
#62: Set in the variable (*PARTY_LEADER_STATUS*) the party's (*NAME OF THE PARTY LEADER*)
#65: If variable (*PARTY_LEADER_STATUS*) is (*EMPTY*) then
#67: Goto label (*PARTY_LEADER_SELECTED_CHECK*)
#36: End if
#36: End if <- if pasted into the marked spot, you should have three END IFs in total (two from this insert and the one you added this stuff before)

Emphasis on try. Not sure what counts as EMPTY variable (is it set to empty if it fails to find something? are removed characters still considered leaders somewhere in the engine and wrote into the variable?). If there is still a lingering name of the leader, maybe check for whether they are still dead after the formation screen and loop until they are alive?

____________

(for the record, my module will only check at the beginning in case someone didn't read the desciption)
A few "not sure if this should be like this" notes (after <- arrow) should probably be changed/removed/double-checked before pasting this into the google doc (plus the last line in the spoiler).
 
Last edited:

The Red Knight

Erudite
Joined
Apr 18, 2017
Messages
485
Updated the above script with a check if player's avatar got removed (= alternative game over which coincidentally removed the need for a formation screen call), and an untested suggestion on what to do if you remove a party leader when using that script during the campaign instead of at the start of it.

felipepepe Dorateen have you played around with #97 (Award XP to each PC) or compared it with Augury's scripts and their in-game effect? I wonder if it can be used to bypass XP scaling and farming (make all opponents give 0 XP, give out experience manually with end-of-combat scripts, ignore a bit awkward victory screen), for example for a module that has each single XP accounted for and levelling up happens more at specific story/progress points.
 

Dorateen

Arcane
Joined
Aug 30, 2012
Messages
4,332
Location
The Crystal Mist Mountains
I haven't reached that point yet, though I will need to award XP to characters soon. I might also have to look at reducing the XP for opponents for level pacing reasons.
 

The Red Knight

Erudite
Joined
Apr 18, 2017
Messages
485
Now if there also was something for {text 1} + {text 2} ...
So it seems the scripts are not as limited as I assumed and it's more that features lack documentation/tooltips and checking how things are done in the Augury may be necessary.
You can add new text while keeping old text into a variable by referencing the variable itself in the new value field and separating it from the new input with a comma:
jI8qq0d.png

Which seems logical in retrospect, but with some other scripts being very strict as to what input they accept (and might crash if that's ignored) and there being some separate commands for different types of stuff that could've been merged into a single universal command...
 

As an Amazon Associate, rpgcodex.net earns from qualifying purchases.
Back
Top Bottom