Files
gtav-src/script/dev_ng/singleplayer/include/globals/shrink_globals.sch
T
2025-09-29 00:52:08 +02:00

126 lines
3.9 KiB
XML
Executable File

// shrink_globals.sch
//Location of each piece of data within its byte
CONST_INT CONST_ShrinkBrokePos 5
CONST_INT CONST_ShrinkSexPos 11
//Based on number of bits used for each piece of data
CONST_INT CONST_ShrinkBrokeMask 3
CONST_INT CONST_ShrinkNarrativeMask 31
CONST_INT CONST_ShrinkOpenWorldMask 2047
CONST_INT CONST_ShrinkSexMask 4095
// ***MAP OF SAVED DATA***
//
// BYTE0
// Bits 0-4: Last played narrative conversation
// Bits 5-6: Last played "out of cash" conversation
//
// BYTE1
// Bits 0-10: Used open world conversations
// Bits 11-22: Used sex conversations
//
// Design changes have reduced the need for save data.
// Could be optimized to save a byte, but we're pretty close to ship so leaving as-is. -DJ 24 May 2013
// RL Game
//aproximate in game time 2sec = 1 minute
// 2min = 1 hour
// 48min = 1 day
// 96min = 2 day
CONST_INT SHRINK_SEX_MEMORY_TIME 96*60*1000 //Time to check to discard old time stamps.
CONST_INT SHRINK_VIOLENCE_MEMORY_TIME 96*60*1000 //Time to check to discard old time stamps.
CONST_INT SHRINK_VIOLENCE_VEH_KILLS_MEMORY_TIME 300000 //Time to check to discard old vehicle kills time stamps.
// The enumerated list of unique sessions.
ENUM SHRINK_SESSION
//SHRINKSESSION_INVALID,
SHRINKSESSION_OFFICE_CHAOS,
SHRINKSESSION_OFFICE_EVIL,
SHRINKSESSION_PHONE_NEGATIVITY,
SHRINKSESSION_PHONE_FUCKED_UP,
SHRINKSESSION_OFFICE_ABANDONMENT,
//SHRINKSESSION_OFFICE_COUPLES,
SHRINKSESSIONS
ENDENUM
STRUCT ShrinkDataSaved
INT iByte0
INT iByte1
ENDSTRUCT
FUNC INT SHRINK_GET_LAST_NARRATIVE(ShrinkDataSaved &thisShrinkData)
RETURN thisShrinkData.iByte0 & CONST_ShrinkNarrativeMask
ENDFUNC
PROC SHRINK_SET_LAST_NARRATIVE(ShrinkDataSaved &thisShrinkData, INT iNarrative)
IF iNarrative < 0 OR iNarrative > 12
EXIT
ENDIF
thisShrinkData.iByte0 -= thisShrinkData.iByte0 & CONST_ShrinkNarrativeMask
thisShrinkData.iByte0 = thisShrinkData.iByte0 | iNarrative
ENDPROC
FUNC INT SHRINK_GET_LAST_BROKE_CONV(ShrinkDataSaved &thisShrinkData)
RETURN SHIFT_RIGHT(thisShrinkData.iByte0, CONST_ShrinkBrokePos) & CONST_ShrinkBrokeMask
ENDFUNC
PROC SHRINK_SET_LAST_BROKE_CONV(ShrinkDataSaved &thisShrinkData, INT iBroke)
IF iBroke < 0 OR iBroke > 3
EXIT
ENDIF
thisShrinkData.iByte0 -= thisShrinkData.iByte0 & SHIFT_LEFT(CONST_ShrinkBrokeMask, CONST_ShrinkBrokePos)
thisShrinkData.iByte0 = thisShrinkData.iByte0 | SHIFT_LEFT(iBroke, CONST_ShrinkBrokePos)
ENDPROC
FUNC BOOL SHRINK_IS_OPEN_WORLD_RESPONSE_USED(ShrinkDataSaved &thisShrinkData, INT iResponse)
IF iResponse < 0 OR iResponse > 11
RETURN FALSE
ENDIF
RETURN IS_BIT_SET(thisShrinkData.iByte1, iResponse)
ENDFUNC
PROC SHRINK_SET_OPEN_WORLD_RESPONSE_USED(ShrinkDataSaved &thisShrinkData, INT iResponse, BOOL bUsed)
IF iResponse < 0 OR iResponse > 11
EXIT
ENDIF
IF bUsed
SET_BIT(thisShrinkData.iByte1, iResponse)
ELSE
CLEAR_BIT(thisShrinkData.iByte1, iResponse)
ENDIF
ENDPROC
PROC SHRINK_CLEAR_OPEN_WORLD_RESPONSES(ShrinkDataSaved &thisShrinkData)
thisShrinkData.iByte1 -= thisShrinkData.iByte1 & CONST_ShrinkOpenWorldMask
ENDPROC
FUNC BOOL SHRINK_IS_SEX_RESPONSE_USED(ShrinkDataSaved &thisShrinkData, INT iResponse)
IF iResponse < 0 OR iResponse > 12
RETURN FALSE
ENDIF
iResponse += CONST_ShrinkSexPos
RETURN IS_BIT_SET(thisShrinkData.iByte1, iResponse)
ENDFUNC
PROC SHRINK_SET_SEX_RESPONSE_USED(ShrinkDataSaved &thisShrinkData, INT iResponse, BOOL bUsed)
IF iResponse < 0 OR iResponse > 12
EXIT
ENDIF
iResponse += CONST_ShrinkSexPos
IF bUsed
SET_BIT(thisShrinkData.iByte1, iResponse)
ELSE
CLEAR_BIT(thisShrinkData.iByte1, iResponse)
ENDIF
ENDPROC
PROC SHRINK_CLEAR_SEX_RESPONSES(ShrinkDataSaved &thisShrinkData)
thisShrinkData.iByte1 -= thisShrinkData.iByte1 & SHIFT_LEFT(CONST_ShrinkSexMask, CONST_ShrinkSexPos)
ENDPROC