It would have to be a community effort.MaxRideWizardLord wrote:Will it be ported to gzdoom one day?
The assets probably wouldn't need a lot of work (though we are talking about hundreds of model definitions to be converted and thousands of actor definitions that need to be reviewed and possibly modified), but converting the code would probably be a huge undertaking, if even possible. Scattered Evil uses some ACS and lots of DECORATE, but the majority of the code is in two other languages: VavoomC which is a Vavoom feature and the custom conversation engine written exclusively for KoraxRPG that has its own syntax.
If anyone with knowledge of ZSCRIPT is interested into looking into this, below an example with the conversation script, which is an abstraction layer on top of VavoomC, allowing designers to create complex NPC conversations with very little programming knowledge and no need to touch actual gameplay code.
The NPC in the example buys quartz flasks from the player by the dozen. The price she pays and the maximum amount she is willing to buy depends on a matrix of the RPG Complexity and the game difficulty setting, only showing appropriate conversation options (i.e. offer to buy an artifact is hidden if the purchase limit has been reached or the player doesn't have the artifacts).
Code: Select all
//------------------------------------------------------------------------------
conitem k21202 21202
{
name "Amanda";
var WTBArtiHealth integer 6;
hello
{
say "Would you like to sell us some of your excess inventory?" f1whatcanidoforyoutoday;
}
//----
choice none "A dozen Quartz Flasks for 12 crowns."
if ( (Player.HasInventory( KRPGArtiHealth , 12 )) and (Player.HasInventory(ComplexityIdentifierOff)) )
{
Player.RemoveInventory( KRPGArtiHealth , 12 );
Player.GiveInventory( Coin , 12 );
say "Pleasure doing business. Got more to sell?" cointake;
}
choice none "A dozen Quartz Flasks for 15 crowns."
if ( (Player.HasInventory( KRPGArtiHealth , 12 )) and (Player.HasInventory(ComplexityIdentifierStandard)) and (Player.HasInventory(DifficultyIdentifierEasy)) )
{
Player.RemoveInventory( KRPGArtiHealth , 12 );
Player.GiveInventory( Coin , 15 );
say "Pleasure doing business. Got more to sell?" cointake;
}
choice none "A dozen Quartz Flasks for 12 crowns."
if ( (Player.HasInventory( KRPGArtiHealth , 12 )) and (Player.HasInventory(ComplexityIdentifierStandard)) and (Player.HasInventory(DifficultyIdentifierMedium)) )
{
Player.RemoveInventory( KRPGArtiHealth , 12 );
Player.GiveInventory( Coin , 12 );
say "Pleasure doing business. Got more to sell?" cointake;
}
choice none "A dozen Quartz Flasks for 9 crowns."
if ( (Player.HasInventory( KRPGArtiHealth , 12 )) and (Player.HasInventory(ComplexityIdentifierStandard)) and (Player.HasInventory(DifficultyIdentifierHard)) )
{
Player.RemoveInventory( KRPGArtiHealth , 12 );
Player.GiveInventory( Coin , 9 );
say "Pleasure doing business. Got more to sell?" cointake;
}
choice none "A dozen Quartz Flasks for 15 crowns."
if ( (Player.HasInventory( KRPGArtiHealth , 12 )) and (Player.HasInventory(ComplexityIdentifierOldschool)) and (WTBArtiHealth > 0) and (Player.HasInventory(DifficultyIdentifierEasy)) )
{
if (WTBArtiHealth is 1)
{
set WTBArtiHealth 0;
Player.RemoveInventory( KRPGArtiHealth , 12 );
Player.GiveInventory( Coin , 15 );
say "Thanks, but our stores are now full. Got something else to sell maybe?" cointake;
}
else if (WTBArtiHealth is 2)
{
set WTBArtiHealth 1;
Player.RemoveInventory( KRPGArtiHealth , 12 );
Player.GiveInventory( Coin , 15 );
say "Pleasure doing business. Got more to sell?" cointake;
}
else if (WTBArtiHealth is 3)
{
set WTBArtiHealth 2;
Player.RemoveInventory( KRPGArtiHealth , 12 );
Player.GiveInventory( Coin , 15 );
say "Pleasure doing business. Got more to sell?" cointake;
}
else if (WTBArtiHealth is 4)
{
set WTBArtiHealth 3;
Player.RemoveInventory( KRPGArtiHealth , 12 );
Player.GiveInventory( Coin , 15 );
say "Pleasure doing business. Got more to sell?" cointake;
}
else if (WTBArtiHealth is 5)
{
set WTBArtiHealth 4;
Player.RemoveInventory( KRPGArtiHealth , 12 );
Player.GiveInventory( Coin , 15 );
say "Pleasure doing business. Got more to sell?" cointake;
}
else if (WTBArtiHealth is 6)
{
set WTBArtiHealth 5;
Player.RemoveInventory( KRPGArtiHealth , 12 );
Player.GiveInventory( Coin , 15 );
say "Pleasure doing business. Got more to sell?" cointake;
}
else
{
say "Sorry, our stores are full. Got something else to sell maybe?" none;
}
}
choice none "A dozen Quartz Flasks for 12 crowns."
if ( (Player.HasInventory( KRPGArtiHealth , 12 )) and (Player.HasInventory(ComplexityIdentifierOldschool)) and (WTBArtiHealth > 0) and (Player.HasInventory(DifficultyIdentifierMedium)) )
{
if (WTBArtiHealth is 2)
{
set WTBArtiHealth 0;
Player.RemoveInventory( KRPGArtiHealth , 12 );
Player.GiveInventory( Coin , 12 );
say "Thanks, but our stores are now full. Got something else to sell maybe?" cointake;
}
else if (WTBArtiHealth is 4)
{
set WTBArtiHealth 2;
Player.RemoveInventory( KRPGArtiHealth , 12 );
Player.GiveInventory( Coin , 12 );
say "Pleasure doing business. Got more to sell?" cointake;
}
else if (WTBArtiHealth is 6)
{
set WTBArtiHealth 4;
Player.RemoveInventory( KRPGArtiHealth , 12 );
Player.GiveInventory( Coin , 12 );
say "Pleasure doing business. Got more to sell?" cointake;
}
else
{
say "Sorry, our stores are full. Got something else to sell maybe?" none;
}
}
choice none "A dozen Quartz Flasks for 9 crowns."
if ( (Player.HasInventory( KRPGArtiHealth , 12 )) and (Player.HasInventory(ComplexityIdentifierOldschool)) and (WTBArtiHealth > 0) and (Player.HasInventory(DifficultyIdentifierHard)) )
{
if (WTBArtiHealth is 3)
{
set WTBArtiHealth 0;
Player.RemoveInventory( KRPGArtiHealth , 12 );
Player.GiveInventory( Coin , 9 );
say "Thanks, but our stores are now full. Got something else to sell maybe?" cointake;
}
else if (WTBArtiHealth is 6)
{
set WTBArtiHealth 3;
Player.RemoveInventory( KRPGArtiHealth , 12 );
Player.GiveInventory( Coin , 9 );
say "Pleasure doing business. Got more to sell?" cointake;
}
else
{
say "Sorry, our stores are full. Got something else to sell maybe?" none;
}
}
//----
choice none "No, I just want to buy some stuff."
{
say "Macy handles that part of business." f1haveaniceday;
terminate;
}
choice none "Enough trading for now."
{
say "I'll be here if you change your mind." f1haveaniceday;
end;
}
}