Easiest RTS?
- ThunderTitan
- Perpetual Poster
- Posts: 23271
- Joined: 06 Jan 2006
- Location: Now/here
- Contact:
Yeah, i got stuck on that mission too... because my old PC (twice over now) lagged like hell... once i got a new one the mission was surprisingly easy... though that might be because i had tried it a few times before and i knew it.
You're probably just used to anti-swarm tactics instead of hard counters... l2p.
You're probably just used to anti-swarm tactics instead of hard counters... l2p.
Disclaimer: May contain sarcasm!
I have never faked a sarcasm in my entire life. - ???
"With ABC deleting dynamite gags from cartoons, do you find that your children are using explosives less frequently?" — Mark LoPresti
Alt-0128: €
I have never faked a sarcasm in my entire life. - ???
"With ABC deleting dynamite gags from cartoons, do you find that your children are using explosives less frequently?" — Mark LoPresti
Alt-0128: €
Did you play on Hard the expansions? There was that mission when the dark elves attack you from 3 different sides... on hard they attack so fast and so powerful that there's no way you can you can beat them with your army and your avatar if not overpowered (I heard there are some uber combos like Ice Magic - but I played an average hero I guess) can't handle them alone either... you have no idea how much buildings and workers I lost on that, and how much I 'kited' the enemy armies with my hero until I had enough army and could drive them back.Zubbus wrote:Where were you having trouble in spellforce 1?
The second expansion also had some hard missions... yes the same, too fast attacks and too strong before I could build much... resources in Spellforce are hard to get at the start before you have a big army.
But if you're talking about the original (no expansions) yes I agree it's not that hard.
Also from expansion 1 onward there's a "Coop" mode that can be played with 2 friends or solo... Try Coop 30 and tell me if you beat it, ok?
I did finish that with my bro but it was unbelievable hard, and failed 5 times btw... on the Spellforce forums they said nobody could finish that (at least a long time ago when I checked those), go figure how hard it is considered compared to other games
No matter how powerful one becomes, there is always someone stronger. That's why I'm in a constant pursuit of power, so I can be prepared when an enemy tries to take advantage of me.
Might want to figure out which mission you are talking about.
Of course I beat coop 30. You just need to know how to exploit the 2-line AI, it is not difficult.
Of course I beat coop 30. You just need to know how to exploit the 2-line AI, it is not difficult.
The icy yet intense predator hails from Antarctica. His focused eyes betray nothing but lethal instincts. In those eyes every adversary is but a mere fish.
I'm talking about that mission where there are 3 different Dark Elven factions, something with Moon (north), Star (east), and Sun (south). And with those sun towers that can be destroyed only using some special elementals. From Breath of Winter campaign I mean.
And I did not exploit anything at Coop 30, except destroying the Cyclopes real fast with my avatar and heroes... it is almost impossible to play from starting place, not even enough resources.
And I did not exploit anything at Coop 30, except destroying the Cyclopes real fast with my avatar and heroes... it is almost impossible to play from starting place, not even enough resources.
No matter how powerful one becomes, there is always someone stronger. That's why I'm in a constant pursuit of power, so I can be prepared when an enemy tries to take advantage of me.
That what I mean but the AI. You just did not do it well enough. Also, I did not use any resources (except rune power, if you count that.)Asheera wrote:And I did not exploit anything at Coop 30, except destroying the Cyclopes real fast with my avatar and heroes... it is almost impossible to play from starting place, not even enough resources.
The icy yet intense predator hails from Antarctica. His focused eyes betray nothing but lethal instincts. In those eyes every adversary is but a mere fish.
LOL!
If you don't activate your monument the AI won't attack... that's just lame, play it normally without any abuses like this
Yes it's bad design but that doesn't mean Coop 30 is easy.
If you don't activate your monument the AI won't attack... that's just lame, play it normally without any abuses like this
Yes it's bad design but that doesn't mean Coop 30 is easy.
No matter how powerful one becomes, there is always someone stronger. That's why I'm in a constant pursuit of power, so I can be prepared when an enemy tries to take advantage of me.
Yes. The game is. Definitely 1 of the things I'm looking for from this SpellForce discussion.Asheera wrote:Yes it's bad design...
------
Sure...Asheera wrote:play it normally without any abuses like this
Except there you said yourself you did exploit.Asheera wrote:...And I did not exploit anything at Coop 30, except destroying the Cyclopes real fast with my avatar and heroes... it is almost impossible to play from starting place, not even enough resources.
But when someone else does it right is "lame" and "abuse"?
------
Also, actually that is still wrong. The AI will still attack.Asheera wrote:LOL!
If you don't activate your monument the AI won't attack...
------
Want to link the thread or are you just making it up?Asheera wrote: I did finish that with my bro but it was unbelievable hard, and failed 5 times btw... on the Spellforce forums they said nobody could finish that (at least a long time ago when I checked those), go figure how hard it is considered compared to other games
For 1 thing you said you beat it the 6th try.
For another I beat it. So 2 people out of 2 people talking have beat it. That is 100% of the people. And yet you claim on the Spellforce forums you claim there's nobody could finish that?
------
On top of all that, you're not making a fair comparison. Warcraft 3 campaigns are solo only. Spellforce Coop 29 is soloable. Coop 30 is designed for 3 maxed out players. And you tried to beat it with 2 people? It's your own setting then, not the game.
The icy yet intense predator hails from Antarctica. His focused eyes betray nothing but lethal instincts. In those eyes every adversary is but a mere fish.
If you don't activate the monument the enemy doesn't attack. Yes I know this and this is the exploit I'm talking about. And if the enemy creatures aren't dying they have a 'max cap' to spawn and won't spawn anymore. Again, an exploit.
And trust me when I say I know many stuff, I used to disassemble Spellforce's scripts and make my own maps & spawning points
As for me exploiting, I *did* activate the monument at start, but instead of waiting with my hero while my workers were building stuff I attacked the enemy with her and the other heroes... I wouldn't call that exploit.
And I can't seem to find that thread anymore (was very very old) but notice here that the only post and 'help' received is to abuse like you did, by not activating the starting monument and not letting the AI attack...
And trust me when I say I know many stuff, I used to disassemble Spellforce's scripts and make my own maps & spawning points
As for me exploiting, I *did* activate the monument at start, but instead of waiting with my hero while my workers were building stuff I attacked the enemy with her and the other heroes... I wouldn't call that exploit.
And I can't seem to find that thread anymore (was very very old) but notice here that the only post and 'help' received is to abuse like you did, by not activating the starting monument and not letting the AI attack...
No matter how powerful one becomes, there is always someone stronger. That's why I'm in a constant pursuit of power, so I can be prepared when an enemy tries to take advantage of me.
Asheera wrote:And trust me when I say I know many stuff, I used to disassemble Spellforce's scripts and make my own maps & spawning points
Really? Then how come you don't know
is wrong?Asheera wrote: If you don't activate your monument the AI won't attack... that's just lame, play it normally without any abuses like this
"Trust me" is not going to work when the person you're saying it to actually knows it's not true.
You want to keep making things up out of ignorance? Go on, "dissassemble some scripts".
The icy yet intense predator hails from Antarctica. His focused eyes betray nothing but lethal instincts. In those eyes every adversary is but a mere fish.
- theLuckyDragon
- Round Table Knight
- Posts: 4883
- Joined: 06 Jan 2006
You know what? Why didn't you activate your monument then, hmm? Just go ahead, do it, and try to finish it that way. I'm not saying you should train workers or army, etc. And of course I mean just activate the monument that is near your starting place, the race one not a hero monument.
And I don't really care if you believe me or not. But perhaps this will show you I did disassemble scripts:
gdsrtscoopspawnhelper.lua
gdsrtscoopspawnsystem.lua
and many more but pointless to add here...
And I don't really care if you believe me or not. But perhaps this will show you I did disassemble scripts:
gdsrtscoopspawnhelper.lua
Code: Select all
----------------------------------------------------------------------------------------------
-- adds a spawn point on the map at (posX, posY) --
-- --
-- the enemies that are spawned here have the clan 'clan' --
-- --
-- spawn_data has the following parameters: --
-- Goal = the goal (look in gdsdefines.lua for goal ids) --
-- MaxClanSize = the max number of units this clan can have --
-- Init = the creatures that are spawned at the start of the game --
-- Groups = --
-- WaitTime = the time (in game frames) before a new creature is spawned (a game frame --
-- is a tenth of a second) --
-- Units = the creatures that are spawned are choosen from this list --
-- --
-- and the following optional parameters: --
-- numBoss = the number of Chiefs +1 (the chiefs are the creatures from the start of --
-- the Init table and they are not appended to the table when the InitFactor--
-- is greater than 1.0) DEFAULT = 1 (no bosses) --
-- Groups = --
-- BeginTime = the time needed for this group to start spawning (DEFAULT = 0) --
-- EndTime = the time before this group stops spawning (rest in peace, Mr.SpawnGroup) --
-- DEFAULT = INFINITE --
-- CreatedConditions = the conditions that must be met before this spawn point starts --
-- spawning (DEFAULT = NONE) --
-- DestroyedConditions = if these conditions are met, the spawn point stops spawning and --
-- destroys itself (DEFAULT = NO_BUILDINGS_AROUND_SPAWN_GROUP) --
-- DisabledConditions = if these conditions are met, the spawn point stops spawning but --
-- can be enabled later using the negation of these conditions --
-- DEFAULT = NEVER --
----------------------------------------------------------------------------------------------
AddSpawnPoint = function(posX, posY, clan, spawn_data)
local trig_base_name = "RtsCoopSpawnSystem" .. clan
local var -- a temporary variable
-- create the spawn point on the map
Trig_Init:AddAction(CGdsSetEffect:new(4, 0, posX, posY, EffectList["GroundWave"], 0))
Trig_Init:AddAction(CGdsSetObject:new(posX, posY, 2541, 0, 0, 0))
-- if this camp has creation conditions, make sure we create another begin timer for this camp and start it when these conditions are met
local GlobalTimer = "gtGlobalCoopSpawnTimer"
if spawn_data.CreatedConditions ~= nil then
GlobalTimer = "gtGlobalCoopSpawnTimer" .. clan
local Trig_InitSpawn = trig_base_name .. "_InitSpawn"
local Trigger = StateIdle:CreateTransition(Trig_InitSpawn, StateIdle)
foreachi(spawn_data.CreatedConditions, function(i, data) %Trigger:AddCondition(data) end)
Trigger:AddAction(CGdsDbSetTimestamp:new(GlobalTimer, 0))
Trigger:AddAction(CGdsRemoveTransition:new("", Trig_InitSpawn))
end
-- create the camp destroyed trigger
local Trig_CampDestroyed = trig_base_name .. "_DestroyCamp"
local Trig_End = StateIdle:CreateTransition(Trig_CampDestroyed, StateIdle)
-- add conditions
if spawn_data.DestroyedConditions == nil then
var = CGdsBuildingInRangeCircle:new(posX, posY, 16, kGdsOwnerNpc, 0)
var:ToggleNegated()
var:SetUpdateInterval(60)
spawn_data.DestroyedConditions = {var}
Trig_End:AddCondition(var)
else
foreachi(spawn_data.DestroyedConditions, function(i, data) %Trig_End:AddCondition(data) end)
end
-- add actions
Trig_End:AddAction(CGdsStopEffect:new(4, 0, posX, posY))
Trig_End:AddAction(CGdsSetEffect:new(4, 0, posX, posY, EffectList["AreaHit"], 3000))
Trig_End:AddAction(CGdsSetEffect:new(4, 0, posX, posY, EffectList["Lightning"], 3500))
Trig_End:AddAction(CGdsSetObject:new(posX, posY, 2541, 0, 1))
-- if this camp can be disabled, create two triggers to handle the enabled/disabled states
local flag_camp_disabled
if spawn_data.DisabledConditions ~= nil then
flag_camp_disabled = "nfRtsCoopSpawn_CampDisabled" .. clan
-- create the camp disabled and camp enabled triggers
local Trig_Name = trig_base_name .. "_DisableCamp"
local Trig_Disable = StateIdle:CreateTransition(Trig_Name, StateIdle)
Trig_End:AddAction(CGdsRemoveTransition:new("", Trig_Name))
Trig_Name = trig_base_name .. "_EnableCamp"
local Trig_Enable = StateIdle:CreateTransition(Trig_Name, StateIdle)
Trig_End:AddAction(CGdsRemoveTransition:new("", Trig_Name))
-- add conditions
var = CGdsDbVariable:new(flag_camp_disabled, 0, 0, kDbScriptVariableCompareEqual, 1)
var:SetUpdateInterval(60)
Trig_Disable:AddCondition(var)
var = CGdsDbVariable:new(flag_camp_disabled, 0, 1, kDbScriptVariableCompareEqual, 1)
var:SetUpdateInterval(60)
Trig_Enable:AddCondition(var)
foreachi(spawn_data.DisabledConditions, function(i, data)
local data2 = data:Clone()
data2:ToggleNegated()
%Trig_Disable:AddCondition(data)
%Trig_Enable:AddCondition(data2)
end)
-- add actions
Trig_Disable:AddAction(CGdsDbVariableSet:new(flag_camp_disabled, 0, 1))
Trig_Disable:AddAction(CGdsStopEffect:new(4, 0, posX, posY))
Trig_Disable:AddAction(CGdsSetEffect:new(4, 0, posX, posY, EffectList["AreaHit"], 2000))
Trig_Disable:AddAction(CGdsSetEffect:new(4, 0, posX, posY, EffectList["Lightning"], 2300))
Trig_Disable:AddAction(CGdsSetObject:new(posX, posY, 2541, 0, 1))
Trig_Enable:AddAction(CGdsDbVariableSet:new(flag_camp_disabled, 0, 0))
Trig_Enable:AddAction(CGdsSetEffect:new(4, 0, posX, posY, EffectList["GroundWave"], 0))
Trig_Enable:AddAction(CGdsSetObject:new(posX, posY, 2541, 0, 0, 0))
end
-- go through all groups
for i=1,getn(spawn_data.Groups) do
local group = spawn_data.Groups[i]
local timer = "ntClan" .. clan .. "_RtsCoopSpawnTimer" .. tostring(i)
Trig_Init:AddAction(CGdsDbSetTimestamp:new(timer, 0))
-- create spawn trigger
local Trig_Spawn = trig_base_name .. "_SpawnGroup" .. tostring(i)
local Trigger = StateIdle:CreateTransition(Trig_Spawn, StateIdle)
-- add conditions
if group.BeginTime ~= nil then
var = CGdsDbTimeElapsed:new(GlobalTimer, 0, floor(group.BeginTime * BeginWaveFactor))
var:SetUpdateInterval(60)
Trigger:AddCondition(var)
end
local wait_time = floor(group.WaitTime * SpawnDelayFactor)
local time = wait_time * 0.49 + random(0,5); if time < 60 then time = 58 + random(0,4) end
var = CGdsDbTimeElapsed:new(timer, 0, wait_time)
var:SetUpdateInterval(time)
Trigger:AddCondition(var)
time = wait_time * 0.35 + random(0,5); if time < 50 then time = 50 + random(0,5) end
var = CGdsClanMember:new(clan, ceil(spawn_data.MaxClanSize * MaxClanSizeFactor))
var:ToggleNegated()
var:SetUpdateInterval(time)
Trigger:AddCondition(var)
if flag_camp_disabled ~= nil then
var = CGdsDbVariable:new(flag_camp_disabled, 0, 0, kDbScriptVariableCompareEqual, 1)
var:SetUpdateInterval(60)
Trigger:AddCondition(var)
end
-- add actions
Trigger:AddAction(CGdsDbSetTimestamp:new(timer, 0))
var = CGdsFigureSpawn:new(0, posX, posY, 0, -1, 0, clan, 1, EffectList["Materialize"], 25, HardMode)
foreachi(group.Units, function(i, data) %var:AddUnit(data) end)
Trigger:AddAction(var)
-- create ending trigger
if group.EndTime ~= nil then
local Trig_EndSpawn = trig_base_name .. "_EndSpawnGroup" .. tostring(i)
Trigger = StateIdle:CreateTransition(Trig_EndSpawn, StateIdle)
-- add conditions
var = CGdsDbTimeElapsed:new(GlobalTimer, 0, floor(group.EndTime * BeginWaveFactor))
var:SetUpdateInterval(60)
local var2 = spawn_data.DestroyedConditions[1]:Clone()
for i=2,getn(spawn_data.DestroyedConditions) do
var2 = CGdsConditionLogicalAnd:new(var2, spawn_data.DestroyedConditions[i]:Clone())
end
Trigger:AddCondition(CGdsConditionLogicalOr:new(var, var2))
-- add actions
Trigger:AddAction(CGdsRemoveTransition:new("", Trig_Spawn))
Trigger:AddAction(CGdsRemoveTransition:new("", Trig_EndSpawn))
else
Trig_End:AddAction(CGdsRemoveTransition:new("", Trig_Spawn))
end
end
-- tell the camp destroyed trigger to destroy itself
Trig_End:AddAction(CGdsRemoveTransition:new("", Trig_CampDestroyed))
-- create the 'spawn startup units' trigger
local Trig_Name = trig_base_name .. "_Init"
local Trigger = StateIdle:CreateTransition(Trig_Name, StateIdle)
-- add actions
local numUnits = getn(spawn_data.Init)
local numUnitsAdjusted = ceil(numUnits * InitSpawnFactor)
local j = numUnitsAdjusted
if numUnits < numUnitsAdjusted then
j = numUnits
spawn_data.numBoss = spawn_data.numBoss or 1
for i=numUnits+1, numUnitsAdjusted do
var = CGdsFigureSpawn:new(0, posX, posY, 0, -1, 0, clan, 1, 0, 0, HardMode)
var:AddUnit(spawn_data.Init[random(spawn_data.numBoss, numUnits)])
Trigger:AddAction(var)
end
end
for i=1, j do
var = CGdsFigureSpawn:new(0, posX, posY, 0, -1, 0, clan, 1, 0, 0, HardMode)
var:AddUnit(spawn_data.Init[i])
Trigger:AddAction(var)
end
GlobalTimer = "ntAiChangeGoalClan" .. clan
Trigger:AddAction(CGdsDbSetTimestamp:new(GlobalTimer, 0))
Trigger:AddAction(CGdsRemoveTransition:new("", Trig_Name))
-- create the 'set goal' trigger
Trig_Name = trig_base_name .. "_ChangeGoal"
Trigger = StateIdle:CreateTransition(Trig_Name, StateIdle)
-- add conditions
var = CGdsDbTimeElapsed:new(GlobalTimer, 0, 100)
var:SetUpdateInterval(10)
Trigger:AddCondition(var)
-- add actions
Trigger:AddAction(CGdsAiChangeGoal:new(clan, spawn_data.Goal))
Trigger:AddAction(CGdsRemoveTransition:new("", Trig_Name))
end
---------------------------------------------------------------------------
-- creates the State Machine and the basic states and triggers for a Npc --
-- --
-- npc_id is the id of the NPC (isn't this obvious?!?) --
---------------------------------------------------------------------------
SelectNpc = function(npc_id)
NpcId = npc_id
StateMachine = GdsMain:CreateStateMachine("_NPC_" .. NpcId, kGdsStateMachineTypeFigureScript, NpcId)
StateInit = StateMachine:CreateState("_INIT")
StateIdle = StateMachine:CreateState("_IDLE")
StateDead = nil
Trig_Init = StateInit:CreateTransition("NpcInit", StateIdle)
end
----------------------------------------------------------------------------------------------
-- creates a respawn system for the selected NPC (NOTE: call this before CreateWaypointSets)--
-- --
-- respawn_data has the following parameters: --
-- Unit = the id of the unit being respawned --
-- Time = this timer must elapse before this NPC is respawned; starts when the NPC dies --
-- Respawn = --
-- X = the X coordinate of the respawning place for this NPC --
-- Y = the Y coordinate of the respawning place for this NPC --
-- Conditions = the conditions that must be met before the NPC can respawn at this place --
----------------------------------------------------------------------------------------------
CreateRespawnSystem = function(respawn_data)
StateDead = StateMachine:CreateState("_DEAD")
-- create death trigger
local Trig_Die = StateIdle:CreateTransition("Respawn_DIE", StateDead)
-- add conditions
Trig_Die:AddCondition(CGdsFigureDeadEvent:new(NpcId))
-- add actions
Trig_Die:AddAction(CGdsDbSetTimestamp:new("ntNPC" .. NpcId .. "RespawnTimer", 0))
-- go through all respawn data
foreachi(respawn_data.Respawn, function(i, data)
-- create respawn trigger
local Trigger = StateDead:CreateTransition("Respawn" .. i, StateIdle)
-- add conditions
foreachi(data.Conditions, function(j, cond) %Trigger:AddCondition(cond) end)
local var = CGdsDbTimeElapsed:new("ntNPC" .. NpcId .. "RespawnTimer", 0, %respawn_data.Time)
var:SetUpdateInterval(60)
Trigger:AddCondition(var)
-- add actions
var = CGdsFigureSpawn:new(NpcId, data.X, data.Y, 0, -1, 0, 0, 1, EffectList["Materialize"], 35, 0)
var:AddUnit(%respawn_data.Unit)
Trigger:AddAction(var)
end)
end
--------------------------------------------------------------------------------------------------
-- creates a set of waypoints for the selected NPC --
-- --
-- wpdata contains a list of waypoint sets --
-- --
-- a waypoint set has the following parameters: --
-- Waypoints = the waypoint table; a waypoint has the following parameters: --
-- X = the X coordinate of the waypoint --
-- Y = the Y coordinate of the waypoint --
-- Radius = the radius of the waypoint (in tiles); it's used for smoother --
-- transitions between waypoints, among other things. --
-- Wait = this timer must elapse before the NPC goes to the next waypoint --
-- Note that this timer starts when the NPC arrives at the previous --
-- waypoint, not when it arrives at this one (DEFAULT = 0) --
-- Actions = user-defined actions that are called when the NPC arrives at this --
-- waypoint (DEFAULT = None) --
-- --
-- and the following optional parameters: --
-- Conditions = these conditions must be met before this waypoint set can be executed --
-- GotoMode = this parameter can have one of the following values: kGtWalkModeNormalGoto, --
-- kGtWalkModeForceGoto and kGtWalkModeContinuousGoto --
-- kGtWalkModeNormalGoto = the NPC attacks it's enemies when they become a --
-- threat --
-- kGtWalkModeForceGoto = the NPC ignores it's enemies even if they attack --
-- kGtWalkModeContinuousGoto = I haven't figured out this yet; it's like Normal --
-- DEFAULT = kGtWalkModeNormalGoto --
-- Run = if this flag is 1, the NPC runs to the waypoints in this set (DEFAULT = 0) --
-- Loop = if this flag appears there, the NPC goes back to the first waypoint when it --
-- arrives at the end of the set --
-- NOTE: when the NPC arrives at the end of the set and there is no Loop flag, --
-- the NPC will not move to the waypoints in this set again. If you want --
-- to make it move later, though, you must set the following flag to 0: --
-- WaypointSet<i>_End_NPC<n> --
-- where i = index of waypoint set and n = NpcId (DON'T INSERT THE '<>' !) --
-- --
-- IMPORTANT: if there is only one waypoint in the set, the NPC will go to that location and --
-- guard it. NOTE that you must not place the Loop flag or you'll screw something... --
-- You have been warned! --
--------------------------------------------------------------------------------------------------
CreateWaypointSets = function(wpdata)
local timer = "ntNPC" .. NpcId .. "_waypoint_timer"
-- go through all waypoint sets
for i,v in wpdata do
-- set moving modes
local mode_goto = v.GotoMode or kGtWalkModeNormalGoto
local mode_run = v.Run or 0
-- define basic variables
local set_name = "WaypointSet" .. i
local pt = v.Waypoints[1]
-- create first waypoint state
local state = StateMachine:CreateState(set_name .. "_STATE1")
local state_first = state
local state_next = state
-- create starting trigger
local Trigger = StateIdle:CreateTransition(set_name .. "_Point0", state)
-- add conditions
if getn(v.Waypoints) == 1 then
Trigger:AddCondition(CGdsFigureNotInRangeCircle:new(NpcId, pt.X, pt.Y, pt.Radius))
elseif v.Loop == nil then
local end_var = set_name .. "_End_NPC" .. NpcId
Trig_Init:AddAction(CGdsDbVariableSet:new(end_var, 0, 0))
Trigger:AddCondition(CGdsDbVariable:new(end_var, 0, 0, kDbScriptVariableCompareEqual, 1))
end
if v.Conditions ~= nil then
foreachi(v.Conditions, function(j, data) %Trigger:AddCondition(data) end)
end
Trigger:AddCondition(CGdsFigureJob:new(NpcId, CGdsFigureJob.kJobIdle))
var = CGdsFigureIsDominated:new(NpcId)
var:ToggleNegated()
Trigger:AddCondition(var)
-- add actions
Trigger:AddAction(CGdsFigureGoto:new(NpcId, pt.X, pt.Y, pt.Radius, mode_goto, mode_run))
if pt.Wait ~= nil then
Trigger:AddAction(CGdsDbSetTimestamp:new(timer, 0))
end
-- go through all waypoints but the last one
local k = 1
for j=1, getn(v.Waypoints)-1 do
k = j+1
local pt = v.Waypoints[j]
local pt_nxt = v.Waypoints[k]
local trig_base_name = set_name .. "_Point" .. j
-- create next waypoint state
state_next = StateMachine:CreateState(set_name .. "_STATE" .. k)
-- create arrived trigger
Trigger = state:CreateTransition(trig_base_name, state_next)
-- add conditions
if pt.Wait ~= nil then
var = CGdsDbTimeElapsed:new(timer, 0, pt.Wait)
var:SetUpdateInterval(50)
Trigger:AddCondition(var)
end
Trigger:AddCondition(CGdsFigureInRangeCircle:new(NpcId, pt.X, pt.Y, pt.Radius))
Trigger:AddCondition(CGdsFigureJob:new(NpcId, CGdsFigureJob.kJobIdle))
var = CGdsFigureIsDominated:new(NpcId)
var:ToggleNegated()
Trigger:AddCondition(var)
-- add actions
Trigger:AddAction(CGdsFigureGoto:new(NpcId, pt_nxt.X, pt_nxt.Y, pt_nxt.Radius, mode_goto, mode_run))
if pt_nxt.Wait ~= nil then
Trigger:AddAction(CGdsDbSetTimestamp:new(timer, 0))
end
if pt.Actions ~= nil then
foreachi(pt.Actions, function(x, data) %Trigger:AddAction(data) end)
end
-- create remind trigger
Trigger = state:CreateTransition(trig_base_name .. "_REMIND", state)
-- add conditions
Trigger:AddCondition(CGdsFigureJob:new(NpcId, CGdsFigureJob.kJobIdle))
var = CGdsFigureIsDominated:new(NpcId)
var:ToggleNegated()
Trigger:AddCondition(var)
-- add actions
Trigger:AddAction(CGdsFigureGoto:new(NpcId, pt.X, pt.Y, pt.Radius, mode_goto, mode_run))
-- if this set has conditions
if v.Conditions ~= nil then
-- create abort trigger
Trigger = state:CreateTransition(trig_base_name .. "_ABORT", StateIdle)
-- add conditions
foreachi(v.Conditions, function(x, data) local cond = data:Clone(); cond:ToggleNegated(); %Trigger:AddCondition(cond) end)
end
-- if this NPC can respawn
if StateDead ~= nil then
-- create death trigger
Trigger = state:CreateTransition(trig_base_name .. "_DIE", StateDead)
-- add conditions
Trigger:AddCondition(CGdsFigureDeadEvent:new(NpcId))
-- add actions
Trigger:AddAction(CGdsDbSetTimestamp:new("ntNPC" .. NpcId .. "RespawnTimer", 0))
end
-- change state for next waypoint
state = state_next
end
-- NOTE: state_next and k are the variables for the last waypoint when we arrive here!
pt = v.Waypoints[k]
local trig_base_name = set_name .. "_Point" .. k
if v.Loop ~= nil then
-- create arrived trigger
Trigger = state_next:CreateTransition(trig_base_name, state_first)
-- add conditions
if pt.Wait ~= nil then
var = CGdsDbTimeElapsed:new(timer, 0, pt.Wait)
var:SetUpdateInterval(50)
Trigger:AddCondition(var)
end
Trigger:AddCondition(CGdsFigureInRangeCircle:new(NpcId, pt.X, pt.Y, pt.Radius))
Trigger:AddCondition(CGdsFigureJob:new(NpcId, CGdsFigureJob.kJobIdle))
var = CGdsFigureIsDominated:new(NpcId)
var:ToggleNegated()
Trigger:AddCondition(var)
-- add actions
Trigger:AddAction(CGdsFigureGoto:new(NpcId, v.Waypoints[1].X, v.Waypoints[1].Y, v.Waypoints[1].Radius, mode_goto, mode_run))
if v.Waypoints[1].Wait ~= nil then
Trigger:AddAction(CGdsDbSetTimestamp:new(timer, 0))
end
else
-- create finished trigger
Trigger = state_next:CreateTransition(trig_base_name, StateIdle)
-- add conditions
Trigger:AddCondition(CGdsFigureInRangeCircle:new(NpcId, pt.X, pt.Y, pt.Radius))
-- add actions
if getn(v.Waypoints) ~= 1 then
Trigger:AddAction(CGdsDbVariableSet:new(set_name .. "_End_NPC" .. NpcId, 0, 1))
end
end
if pt.Actions ~= nil then
foreachi(pt.Actions, function(j, data) %Trigger:AddAction(data) end)
end
-- create remind trigger
Trigger = state_next:CreateTransition(trig_base_name .. "_REMIND", state_next)
-- add conditions
Trigger:AddCondition(CGdsFigureJob:new(NpcId, CGdsFigureJob.kJobIdle))
var = CGdsFigureIsDominated:new(NpcId)
var:ToggleNegated()
Trigger:AddCondition(var)
-- add actions
Trigger:AddAction(CGdsFigureGoto:new(NpcId, pt.X, pt.Y, pt.Radius, mode_goto, mode_run))
-- if this set has conditions
if v.Conditions ~= nil then
-- create abort trigger
Trigger = state_next:CreateTransition(trig_base_name .. "_ABORT", StateIdle)
-- add conditions
foreachi(v.Conditions, function(j, data) local cond = data:Clone(); cond:ToggleNegated(); %Trigger:AddCondition(cond) end)
end
-- if this NPC can respawn
if StateDead ~= nil then
-- create death trigger
Trigger = state_next:CreateTransition(trig_base_name .. "_DIE", StateDead)
-- add conditions
Trigger:AddCondition(CGdsFigureDeadEvent:new(NpcId))
-- add actions
Trigger:AddAction(CGdsDbSetTimestamp:new("ntNPC" .. NpcId .. "RespawnTimer", 0))
end
end
end
--------------------------------------------------------------------------------------------------
-- creates a dialog system for the selected NPC --
-- --
-- dlg has the following parameters: --
-- BeginEvents = the events that are called at the start of a conversation --
-- --
-- the first numDialogEvents keys contain the other dialog events (the index of the event --
-- being the one of the key) --
-- --
-- a dialog event contains a list of sub-events; if there is only one, you must not place any --
-- conditions in the Conditions param; if there are more, you must place conditions in each --
-- --
-- a dialog sub-event has the following parameters: --
-- Conditions = the conditions that must be met before this event can occur --
-- Text = the message the NPC sends to the player --
-- Answer = the list of the possible answers. These answers can be selected by the --
-- player; there also appears an Exit Dialog answer at the end of the list. --
-- If you want to create an automatic answer (that is, an answer that can't be --
-- selected by the player), DON'T place a list of the answers in here, but --
-- rather the answer itself (this answer can have no text, so that the player --
-- doesn't say anything). If you want to have only one answer, but selectable, --
-- create only one table in here with the respective data. --
-- There can be no answers (Answer = {}), thus leaving only the Exit answer --
-- --
-- an answer has the following data: --
-- Text = the message the player sends to the NPC --
-- Color = the color of the message (optional; defaults to white) --
-- Id = the index of the event this answer activates --
-- --
-- and the following optional parameters: --
-- Type = the type of the sign above the Npc's head: --
-- 0 = question mark; 1 (DEFAULT) = exclamation mark --
-- EndEvents = a list of user-defined events that are called at the end of the conversation --
-- --
-- an end event has the following data: --
-- Conditions = the conditions that must be met before this event can occur --
-- Actions = the actions that take place when this event occurs --
--------------------------------------------------------------------------------------------------
CreateDialog = function(dlg)
-- initialize dialog
Trig_Init:AddAction(CGdsFigureSetDialogFlag:new(NpcId, dlg.Type or 1))
-- temporary variables
local dlgsize = getn(dlg)
local x = dlgsize+1
local y = dlg.BeginEvents
-- create dialog states, ending triggers and initialize 'from' indices
local StateDialogDone = StateMachine:CreateState("DLG_STATE_END")
local DlgStates = {}
local DlgFrom = {}
for i=1, x do
local state = StateMachine:CreateState("DLG_STATE" .. i)
tinsert(DlgStates, state)
local Trig_End = state:CreateTransition("DlgState" .. i .. "_ExitDialog", StateDialogDone)
Trig_End:AddCondition(CGdsDialogEnd:new(NpcId))
Trig_End:AddAction(CGdsDbSetTimestamp:new("ntDialogEndTimer_NPC" .. NpcId, 0))
DlgFrom[i] = {}
end
-- create 'from' indices
DlgFrom[x] = nil
for i=0, dlgsize do
for j,v in y do
if v.Answer.Id == nil then
foreachi(v.Answer, function(k, data) tadd(%DlgFrom[data.Id], %x) end)
else
tadd(DlgFrom[v.Answer.Id], x)
end
end
x = i+1
y = dlg[x]
end
-- define helpful function
function handle_dlg_trig(Trigger, data)
-- add user-defined conditions
if data.Conditions ~= nil then
foreachi(data.Conditions, function(i, cond) %Trigger:AddCondition(cond) end)
end
-- add talking actions
local talk = CGdsTalk:new()
talk:SetMessage(nil, data.Text, ColorWhite)
if data.Answer.Id ~= nil then
talk:AddAnswer(data.Answer.Id, nil, data.Answer.Text, data.Answer.Color or ColorWhite, 1)
else
foreachi(data.Answer, function(i, answer) %talk:AddAnswer(answer.Id, nil, answer.Text, answer.Color or ColorWhite) end)
end
Trigger:AddAction(talk)
-- add user-defined actions
if data.Actions ~= nil then
foreachi(data.Actions, function(i, action) %Trigger:AddAction(action) end)
end
-- add miscellaneous actions
Trigger:AddAction(CGdsFigureSetTalkingFlag:new(NpcId, 1))
Trigger:AddAction(CGdsDbVariableSet:new("gfGDS_PlayerIsTalking", 0, 1))
end
-- go through all dialog begin events
foreachi(dlg.BeginEvents, function(i, data)
-- create dialog trigger
local Trigger = StateIdle:CreateTransition("DlgBegin" .. i, %DlgStates[%x])
-- add conditions
Trigger:AddCondition(CGdsDialogBegin:new(NpcId))
-- add actions
Trigger:AddAction(CGdsFigureStop:new(NpcId))
-- add default dialog conditions and actions
handle_dlg_trig(Trigger, data)
end)
-- go through all dialog events
for i=1, dlgsize do
-- go through all sub-events
foreachi(dlg[i], function(j, data)
-- create dialog trigger
local Trigger = %DlgStates[%DlgFrom[%i][1]]:CreateTransition("DlgTransition" .. %i .. "_" .. j .. "_", %DlgStates[%i])
-- add conditions
Trigger:AddCondition(CGdsDialogAnswer:new(NpcId, %i))
-- add default dialog conditions and actions
handle_dlg_trig(Trigger, data)
-- go through the remaining 'from' states and create a trigger for them as well
for k=2, getn(%DlgFrom[%i]) do
%DlgStates[%DlgFrom[%i][k]]:CreateTransitionFromTemplate(Trigger)
end
end)
end
-- go through all dialog end events
if dlg.EndEvents ~= nil then
foreachi(dlg.EndEvents, function(i, data)
-- create custom dialog ending trigger
local Trig_Name = "DlgEnd" .. i
local Trigger = %StateDialogDone:CreateTransition(Trig_Name, StateIdle)
-- add conditions
foreachi(data.Conditions, function(j, cond) %Trigger:AddCondition(cond) end)
-- add actions
foreachi(data.Actions, function(j, action) %Trigger:AddAction(action) end)
end)
end
-- create dialog ending trigger
local TrigDialogDone = StateDialogDone:CreateTransition("DlgEnd0", StateIdle)
-- add conditions
local cond = CGdsDbTimeElapsed:new("ntDialogEndTimer_NPC" .. NpcId, 0, 3)
cond:SetUpdateInterval(2)
TrigDialogDone:AddCondition(cond)
-- add actions
TrigDialogDone:AddAction(CGdsFigureSetTalkingFlag:new(NpcId, 0))
TrigDialogDone:AddAction(CGdsDbVariableSet:new("gfGDS_PlayerIsTalking", 0, 0))
end
Code: Select all
SetCoopSpawnParams = function(factor1, factor2, factor3, factor4)
MaxClanSizeFactor, InitSpawnFactor, BeginWaveFactor, SpawnDelayFactor = factor1, factor2, factor3, factor4
end
RtsCoopSpawnNT = function(skill_lvl, num_players, clan_id, spawnX, spawnY, map_id)
SkillLevel = skill_lvl
HardMode = 0
NumPlayers = num_players
PlatformId = 0
NpcId = spawnY * 2 + spawnX
NpcX = spawnX
NpcY = spawnY
-- seed the random number generator
randomseed(tonumber(date("%H%M%S")) - NpcId + NpcX*NpcY)
-- initialize default text color
ColorWhite = kMnu_csWhite or 4294967040
-- adjust the coop factors by the level of difficulty
if SkillLevel == 0 then -- easy
InitSpawnFactor = InitSpawnFactor * 0.73
MaxClanSizeFactor = MaxClanSizeFactor * 0.78
BeginWaveFactor = BeginWaveFactor * 1.55
SpawnDelayFactor = SpawnDelayFactor * 1.61
elseif SkillLevel == 2 then -- hard
InitSpawnFactor = InitSpawnFactor * 1.68
MaxClanSizeFactor = MaxClanSizeFactor * 1.76
BeginWaveFactor = BeginWaveFactor * 0.66
SpawnDelayFactor = SpawnDelayFactor * 0.59
end
-- include helper files
dofile("script/GdsRtsCoopSpawnHelper.lua")
dofile("script/GdsConditions.lua")
dofile("script/GdsActions.lua")
dofile("script/GdsVariables.lua")
-- get effect list
dofile("object/object_scripteffects.lua")
EffectList = GetScriptEffectList()
-- init spawn points
StateMachine = GdsMain:CreateStateMachine("_RtsCoopSpawn_", kGdsStateMachineTypeFigureScript, NpcId)
StateInit = StateMachine:CreateState("_INIT")
StateIdle = StateMachine:CreateState("_IDLE")
Trig_Init = StateInit:CreateTransition("RtsInit", StateIdle)
Trig_Init:AddAction(CGdsSetObject:new(NpcX, NpcY, 2541, 0, 1)) -- delete the spawn point placed on the map
Trig_Init:AddAction(CGdsDbSetTimestamp:new("gtGlobalCoopSpawnTimer", 0))
-- execute the map script (NOTE: the spawn points must be the first things handled in the map scripts!!!)
dofile("script/map_" .. map_id .. ".lua")
RunMapScript()
end
No matter how powerful one becomes, there is always someone stronger. That's why I'm in a constant pursuit of power, so I can be prepared when an enemy tries to take advantage of me.
Now.
1) Do you understand any of the script you printed?
2) If you can understand any of the scripts. Why didn't you know that
1) Do you understand any of the script you printed?
2) If you can understand any of the scripts. Why didn't you know that
This is not true?Asheera wrote:LOL!
If you don't activate your monument the AI won't attack...
The icy yet intense predator hails from Antarctica. His focused eyes betray nothing but lethal instincts. In those eyes every adversary is but a mere fish.
Are you kidding? I wrote it myself!Zubbus wrote:1) Do you understand any of the script you printed?
I am not lying
Sheesh...
Because I know they don't attack...2) If you can understand any of the scripts. Why didn't you know that
This is not true?Asheera wrote:LOL!
If you don't activate your monument the AI won't attack...
or wait, I played the game and saw that, then I made scripts and 'cheats' and same story, and then people on the official forums say the same thing... but no, you are the one and only right one.
btw I don't know what you understood from attack, but it's 'charging' to your monument and rune stone... not that the enemies will stay like ducks and won't react to your hits, lol
They do react, and hit you, but they do not move to attack your 'base'
And anyway this is really off-topic. The original topic was about easiest RTS, it has nothing to do with a poor or intelligent AI... I know Spellforce AI sucks, but it's still a hard game. And no, not activating your monument is an exploit and I'd rather call it a cheat... if you want I can also include the cheat codes in Blizzard games and you'll see which one is easier then.
A hard game doesn't imply a good AI. Take State of War (another 'RTS' or something similar), AI is dumb, all it does is move the units to your buildings to destroy them, doesn't even accumulate an attack, etc. And the enemy advancer always goes to the closest building. So very very, dumb.
But still, last mission is extremely difficult, since enemy has 3 advancers (you only 1) and loads of turrets and factories.
No matter how powerful one becomes, there is always someone stronger. That's why I'm in a constant pursuit of power, so I can be prepared when an enemy tries to take advantage of me.
Notice this is the only way you found in the SF forums. And you call that abuse. Notice how no one in that thread thinks that is abuse. So the way everyone plays is abuse to you. The way you played is the only way that is not exploit?Asheera wrote:Alright then. Let's see the thread.Zubbus wrote: or wait, I played the game and saw that, then I made scripts and 'cheats' and same story, and then people on the official forums say the same thing... but no, you are the one and only right one.Asheera wrote:It's YOU who claimed there's a certain thread and then oops, couldn't find it, last time.Zubbus wrote: or wait, I played the game and saw that, then I made scripts and 'cheats' and same story, and then people on the official forums say the same thing... but no, you are the one and only right one.
You want to talk about being the the only one?
You're the only one who wouldn't call what you do exploit:And even you disagree with yourself.:Asheera wrote:As for me exploiting, I *did* activate the monument at start, but instead of waiting with my hero while my workers were building stuff I attacked the enemy with her and the other heroes... I wouldn't call that exploit.Asheera wrote:And I did not exploit anything at Coop 30, except destroying the Cyclopes real fast with my avatar and heroes... it is almost impossible to play from starting place, not even enough resources.Asheera wrote:...but notice here that the only post and 'help' received is to abuse like you did, by not activating the starting monument and not letting the AI attack...
The icy yet intense predator hails from Antarctica. His focused eyes betray nothing but lethal instincts. In those eyes every adversary is but a mere fish.
No I did not disagree with myself... probably phrased it poorly but the only abuse is to not activate the starting monument since it handicaps the AI. If you then rush or build your army slowly that's just a play style, nothing to do with abuse or exploits... I guess everyone agrees with this, right?
But the way the dumb AI in SF is made, it is an exploit not to activate the monument since they will not charge or attack your base, etc...
As for more links I found one more: (but seems Google doesn't find too well... they may be too old or something, oh well)
http://spellforce.jowood.de/forum/archi ... 21585.html
http://www.spellforce.com/forum/showthread.php?p=358507 (seems same text though)
Now let's see the counter-arguments and links. I encourage you to find some threads about Coop 30 being easy with activating the monument at start and thus making the AI 'work'. Let's see if you find any.
And now really, I provided lots of links, I provided my scripts I did for the game... where are your sources for your claims? For example about the AI attacking you without activating monument? Or that you even finished it normally without any cheats or abuses? (and btw Spellforce does have a console as well so cheats are in game too)
This is pointless anyway. I provide scripts, links, etc, and it's still not enough, and you will never believe me anyway... even though the irony is you are the one who have no backup whatsoever to your claims.
But the way the dumb AI in SF is made, it is an exploit not to activate the monument since they will not charge or attack your base, etc...
As for more links I found one more: (but seems Google doesn't find too well... they may be too old or something, oh well)
http://spellforce.jowood.de/forum/archi ... 21585.html
http://www.spellforce.com/forum/showthread.php?p=358507 (seems same text though)
Now let's see the counter-arguments and links. I encourage you to find some threads about Coop 30 being easy with activating the monument at start and thus making the AI 'work'. Let's see if you find any.
And now really, I provided lots of links, I provided my scripts I did for the game... where are your sources for your claims? For example about the AI attacking you without activating monument? Or that you even finished it normally without any cheats or abuses? (and btw Spellforce does have a console as well so cheats are in game too)
This is pointless anyway. I provide scripts, links, etc, and it's still not enough, and you will never believe me anyway... even though the irony is you are the one who have no backup whatsoever to your claims.
No matter how powerful one becomes, there is always someone stronger. That's why I'm in a constant pursuit of power, so I can be prepared when an enemy tries to take advantage of me.
Who's everyone? You and yourself?Asheera wrote:No I did not disagree with myself... probably phrased it poorly but the only abuse is to not activate the starting monument since it handicaps the AI. If you then rush or build your army slowly that's just a play style, nothing to do with abuse or exploits... I guess everyone agrees with this, right?
Can't see anyone who call anything exploit or abuse there. Again, you give yourself all the say what is abuse and what is not. Nothing you linked ever mentioned the word abuse.Asheera wrote: But the way the dumb AI in SF is made, it is an exploit not to activate the monument since they will not charge or attack your base, etc...
So this is the 2nd thread you found that is (roughly) the way I beat it?Asheera wrote: As for more links I found one more: (but seems Google doesn't find too well... they may be too old or something, oh well)
http://spellforce.jowood.de/forum/archi ... 21585.html
Anyone in these threads besides you calling it abuse? No.
Anyone in these threads besides you calling it exploit? No.
The thing is, I didn't imagine a thread that backs me up. I check that something exists in the real world before remembering it.Asheera wrote:Now let's see the counter-arguments and links. I encourage you to find some threads about Coop 30 being easy with activating the monument at start and thus making the AI 'work'. Let's see if you find any.
Uh you provided them. Remember?Asheera wrote: And now really, I provided lots of links, I provided my scripts I did for the game... where are your sources for your claims? For example about the AI attacking you without activating monument?
You found 1 thread that says how other beat it is the way I beat it. Then you found a 2nd one.
You also agreed with me:
And then you found out yourself that:Asheera wrote: But if you're talking about the original (no expansions) yes I agree it's not that hard.
A lot of people beat it and gave out advices on how to beat it.Asheera wrote: Also from expansion 1 onward there's a "Coop" mode that can be played with 2 friends or solo... Try Coop 30 and tell me if you beat it, ok?
You linked 2 such threads from the official forums.
So actually, you beat me to backing me up.Asheera wrote:even though the irony is you are the one who have no backup whatsoever to your claims.
And then you found out yourself that the reason you thought it's hard
Asheera wrote:...on the Spellforce forums they said nobody could finish that (at least a long time ago when I checked those), go figure how hard it is considered compared to other games smile_teeth
Does not exists:
Asheera wrote:And I can't seem to find that thread anymore (was very very old)
Where's that thread that say "the same thing" now? Or is this the 2nd time you imagine a thread existed, but turns out it doesn't?Zubbus wrote:Alright then. Let's see the thread.Asheera wrote: or wait, I played the game and saw that, then I made scripts and 'cheats' and same story, and then people on the official forums say the same thing... but no, you are the one and only right one.
So are you saying you don't believe I beat coop 30 at lv 28?Asheera wrote: Or that you even finished it normally without any cheats or abuses? (and btw Spellforce does have a console as well so cheats are in game too)
It's really simple. Start a co-op game. Leave the game on. They will come for your bindstone. Anyone with a copy of the game can see for himself.Asheera wrote:For example about the AI attacking you without activating monument?
Uh you're the one who claimed a certain post exists and then admitted it did not.Asheera wrote: This is pointless anyway. I provide scripts, links, etc, and it's still not enough, and you will never believe me anyway...
And you're the one who posted a thread that says what other people do is what I do. And neither of those threads said anything about abuse or exploit. You added that bit yourself.
And posting scripts is not the same is showing you disassembled it. Anyone can post a bunch of scripts.
And it's not pointless to me.
-You agreed with me about part of the game being easy.
-You linked the stuff you said you wanted me to link. Saves me doing it.
-You agreed SF's AI is "bad design"+ "sucks".
-And then you...say a game with "bad design" and "sucks" AI is hard?
I am happy with all 4 of those.
If this is pointless to you, it sucks to be you to be here doing this.
Yes, come back when you learn to phrase things better. Some people don't have time to keep coming back to see what you need to "rephrase".Asheera wrote:No I did not disagree with myself... probably phrased it poorly...
The icy yet intense predator hails from Antarctica. His focused eyes betray nothing but lethal instincts. In those eyes every adversary is but a mere fish.
The 2nd thread I linked contained no abuses, lol. He did activate the monument. He used my strategy to rush, that's ok... the only abuse is to not activate monument & handicap the AI.
About that old thread & nobody finishing Coop 30, what did you expect? Yes it was old, which means people didn't have years time to discover a strategy for that map. At that time nobody finished it yet, and I can tell you that map wasn't completed without cheats or abuses for some months... which makes it one of the hardest maps in a game (most game maps get finished in 1 day). Yeah I didn't check the forums after, but after I got my ass kicked at Coop 30 first time I went to the forums for help, and there this thread where somoene asked for help and nobody said that it was done, or how. And do note that I didn't buy Spellforce the moment it was out, either...
And if you want to take into consideration all of this then you could say type "Power Overwhelming" in starcraft chat in single player and it's instantly the easiest RTS ever, right? (that cheat makes you invincible). Well, I don't care how you classify, point is, the thread creator asked for an easy RTS that he plays, not handicaps the AI, destroys the enemy with an abuse or uses cheats. Yeah you may kite the enemy troops due to bad AI while killing them slowly, you may rush without activating the monument so the AI is handicapped, you may use cheats, etc, this doesn't make the game easy, at least not what the original poster wanted. Your posts didn't help at all, period.
Oh and stop the quote wars, please. This is not the Observatory
About that old thread & nobody finishing Coop 30, what did you expect? Yes it was old, which means people didn't have years time to discover a strategy for that map. At that time nobody finished it yet, and I can tell you that map wasn't completed without cheats or abuses for some months... which makes it one of the hardest maps in a game (most game maps get finished in 1 day). Yeah I didn't check the forums after, but after I got my ass kicked at Coop 30 first time I went to the forums for help, and there this thread where somoene asked for help and nobody said that it was done, or how. And do note that I didn't buy Spellforce the moment it was out, either...
And if you want to take into consideration all of this then you could say type "Power Overwhelming" in starcraft chat in single player and it's instantly the easiest RTS ever, right? (that cheat makes you invincible). Well, I don't care how you classify, point is, the thread creator asked for an easy RTS that he plays, not handicaps the AI, destroys the enemy with an abuse or uses cheats. Yeah you may kite the enemy troops due to bad AI while killing them slowly, you may rush without activating the monument so the AI is handicapped, you may use cheats, etc, this doesn't make the game easy, at least not what the original poster wanted. Your posts didn't help at all, period.
Nope they do not. And I had the latest patch with 2nd expansion too.It's really simple. Start a co-op game. Leave the game on. They will come for your bindstone. Anyone with a copy of the game can see for himself.
Find them with Google or something then... you will not be able to (except my post maybe) since I never made them public until now.And posting scripts is not the same is showing you disassembled it. Anyone can post a bunch of scripts.
Oh and stop the quote wars, please. This is not the Observatory
No matter how powerful one becomes, there is always someone stronger. That's why I'm in a constant pursuit of power, so I can be prepared when an enemy tries to take advantage of me.
- theLuckyDragon
- Round Table Knight
- Posts: 4883
- Joined: 06 Jan 2006
Return to “Hall of the Heretics”
Who is online
Users browsing this forum: No registered users and 2 guests