git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@6368 e016b1c5-ed68-44aa-a2f7-31cac88cffde
138 lines
7.3 KiB
INI
138 lines
7.3 KiB
INI
// CubeScript survival mode in a nutshell:
|
|
//
|
|
// * All official maps support it.
|
|
// * Each map has a unique "zone" that the player must stay in, to continue playing.
|
|
// * Every "zone" is located somewhere other than the usual two bases.
|
|
// * When the player first enters the "zone", the timers/counters start.
|
|
// * If the player has not found the zone within the set timeframe, they are automatically teleported there.
|
|
// * If the player dies, or leaves the "zone" for too long of a duration, the game ends.
|
|
// * Total seconds survived, and total number of enemies killed during, are reported as stats when the game ends.
|
|
|
|
checkSurvAliases = [ loop csa (listlen $arg1) [ if (! (checkalias (at $arg1 $csa))) [ (at $arg1 $csa) = $arg2 ] ] ]
|
|
|
|
survResetAliases = "gotCheckPoint lastCheckPoint survIsFinished startedSurvival startedOBCount startPreSurvMillis startSurvMillis survKills survTeleported"
|
|
|
|
resetSurvAliases = [
|
|
loop rsa (listlen $survResetAliases) [ (at $survResetAliases $rsa) = 0 ]
|
|
checkSurvAliases survMap (rnd (listlen $defaultmaps))
|
|
checkSurvAliases survBotsToAdd 1; checkSurvAliases survDifficulty 0; checkSurvAliases survNumBots 12; checkSurvAliases survMaxBots 32; checkSurvAliases timeBetChkPts 60000
|
|
]
|
|
|
|
resetSurvAliases
|
|
|
|
survival = [
|
|
storesets "positiontype" tmpSurvSets; add2list tmpSurvSets $survNumBots; curSurvDifficulty = 0; positiontype 1; resetSurvAliases
|
|
if (! (strstr $onKill survKills)) [ add2alias onKill [ += survKills 1 ] ]
|
|
add2alias mapstartonce [
|
|
startPreSurvMillis = (millis)
|
|
echo (c 2)Bot survival mode prepared, gather items and find the arena to start! (c 9)You have (c 5) (div $timeUntilTele 1000) (c 9)seconds to prepare!
|
|
if (strstr $defaultmaps (curmap 1)) [ survMap = (findlist $defaultmaps (curmap 1)) ]
|
|
setOfcZones; checkzone
|
|
]
|
|
if (! (curteam)) [ team RVSF ]; mode 7; map $arg1
|
|
]
|
|
|
|
startSurvival = [
|
|
startedSurvival = 1; startSurvMillis = (millis)
|
|
addnbot $survNumBots CLA bad
|
|
sleep 2500 [ if $survTeleported [ echo (c 9)You were teleported to the zone. ]; echo (c 3)Starting survival mode, good luck! ]
|
|
sleep $timeBetChkPts [ gotCheckPoint = 1; increaseDifficulty ]
|
|
]
|
|
|
|
setzone = [ if (> (listlen $arg1) 3) [ zone = ""; loop szl 4 [ add2list zone (at $arg1 $szl) ] ] ]
|
|
|
|
// Zones consist of two points on a grid. Any area within these points are considered "inner zone".
|
|
// The order of the arguments given to setzone are important: setzone "minX maxX minY maxY"
|
|
// Hint: Use /whereami to find the two points.
|
|
survOfcZones = [
|
|
ac_aqueous 159.10 198.90 128.10 142.90
|
|
ac_arabian 128.10 196.90 93.10 146.90
|
|
ac_arctic 81.10 120.90 137.10 176.90
|
|
ac_arid 135.10 155.90 97.10 138.90
|
|
ac_complex 105.10 150.90 129.10 181.90
|
|
ac_depot 137.10 166.90 205.10 262.90
|
|
ac_desert 89.10 102.90 129.10 174.90
|
|
ac_desert2 65.10 98.90 149.10 190.90
|
|
ac_desert3 25.10 62.90 97.10 134.90
|
|
ac_douze 137.10 186.90 121.10 150.90
|
|
ac_edifice 33.10 80.90 82.10 120.90
|
|
ac_elevation 61.10 102.90 66.10 121.90
|
|
ac_gothic 47.10 83.90 41.10 83.90
|
|
ac_iceroad 325.10 374.90 244.10 274.90
|
|
ac_industrial 319.10 357.90 180.10 244.90
|
|
ac_ingress 133.10 181.90 66.10 112.90
|
|
ac_keller 66.10 100.90 222.10 244.90
|
|
ac_mines 83.10 110.90 117.10 131.90
|
|
ac_outpost 61.10 99.90 73.10 98.90
|
|
ac_power 155.10 216.90 211.10 244.90
|
|
ac_rattrap 145.10 185.90 57.10 102.90
|
|
ac_scaffold 62.10 91.90 49.10 63.90
|
|
ac_shine 99.10 124.90 79.10 106.90
|
|
ac_snow 17.10 54.90 102.10 127.90
|
|
ac_stellar 158.90 184.90 49.10 102.90
|
|
ac_sunset 148.10 183.90 102.10 127.90
|
|
ac_toxic 72.10 114.90 120.10 147.90
|
|
ac_urban 135.10 200.90 45.10 90.90
|
|
ac_werk 121.10 147.90 110.10 150.90
|
|
]
|
|
|
|
setOfcZones = [
|
|
survMapIndex = (findlist $survOfcZones (curmap 1))
|
|
if (>= $survMapIndex 0) [
|
|
tmpSurvZone = ""; tmpSurvCtr = 0
|
|
loop soz 4 [ += tmpSurvCtr 1; add2list tmpSurvZone (at $survOfcZones (+ $survMapIndex $tmpSurvCtr)) ]
|
|
setzone $tmpSurvZone
|
|
]
|
|
]
|
|
|
|
findCenter = [
|
|
midZoneX = (+f (divf (-f (at $tmpSurvZone 1) (at $tmpSurvZone 0)) 2.00) (at $tmpSurvZone 0))
|
|
midZoneY = (+f (divf (-f (at $tmpSurvZone 3) (at $tmpSurvZone 2)) 2.00) (at $tmpSurvZone 2))
|
|
tmpZoneCenter = (concat $midZoneX $midZoneY)
|
|
]
|
|
|
|
teleportPlayer = [ if (! (alive)) [ attack ]; if (!= $gamespeed 100) [ gamespeed 100 ]; survTeleported = 1; findCenter; if (! $editing) [ edittoggle ]; go_to (at $tmpZoneCenter 0) (at $tmpZoneCenter 1); sleep 50 [ edittoggle ] ]
|
|
|
|
isInZone = [
|
|
if (&& (&& (>= (getposition 0) (at $zone 0)) (>= (getposition 1) (at $zone 2))) (&& (<= (getposition 0) (at $zone 1)) (<= (getposition 1) (at $zone 3)))) [
|
|
result 1
|
|
] [
|
|
result 0
|
|
]
|
|
]
|
|
|
|
checkzone = [
|
|
if (! $survIsFinished) [
|
|
if (&& $startedSurvival (&& (>= (- (millis) $startSurvMillis) 500) (|| $editing (!= $gamespeed 100)))) [ endSurvival (concatword (c 3) "Error: " (c 1) editmode (c 5) " and " (c 1) gamespeed (c 5) " are not allowed in Survival Mode.") ]
|
|
if (&& (isInZone) (! $startedSurvival)) [ startSurvival ]
|
|
if (&& (! $startedSurvival) (>= (- (millis) $startPreSurvMillis) $timeUntilTele)) [ teleportPlayer ]
|
|
if (&& (>= (- (millis) $lastCheckPoint) $timeBetChkPts) (&& $startedSurvival $gotCheckPoint)) [ increaseDifficulty ]
|
|
if (&& (! $startedOBCount) (&& (! (isInZone)) $startedSurvival)) [ startOBCount ]
|
|
if (&& $startedSurvival (&& (! (alive)) (>= (- (millis) $startSurvMillis) 500))) [ finalSurvMillis = (- (millis) $startSurvMillis); endSurvival (concatword (c 3) "You survived for " (c 5) (divf $finalSurvMillis 1000) (c 3) " seconds, and killed " (c 5) $survKills (c 3) " enemies.") ]
|
|
sleep 0 [ checkzone ]
|
|
]
|
|
]
|
|
|
|
startOBCount = [
|
|
startedOBCount = 1; startOBMillis = (millis); backInZone = 0; tmpSCtr = 5
|
|
echo (c 3)Get back into the arena! (c 9)You only have (c 5)5 (c 9)seconds to return.
|
|
loop soc 5 [ sleep (* $soc 1000) [ if (&& (! (isInZone)) (! $backInZone)) [ echo (concatword (c 2) $tmpSCtr ...); -= tmpSCtr 1 ] [ backInZone = 1 ] ] ]
|
|
sleep 5000 [ if (&& (! (isInZone)) (&& (! $backInZone) (>= (- (millis) $startOBMillis) 5000))) [ endSurvival (concatword (c 3) "You took too long to return to the arena!") ] [ startedOBCount = 0 ] ]
|
|
]
|
|
|
|
increaseDifficulty = [
|
|
lastCheckPoint = (millis)
|
|
if (<= (+ $survNumBots $survBotsToAdd) $survMaxBots) [ += survNumBots $survBotsToAdd; addnbot $survBotsToAdd CLA best ] [ tmpSurvInt = (- $survMaxBots $survNumBots); += survNumBots $tmpSurvInt; addnbot $tmpSurvInt CLA best ]
|
|
if (< $curSurvDifficulty 4) [ += curSurvDifficulty 1; botskillall (at "bad worse medium good best" $curSurvDifficulty) ]
|
|
]
|
|
|
|
endSurvival = [
|
|
tmp_survstr = $arg1; startedSurvival = 0; survIsFinished = 1; positiontype (at $tmpSurvSets 0); survNumBots = (at $tmpSurvSets 1)
|
|
add2alias mapstartonce [ echo $tmp_survstr ]
|
|
tdm (at $defaultmaps (rnd (listlen $defaultmaps)))
|
|
]
|
|
|
|
// List of aliases that need to be cleared from saved.cfg on quit:
|
|
survAliases = "backInZone checkzone curSurvDifficulty endSurvival finalSurvMillis gotCheckPoint increaseDifficulty isInZone lastCheckPoint midZoneX midZoneY onKill resetSurvAliases setOfcZones setzone startedOBCount startedSurvival startOBCount startOBMillis startPreSurvMillis startSurvival startSurvMillis survIsFinished survival_test survKills survMapIndex survOfcZones survTeleported tmpSurvCtr tmpSurvInt tmpSurvSets tmp_survstr tmpSurvZone tmpZoneCenter zone checkSurvAliases survResetAliases survAliases"
|
|
|
|
addListOnQuit $survAliases |