Zones v2

What do you want to see in Armagetron soon? Any new feature ideas? Let's ponder these ground breaking ideas...
User avatar
philippeqc
Long Poster - Project Developer - Sage
Posts: 1526
Joined: Mon Jul 12, 2004 8:55 am
Location: Stockholm
Contact:

Zones v2

Post by philippeqc »

EDIT: The description of zone v2 in this post is quite out of date. For an updated version, use http://wiki.armagetronad.net/index.php?title=Zones_v2

EDIT 2: corrected the link

Hi,

Well, I've been working with the zones, and it is now at a level where
I can present it to the public, and ask for your input.

You will note that the examples that I use generally dont sound that
fun. I'd like to think its because my creative power went into
building a good system, and now there is little left to put on
examples. But I'm sure you will find interesting ways to use the
mecanisms in here.

My goal with this was to be able to have zones that could have
different effect depending on who would use them. For example, having
a fortress that team Blue could conquer, but only 2 of the players of
team Red could actually defend. The other Red could still circle it
and block the enemy, but they could not lower its value actively.

And now to the format of the map...
==============

Zone element
A zone can have a name. Name is optional, and re-using a name will be
considered to mean "add/override with the following information". Dont
rely on this behavior for anything, ie: dont re-use the same name.

A zone need a shape. ATM only one shape exist, the ShapeCircle. I
didnt improve on this yet, its a "later".

Ex:
<Zone name="redFortress">
<ShapeCircle radius="29" red="0.988" green="0.059" blue="0.753">
<Point x="50" y="50"/>
</ShapeCircle>
...
</Zone>

A zone can have up to 4 different type of "rules" (need better
name). Enter, Inside, Leave, Outside. It classify when the holded
elements should be inspected.

Inside each of the "rules", one can assemble EffectGroups.
EffectGroup is the fundament of all this new system. It associate
owners with consequences.

Ownership is for the effectGroup, NOT for the zone. So a zone can have
multiple effectGroup, each with unique or interlapping owners.

There are 2 types of owners: owner (ie: individuals) and ownerTeam
(ie: all the member of a team). It is possible to define 0,1 or many
for each items.

HACK:
ATM, only owner is supported, and it must be an exact match with a
player's name to associated the effect.
The real solution will translate the labels used to players based on
some other logic depending on "game type". This is to be defined
later.

HACK:
It should be possible to associate individual with teams in some part
of the map. In this text, I will user lowercase color name + number for
individual, and uppercase color name for teams. So the individual
red1, red7 and red90210 should be considered as players of the team
RED. I will also allow myself to insert _description_ in names to help
the reader when appropriate.

Ex:
<Zone name="redFortress">
<ShapeCircle ...>
...
</ShapeCircle>
<Enter>
<EffectGroup owner="red1,red2" ownerTeam="BLUE,YELLOW">
...
</EffectGroup>
<EffectGroup owner="" ownerTeam="RED">
...
</EffectGroup>
</Enter>
<Leave>
<EffectGroup owner="green7" ownerTeam="">
...
</EffectGroup>
</Leave>
</Zone>

Inside the EffectGroup, elements User are set. This element offers
different readyly made rules to determine if a player in the "rule"
condition for the zone, is allowed to be considered a user. This is
decided based from the following information: owner, ownerTeam and the
player matching the rule.

The following user are currently implemented:
- all: Anybody can be considered a valid user,
- owner: only a player direcly in the owner list can be considered a
valid user,
- ownerTeam: only a player member of a team mentionned in the
ownerTeam list can be considered a valid user,
- allButOwner only a player NOT mentioned in the owner list can be
considered a valid user,
- allButTeamOwner only a player NOT member of a team mentioned in the
ownerTeam list can be considered a valid user, (TO COME, NOT
IMPLEMENTED YET)
- anotherTeammate only a player in the same team as one of the
individual owner can be considered a valid user (TO COME, NOT
IMPLEMENTED YET)

Two other conditions can be set for a player to be considered a valid
user: positive and marked. These element are of type Triad. The
possible values are true, false and ignore. We will come back to these
later.

If the current player is found to be valid, the processing will
continue to the child elements. Otherwise, nothing happens. A valid
user will be called triggerer from now on.

Ex:
<EffectGroup owner="red1,red2" ownerTeam="BLUE,YELLOW">
<User user="all" >
... <!-- Anybody can trigger this -->
</User>
<User user="allButOwner" >
... <!-- Anybody but red1 and red2 can trigger this -->
</User>
</EffectGroup>
<EffectGroup owner="" ownerTeam="RED">
<User user="owner" >
... <!-- No effect as the owner list is empty -->
</User>
<User user="ownerTeam" >
... <!-- Only players of the RED team can trigger this -->
</User>
</EffectGroup>

Inside a User element, it is possible to make use of 3 different
elements. Target, ZoneInfluence and MonitorInfluence.

The Target element will take the information of the valid user, and
calculate who will receive the effect of the zone. Depending on the
described target rule to use and the state of the game, the calculated
target can be from no players to everybody in game.

The currently implemented target rules are :
self : the triggerer himself
teammate : a randomly selected teammate of the triggerer
team : all the member of the team of the triggerer
all : everybody in the game
allButSelf : everybody in the game BUT the triggerer
another : a randomly selected player that is not the triggerer
ownerTeamTeammate : a randomly selected player member of one of the
teams mentioned in the teamOwner list.
Much more are detailed in a document named zones.txt hidden somewhere
on the forum.

Once the targets are selected, they all are applied all the effects
described under the Target element.

Nota: In a User element, it is possible to user any amount of Target,
ZoneInfluence and MonitorInfluence.

Ex:
<User user="ownerTeam" >
<Target target="self">
... <!-- The player that is member of one of the team mentionned
and that triggered the zone receive the effect -->
</Target>
<Target target="another">
... <!-- Some random player will receive the effect described -->
</Target>
</User>

The Effect element hold specific effects. The attribute count can
limit the number of times a specific effect can be used. By default,
the count is unlimited.

valid effect currently implemented are:
win : win the round
death : kill the target(s)
point : give points to the target(s)

When point is use, an attribute score will mention the amount of point
to give.

<Target target="self">
<Effect effect="point" score="3" count="2">
... <!-- The target receives 3 points and is good for 2 usages -->
</Effect>
<Effect ...>
...
</Effect>
</Target>


Inside the User element, the element ZoneInfluence and
MonitorInfluence are use to affect back game element.

ZoneInfluence allows to affect a zone in play. The name attribute must
match exactly a zone's name elsewhere in the map.

The possible thing to affect on a zone are:
- Rotation with attribute rotationSpeed and rotationAcceleration
- Radius with attribute radius
- Point with attribute x and y

Ex:
<User user="all">
<ZoneInfluence name="redFortress">
<Rotation rotationSpeed="1" rotationAcceleration="-0.2" />
<Radius radius="50"/>
<Point x="100" y="100" />
</ZoneInfluence>
<ZoneInfluence name="blueFortress">
<Radius radius="-1" />
</ZoneInfluence>
</User>

===
Monitor:

Monitors are simple valiables that can be affected by interaction with
different zones. The old "fortress" zone is to be considered as a zone
where being inside slowly influence its monitor.

Monitors are to be inserted in the map at the same level as
Zone. Monitor have a name that is used to refer to from the
MonitorInfluence, a initial value, and a drift, that slowly move the
value, low and high, which clamp the monitor's value between their
owns.

<Field>
...
<Monitor name="monitorFortressRed" init="0.2" drift="-0.1" low="0.0" high="1.0">
... <!-- This monitor's value is initialised at 0.2, will slowly
change at the rate of -0.1 per second, and will be clamped in the
range [0.0, 1.0]. -->
</Monitor>
...
</Field>

The Monitor as different rules that can be used to inspect and react
on its value. They are OnOver, OnUnder, InRange and OutsideRange. Any
amount of rules can be used in a monitor.

OnOver has an attribute named value and will be used when the
monitor's value exceed it,
OnUnder has an attribute named value and will be used when the
monitor's value is under it,
InRange has attributes low and high and will be used when the
monitor's value fall between both
OutRange has attributes low and high and will be used when the
monitor's value is not falling between both

The monitors' rules are similar to the zone's rule in that they hold
EffectGroups that are inspected when the rule conditions are met.

What differs a Monitor from a zone regarding to EffectGroup is who are
considered players to be inspected as users. Anyone who contributed to
a monitor during a game time step is registered, along with if the
contribution was positive (conquering) or negative (defending), and if
they where marked. This information is passed along up to the User
element. There it can be used on additional tests to determine a valid
user.

<Monitor name="monitorFortressRed" init="0.2" drift="-0.1" low="0.0" high="1.0">
<OnOver value="1.0">
<EffectGroup ...>
<User user="..." positive="true" marked="ignore">
... <!-- to be a valid user, the player must have contributed
to this monitor, match the user rule AND have contributed in a
positive (conquest) fashion -->
</User>
<User ...>
...
</User>
</EffectGroup>
</OnOver>
</Monitor>

The User element always have these attributes, but outside of an
EffectGroup from a Monitor, this is always ignored.

MonitorInfluence element is the one where one describe how to affect a
monitor. It has an attribute name to point to the monitor to
influence. It has a marked attribute which is a Triad, ie: allows for
the value true, false or ignore. Players using this MonitorInfluence
will carry this mark into their contribution to the monitor.

There are 3 ways to influence the value of a monitor:
- the attribute influenceSlide will affect the monitor's value in a
fashion proportional to the time passed in the zone. This is how the
classical fortress operates. This is the same as saying influenceSlide
* duration of the current game time step.
- the attribute influenceAdd will affect the monitor's value by this
amount. This is NOT affected by time.
- the attribute influenceSet will set the monitor's value immediatly
to this value.

These can of course be used simulteanously. It is important here that
attributes that are not desired should not be defined, rather than
defined at a default value.

Ex:
<User ...>
...
<MonitorInfluence name="monitorFortressRed" marked="true" influenceSlide="0.5"/>
<!-- conquer the fortress at a rate of 0.5 per second -->
<MonitorInfluence name="monitorFortressGreen" marked="true" influenceAdd="2"/>
<!-- monitorFortressGreen's value is raised by 2 -->
<MonitorInfluence name="monitorFortressBlue" influenceSet="0.0" />
<!-- Reset's BLUE's zone to 0 -->
</User>

===========================================

All described here works. There are still glitches small and not so
small. The code is in my private branch, but feel free to grab a local
copy if you want to play with it.

The format is anything but closed. I'd like to hear your opinion on it
too (yes it is a PITA to write, but if you have a constructive remark
about that, I'd like to know it)

The question are
- are you able to express some new ideas with it?
- do you see items that could be added, either now or as a later
version that could improve its value?
- Anything else?

To Phytotron:
Yes, I'm a baby seal clubber, I eat child's brain for breakfast, at
church I do all the prayers backward and this will most likely cause
the downfall of civilisation as we know it and and mankind in general. ;)
Could we avoid the usual protests?

-ph
Last edited by philippeqc on Tue Jul 24, 2007 9:30 pm, edited 2 times in total.
Canis meus id comedit.
User avatar
Tank Program
Forum & Project Admin, PhD
Posts: 6714
Joined: Thu Dec 18, 2003 7:03 pm

Post by Tank Program »

*wins award for longest post ever*
Image
User avatar
philippeqc
Long Poster - Project Developer - Sage
Posts: 1526
Joined: Mon Jul 12, 2004 8:55 am
Location: Stockholm
Contact:

Post by philippeqc »

An example might help you get through the mess of the description

*takes on my movie trailer voice*
Its blue vs red in their eternal confrontation: conquer the enemy's fortress! But this time there's trouble in paradise. Each team has zones in opposing corners which are interconnected, and as they get conquered, they jump toward the center.

This summer, see the excitement, the passion, the jumping madness!

Rated PG (*)

For your convenience:
MAP_FILE philippeqc/zone/DoubleZoneJumping-1.aamap.xml

-ph
* PG: Possitively Great

Code: Select all

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE Resource SYSTEM "map-0.3.1-a.dtd">
<Resource type="aamap" name="DoubleZoneJumping" version="1" author="philippeqc" category="zone"> 
<!--
  Double fortress exist at opposing corners.
  As they are conquered, they slowly move to the center of the map.
  This map was created when the team code was still not available, 
  so exact match association to player name is required.
  
  Blue players: azure,cobalt,midnight,royal   
  Red players : cerise,mauve,rust,sangria
-->

  <Map version="2">
    <!-- The original square map, technically created by z-man.
           Converted to XML by philippeqc.
           License: Public Domain. Do with it what you want.
        -->
    <World>
      <Field>
        <Spawn  x="50"  y="245"  xdir="1"  ydir="0"  />
        <Spawn  x="450"  y="255"  xdir="-1"  ydir="0"  />

        <Wall>
          <Point  x="0"  y="0"  />
          <Point  x="0"  y="500"  />
          <Point  x="500"  y="500"  />
          <Point  x="500"  y="0"  />
          <Point  x="0"  y="0"  />
        </Wall>
        <Zone name="zRed1">
          <ShapeCircle radius="49" red="1.0" green="0.1" blue="0.1">
            <Point x="50" y="50"/>
          </ShapeCircle>
          <Inside>
            <EffectGroup owners="cerise,mauve,rust,sangria" teamOwners="">
              <User user="owner">
                <MonitorInfluence name="mRed" influenceSlide="-0.25" marked="true"/>
              </User>
            </EffectGroup>
            <EffectGroup owners="azure,cobalt,midnight,royal" teamOwners="">
              <User user="owner">
                <MonitorInfluence name="mRed" influenceSlide="0.5" marked="true"/>
              </User>
            </EffectGroup>
          </Inside>
        </Zone>

        <Zone name="zRed2">
          <ShapeCircle radius="49" red="1.0" green="0.1" blue="0.1">
            <Point x="450" y="450"/>
          </ShapeCircle>
          <Inside>
            <EffectGroup owners="cerise,mauve,rust,sangria" teamOwners="">
              <User user="owner">
                <MonitorInfluence name="mRed" influenceSlide="-0.25" marked="true"/>
                </User>
              </EffectGroup>
            <EffectGroup owners="azure,cobalt,midnight,royal" teamOwners="">
              <User user="owner">
                <MonitorInfluence name="mRed" influenceSlide="0.5" marked="true"/>
                </User>
              </EffectGroup>
          </Inside>
        </Zone>

        <Monitor name="mRed" init="0.0" drift="-0.1" >
          <InRange low="0.0" high="0.30">
            <EffectGroup owners="" teamOwners="">
              <User user="all">
                 <ZoneInfluence name="zRed1">
                   <Point x="100" y="100"/>
                  <Radius radius="49"/>
                 </ZoneInfluence>
                 <ZoneInfluence name="zRed2">
                   <Point x="400" y="400"/>
                  <Radius radius="49"/>
                 </ZoneInfluence>
              </User>
            </EffectGroup>
          </InRange>
          <InRange low="0.4" high="0.60">
            <EffectGroup owners="" teamOwners="">
              <User user="all">
                <ZoneInfluence name="zRed1">
                  <Point x="150" y="150"/>
                  <Radius radius="49"/>
                </ZoneInfluence>
                <ZoneInfluence name="zRed2">
                  <Point x="350" y="350"/>
                  <Radius radius="49"/>
                </ZoneInfluence>
              </User>
            </EffectGroup>
          </InRange>
          <InRange low="0.7" high="1.0">
            <EffectGroup owners="" teamOwners="">
              <User user="all">
                <ZoneInfluence name="zRed1">
                  <Point x="200" y="200"/>
                  <Radius radius="49"/>
                </ZoneInfluence>
                <ZoneInfluence name="zRed2">
                  <Point x="300" y="300"/>
                  <Radius radius="49"/>
                </ZoneInfluence>
              </User>
            </EffectGroup>
          </InRange>
          <OnOver value="1">
            <EffectGroup owners="azure,cobalt,midnight,royal" teamOwners="">
              <User user="owner">
                <Target target="self">
                  <Effect effect="point" count="2" score="7"/>
                </Target>
                <ZoneInfluence name="zRed1">
                  <Radius radius="-1" />
                </ZoneInfluence> 
                <ZoneInfluence name="zRed2">
                  <Radius radius="-1" />
                </ZoneInfluence> 
              </User>
            </EffectGroup>
          </OnOver>
        </Monitor>


<!-- Same thing for the blue team now -->


        <Zone name="zBlue1">
          <ShapeCircle radius="49" red="0.10" green="0.10" blue="1.0">
            <Point x="50" y="450"/>
          </ShapeCircle>
          <Inside>
            <EffectGroup owners="cerise,mauve,rust,sangria" teamOwners="">
              <User user="owner">
                <MonitorInfluence name="mBlue" influenceSlide="0.3" marked="true"/>
                </User>
              </EffectGroup>
            <EffectGroup owners="azure,cobalt,midnight,royal" teamOwners="">
              <User user="owner">
                <MonitorInfluence name="mBlue" influenceSlide="-0.3" marked="true"/>
                </User>
              </EffectGroup>
          </Inside>
        </Zone>

        <Zone name="zBlue2">
          <ShapeCircle radius="49" red="0.10" green="0.10" blue="1.0">
            <Point x="450" y="50"/>
          </ShapeCircle>
          <Inside>
            <EffectGroup owners="cerise,mauve,rust,sangria" teamOwners="">
              <User user="owner">
                <MonitorInfluence name="mBlue" influenceSlide="0.3" marked="true"/>
                </User>
              </EffectGroup>
            <EffectGroup owners="azure,cobalt,midnight,royal" teamOwners="">
              <User user="owner">
                <MonitorInfluence name="mBlue" influenceSlide="-0.3" marked="true"/>
                </User>
              </EffectGroup>
          </Inside>
        </Zone>

        <Monitor name="mBlue" init="0.0" drift="-0.1" >
          <InRange low="0.0" high="0.30">
            <EffectGroup owners="" teamOwners="">
              <User user="all">
                <ZoneInfluence name="zBlue1">
                  <Point x="100" y="400"/>
                  <Radius radius="49"/>
                </ZoneInfluence>
                <ZoneInfluence name="zBlue2">
                  <Point x="400" y="100"/>
                  <Radius radius="49"/>
                </ZoneInfluence>
              </User>
            </EffectGroup>
          </InRange>
          <InRange low="0.4" high="0.60">
            <EffectGroup owners="" teamOwners="">
              <User user="all">
                <ZoneInfluence name="zBlue1">
                  <Point x="150" y="350"/>
                  <Radius radius="49"/>
                </ZoneInfluence>
                <ZoneInfluence name="zBlue2">
                  <Point x="350" y="150"/>
                  <Radius radius="49"/>
                </ZoneInfluence>
              </User>
            </EffectGroup>
          </InRange>
          <InRange low="0.7" high="1.0">
            <EffectGroup owners="" teamOwners="">
              <User user="all">
                <ZoneInfluence name="zBlue1">
                  <Point x="200" y="300"/>
                  <Radius radius="49"/>
                </ZoneInfluence>
                <ZoneInfluence name="zBlue2">
                  <Point x="300" y="200"/>
                  <Radius radius="49"/>
                </ZoneInfluence>
              </User>
            </EffectGroup>
          </InRange>
          <OnOver value="1">
            <EffectGroup owners="cerise,mauve,rust,sangria" teamOwners="">
              <User user="owner">
                <Target target="self">
                  <Effect effect="point" count="2" score="7"/>
                </Target>
                <ZoneInfluence name="zBlue1">
                  <Radius radius="-1" />
                </ZoneInfluence> 
                <ZoneInfluence name="zBlue2">
                  <Radius radius="-1" />
                </ZoneInfluence> 
              </User>
            </EffectGroup>
          </OnOver>
        </Monitor>

      </Field>
    </World>
  </Map>
</Resource>
Canis meus id comedit.
User avatar
philippeqc
Long Poster - Project Developer - Sage
Posts: 1526
Joined: Mon Jul 12, 2004 8:55 am
Location: Stockholm
Contact:

Post by philippeqc »

Ex:

Code: Select all

<Zone name="redFortress">
  <ShapeCircle radius="29" red="0.988" green="0.059" blue="0.753"/>
    <Point x="50" y="50"/>
  </ShapeCircle>
...
</Zone>
is now

Code: Select all

<Zone name="redFortress">
  <ShapeCircle radius="29" >
    <Color red="0.988" green="0.059" blue="0.753" alpha="0.0"/>
    <Point x="50" y="50"/>
  </ShapeCircle>
...
</Zone>

Also added Color as a child of ZoneInfluence:

Code: Select all

  <ZoneInfluence name="blueFortress">
    <Radius radius="-1" />
    <Color red="0.988" green="0.059" blue="0.753" alpha="0.0"/> 
  </ZoneInfluence>
-ph
Canis meus id comedit.
User avatar
philippeqc
Long Poster - Project Developer - Sage
Posts: 1526
Joined: Mon Jul 12, 2004 8:55 am
Location: Stockholm
Contact:

Post by philippeqc »

2 new effects!

brakerecharge and rubberrecharge

I let you work out what they mean ;)

-ph
Canis meus id comedit.
User avatar
ed
Match Winner
Posts: 613
Joined: Mon Feb 13, 2006 12:34 pm
Location: UK

Post by ed »

How about speedcharge (-/+ value)?

I'm trying to get my head around it all and the possibilities it creates. I'm sure it will make more sense when I start to play around with it, trying new stuff.
I will read it thoroughly again when I have time and try to come up with some suggestions.
User avatar
philippeqc
Long Poster - Project Developer - Sage
Posts: 1526
Joined: Mon Jul 12, 2004 8:55 am
Location: Stockholm
Contact:

Post by philippeqc »

This map has 4 zones that activate one another. Only one should be present, and when not there, they are put outside of the arena. They are activated in a crossed fashion.

Code: Select all

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE Resource SYSTEM "map.dtd">
<Resource type="aamap" name="zone" version="d" author="philippeqc" category="">
<!-- <Resource type="aamap" name="square" version="1.0.1" author="Anonymous" category="polygon/regular"> -->
  <Map version="2">
    <!-- The original square map, technically created by z-man.
           Converted to XML by philippeqc.
           License: Public Domain. Do with it what you want.
        -->
    <World>
      <Field>
        <Spawn  x="50"  y="245"  xdir="1"  ydir="0"  />
        <Spawn  x="450"  y="255"  xdir="-1"  ydir="0"  />

        <Wall>
          <Point  x="0"  y="0"  />
          <Point  x="0"  y="500"  />
          <Point  x="500"  y="500"  />
          <Point  x="500"  y="0"  />
          <Point  x="0"  y="0"  />
        </Wall>

        <Zone name="SW">
          <ShapeCircle radius="29" >
            <Point x="50" y="50"/>
            <Color red="0.988" green="0.059" blue="0.753">
          </ShapeCircle>
          <Enter>
            <EffectGroup owners="" teamOwners="">
              <User user="all">
                <!-- Reward user -->
                <Target target="self">
                  <Effect effect="point" score="2" />
                </Target>
                <!-- Hide ourself -->
                <ZoneInfluence name="SW">
                  <Point x="-150" y="-150"/>
                  <Radius radius="29"/>
                </ZoneInfluence>
		<!-- Unhide another -->
                <ZoneInfluence name="NE">
                  <Point x="450" y="450"/>
                  <Radius radius="29"/>
                </ZoneInfluence>
              </User>
            </EffectGroup>
          </Enter>
        </Zone>

        <Zone name="NE">
          <ShapeCircle radius="29">
            <Point x="-150" y="-150"/>
            <Color red="0.988" green="0.059" blue="0.753">
          </ShapeCircle>
          <Enter>
            <EffectGroup owners="" teamOwners="">
              <User user="all">
                <!-- Reward user -->
                <Target target="self">
                  <Effect effect="point" score="2" />
                </Target>
                <!-- Hide ourself -->
                <ZoneInfluence name="NE">
                  <Point x="-150" y="-150"/>
                  <Radius radius="29"/>
                </ZoneInfluence>
		<!-- Unhide another -->
                <ZoneInfluence name="NW">
                  <Point x="50" y="450"/>
                  <Radius radius="29"/>
                </ZoneInfluence>
              </User>
            </EffectGroup>
          </Enter>
        </Zone>

        <Zone name="NW">
          <ShapeCircle radius="29">
            <Point x="-150" y="-150"/>
            <Color red="0.988" green="0.059" blue="0.753">
          </ShapeCircle>
          <Enter>
            <EffectGroup owners="" teamOwners="">
              <User user="all">
                <!-- Reward user -->
                <Target target="self">
                  <Effect effect="point" score="2" />
                </Target>
                <!-- Hide ourself -->
                <ZoneInfluence name="NW">
                  <Point x="-150" y="-150"/>
                  <Radius radius="29"/>
                </ZoneInfluence>
		<!-- Unhide another -->
                <ZoneInfluence name="SE">
                  <Point x="450" y="50"/>
                  <Radius radius="29"/>
                </ZoneInfluence>
              </User>
            </EffectGroup>
          </Enter>
        </Zone>

        <Zone name="SE">
          <ShapeCircle radius="29">
            <Point x="-150" y="-150"/>
            <Color red="0.988" green="0.059" blue="0.753">
          </ShapeCircle>
          <Enter>
            <EffectGroup owners="" teamOwners="">
              <User user="all">
                <!-- Reward user -->
                <Target target="self">
                  <Effect effect="point" score="2" />
                </Target>
                <!-- Hide ourself -->
                <ZoneInfluence name="SE">
                  <Point x="-150" y="-150"/>
                  <Radius radius="29"/>
                </ZoneInfluence>
		<!-- Unhide another -->
                <ZoneInfluence name="SW">
                  <Point x="50" y="50"/>
                  <Radius radius="29"/>
                </ZoneInfluence>
              </User>
            </EffectGroup>
          </Enter>
        </Zone>
      </Field>
    </World>
  </Map>
</Resource>
Its a really crude idea, that has been retaken in a much better way by wrt. But it show some things that can be done (influencing individual zones, and using ZoneInfluence from one zone to affect another).
Canis meus id comedit.
User avatar
wrtlprnft
Reverse Outside Corner Grinder
Posts: 1679
Joined: Wed Jan 04, 2006 4:42 am
Location: 0x08048000
Contact:

Post by wrtlprnft »

I made a similar map to ph's last one. It is a stonehenge map with many walls, so the first section is nothing new, but later there's three zones.
They all have different locations they can jump to, the green one gives 1, the pink one 2, and the red one 3 points to the one who enters it and then jumps to another location.

Here's the preview without the zones.
There's no place like ::1
User avatar
philippeqc
Long Poster - Project Developer - Sage
Posts: 1526
Joined: Mon Jul 12, 2004 8:55 am
Location: Stockholm
Contact:

Post by philippeqc »

Targets have a count:

Code: Select all

The target has an attribute count that will limit the number of time
it is called. Not having the attribute or setting it to -1 means infinite.
I've added some new targets:

Code: Select all

owner : all the players owning the effectGroup
ownerteam : all the players member of the team owning the effectGroup
ownerteamteammate : a single player member from a owning team
anydead : any single dead player
alldead : all the dead players
singledeadowner : one of the owners that is dead
anotherteammatedead : a single player member of the team of the
triggerer that is dead
anothernotteammatedead : a single player that is not member of the
team of the triggerer and that is dead 
You will notice that half of them target dead players. What is the purpose of that, unless .....

a new effect: respawnplayer! Very usefull to get back players into the action, and also can give a cycle to players that joined after the start of the round.

Have some fun with it all

-ph[/code]
Canis meus id comedit.
User avatar
philippeqc
Long Poster - Project Developer - Sage
Posts: 1526
Joined: Mon Jul 12, 2004 8:55 am
Location: Stockholm
Contact:

Post by philippeqc »

new effect: setting
2 attributes :
settingName
settingValue

ex:
<Effect effect="setting" settingName="cycle_speed" settingValue="100" />

new attribute for all effects: description

When the effect is triggered, the message is displayed on the console. Somehow I'm not able to do the "parsing" similar to when points are given (player x received y points because he is sooo leet). That should come.

-ph
Canis meus id comedit.
User avatar
Your_mom
Match Winner
Posts: 653
Joined: Sun Jun 06, 2004 1:45 am

Post by Your_mom »

http://wiki.armagetronad.net/index.php/Zones_v2

philippeqc would you mind going over that and making sure all the information is correct and i didnt lose or misinterpert anything.
User avatar
philippeqc
Long Poster - Project Developer - Sage
Posts: 1526
Joined: Mon Jul 12, 2004 8:55 am
Location: Stockholm
Contact:

Post by philippeqc »

Good work ym!

Thanks for porting it to the wiki. I'll have a look at it tonight.

-ph
Canis meus id comedit.
New England
On Lightcycle Grid
Posts: 25
Joined: Mon Oct 30, 2006 3:07 am

Post by New England »

does zones v2 work with 0.2.8?

It does not work with Luke's repository though, right?


ph- great work, I love it, so many new ideas.
Patriots Rule!
Common Sense.
User avatar
philippeqc
Long Poster - Project Developer - Sage
Posts: 1526
Joined: Mon Jul 12, 2004 8:55 am
Location: Stockholm
Contact:

Post by philippeqc »

New England wrote:does zones v2 work with 0.2.8?
Polygonal shaped zones are a big no.
Circle shaped zones should be ok.

The code is at a state where a client and server that understand zones v2 can play together without problem. I'm having some trouble working on the compatibility between v1 and v2.
It does not work with Luke's repository though, right?
The resource repository? Zones v2 are new map elements, so yes maps that support them will be accessible from the ressource repository.

-ph
Canis meus id comedit.
User avatar
hoop
Round Winner
Posts: 201
Joined: Tue Jul 24, 2007 7:45 am
Contact:

zones v2 suggestion

Post by hoop »

hello phillippeqc
I just read now the concepts about zones v2: it's an amazing work you're doing!
I wonder if there's a patch to make them available on a server (didn't read about it).

Anyway... a friend, Rafal, made a map for my server (not online at the moment :[ ).
It was a kind of "reverse sumo":
a death zone in the center growing down, and four zones at corners growing up.
You can figure out how it could be funny to survive in that hell, until it's possible.
The only matter is that, hitting a zone you will die immediately.
Then, reading about your work, I thought it might be a fine solution if hitting a zone or staying inside of it, will cut off the rubber gradually, as a kind of "bad zone".

So, on the other and, a zone may influence (negative or positive) the rubber reservoir, the speed, or the brake of a cycle, instead of just change the global setting parameters.
Well, maybe you already thought at it, or maybe I didn't read well your post, eheh, it was so long :o

I hope to see zones v2 available soon!
thanks
-hoop
Post Reply