Futhark Quest Items (Replace the Triforce!)

SubmittedDecember 14, 2016

Featured Screenshot

Author

ZoriaRPG

Description

Are you tired of the Triforce as the main gimmick in ZC quests? Do you want a system that gives the player both the Triforce, and the items, invisibly, using a clever dynamic?

The 'Futhark' script set both gives the player the Triforce, and gives out items, by spelling out the names of Norse Gods, via collecting RUNE STONES, that are each individually marked with a single rune from the Elder Futhark.

Whenever you assemble enough runes that can be arranged to spell the name of a Norse god (as provided in the script), you will be given the corresponding item. When you collect all twenty-four (that you can divide up any way you wish, including 24 different levels, 12 levels with two each, or a standard eight levels, each with three RUNE STONES, the player is given the full Triforce, to pass any Triforce Check rooms.

I created this for MabusThedark, to use in his quest Saving Midgard, and I ultimately don't know if he will use it, but as you all probably know, all of my scripts are open-source, and I felt that this was complete, and usable enough to add to the database.

It's rather topical, but you can always modify it to suit your needs, or base other ideas on it. You could make any new set of magical trinkets, that combine to give the player the use of items, and entirely replace the normal Triforce Pieces, with some minor to moderate modifications to this script.

This includes a base global active script, with each component isolated into a function, plus one item script, used as a pick-up script to give a standard Triforce fanfare, complete with music, health & magic refills, and level exiting animation, using standard dummy item trickery.

Combine this with Bolt, or other weapon scripts, to make unique items, for a new style of adventure!

Script Setup Details

All set-up information is in the script file. The only required header is std.zh.

Script Contents

///////////////////////////////
/// FUTHARK.Z By: ZoriaRPG ///
////////////////////////////////////////////////////////////////////////
/// Dependencies: std.zh - NO OTHERS - v5.0 - 5th May, 2014 ///
////////////////////////////////////////////////////////////////////////
/// I designed this script for mabusTheDark, whether he uses it, ///
/// or not. The function is to make each rune of the Elder Futhark ///
/// (The Old Norse Runes, a collectible object, en lieu of Triforce ///
/// pieces. This means there are twenty-four 'quest objects, so to ///
/// help balance out a game, unless you want 24 dungeons with one ///
/// runestone each, twelve with two, you can make a standard quest ///
/// that has eight dungeons each, which three runestones. ///
/// ---------------------------------------------------------------- ///
/// When the player has all twenty-four rune-stones, the script set ///
/// automatically gives the player the whole triforce (L1-L8 pieces) ///
/// to satisfy standard Triforce Check Rooms. ///
/// ---------------------------------------------------------------- ///
/// In addition to this, the script is set up to allow a questmaker ///
/// to give out quest items, rather than as stabdard, by completing ///
/// names of the Elder Gods, such as Thor, by collecting the runes ///
/// that spell their name. In the case of Thor, you would need to ///
/// collect 'thurisaz' (th), 'othila' (o), and 'radio' (r), which ///
/// of course spell (Th)(o)(r). ///
/// ---------------------------------------------------------------- ///
/// You can set it up so that the player collects pieces in an order ///
/// that gives the player desired items, in a set sequence. While I ///
/// have pre-set items, for the names of gods, based on their powers ///
/// you cal re-assign them as you see fit. ///
/// ---------------------------------------------------------------- ///
/// If you wish, to ensure that players have access to items in the ///
/// case that your dungeon design makes it impossible to progress ///
/// without them, simply change and set the constants, to other ///
/// items of your choice. While I have tried to set these to items ///
/// that are not usually mandatory, such as upgrades (longbow, the ///
/// red candle, magic & health rings, and such, it also includes ///
/// nornmally mandatory items, such as the wand, magic book, and the ///
/// whistle. If those items are mandatory, you can simply place them ///
/// where needed, and ignore the code that enables them. ///
/// ---------------------------------------------------------------- ///
/// Alternatively, you can make L2, or L3 items that 'upgrade' the ///
/// nornal items, when the player collects the runes. ///
/// ---------------------------------------------------------------- ///
/// Some items are set to special constants, that are not normal ZC ///
/// items, including VolundSword (Volund is the Smith of the Gods), ///
/// bolt (usable with my bolt.z script set, I_Tyr, that you can set ///
/// to an appropriate item, and some others. i suggest making a ///
/// custom sword, or using the most powerful sword for Volund, and ///
/// you can require a minimal health level with some slight changes. ///
/// ---------------------------------------------------------------- ///
/// The script sets constants for the 'Runestone' items, in pairs: ///
/// THe first set, of real items, are the 'dummy' items that the ///
/// player will see on the subscreen. (THis allows displaying them ///
/// in a row, on the PASSIVE subscreen, rather than the normal ZC ///
/// placement on the ACTIVE subscreen. ///
/// ---------------------------------------------------------------- ///
/// You should set each of these to a unique item, and a unique item ///
/// class. The standard set-up assigns these to items 150-173, and ///
/// following this, you will need to set another 24 items up as TF ///
/// pieces, if you want a TF fanfare. This is an optional step, and ///
/// is only required if you want to play the TF music, cutscene, and ///
/// the health & magic refils that are normally used when the player ///
/// picks up a TF piece, and are utilised with an included pickup ///
/// script. See 'SETUP' for information on this. ///
/// ---------------------------------------------------------------- ///
/// The second set should, if used, be placed on another series of ///
/// items (another 24), all with the item class 'Triforce Piece', ///
/// and if you use these, you should set your dungeon levels all to ///
/// either Level 0, or to levels of 10 or higher. ///
////////////////////////////////////////////////////////////////////////

/////////////
/// SETUP ///
////////////////////////////////////////////////////////////////////////
/// Create either 24 items (if not uaing the TF fanfare, or 48 items ///
/// if you plan to use this feature. Assign a unique item class to ///
/// each item, or a single item class, with levels 1 to 24, and be ///
/// certain to set the Item override for each on the subscreen. ///
/// ---------------------------------------------------------------- ///
/// If using the TF fanfare, create twenty-four items with the ITEM ///
/// CLASS 'TRIFORCE PIECE', each with the same combo as its matching ///
/// RUNESTONE item. ///
/// ---------------------------------------------------------------- ///
/// For each of these, set the pickup script 'fakeRuneStoneGiveReal' ///
/// and in the D0 argument for each of them, set the item number for ///
/// the real RUNESTONE item. ///
/// ---------------------------------------------------------------- ///
/// For example,if your real FEHU stoneis item 150, and your FAKE ///
/// FEHU TRIFORCE CLASS item that matches it is item 174 (standard) ///
/// set the pickup script on the item with the TRIFOCE PIECE class ///
/// with the D0 argument D0 set to 150 (matching the real RUNESTONE. ///
/// ---------------------------------------------------------------- ///
/// Once you have set up your items, adjust the constants with the ///
/// actual ITEM NUMBERS fron the ITEM EDITOR. ///
/// ---------------------------------------------------------------- ///
/// For the special items (bolt, VolundSword, I_Tyr), either create ///
/// custom items (using existing, or new scripts, such as bolt.z), ///
/// or set these to normal items, if you prefer. ///
/// ---------------------------------------------------------------- ///
/// The DEFAULT ITEM NUMBERS start at ITEM 150. If you start adding ///
/// RUNESTONES (and TF CLASS DUPLICATES, should you elect to use ///
/// them, and start at item 150, then you do not need to modify the ///
/// CONSTANTS for the RUNESTONE ITEMS. ///
/// ---------------------------------------------------------------- ///
/// If you do use different numbers, you will need to modify the ///
/// pre-set ITEM CONSTANTS to match the item numbers in the editor. ///
/// ---------------------------------------------------------------- ///
/// Note that the RUNESTONES 'PERTH' and 'KAUNAN' are not tied to ///
/// the names of the Norse gods in this script, but if you wish, you ///
/// can add other names (such as Loki, to use 'KAUNAN', connected ///
/// to additional code that you muat add to enable giving out items ///
/// for these other god-names. ///
/// ---------------------------------------------------------------- ///
/// The RUNESTONES 'PERTH' and 'KAUNAN' are still required to pass a ///
/// TRIFORCE CHECK ROOM, so it may be prudent to give these last, ///
/// unless you assign them to a god name. ///
////////////////////////////////////////////////////////////////////////

//import "std.zh" //Disable this if you already call to import this header.

//Set these numeric values to the Item Editor values of
//The matching Runestone items. For example, if the item
//editor value of the runestone fehu is 160, change the value fron 150
//to 160, and change each other value accordingly.

//Not used at present:
// perth
// kaunan

////////////////////////////////
/// REAL RUNESTONE CONSTANTS ///
////////////////////////////////////////////////////////////////////////
/// These set the constants for the item numbers (in the ITEM EDITOR ///
/// panel) that are used by the RUNESTONES that have CUSTOM CLASSES. ///
/// ---------------------------------------------------------------- ///
/// Change these to match the actual items of the RUNESTONES that ///
/// you create, and either set each to a unique ITEM CLASS, or to a ///
/// UNIQUE LEVEL. If you use UNIQUE CLASSES for each, you need only ///
/// set the ITEM CLASS on either your PASSIVEItem[fehu] == true
&& Link->Item[uruz] == true
&& Link->Item[thurisaz] == true
&& Link->Item[ansuz] == true
&& Link->Item[radio] == true
&& Link->Item[kaunan] == true
&& Link->Item[gebo] == true
&& Link->Item[wunjo] == true
&& Link->Item[hagalaz] == true
&& Link->Item[nuadiz] == true
&& Link->Item[isaz] == true
&& Link->Item[jera] == true
&& Link->Item[eihwaz] == true
&& Link->Item[perth] == true
&& Link->Item[algiz] == true
&& Link->Item[sowilo] == true
&& Link->Item[teiwaz] == true
&& Link->Item[berkanan] == true
&& Link->Item[ehwaz] == true
&& Link->Item[mannaz] == true
&& Link->Item[laguz] == true
&& Link->Item[injwaz] == true
&& Link->Item[othila] == true
&& Link->Item[dagaz] == true ) {
SetLevelItem(1, LI_TRIFORCE, true);
SetLevelItem(2, LI_TRIFORCE, true);
SetLevelItem(3, LI_TRIFORCE, true);
SetLevelItem(4, LI_TRIFORCE, true);
SetLevelItem(5, LI_TRIFORCE, true);
SetLevelItem(6, LI_TRIFORCE, true);
SetLevelItem(7, LI_TRIFORCE, true);
SetLevelItem(8, LI_TRIFORCE, true);
}
}

/////////////////////////
/// RUNESTONE LETTERS ///
////////////////////////////////////////////////////////////////////////
/// This function assigns 'letters' to each RUNESTONE, to use with ///
/// the function godNames(); ///
////////////////////////////////////////////////////////////////////////

void runeStoneLetters(){
if ( Link->Item[fehu] == true ) {
rune_fehu = true;
}
if ( Link->Item[uruz] == true ) {
rune_uruz = true;
}
if ( Link->Item[thurisaz] == true ) {
rune_thurisaz = true;
}
if ( Link->Item[ansuz] == true ) {
rune_ansuz = true;
}
if ( Link->Item[radio] == true ) {
rune_radio = true;
}
if ( Link->Item[kaunan] == true ) {
rune_kaunan = true;
}
if ( Link->Item[gebo] == true ) {
rune_gebo = true;
}
if ( Link->Item[wunjo] == true ) {
rune_wunjo = true;
}
if ( Link->Item[hagalaz] == true ) {
rune_hagalaz = true;
}
if ( Link->Item[nuadiz] == true ) {
rune_nuadiz = true;
}
if ( Link->Item[isaz] == true ) {
rune_isaz = true;
}
if ( Link->Item[jera] == true ) {
rune_jera = true;
}
if ( Link->Item[eihwaz] == true ) {
rune_eihwaz = true;
}
if ( Link->Item[perth] == true ) {
rune_perth = true;
}
if ( Link->Item[algiz] == true ) {
rune_algiz = true;
}
if ( Link->Item[sowilo] == true ) {
rune_sowilo = true;
}
if ( Link->Item[teiwaz] == true ) {
rune_teiwaz = true;
}
if ( Link->Item[berkanan] == true ) {
rune_berkanan = true;
}
if ( Link->Item[ehwaz] == true ) {
rune_ehwaz = true;
}
if ( Link->Item[mannaz] == true ) {
rune_mannaz = true;
}
if ( Link->Item[laguz] == true ) {
rune_laguz = true;
}
if ( Link->Item[injwaz] == true ) {
rune_injwaz = true;
}
if ( Link->Item[othila] == true ) {
rune_othila = true;
}
if ( Link->Item[dagaz] == true ) {
rune_dagaz = true;
}
}

/////////////////
/// GOD NAMES ///
////////////////////////////////////////////////////////////////////////
/// This function sets up what RUNESTONES compose the names of gods ///
/// that you desire to use in the game, for giving out inventory ///
/// items to the player. Modify them as you wish, but be sure to set ///
/// up the letters for each from the runeStoneLetters(); function. ///
////////////////////////////////////////////////////////////////////////

void godNames(){
if ( rune_thurisaz == true
&& rune_othila == true
&& rune_radio == true )
{
thor = true;
}
if ( rune_othila == true
&& rune_dagaz == true
&& rune_isaz == true
&& rune_nuadiz == true )
{
odin = true;
}
if ( rune_fehu == true
&& rune_radio == true
&& rune_ehwaz == true
&& rune_algiz == true )
{
freyr = true;
}
if ( rune_wunjo == true
&& rune_othila == true
&& rune_laguz == true
&& rune_uruz == true
&& rune_nuadiz == true
&& rune_dagaz == true )
{
volund = true;
}
if ( rune_berkanan == true
&& rune_radio == true
&& rune_ansuz == true
&& rune_gebo == true
&& rune_isaz == true )
{
bragi = true;
}
if ( rune_hagalaz == true
&& rune_isaz == true
&& rune_laguz == true
&& rune_nuadiz == true)
{
hilin = true;
}
if ( rune_injwaz == true
&& rune_othila == true
&& rune_radio == true
&& rune_dagaz == true )
{
njord = true;
}
if ( rune_teiwaz == true
&& rune_algiz == true
&& rune_radio == true )
{
tyr = true;
}
if ( rune_ehwaz == true
&& rune_algiz == true
&& rune_radio == true )
{
eyr = true;
}
if ( rune_algiz == true
&& rune_gebo == true
&& rune_dagaz == true
&& rune_radio == true
&& rune_ansuz == true
&& rune_sowilo == true
&& rune_isaz == true
&& rune_laguz == true )
{
yggdrasil = true;
}
if ( rune_mannaz == true
&& rune_ansuz == true
&& rune_nuadiz == true
&& rune_isaz == true )
{
mani = true;
}
if ( rune_gebo == true
&& rune_ehwaz == true
&& rune_fehu == true
&& rune_isaz == true
&& rune_othila == true
&& rune_nuadiz == true )
{
gefion = true;
}
if ( rune_fehu == true
&& rune_radio == true
&& rune_ehwaz == true
&& rune_algiz == true
&& rune_jera == true
&& rune_ansuz == true )
{
freyja = true;
}
if ( rune_gebo == true
&& rune_uruz == true
&& rune_laguz == true
&& rune_wunjo == true
&& rune_ehwaz == true
&& rune_isaz == true )
{
gullveig = true;
}
if ( rune_wunjo == true
&& rune_othila == true
&& rune_radio == true )
{
vor = true;
}
if ( rune_hagalaz == true
&& rune_ehwaz == true
&& rune_isaz == true
&& rune_mannaz == true
&& rune_dagaz == true
&& rune_ansuz == true
&& rune_laguz == true )
{
heimdall = true;
}
if ( rune_isaz == true
&& rune_dagaz == true
&& rune_uruz == true
&& rune_nuadiz == true
&& rune_ansuz == true )
{
iduna = true;
}
if ( rune_ehwaz == true
&& rune_laguz == true
&& rune_isaz == true )
{
elli = true;
}
if ( rune_nuadiz == true
&& rune_jera == true
&& rune_othila == true
&& rune_radio == true
&& rune_dagaz == true )
{
njord = true;
}
if ( rune_sowilo == true
&& rune_othila == true
&& rune_laguz == true )
{
sol = true;
}
if ( rune_eihwaz == true
&& rune_gebo == true
&& rune_isaz == true
&& rune_radio == true )
{
aegir = true;
}
if ( rune_hagalaz == true
&& rune_ehwaz == true
&& rune_radio == true
&& rune_mannaz == true
&& rune_othila == true
&& rune_dagaz == true )
{
hermod = true;
}
}

/////////////////////////
/// ITEMS OF THE GODS ///
////////////////////////////////////////////////////////////////////////
/// This function sets up the items to give to the player, when the ///
/// player collects RUNESTONES with 'letters' corresponding to make ///
/// the name of any god. Letters are shared, so the 'thurisaz' (TH) ///
/// rune will be used in any god name that uses that RUNE. ///
////////////////////////////////////////////////////////////////////////

void itemsOftheGods(){
if ( volund == true && Link->Item[VolundSword] == false ) { //Master Smith of the Gods
Link->Item[VolundSword] = true;
}
if ( volund == true && Link->Item[I_DINSFIRE] == false ) { //Master Smith of the Gods
Link->Item[I_DINSFIRE] = true;
}
if ( thor == true && Link->Item[I_HAMMER] == false ) { //God of thunder, and warfare.
//Link->Item[bolt] == true;
Link->Item[I_HAMMER] = true;
}
if ( odin == true && Link->Item[I_LENS] == false ) { //Father god, the all-seeing.
Link->Item[I_LENS] = true;
}
if ( freyr == true && Link->Item[I_NAYRUSLOVE] == false ) { //Mother Goddess
Link->Item[I_NAYRUSLOVE] = true; //Set as nayru's Love
}
if ( bragi == true && Link->Item[I_WHISTLE] == false ) { //God of music.
Link->Item[I_WHISTLE] = true;
}
if ( hilin == true && Link->Item[I_NAYRUSLOVE] == false ) { //Goddess of Protection
Link->Item[I_NAYRUSLOVE] = true;
}
if ( njord == true && Link->Item[I_WEALTHMEDAL3] == false ) { //God of wealth.
Link->Item[I_WEALTHMEDAL3] = true;
}
if ( tyr == true && Link->Item[I_Tyr] == false ) { //God of war and skies.
Link->Item[I_Tyr] = true;
}
if ( eyr == true && Link->Item[I_HEARTRING2] == false ) { //Lesser goddess of life.
Link->Item[I_HEARTRING2] = true;
}
if ( yggdrasil == true && Link->Item[I_HEARTRING2] == false ) { //Goddes of Life, and The tree of Life
Link->Item[I_HEARTRING2] = true;
}
if ( mani == true && Link->Item[I_AMULET1] == false ) { //God of the moon.
Link->Item[I_AMULET1] = true;
}
if ( gefion == true && Link->Item[I_WHISPRING2] == false ) { //God of prosperity, and luck.
Link->Item[I_WHISPRING2] = true;
}
if ( freyja == true && Link->Item[I_WAND] == false ) { //Goddess of magic
Link->Item[I_WAND] = true;
}
if ( gullveig == true && Link->Item[I_MAGICRING2] == false ) { //God of sorcery
Link->Item[I_MAGICRING2] = true;
}
if ( vor == true && Link->Item[I_FARORESWIND] == false ) { //God of wisdom and lore.
//Link->Item[I_WAND] = true;
//Link->Item[I_BOOK] = true;
Link->Item[I_FARORESWIND] = true;
}
if ( heimdall == true && Link->Item[I_BOOK] == false ) { //God of lore, and education.
Link->Item[I_BOOK] = true;
//Link->Item[I_STONEAGONY] = true;
}
if ( iduna == true && Link->Item[I_HEARTRING3] == false ) { //Goddess of long life and eternal youth.
Link->Item[I_HEARTRING3] = true;
}
if ( elli == true && Link->Item[I_BRACELET3] == false ) { //God of strength, who westled Odin.
Link->Item[I_BRACELET3] = true;
}
if ( njord == true && Link->Item[I_BOW2] == false ) { //God of forests.
Link->Item[I_BOW2] = true;
}
if ( sol == true && Link->Item[I_CANDLE2] == false ) {
Link->Item[I_CANDLE2] = true;
}
if ( aegir == true && Link->Item[I_FLIPPERS] == false ) { //God of the sea.
Link->Item[I_FLIPPERS] = true;
}
if ( hermod == true && Link->Item[I_BOOTS] == false ) { //Messenger of the Gods.
Link->Item[I_BOOTS] = true;
}
}

///////////////////////////
/// GIVE REAL RUNESTONE ///
////////////////////////////////////////////////////////////////////////
/// Attach this item script to the TRIFORCE PIECE ITEM CLASS items ///
/// that match the real RUNESTONE items. This creates the Triforce ///
/// fanfare, and other effects, including refilling health & maigic, ///
/// playing the Triforce music, and exiting the level. ///
/// ---------------------------------------------------------------- ///
/// Using this is optional, if you wish to use these effects when ///
/// the player collects a RUNESTONE. ///
////////////////////////////////////////////////////////////////////////

item script fakeRuneStoneGiveReal {
void run(int runestone) {
item givenitem = Screen->CreateItem(runestone);
givenitem->X = Link->X;
givenitem->Y = Link->Y;
givenitem->Z = Link->Z;
}
}

ffc script rec_MovingPlatform
// You can pair this with any walkable FFC you want, and it will act as a platform that
// moves Link with it while he's standing on it, rather than the silly method of having
// to walk in time with it. 😀 Should work with any speeds in any directions, even diagonal!
// The D arguments aren't even needed. ^_^
{
void run()
{
int StoredX; // these variables hold the X,Y coordinates of the FFC one frame ago
int StoredY; //

while(true)
{
// compare the X,Y coordinates of the FFC with Link's at the START of its movement
if(RectCollision(CenterLinkX(), (CenterLinkY() + 4), CenterLinkX(), (CenterLinkY() + 4), Floor(this->X), Floor(this->Y), (Floor(this->X) + this->EffectWidth), (Floor(this->Y) + this->EffectHeight)))
{
// if Link is standing on it, adjust his X,Y coordinates the same amount
// as this FFC moved from the last frame to the next
Link->X += (this->X - StoredX);
Link->Y += (this->Y - StoredY);
}
// store the X,Y coordinates of the FFC at the END of its movement frame
StoredX = Floor(this->X);
StoredY = Floor(this->Y);

Waitframe(); // we don't want to forget this! XD
}
}
}

This entry has no reviews.

Recent Resources