Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Revamp objective system #5

Open
wyozi opened this issue Nov 13, 2014 · 1 comment
Open

Revamp objective system #5

wyozi opened this issue Nov 13, 2014 · 1 comment

Comments

@wyozi
Copy link
Collaborator

wyozi commented Nov 13, 2014

Storing active objective statuses

Active objective could still be stored in global entity (beause there can only be one), but secondary objectives could instead be stored in a network var in object (eg IsSecondaryObjectiveActive).

This way you there could be infinite amount of secondary objectives active at any given time, and toggling them is fairly easy (no need to deal with indexing problems that would happen if we used global entities with names like , SecObjective2, SecObjective3 etc)

This would require a library for objectives to make it easy to do stuff.

objectives.GetMainObjective()
objectives.GetSecondaryObjectives()
objectives.GetSecondaryObjective(quest_name)
objectives.SetMainObjective(obj)
objectives.SetSecondaryObjective(obj, quest_name)

Different objective stages

It should be possible to divide the map into multiple objectives (similar to tf2 stages, like in cp_goldrush). There are a couple of ways to implement this:

one bd_mapsetup per stage

Each stage has their own bd_mapsetup that points to the initial objective in that stage. There could be two inputs in bd_mapsetup: EndMission and StartMissionStage. EndMission can be called from the objective_escape to completely stop the mission (at which point we change map?). StartMissionStage can be called on another stage's bd_mapsetup from objective_escape to continue the mission.

Pros:

  • Each stage can have their own map settings (like what weapons are allowed etc)
  • Pretty logical sequence

Cons:

  • Some bd_mapsetup variables are bound to be the same throughout the whole map, which results in code or rather data duplication.

one bd_mapsetup per map

A single bd_mapsetup containing all the settings etc. The objective_escape at the end of each stage can simply call SetAsMainObjective on the initial objective of the next stage, and each bd_objective would have a hammer variable boolean that determines if they start a new stage. If they do, we do game.CleanupMap() and respawn all players at that initial objective.

Pros:

  • Maybe a bit more simple to the mapper because you dont need to start replicating bd_mapsetups

Cons:

  • Unable to have stage specific bd_mapsetup settings
  • The separation of stages is less clear. Having bd_mapsetup per stage separates stages from each other more clearly
  • If we hop into a bd_objective in another stage that is not the initial objective in that stage, or the mapper forgot to flag it as the initial objective, the game will glitch pretty badly because players can not even get into that objective. Then again this is a problem in the option 1 as well

Objective stage problems

  • Having bunch of nextbots roam around on stages that are not active causes lag. This is pretty easy to solve, but need to figure out a reliable way to determine to what stage does an entity belong. Is geometrical boundary check or something like that enough?
@wyozi
Copy link
Collaborator Author

wyozi commented Nov 15, 2014

What if game.CleanupMap() is not called between stages at all? This allows things like sabotaging a weapon storage in the previous stage to make it so next stage's guards have no weapons

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant