mirror of
https://github.com/1dot13/gamedir.git
synced 2026-07-22 13:40:25 +02:00
* Merged GameDir from Development Trunk: Revision 4063 * ************************************************************ - Merged from SVN: https://81.169.133.124/source/ja2/branches/Wanne/JA2%201.13%20MP git-svn-id: https://ja2svn.mooo.com/source/ja2_v1.13_data@1257 4f8fa57e-7814-0410-bad4-adc449f26b7c
338 lines
10 KiB
Lua
338 lines
10 KiB
Lua
--[[
|
|
|
|
http://www.legion.zone.zg.pl/doku.php/modowanie/ja/art_ja_m_22_lua
|
|
|
|
**********************
|
|
** Global variables **
|
|
**********************
|
|
|
|
- giLairID
|
|
1 = Drassen
|
|
2 = Cambria
|
|
3 = Alma
|
|
4 = Grumm
|
|
|
|
|
|
***************
|
|
** Functions **
|
|
***************
|
|
|
|
- SectorEnemyControlled ( IDSector )
|
|
check if enemy controls sector
|
|
|
|
- SECTOR( SectorX, SectorY )
|
|
|
|
- CheckMercIsDead (ProfilID)
|
|
check merc is dead
|
|
|
|
- AffectAllTownsLoyaltyByDistanceFrom( iLoyaltyChange, sSectorX, sSectorY, bSectorZ )
|
|
|
|
- IncrementTownLoyaltyEverywhere( idLoyalty )
|
|
increment all town loyalty
|
|
|
|
- IncrementTownLoyalty ( idLoyalty )
|
|
increment town loyalty
|
|
|
|
- DecrementTownLoyalty ( idTown, idLoyalty )
|
|
decrement town loyalty
|
|
|
|
- DecrementTownLoyaltyEverywhere ( idLoyalty )
|
|
decrement all town loyalty
|
|
|
|
- SetTownLoyalty ( idTown, idLoyalty )
|
|
set town loyalty
|
|
|
|
|
|
**************
|
|
** Examples **
|
|
**************
|
|
|
|
if SectorEnemyControlled ( SECTOR(4,13) ) == false then
|
|
-- instructions
|
|
end
|
|
|
|
if SectorEnemyControlled ( SECTOR(4,13) ) == false then
|
|
-- instructions
|
|
else
|
|
-- instructions
|
|
end
|
|
|
|
if ( CheckMercIsDead (101) == true ) then
|
|
-- merc is dead
|
|
else
|
|
-- instructions
|
|
end
|
|
|
|
-- 1 * 500 = 500 = 4%
|
|
DecrementTownLoyaltyEverywhere ( 1 )
|
|
|
|
-- 10 * 500 = 5000 = 45%
|
|
IncrementTownLoyalty (10)
|
|
|
|
-- 20 * 500 = 10000 = 90%
|
|
DecrementTownLoyalty ( 2 , 20 )
|
|
|
|
-- 30 * 500 = 15000 = 100%
|
|
IncrementTownLoyaltyEverywhere (30)
|
|
|
|
-- 100 = 100%
|
|
SetTownLoyalty ( 1, 100 )
|
|
|
|
-- 30 = 30%
|
|
SetTownLoyalty ( 1, 30 )
|
|
|
|
EventGlobal =
|
|
{
|
|
GLOBAL_LOYALTY_BATTLE_WON = 0,
|
|
.
|
|
.
|
|
MY_GLOBAL_LOYALTY_13 = 13,
|
|
MY_GLOBAL_LOYALTY_14 = 14,
|
|
.
|
|
. .
|
|
MY_GLOBAL_LOYALTY_100 = 100,
|
|
}
|
|
|
|
]]
|
|
|
|
Profil =
|
|
{
|
|
MIGUEL = 57,
|
|
DOREEN = 139,
|
|
MARTHA = 109,
|
|
KEITH = 147,
|
|
YANNI = 108,
|
|
AUNTIE = 76,
|
|
MATT = 148,
|
|
JOEY = 90,
|
|
}
|
|
|
|
Town =
|
|
{
|
|
OMERTA = 1,
|
|
DRASSEN = 2,
|
|
ALMA = 3,
|
|
GRUMM = 4,
|
|
CAMBRIA = 6,
|
|
SANMONA = 7,
|
|
ESTONI = 8,
|
|
BALIME = 10,
|
|
MEDUNa = 11,
|
|
CHITZENA = 12,
|
|
}
|
|
|
|
-- gain pts per real loyalty pt
|
|
local GAIN_PTS_PER_LOYALTY_PT = 500
|
|
|
|
-- --- LOYALTY BONUSES ---
|
|
-- Omerta
|
|
local LOYALTY_BONUS_MIGUEL_READS_LETTER = (10 * GAIN_PTS_PER_LOYALTY_PT) -- multiplied by 4.5 due to Omerta's high seniment, so it's 45%
|
|
-- Drassen
|
|
local LOYALTY_BONUS_CHILDREN_FREED_DOREEN_KILLED = (10 * GAIN_PTS_PER_LOYALTY_PT) -- +50% bonus for Drassen -- Overhead.cpp
|
|
local LOYALTY_BONUS_CHILDREN_FREED_DOREEN_SPARED = (20 * GAIN_PTS_PER_LOYALTY_PT) -- +50% bonus for Drassen -- Overhead.cpp
|
|
-- Cambria
|
|
local LOYALTY_BONUS_MARTHA_WHEN_JOEY_RESCUED = (15 * GAIN_PTS_PER_LOYALTY_PT) -- -25% for low Cambria sentiment
|
|
local LOYALTY_BONUS_KEITH_WHEN_HILLBILLY_SOLVED = (15 * GAIN_PTS_PER_LOYALTY_PT) -- -25% for low Cambria sentiment
|
|
-- Chitzena
|
|
local LOYALTY_BONUS_YANNI_WHEN_CHALICE_RETURNED_LOCAL = (20 * GAIN_PTS_PER_LOYALTY_PT) -- +75% higher in Chitzena -- no used
|
|
local LOYALTY_BONUS_YANNI_WHEN_CHALICE_RETURNED_GLOBAL = (10 * GAIN_PTS_PER_LOYALTY_PT) -- for ALL towns!
|
|
-- Alma
|
|
local LOYALTY_BONUS_AUNTIE_WHEN_BLOODCATS_KILLED = (20 * GAIN_PTS_PER_LOYALTY_PT) -- Alma's increases reduced by half due to low rebel sentiment
|
|
local LOYALTY_BONUS_MATT_WHEN_DYNAMO_FREED = (20 * GAIN_PTS_PER_LOYALTY_PT) -- Alma's increases reduced by half due to low rebel sentiment
|
|
local LOYALTY_BONUS_FOR_SERGEANT_KROTT = (20 * GAIN_PTS_PER_LOYALTY_PT) -- Alma's increases reduced by half due to low rebel sentiment (Interface Dialogue.cpp)
|
|
-- Everywhere
|
|
local LOYALTY_BONUS_TERRORISTS_DEALT_WITH = ( 5 * GAIN_PTS_PER_LOYALTY_PT)
|
|
local LOYALTY_BONUS_KILL_QUEEN_MONSTER = (10 * GAIN_PTS_PER_LOYALTY_PT)
|
|
-- Anywhere
|
|
-- Loyalty bonus for completing town training
|
|
local LOYALTY_BONUS_FOR_TOWN_TRAINING = ( 2 * GAIN_PTS_PER_LOYALTY_PT ) -- 2% (Town Militia.cpp i Map Screen Interface Map.cpp)
|
|
|
|
EventGlobal =
|
|
{
|
|
-- There are only for distance-adjusted global loyalty effects. Others go into list above instead!
|
|
GLOBAL_LOYALTY_BATTLE_WON = 0,
|
|
GLOBAL_LOYALTY_BATTLE_LOST = 1,
|
|
GLOBAL_LOYALTY_ENEMY_KILLED = 2,
|
|
GLOBAL_LOYALTY_NATIVE_KILLED = 3,
|
|
GLOBAL_LOYALTY_GAIN_TOWN_SECTOR = 4,
|
|
GLOBAL_LOYALTY_LOSE_TOWN_SECTOR = 5,
|
|
GLOBAL_LOYALTY_LIBERATE_WHOLE_TOWN = 6,
|
|
GLOBAL_LOYALTY_ABANDON_MILITIA = 7,
|
|
GLOBAL_LOYALTY_GAIN_MINE = 8,
|
|
GLOBAL_LOYALTY_LOSE_MINE = 9,
|
|
GLOBAL_LOYALTY_GAIN_SAM = 10,
|
|
GLOBAL_LOYALTY_LOSE_SAM = 11,
|
|
GLOBAL_LOYALTY_QUEEN_BATTLE_WON = 12,
|
|
GLOBAL_LOYALTY_GRIZZLY_DEAD = 13,
|
|
}
|
|
|
|
|
|
function CheckConditionsForTriggeringCreatureQuest( sSectorX, sSectorY, bSectorZ )
|
|
|
|
local ubValidMines = 0
|
|
|
|
if ( newGAME_STYLE == 0 or iniENABLE_CREPITUS == 0 ) then
|
|
return -- No scifi, no creatures...
|
|
end
|
|
|
|
if ( giLairID ) then
|
|
return -- Creature quest already begun
|
|
end
|
|
|
|
-- Count the number of "infectible mines" the player occupies
|
|
|
|
-- SEC_D13
|
|
if SectorEnemyControlled ( SECTOR(4,13) ) == false then
|
|
ubValidMines = ubValidMines + 1
|
|
end
|
|
|
|
-- SEC_H8
|
|
if SectorEnemyControlled ( SECTOR(8,8) ) == false then
|
|
ubValidMines = ubValidMines + 1
|
|
end
|
|
|
|
-- SEC_I14
|
|
if SectorEnemyControlled ( SECTOR(9,14) ) == false then
|
|
ubValidMines = ubValidMines + 1
|
|
end
|
|
|
|
-- SEC_H3
|
|
if SectorEnemyControlled ( SECTOR(8,3) ) == false then
|
|
ubValidMines = ubValidMines + 1
|
|
end
|
|
|
|
if ( ubValidMines >= 3 ) then
|
|
InitCreatureQuest()
|
|
end
|
|
end
|
|
|
|
function HandleGlobalLoyaltyEvent( ubEventType, sSectorX, sSectorY, bSectorZ )
|
|
|
|
local iLoyaltyChange = 0
|
|
|
|
if ubEventType == EventGlobal.GLOBAL_LOYALTY_BATTLE_WON then
|
|
|
|
CheckConditionsForTriggeringCreatureQuest( sSectorX, sSectorY, bSectorZ )
|
|
|
|
iLoyaltyChange = 500
|
|
AffectAllTownsLoyaltyByDistanceFrom( iLoyaltyChange, sSectorX, sSectorY, bSectorZ )
|
|
|
|
elseif ubEventType == EventGlobal.GLOBAL_LOYALTY_QUEEN_BATTLE_WON then
|
|
|
|
CheckConditionsForTriggeringCreatureQuest( sSectorX, sSectorY, bSectorZ )
|
|
|
|
iLoyaltyChange = 1000
|
|
AffectAllTownsLoyaltyByDistanceFrom( iLoyaltyChange, sSectorX, sSectorY, bSectorZ )
|
|
|
|
elseif ubEventType == EventGlobal.GLOBAL_LOYALTY_BATTLE_LOST then
|
|
|
|
iLoyaltyChange = -750
|
|
AffectAllTownsLoyaltyByDistanceFrom( iLoyaltyChange, sSectorX, sSectorY, bSectorZ )
|
|
|
|
elseif ubEventType == EventGlobal.GLOBAL_LOYALTY_ENEMY_KILLED then
|
|
|
|
iLoyaltyChange = 50
|
|
AffectAllTownsLoyaltyByDistanceFrom( iLoyaltyChange, sSectorX, sSectorY, bSectorZ )
|
|
|
|
elseif ubEventType == EventGlobal.GLOBAL_LOYALTY_NATIVE_KILLED then
|
|
|
|
-- Note that there is special code (much more severe) for murdering civilians in the currently loaded sector.
|
|
-- This event is intended more for processing militia casualties, and the like
|
|
iLoyaltyChange = -50
|
|
AffectAllTownsLoyaltyByDistanceFrom( iLoyaltyChange, sSectorX, sSectorY, bSectorZ )
|
|
|
|
elseif ubEventType == EventGlobal.GLOBAL_LOYALTY_ABANDON_MILITIA then
|
|
|
|
-- It doesn't matter how many of them are being abandoned
|
|
iLoyaltyChange = -750
|
|
AffectAllTownsLoyaltyByDistanceFrom( iLoyaltyChange, sSectorX, sSectorY, bSectorZ )
|
|
|
|
elseif ubEventType == EventGlobal.GLOBAL_LOYALTY_GAIN_TOWN_SECTOR then
|
|
|
|
iLoyaltyChange = 500
|
|
AffectAllTownsLoyaltyByDistanceFrom( iLoyaltyChange, sSectorX, sSectorY, bSectorZ )
|
|
|
|
elseif ubEventType == EventGlobal.GLOBAL_LOYALTY_LOSE_TOWN_SECTOR then
|
|
iLoyaltyChange = -1000
|
|
AffectAllTownsLoyaltyByDistanceFrom( iLoyaltyChange, sSectorX, sSectorY, bSectorZ )
|
|
|
|
elseif ubEventType == EventGlobal.GLOBAL_LOYALTY_LIBERATE_WHOLE_TOWN then
|
|
|
|
iLoyaltyChange = 1000
|
|
AffectAllTownsLoyaltyByDistanceFrom( iLoyaltyChange, sSectorX, sSectorY, bSectorZ )
|
|
|
|
elseif ubEventType == EventGlobal.GLOBAL_LOYALTY_GAIN_MINE then
|
|
|
|
iLoyaltyChange = 1000
|
|
AffectAllTownsLoyaltyByDistanceFrom( iLoyaltyChange, sSectorX, sSectorY, bSectorZ )
|
|
|
|
elseif ubEventType == EventGlobal.GLOBAL_LOYALTY_LOSE_MINE then
|
|
|
|
iLoyaltyChange = -1500
|
|
AffectAllTownsLoyaltyByDistanceFrom( iLoyaltyChange, sSectorX, sSectorY, bSectorZ )
|
|
|
|
elseif ubEventType == EventGlobal.GLOBAL_LOYALTY_GAIN_SAM then
|
|
|
|
iLoyaltyChange = 250
|
|
AffectAllTownsLoyaltyByDistanceFrom( iLoyaltyChange, sSectorX, sSectorY, bSectorZ )
|
|
|
|
elseif ubEventType == EventGlobal.GLOBAL_LOYALTY_LOSE_SAM then
|
|
|
|
iLoyaltyChange = -250
|
|
AffectAllTownsLoyaltyByDistanceFrom( iLoyaltyChange, sSectorX, sSectorY, bSectorZ )
|
|
|
|
elseif ubEventType == EventGlobal.GLOBAL_LOYALTY_GRIZZLY_DEAD then
|
|
|
|
if ( CheckMercIsDead(3) == false ) then
|
|
iLoyaltyChange = 1000
|
|
AffectAllTownsLoyaltyByDistanceFrom( iLoyaltyChange, sSectorX, sSectorY, bSectorZ )
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
function HandleLoyaltyChangeForNPCAction( ubNPCProfileId )
|
|
|
|
-- Omerta loyalty increases when Miguel receives letter from Enrico
|
|
if ubNPCProfileId == Profil.MIGUEL then
|
|
IncrementTownLoyalty ( Town.OMERTA, LOYALTY_BONUS_MIGUEL_READS_LETTER )
|
|
end
|
|
|
|
-- Having freed the child labourers... she is releasing them herself!
|
|
if ubNPCProfileId == Profil.DOREEN then
|
|
IncrementTownLoyalty( Town.DRASSEN, LOYALTY_BONUS_CHILDREN_FREED_DOREEN_SPARED )
|
|
end
|
|
|
|
-- If Joey is still alive
|
|
if ubNPCProfileId == Profil.MARTHA then
|
|
if ( CheckMercIsDead(Profil.JOEY) == false ) then
|
|
IncrementTownLoyalty( Town.CAMBRIA, LOYALTY_BONUS_MARTHA_WHEN_JOEY_RESCUED )
|
|
end
|
|
end
|
|
|
|
-- Hillbilly problem solved
|
|
if ubNPCProfileId == Profil.KEITH then
|
|
IncrementTownLoyalty( Town.CAMBRIA, LOYALTY_BONUS_KEITH_WHEN_HILLBILLY_SOLVED )
|
|
end
|
|
|
|
-- Chalice of Chance returned to Chitzena
|
|
if ubNPCProfileId == Profil.YANNI then
|
|
|
|
IncrementTownLoyalty( Town.CHITZENA, LOYALTY_BONUS_YANNI_WHEN_CHALICE_RETURNED_LOCAL )
|
|
|
|
-- NOTE: This affects Chitzena,too, a second time, so first value is discounted for it
|
|
IncrementTownLoyaltyEverywhere( LOYALTY_BONUS_YANNI_WHEN_CHALICE_RETURNED_GLOBAL )
|
|
end
|
|
|
|
-- Bloodcats killed
|
|
if ubNPCProfileId == Profil.AUNTIE then
|
|
IncrementTownLoyalty( Town.ALMA, LOYALTY_BONUS_AUNTIE_WHEN_BLOODCATS_KILLED )
|
|
end
|
|
|
|
-- Brother Dynamo freed
|
|
if ubNPCProfileId == Profil.MATT then
|
|
IncrementTownLoyalty( Town.ALMA, LOYALTY_BONUS_MATT_WHEN_DYNAMO_FREED )
|
|
end
|
|
|
|
end |