[Game Design] Building a better Base Editor


Cende

 

Posted

For the record, I've been intending to write this all up for months and just never found the time. This is your first, and last, warning before WALL OF TEXT CRITS YOU!

You have been warned.

I'm also going to be writing this in a "backwards" fashion, starting with what I believe should be the Player Experience as an End User, and then working back from that into how the User Interface to control things ought to be structured, and then speculating on how to go about doing that ... in very broad, generalized terms ... at a programming level. Bear in mind that I have absolutely NO IDEA how CoH is currently programmed at this time, or what sorts of bottlenecks and constraints the programming team has to work with (never mind scheduling to actually *do* anything like this).



There are some features which Architect Entertainment pioneered which REALLY need to be ported over into the Base Editing experience. The most prominent, and in my opinion the most powerful, is the ability to export information into text files on the user's computer, which can be edited offline and then uploaded. This functionality has now even been extended to Costume Creation for Players, allowing the "trading" of costume coding among users to the benefit of all (including Player to Dev communications when dealing with NPC costume proposals).

Something akin to an "export" of SG Base Data to text file is BADLY needed in *ANY* revamp of the Base Editor. Period. End of discussion.

Being able to export the design of an SG Base to text files creates the all important BACKUP and Version-ing capability, which the current editor completely, totally and utterly lacks. By being able to SAVE the design of a Base, owners (and editors) of Bases would not be putting their hard work of many (if not hundreds!) of hours at risk every time they grant Edit permissions to any (new) member. Being able to Restore From Backup to revert undesired changes would give Peace Of Mind to base owners which is simply NOT POSSIBLE under the legacy system, simply because the RISK is too great.

So bare minimum, *ANY* new Base Editor needs to be designed from its inception with the notion of supporting text exporting of controlling code to player computers, and being able to import that information into City of Heroes to implement (or revert) changes to a Base. For the sake of simplicity, I'll be assuming that any export of Base Info will be done to a single, unified, file encompassing the entire Base Plot.



One thing that I would like to point out about the Legacy Base Editor is that not ALL of its foundational assumptions are "bad" ones ... they're just unnecessarily limiting. One of the basic assumptions of the Legacy Base Editor is that everything will be laid out in only TWO Dimensions (or at best, two-and-a-half dimensions). This very basic structuring of rectangular (if not square) Rooms laid out on a Plot Grid is essentially a fairly good idea, and one which is both easy to convey and simple to program/database for. I would however argue that the pre-defining of all possible Room configurations, in terms of shape, size, and permitted contents, is far more "limiting" than absolutely necessary. Furthermore, the Room Plotting takes place purely in a two dimensional space and user interface. This can be done better than this.

The first thing I'd do to change things is to allow a much more "Free Form" definition of Rooms than we can accomplish with the Legacy Editor. By that I mean allowing Players to define the size and shape of Rooms by building them up from building blocks placed in three dimensional space to give "shape" to rooms by linking "Room Blocks" together into whatever shape Players desire, rather than being limited to rectangles on a 2D grid.

The "basic" building block of all Rooms would be (to use Legacy Editor metrics) a 16ft x 16ft x 16ft volume of empty space that characters can move around in. In order to make "rooms" that are bigger than the size of this basic building block, all that is needed to be done is to create contiguous arrays of Room Blocks that are all touching each other. In the Legacy Editor, a single Base Plot Square occupies a volume equal to 2x2x3 (32ft x 32ft x 48ft) = 12 Room Blocks (of 16ft x 16ft x 16ft size each). It should be a relatively simple proposition to make it so that contiguous Room Blocks which are adjacent to each other have no intervening walls between them, thus allowing Editors to define the size and shape of "empty volume(s)" within a Base which can then be filled up with items. The basic notion here is to allow players to "build Rooms" in an ala carte fashion, rather than forcing them to choose from a list of predetermined choices.

Each of these Room Blocks would be defined as having a 3D location within the Base Plot Volume, with a corresponding data entry in the text file which records all of the "stuff" within the Base. That data entry would also record which "type" of Room Block each of the Blocks are, which could correspond to the Legacy typing system of Entry, Decorative, Door, Control, Power, Medical, Transportation, Workshop, Vault and Security that we are all familiar with. In fact, it should be perfectly possible to organize this information by Type in the text file, such that you have a (think Excel) Row of data defining the location of every Medical Room Block on its data row. The next Row below it has the data defining the location of every Control Room Block on its data row ... and so on. Additionally, it ought to be very easy to program an Optimizer routine which would automatically sort the sequencing of the locations of these Room Blocks on their respective rows of data in the text file that records this info. This Optimizer routine could also be written in such a way as to make things "easier" for the rendering engine, depending on how things get sorted (ie. by horizontal X first, horizontal Y second, vertical Z last?).

Remember this notion of using Rows of data in a text file to define all the items of that type within a base, and then being able to optimize sort the arrangement of things defined in that series based on their location, rather than on a First In/First Out sequencing based on When It Was Bought/Chosen/Placed like we have with the Legacy Room Contents button in the Legacy Editor. I'm going to be making use of this structuring of data *A LOT*.

So the essential idea to start with is to figure out a way to "hollow out" the (solidly filled) Base Plot Volume using Room Blocks which can be Room Typed. It is then a fairly simple proposition to say that contiguous Room Blocks which are adjacent to each other can only be adjacent to (and thus, no "walls" in between so as to create contiguous empty spaces) other Room Blocks of the same Room Type. Thus, you can build a Room as big as you want, in the shape that you want it to be in, and be as regular or irregular as you want, in three dimensions, so long as all the Room Blocks that touch each other are the same Room Type.

The one exception to this Room Type Rule would be for Doors. Door Blocks would be permitted to have ONE side of their volume adjacent (in three dimensions) to a Room Block of a Room Type that is NOT a Door. This very simple placement rule would then create a situation where at a minimum, *two* adjacent Door Room Blocks are required to transition from one Room Type to a different Room Type. A very simple example of this principle in action would be:

Entry - Entry - Entry - Entry - Door - Door - Workshop - Workshop - Workshop - Workshop

Entry Room Blocks and Workshop Room Blocks can only be adjacent to other Room Blocks of a matching Type, or a Door Room Block on ONE facing the Room Block (in three dimensions).

Now obviously, in order to be able to "place" Room Blocks in three dimensions like this using a mouse pointer and click is going to be "tricky" to say the least. That's why I'm thinking that the User Interface needs to have a common standard, full time Data Display in it which shows the X, Y, Z coordinates of the selected object to be placed in the Base Plot Volume. This display would show the numeric coordinates, which can be clicked on to type over/into, as well as having +1/-1 up/down arrows and +8/-8 arrows to click on by mouse cursor for each of the X, Y, Z coordinates. An additional feature to add to this User Interface element would be a way to "sticky" a set of X, Y, Z coordinates as the default location to put any "new" object to be added into the Base Plot ... whether that be a Room Block or a Decorative or Functional Item placed within Rooms. Being able to use a "sticky" set of coordinates, which can then be reset whenever needed, would greatly speed up all kinds of Base Editing tasks involving "adding" things of any kind into the Base Plot Volume.

A second User Interface item would allow for the "Typing" of Room Blocks, when working with Room Blocks. This Typing would not only define the Function of that (contiguous set of) Room Block(s) but would also define if the specific Room Block is allowed to have a Defensive Item placed in it. In fact, under this scheme, it ought to be possible to define the placement of Defensive Items within Room Blocks in such a way as to control how many Defensive Items can be placed within a single Room Block, and then count the main Defensive Item as well as any and all Defensive AUX Items against that limit. For example, if a Room Block is defined as being a Defensive Room Block with a Defense Items limit of 2, then it could hold either 2 main Defense Items, 1 main Defense Item and 1 Defense AUX item, or 2 Defense AUX Items (for main Defense Items which are somewhere else inside the Room in a different Room Block). It would then be possible to create a pricing scheme by which Defensive Room Blocks must pay a surcharge on their purchase price (in Prestige) which becomes much more expensive the greater the density of Defensive Items permitted within that Room Block. The basic point here being that it would be "cheaper" to have larger rooms with a lower density of Defensive Items in them, than to have smaller rooms with a higher density of Defensive Items in the Room Blocks.

The way that all of this could be coded in the text file recording this information could be as simple as:

X coordinate, Y coordinate, Z coordinate, Room Type, Defensive Item Limit

Since there are (currently in the Legacy Base Editor) 10 Room Types ... these could be coded using a single 0-9 integer digit. The Defensive Item Limit could also be coded using a single integer digit, with zero meaning that the Room Block allows no Defensive Items.

So the data string to represent a single Entry Room Block could be coded something like this:

21240100

This would mean:

X coordinate: 21 (from zero)
Y coordinate: 24 (from zero)
Z coordinate: 01 (from zero)
Room Type: 0 (meaning Entry)
Defensive Items: 0 (no Defense permitted)

Making up a single 32ft x 32ft x 32ft Entry Room space would then be coded something like this:

Room Blocks: 21240100, 22240100, 21250100, 22250100, 21240200, 22240200, 21250200, 22250200

This Entry Room would occupy X coordinates 21-22, Y coordinates 24-25 and Z coordinates 01-02, and not permit any Defensive Items within the contiguous Room formed by the Room Blocks.

And this is a point where the "cleanup" function of a data optimizer routine would in come in handy. By programming a script which can recognize when identical Typed Room Blocks are adjacent to each other in a contiguous fashion like this, in order to create larger Room Spaces, it will group all of those data fields together in a way which makes other operations such as defining the Styling of the floor, walls and ceiling textures a relatively simple operation to engage in later.



The thing that I like most about this formulation is that it gives players a LOT more freedom to decide the shape and size of Rooms, without getting too far away from some of the basic structural formulations that we use in the Legacy Editor. Things like Doors needing to occupy at least 32ft of distance between Rooms. At the same time, it would be possible to fit Rooms "closer together" than they can be right now, since you would only need 16ft of separation between them (if you can work out the shape of the transition through Doors with the One Facing Touching Rule), potentially leading to less wasted space within the Base Plot Volume. It is also possible to consolidate the Decorative and Security Rooms into a single Room Type and use the Defensive Item Limit as the differential between the two, effectively simplifying things. You can also key certain Rooms, such as the Entry and Doors to not permit any Defensive Items at all within their volume(s), so as to perpetuate a lot of the "Room Rules" we have come to expect ... while at the same time allowing greater customization and creativity to be given free rein.



This is all the time I've got tonight for writing up this design concept for re-imaging the Base Editor, but hopefully in the coming days, I'll be able to flesh out in more detail how I envision being able to build on the notions and structure presented here so as to "optimize" the way to apply Styling to contiguous Room Blocks, and how the same structuring could be used to define the locations and rotations in three dimensions of Objects placed within the Room Blocks, such as Decorative and Functional Items, and how the Optimizer Script could be configured so as to arrange data in such a way as to specify a single Object, then simply duplicate that Object as many times as necessary as is called for throughout the entire Base just by defining all of the coordinates and orientations for each of the copies of that Item.


It's the end. But the moment has been prepared for ...

 

Posted

Quote:
Originally Posted by Redlynne View Post
Bear in mind that I have absolutely NO IDEA how CoH is currently programmed at this time, or what sorts of bottlenecks and constraints the programming team has to work with (never mind scheduling to actually *do* anything like this).
I would say this is a very germane comment that pretty much would determine the viablity of your entire argument. We have the blind commenting on the blind here because I'm in the same boat.

FWIW, I seem to remember (could be mistaken) a hardcore programming dev mentioning (in public so I don't think I'm violating any forum rules) that existing bases were text files (!) [my comment: though obviously currently not the same as AE] and that bases make up the largest code "module" (if I'm using the right term) in the entire game (!). Perhaps someone who is a little more savvy than me will be able to comment more effectively.


One man's terrorist is another man's freedom (or freem?) fighter; just as one man's exploit is another man's feature.

 

Posted

Quote:
Originally Posted by Fire_Away View Post
FWIW, I seem to remember (could be mistaken) a hardcore programming dev mentioning (in public so I don't think I'm violating any forum rules) that existing bases were text files
I can actually partially confirm that bases are ASCII text files, because I've spoken with Samuraiko about them. When she's demoediting, bases come up differently than the rest of the game world - they come up as ASCII text files.

Redlynne, as long as you're making the suggestion of typing the building blocks you have for rooms, you might want to consider AND rather than OR or single type. By default, all room blocks, except for the initial space (defaults to ENTRY) are going to be DECOR. You'd have to type it out to WORK, ENERGY, CONTROL, TRNSPRT, or MED (I'd argue that you could flip a bit for defense yes/no rather than making that a specific room type, and if you're going to include the raiding thoughts, then VAULT is a room type as well). So instead of having ENERGY or CONTROL as a type, there's no reason not to have ENERGY and CONTROL. It's going to cost the same in the end.

For the people who simply use bases as storage and transportation hubs, being able to type by and would be the simplest solution. One room typed for all, or two rooms, one typed for everything but transport and the other typed for transit.

---

No, I'm not back in the building community. I just ran across this thread while looking for a different resource. I still build, but I'm still annoyed with the company about the whole thing.


Prophecy & Dreams | Prophecy & Dreams Discussion

Nerd Flirting | More Nerd Flirting | Nerds Talking About Flirting

Unbidden | Star Patrol | Real World Hero

 

Posted

The notion of "and" Typed Room Blocks runs quite counter to the Legacy Editor which everyone is familiar with. And to be honest, like I said, a lot of the *concepts* behind the structure of the Legacy Editor are pretty good ideas ... they just have built in limitations due to implementation(s) that make them less than adequate.

And lest anyone fear that I won't (eventually) get around to writing up how to make this whole deal work with Raid Pathing ... fear not. I have ideas for that too. I just need to find/beg/borrow/steal/misappropriate the necessary time to write them up and post them (all).


It's the end. But the moment has been prepared for ...

 

Posted

Quote:
Originally Posted by Redlynne View Post
The notion of "and" Typed Room Blocks runs quite counter to the Legacy Editor which everyone is familiar with. And to be honest, like I said, a lot of the *concepts* behind the structure of the Legacy Editor are pretty good ideas ...
I guess then you have to go back even beyond where you started to a more basic point and define those core concepts that you see and point out which ones you think are good ideas and which ones you don't, since you're predicating your argument and structure on those.

For example, while I may not necessarily disagree with your argument in general - and I happen to basically agree with the concept of building by block and typing - I fundamentally disagree with the concept of single-typing rooms. I think "and" typing, as contrary as it might be the current system, is something that builders would be able to comprehend rather quickly, and could be used efficiently and to great effect.


Prophecy & Dreams | Prophecy & Dreams Discussion

Nerd Flirting | More Nerd Flirting | Nerds Talking About Flirting

Unbidden | Star Patrol | Real World Hero

 

Posted

Quote:
Originally Posted by Redlynne View Post
The notion of "and" Typed Room Blocks runs quite counter to the Legacy Editor which everyone is familiar with.
Maybe I'm not correctly understanding your plan's intentions here. I may well have been defeated by the wall of text as well. (I am familiar with the conventions of the logical AND / OR, and tend to think that way when presented with those terms, if that matters).

In the present base editor, there are a number of examples of multiple item types which are employable by a single room type. The defense 3X3 allows control and control aux item types, many control rooms allow for storage type items, many control transport and energy type rooms allow for defense items, etc.

Does your proposal allow for the preservation of these sorts of combinations?


 

Posted

So in your building block concept do you allow for overlap or is it always full block to full block? Can the blocks be built upward or only horizontal? Do the final results for a room have to be rectangular or can you build one long string of meandering blocks?


Protector Server
Woeful Knight (BS/Regen/Body Scrapper)
Kevin Christian (MC/FF/Primal Controller)
SilverCybernaut (Eng/Dev/Munitions Blaster)
Apixie OhNo (Fire/Fire/Pyre Tanker)
Y'ru Glowen (Rad/Rad/Psy Defender)

 

Posted

Quote:
Originally Posted by Redlynne View Post
And lest anyone fear that I won't (eventually) get around to writing up how to make this whole deal work with Raid Pathing ... fear not. I have ideas for that too. I just need to find/beg/borrow/steal/misappropriate the necessary time to write them up and post them (all).
I'm pretty sure that you shouldn't waste the effort. Zwill said on Virtue I think it was Wednesday night, that base raid is likely never ever coming back. It would break too many people's bases and it's not something they're going to put in the time for.

This suits me just fine as paint. Now if they would just remove the arbitrary limit on how many "defense" items we can have per room and make all of them read as decor, I'd be perfectly happy with the base system.


 

Posted

Quote:
Originally Posted by Cende View Post
I can actually partially confirm that bases are ASCII text files, because I've spoken with Samuraiko about them. When she's demoediting, bases come up differently than the rest of the game world - they come up as ASCII text files.
At least in the "demoedit" world, it would certainly appear so: that does not mean that storage of that data is necessary identical on the server side, but it is not unlikely that that would be the case. For example, here is the first portion of the description of one of my bases, copied from a demoedit file: (apologies for the volume of text... )


0 0 Map
0 0 Base "Ö)\0x^í½Ûrã8².üßöDô;(ÖͺØSÝâI‡º“d»ªö”{¼-O׊Ùñ‡¦`‹Ë© ©ªr=ýÀƒ@\t<H¬^Ž™î¶:óK2‰ðëßæ(Æ¿þíOÅ^ Œ_ÿv†Û¹º/KïXæ¯[îw8zŽÂýîÓz0ã_ÿv’×»(¼8Ãá0/\\„A¼ß’BÃqH!ù5‰B¿øt<<ŸŽh!eüëß~!<Š_îÂx0þ=û‡|ñÖÉf@àü ò{Ï›„ýXúËm¸~ð¶x0š:”Rð®\t\s¸DÆ_®p‚<Ÿü7\rBÙ&ÿ˜CVöQ^ ôÿô×ã?f¸(°_FI\rþã?ŠßHÓ1¾Æd46‡cÛH™|ÃN¥ù\p“ØÏ¿C’OWì ·ë`ýëßèÿŽ!ÚNqÄ!|gü6¶\søÝp8æ±ÒŽ\\]a7\\}A^âÏ„2s䦹eŒÑ؍[B^´í¤ŒÜ\s"]\\ï]¼8Ãá0/\\„A¼ß’BÃqH!ù5‰B¿øt<<ŸŽh!eüëß~!<Š_îÂx0þ=û‡|ñÖÉf@àü ò{Ï›„ýXúËm¸~ð¶x0š:”Rð®\t\s¸DÆ_®p‚<Ÿü7\rBÙ&ÿ˜CVöQ^ ôÿô×ã?f¸(°_FI\rþã?ŠßHÓ1¾Æd46‡cÛH™|ÃN¥ù\p“ØÏ¿C’OWì ·ë`ýëßèÿŽ!ÚNqÄ!|gü6¶\søÝp8æ±ÒŽ\\]a7\\}A^âÏ„2s䦹eŒÑ؍[B^´í¤ŒÜ\s ×ôòÃçð9\\}ðQ¯†n „ÛtX=xAb.£ñx4y‘9x7r‹}’Â\\~C;úÛ/p8ÀÛGoW^¸A?P´^‘ÆKXíþž×ÎÑú¯†FQy¼Íæ²›µ–\rk­±õ“·Öˆ6 U ?1h›‰Ë§êÂÅžO&ÅÐö£ç¼¹PsYÓ¶&…5ʧ³€]ÑÇ#hûgŸ£a m5†µÕ¡a~ζ2\sY[õ›jkªñôçn*»yKMa-5ùÉ[ŠÎ?Ë:Ö±›ÄÔì7äûC#kªÔ±R6Õ(ãÐ33 4ïÒ½›‡É¤ÓŒÜ€!·Œ–Û“ùˆ÷¬ß ÞÜ0\sodÛ-™™Åü•#÷€Xéލ‡SghÌ–çÓßæçÿ;1bæK“Ž‚E¸Y9l¥ŸEa¦ã´Û0 ÛÁ­txRÜ£¶Fµ9l·ÒçÉp·å¨™ÍÆIn*L¥ÿ‘â·5NÌÜÁ´ÇîLgÛ8I{+ ÷dØîÂ×+­\dÍý\p\d¸\tì(ÀQ>Ç®4Ï)öi[6Ç\d«ðÁ¦Sì/Á!1ëù8±”v’a¶\s“–0SM̤¥_ä\\s§†O\tÙ¶ÙÔÙW8~)Xi)ZÓ²Ú² 3ù€vøöûN ì\r[œ.Уà\dÎQƒ¬£i9m©=\sWTí-)šàù_—ä A¶ÑtìiÛ R¨ÉüÍšØâ sE¶a°eºÏ.Ü dMgÚöÃM‡¶\tüÜ>.’a ¤96Û24àÐøž7È@šc«-ÕʸÃÁ¬ÿØàžïãÍë]˜\dx}ç£ á ëhN«-ÐEtp\n@-\0 2‰p[ºÚÈg~»ðgŒžÍlƒŒ¢9-¡¶ó(\ndl|A11â(~Á^„wjµ¥­Ù¤&X6óåWîçÙ ³h\rVõ…Ìd-Ä “h\rÛ3‰ã ±V@á6È(ZÃÖÔ^·\0d­á¤-_šÙrfV´p m‹\r²‰–Ñ^gØ\qxa\dàÛçlÃf\sDe?D(Þ¸(0r¸ “hã¶à:¹…1»\\Œ™i9,ÍmM´ŒÖ–‰b`2N-¢²ˆ–iµåxŒN[ù§°u¬¹cÀ°·æƒ8ùÌàg£ ÁÓÕ\0zöÜݶò;0Ëh\rÛ²Œö4ƒËûÓUhIóú8^Æêi¬v9h˜q´Z · Am¼Ã1A],¶˜M´ZK¦Î±¡!Í ³x ȁÙE;ͺøy·€Šý[·Å`ÆØNwŒ~âcã‹5›þ¸˜0ãï˜m­ŠsÛ_ÚjÏÃ>B-¿ÄÑWÝ#÷¥\0\rsÚˍ²òˆ`i‘)\r#â\0¸aèÁbæŒ[ ¼¦kÌáñø¨R™U™+#µ\s` ¡éå6q7ʸIç2\0w[~â!S¨Y{«Ý†Ûj˲²e„Aq\qô :Õ îEI¡FFjw€€6¬ÖVoóÃ/ï\pªï€9·#µSÀ0OÛrqf–e)ØW8`þՁ‚Õgó±·ž»2Š†.»7dµ±·ÿnöÑ k•v“ ŠF¹é£–űhi#R[—¶[nEg:vF“¼ÈÌŠ,æTP}xÝáCA¿eâf—Ä­.‰Û]wº\d>ê’ø¸Kâ“.‰O»\džšàΨw:GN\s©Ñé,5:¦F‹óôDŒÂuPœ4ø LúG‹Ð\sö„®‚Æ&cxø›£o¬‘1™0‰+?!d̉ÁöH9Á¹ÂìÅ¿\t>úˍ OJS-·H]¡tÿ¼âÏþ+µ\t³…šŒMŽ1ûºâS¶ãÔŸO‹c¨,…ÛBÿyÇâ“:Gcl6 ™SCþåE[½®Ìïæê?Bÿà>“yî=v}äm©´zÀî†}Bü#åâß0‰ïl 5Ñã\t*F]J\t N݉ú)ˆw«\pÁ…ˆ_7‹\\à­S.ÃSØ:‹6b);¼¦œ½ˆQ£…)WÿƼÍßþT Á+…šOé_f[šô”z Lýq…[¡÷yh\s8돡ï­Ñëo¼§d>­Ø\s<kël¬¯ðbÌ3Ÿyz¦ç=:åýÙ{ÄQò: ˜ûè®Íz¹\pË¡ßæd„½¬¨4<S³3S®³oè<ÇIgOšøûGÎŽÙåüÎùÞow ”ÿ\qDþyÚúXòÏÞ“ª—ÛZ·xíí·¿Í\t—êêÔI¦r«loBwãõêžèXÅû¼P4 øŒâ¸6ÓTiÞSU‰Ã}|ÂU\dms®™¨Âp½ú¼W·osŽéÄ]&ûh]ÒOv\sÜ2ùî÷ÏÏx}.áî1)JJ½\s°x­±ûtj`E3²-v×At44»éº”`P.Ñn·ñ\q<øG@Û¡6Ãl¬üã@ä´t§_—;ìzˆ´lSsBUl² Á«k\pAº&ׁp‡£­Ó#òñ`b™–ÁR@+ÐboÂPä’ÍöIxº\po¹¼‘\qꑪ“ \t\qužÓLÆíú?Ü-ôH0?pÙë/ï­(£¢†=š£ô ÓlÿÀ5X¼EHß\q¤5ˆ¿EH…Äß\q¤UÔ;¤oÒ”:‹Š¢UÇaЩ=v&åxÛñ \sæd:r¤Ÿ˜#Ë›åOŽ¥¬×ÕÁFa”S/^)\tµVMkG/þiñÃ!äI§\0óKÞ±Üê—p1OJ+‹yZ¿VÆ<Çö°z~\t£—xîVÖw«\qæiÒü šð0á÷„+rx–È/â‡ÔûÉ£‡cö4zhÍñPçr¦Ro˜°ýš¯²ŸËÕ§í.\n¿zd±½x\p ø\0\sžË>©ª¨Œ\pP¬ ñë+Da)Uc™)&\\8«ëÛ}‚‚ä­*@p½Åò׃[/®XU0ó¶;/6xë¹å SÍðiUo €†ÝñEap®yV5×[bV÷[i’z*[gŒáv·Opô§íKìՖ›Gdøt&ÃœT,‹üú^äî½dNæv&ÆÒõˆþñž<÷a ƒÃèUÁH;Ô\\HtñˆÏ;{\sÜË©TÅ©VU©b#uæZRÅKÏÿZÞ1„®@—Šž\s‰ h•Y´\r£;5Ž’‰¹üÃc6ä F»²>®¹óT¡T^×Úûž{Gô«’ 6-fó€·;2:üY€ü×ÊΩ/Ï-JˆÊ\sã˽‹Âð©‰<šóe<̧ S3ÜΧ).åÏ1›€\t£ QN˜+¼\rªb(£{Lzª­N1¯ûýã«‚x½ùò&“~‹ý„ø¶ŸÜnæä=~ÆÄýB”Ç ã‚K\p³Üy‘—<lÂH5)ë÷Å\réè} lª.&ÉD}³•d’(ÓkÓIb¶éàg“¤Âxà:ûþ§ ´kЪ_1 ˜c1˽ߪƒ—ñ˜EÄAnÒŸ]y~#kË/^°n\pSḂnã,6(ÚvÖ+éœß#?ÛEQ °&ŒÈøZºt\qð<Zõï‰fy\dd×ÌOê¬Íî÷Ê!<ûŠƒgñ¸ó¾{ZnË-½j bcëÄ\rÓu¿¥SÅw³…êòÓ±ïªËGS#OG™Fž–¼|ñqÁ!‹x?uòÉâ—[Ïv©^NãKJ½¬sÒÔ’‚Ï7û²ÛƒÔ‘–4䞨ï²ò<!½¸Ï1Ó0j á°1fuRìsIyÒ³:£aÖ5Ù•˜\svcÈåÝàJÈéÅ-@¶ó3Ÿc~!غfpÑ>ÞP?ÔÃþ:‡¬<TÇ Û:—À ;ŠÝö5…ìF¯q‚üGzâÒÌ OÔÁZ\nÙÑ]ðTBf7öãc\s=¼èûaTl¯OÔA\r¹55g›!«—• r¶vm9½N¤dµ“Ï OÛÒÌN®1œãCê‡;ÿÅ\sr“ýú•Þy—#W›AŠ<K¸h9Kºfÿ‚6öùn¼Z9b˜Ù ­Y”Ó¶®ÖÎ×Ûå¸\ptÍl\p˜ã.[Bu¢ •BëJ3˜Y»ä#¦âø6\s‡q\dÌ:N̶LÍ„iGcÄ®Î,\rÈ>N†­\róIž–n Ý’œÌ} ×̽ýt•ÃÙÈÉÐÑ8\d*‡]xؼY—ÁŽ7آ؇öc†z\n2“í@z5j\sGmq¨«,û±Y YɉÑÚ˜6¨‚74ÔüE¥S‰œ˜C‹Â¤xÇù?fé\\ÿoÃáÐÒ÷*¤‹¯µÚJN\r Ó˜´æ¤²õ\qÛh²@¤‹\\áÖÐTi\pmÇ +§-›c™¡FüÝ°ò\qÛ’²æ\\i*)lºÎm\t¶èjÄ*Cl*\q¦Så’‘¡Ùš¨³¨aLO PÒÆ¢…¿ÿþ …Ǩæa\sñoÑÖ[‡Ájæºû¹¯«[üCX˜þýgüûÙÍa|°£at¬>îùþ‰žPZïÙÑÑÕ•»ˆª&MÍ\0Y}i®Ð–Ž™{< ca! ·uvܘµs>^ªÊaè/Õê§èËå0ôgŸJ~ÞŠ`˜ÏßâX5o+¿è™DË× ÙÐü€UŽü!B›H6oaRžm¬-\qô”àõê*tâíƒu¼ºª®Ip¶~ªÂ9«®Ipñ>¸©®á\pHoÄì…QD·pÐ1 ¢9°\\7ˆ*Krؽ‘ãÖ#f,®NKJˆ/o§Î_³¿ó÷ºº¦ÔãÞŒšcœóê^»×ów.­,õÄ°Ïr\\K+KrôG5“£?–M\0u !­üyúãFZY’cÒg9àó¼G6#·Ê7§\p¥–wzÓò9¾ÅiIOÇ|Žïú´¤„¸?£â !òè\qùê¤ 4Šûcu3x‹“oRíÞÙIA©}G½Á Õý5W‚=^ËWãVFùŽžÂhK¿^-7)‹8(¬íi_ˆ°^Éka’œ]³7ì“ù\q¬sy-¬OÎ.ÉõÓ“çÒ­¤Ùí-ÎŽVÁd¨y£¾ ¢ö^ÈkK’èÄ \0)Ìõ9ŸùŠW^ïyÇMXË bôgX‰°Îäµ¼\d=Z¤4í“þ„U½»É/žúÃs“=oØ…µ¥iÒŸÑ\pº×öT’?ö[/@_|E>Nï›+ªa²œ}¦ˆí¼&ÉÙÃñÂf¿VTÃdŒ0Ð9¸úˆ~&¯åE1{c\nb ëhâN9q¬®\pU\ptÖ¸ça&©ª=3:áx\p»¨®©-@ÇS»î–UDÈc9³Ó²ÖÚ¯cÈMõNëwkç>F_ف~ãFÏQymôwÄíÞO¼Õ2‰ ¼—Rx°T\\|§Êç=(\n_øEQQÔsÈׂ\qdÝ£º­A¾Á _¬•ç‚¢Ú!\s¼[À¼u„Yówž\dnò×æÑ\dqqå!¤4GÜÑ<‰Ù¸ýoÑKHL¼—ðKG¾°Ô¦F´=R 8P7ÂÂÚ£¥m¤Ë-b§‡WÑ뽔⻂:·Ö.H÷¸g²:·©ãcuÜÞÕÁÂ3àžG{/¸PGå<^ã’íÌM¶ka!TË’·ôŽ®\\h .ýýóŽÞÉ>­+µ°}Á.÷ü¢ª¼4‚/‰WÏzü<HûNä ΄…¥±pImv:¯®du<î‹Î¹\qäEܱ\rç[W”ZZ\s²Ù6âöN+»¬{ÜW²ºR{ëdP¶;»-”ÞÝûˆN-W”ëdAuŒxVYQB|IíQ¶p³ªòÞK®Fò‚èÝäÈMø\0Øq\rù¢óïÙuuM\t ó\pÇÅ1²Yu\rù¢+ÕcdWÕ5½Å Zù/]cÎÁywÇ8Õ50\t¯xžWè¸éo@5ŒŽ}?¯7Õ5°>°Ï-}+uM/´]Ýc/x\n£ô¯8ÍYùL¢³÷IÞ…ú ˜DçŸ\sÈ÷WI¸šE[þi¹˜Ç®åOvŒ½¦EîGŽûUe_ËÛì?²X KíÞܵ¢VlC“˜~FIÉ,*Š{Šýh‚^WV”ð÷g݇;¼š­®è®Å¥<òéLã B\\\nC~ötØe²ßá§W>>–—ôñÍi\t ñÙý™e‚žŸË±Ó¼„GÜ#M’ã[œ–ôñ=úñƒ^’þgVUÞSô³Ç8ô÷t“e‹~°?à ¨6Òû Ç•´&Çt lÆêìœñì´¤§c>ÇwuZÒSÄ…o–Gå¥1Ý›\\ø2HÁª.-/×iú3‚µ¼ÖMg/ØÓKËKàí~‚‡\r›ÞŒùêZݝðˆ\\>ñ󸢟£þåueE?á—‡ÈMU9 ¼}Qð I«å¿t\nþh|ÜTVÀàŸ{à\\ßùaLÏ*gÇ#’*^CÇëT­d*­–ïÖÅÑ\rÁè Ùó!¿—ö´Íkn.÷è*¡²RÄÓòÚíßíÁšÛ²=Z˜ð£|..­ÝöŸŽ+AúXZ^ø: Z^ÞðšçsL[t@§ô´üœŽòÝgDYi>?Ö¸GˆÌaÀ`ð×ãr…°¡tö(+é!4K@,¬Žr‚j` œ=êÄ5ò•°°ÿ¸çžâžyÑj¾bÞäre<êÛãÑ<«®é}»/De¥v7zÓîÜ€ž\t K­ÝŸñ¢7;uN}u‹ûx4/ªk`ãüìhè—¡æ†ÆBXÈãnÑk7ÀoéåüT·w?qôŠÝGÜ\0/«?úPo|÷r^Þ K¸û³žÐ›—}ô®f¢²ž¢þç£ï\pìŠÊR{—‹yì=²<×Z{î±J)•òÈ{8â1.Ä ¥=E^º>iVQÜÓ±^y]Qü3`ŸWð_vÌ\\UðŸ½Ý—®…®ÆÄE_½Ò^¼ ®§R”šzQQ\\ÂÞŸìdý‘ߟͱ£G+åÜR,du=í }ËÕŸ5_×W1v‹^_ûô»¾ÜŸy[9«(.µ»Îùôn±Ÿê•YÝÏ0z®*Š쐑ߣBY/.ªÊyô=Zc•Q^U•óè{´_SF9«*/¡ïÎ<Õ-sYlü_ÖßÝ}Ü?­ÆÜí­§ý=754OÐëúJìö¹±×Üuí‘Þ?Æ9¯®á\pèÑY ®šôÚkžÉê`s¡R€ã\rVú¢Æš½G¯¬×±ÂýA³h‹žñz]Ú³å kãî6\pZ/ש?–·ÆXïQ„Y+3Ak­Òq÷Ñ\r5ו\pt†ûِ¢ ã(ôišê ôVŸµ°ó´ù1˦ÉÒæiæüQ¶üvÃÕ?#ÏÝ ßÝoÑkœ Ÿiš1ÏŒ,c~l ÓÛ)çoÀŒy·FËohG¿ù€ÃŠƒ¡±2ø{ÆôÁ cðÎpœé8ËϧEf©¨‚êÃë§\nú-7»\dnuIÜî’¸Ó\pñQ—ÄÇ]ŸtI|Ú\pñôÍÚΨw:GN\s©Ñé,5:¦F‹ó”Z´Á—0z‰7áne}·VŸøÏÔ ¢¼}bI¬©=v&ÃÒŸbN¦#Gú‰9²Œ±Yþä* #úñ:Ý—ÿJ•\sûùß1ýåÆ\s_¤zo=Ÿ\\¶r¬\d‘þYFÃl@BóÏà€ÙçŸÚ ÃÿŸN:ùT€Æ§\0\dŸ?܇á–Tߍb`¾à;“¢\dÎß`J­æolXõGL\s›\ dŒÕÒûÓÁu®™g[ìWæ/\n¦õ‘×iÓÌíLßÔ=œÖtÆÆÉAMJ/A>^=`w“»œÆ}&ó9\r{48å ñ9íR³¡¶Ì¿§ïÀ¥ù­¹¯üÛp84‡Öè÷ùÅSŠÜ(0äé2 Ž<[´¾_\tOZðKöó`¹Zl\q²öð—/Óèù#M¢/-0\0·/ˆYÜùD„`¿UЇ,+d1VϽEIä}ïŒÑò5H6ôó§ Á¾ï=ÓºÿxIgï½—Ä›ù~øÚ‹»M˜Ð¶û‚Ñ. la\tÍe¦1̦Î\dÒ:S§|6ÛHW|êÉ“ÆZš<wä?O¤]È ¸E„À>¾¥oñmX3 VÁ¶,å}\s‰ÉÖ5/ÿu±AÑ3^Ï#ǝq[¾n½Ì¬Y´M˜NØ|F4F3¿wÆa™D(X‡O7(Á\n& Ÿ˜ ÑÁî ±¹!áDß5Š’Mg\q]î…·þ´Ýѝ“²&o•ÕíþO2°‹8Z,®·»tò/½çTuÓEËpï?DäïñúVµØç}€¢Ág2ÃtX\\aïI¤·õÑÕÛÕ.35u\\æ„© µ¶c¦¼[ÑÚ3ßÛ<K´ÝùªiZ¨-BJþûbƒ·ž‹ü›0Úî}Ô»ë€ÆañúÎßSƒÞá4ýˆÑ:þ×îÊ‹w>zíŒ\rqã-Z r½¤C«@¦jäâE¸în(Üž?à ܪØÔö´Éœˆw^D\s“‡üë¯Þš:¨]qûúá3Ñpâ‘`bµU¡6£{ŒÜÄûŠ? •R›Ô´ÕfpK–Ý\tŠ^¯„\0»(IÁiæâÁŸÔDÓÛT]ëêì\tqu5SÐLU§A\t…ª6ÆfªÁªZ²8È7¡xÐÕ‹ƒkî⦲‘q”ȧ†iŒ ÒûgáÈo.\t#²\\ØyÉ+·[*M)ô.߉Ǹ—–÷\sË’Çx#.-!ïÏ–÷2!V÷‰æÝEa‚Ý£Mdq5L–š¦®¾,DR…X,f¹AtZÅËУ,­Ú2h½Ê }f®\dU¥~èOÖwml£¿2ÜHªJ2ôçäÌ\tЙ¤ª\dCnlÉÜÀp¯–/ŸxRÃK`ôÇJŽìŠEÒ¸tRÃK`õ®´\pèe8ÆyU]S’ ?£èƒ÷”Ð\dÀdƒW³À¥/QÆ\\Gˆ«{*Ë?P´Eü éï<ÚYdÚþ´í ?{1Ÿ(þΣÕÊ‘îmG8™–Ç=míÏ{÷\pŸvЖ,Ñyí(¬­-É]è£È‹·è¿Ãè‚Ìåµ¼ Z‰Ô}DknôY­ÐÄÙ™ÉkûÙ#÷˜=þ‘ìƒÒãx|) ¸`!p6àsqi\t¸Žßv6à7âÒp ÖÙ€_‹KKÀuÖîgã½*€1®å_v\nüd\p>—T•Ú^\sxØ\piQhÜMëP§\q¤ Nýìø÷ҐÑ1DÝžYÒÔ‹=Bž.GæÇ¿÷s\\-B®++xøZç~;†¯5J´Ú½ÛeÕrãa½úBŒ_ˆKKÈuì>(¨>t¾yâÒÒhÑ™š C?¨žÉ5¼ZÚ¥Ó/Üp›+ªK¢ôgÿá¸ÉÕ5µ;ã¼Ìªkz*î\\Öñâ»EžšÕ›ãßKí¬ãw‹¶nt^Ç {ìV‚ú;ž:¦ëÌ2€½xCñÝÊ 9c{äòÔß«ÕÑ—šßú¨¿\q@wýµ´i§\q­M•<|-7´cøZq­¬Êéo‚ºÔ¶7•¥1Ó›F¯ƒÒIR8¯×’*ØúiDè“òÑ‹{kµ}‡³÷€ï J\\\nC-J?C8mvü{?GS]ÿ^«ãJv\nöHqÏ*+xø}2£5+´°Âd±håÇu\n¶aˆžìRú«ØÞˆ Œñ-Õ¼(=J(÷þ4¼h˜_Ëkk Òm³×Ì8Ö@ÚšGɬüƆ3ôÙ¡,ÈA²Õ§€8\sù•ì\\3¿ÊsY“‘‘²ÿ<—U\t ~T(ã-‹Á³‹\r—¡ï­ïÑvW@C ›†5j2#Žä\t r:\sÚ„œÚ®y\nƒìhØSCóG\ru ê[‡ä‘ÓdË]òÎüÍšØøÝp8Ö¹<\p½:O†ÞœŒ¬áh2ÔCŸiÇŠãêqLO\s³ ,ˆfõpépo»WÜ à£`–/|h•Ç•‡¶!ý´#ú·è™^\qñv_;ãôm½u|ÃÎXh·ÁJÚ½µ‚š.vÚÎò//Á!ŠÖ‡™Âtšj¦C£-P€[º í´ò–tkG·Çf¦O\sjC»fúôÃqÓnñšúýìÂ:æ6¤‡·™6H\nc€>dOŽÆ ãÑtT™ƒw#ÇIÍs\n:¿Ë’Ý`‰©³¸]=záý M¸\q«Ôƒ£WZfµs´&*th•ül±ñ¬B³¿ãNëßÀ o?å1xÖ~fú?oû\t²4ÇyŠ/¯¾®º1ÀPz¦ÖЍFv={XµÙLº¸Yì#Bš½ú´.¥Ö»ýëS¤ Y/EVn\r¤Ð\n}[Š™¬®ÔF¥\0Ï‹^(p_h偞[ŠkY]I\nÿn¥øà{Û]Œ‹S®¯qÌMpquOÇÕÔyÞ–{‚++¡Ö‰sw‹ú3NèÍ“ž»ºÇ»0æÁŸV•dèÏ( :z#©*ÉÐ qôJRÕÓpt!©ê© š‰žé›\p\nÖ[Ä¿}#¬í©\dŸ‚õÞ¥˜Ã-â¯w(óصrWºÅNÌ]m¬–;Â…¯ª\\^Bo÷ýrévZ6NfŸŸÏâêÒ(ê,˜n`¶É¼ö\\²Ï¢ÊžÎÔ ieOg†\0êLZùóôÇ\\ZÉË¡u5A·r|ؐ_W_¼uø-^]o#äòs]\\\r듳ß-\p;WTÃdéG¿Ü(ªa²œ=¼¹,ýñséeݹéûH`>YT\t듳Ëq<aüè“Ÿþ IT::–&¬-I¢“×oIúÝ\s ymI’þ¬Ê›öIN ]áGÏ÷Pšž˜æfÝH+y9zäÓ\q97¢²Úã¨Ó{(\0¯De\pÐ:¡ÍNAŸF/ç²:^ˆEü…‹¼Euiì÷f\tý‹…¢º4¶t6ź;Ð``i9ƒÝIP?X«c¤;¾’à#M ”<y¹TZš=‚.\nÿ-äµ°^ÐK¦©(õ‡’ŽMîXQ‹_ÉkaýÑQæòÚ¾Šò9t_ˆ1àñŠ` Ï«Usp3A ïYíXîJPÔg¼ AWKÕ÷\0oOÚ7=Ј´úøº ¸t—¨²¶ +Žñ£—ì0C•Žº‹*ëžå‘Þ|ÚǸe\tîP„üׄ˜ÎkQY]¼žº…¨¬‡ˆí€hE:]U5Ú\0ÑšµÝ.tñ„™¨ †úÔÞw8E›nÎö±í¢²ž¢>Y_Ì\dU=•á4^p#«ƒIqö\ps°VÂä8{o4 Põ§Otb¶ýéÂ¹¨ŒG­åFœ µ:e³?#D˜;ST—dÑq‚. Ë•¢š—¥Ggûõîú“B«áIh\pÁwz?ÆžœÖӝ‚¸ö×ÒJ^ -ß©m¯ºÛa.Ú9ŸÉkkKÒq°D0T®¤•µén)/tÌfŠj^­ãvÎxPVÇøž¹éurýôîÅ:¯:®¿V.é™åÐÉ#ÕŠlu\sÇx…YÀ/7û„þY]I‚~Œ¨Æ™z3¼K¥Ô(ƨ•€Ò]w4JÜ×ëŠJ4¯À8œç¯ÀÐ:¯¼Év c8IW?¬ÝÎs4~|(úãÌu÷ô†”ò6õim©?t¦xÛ#éú{‘ïV·ÅûókæÓªÞ ^&œº¹EAâ¹a)ÌRõL‚³_ozM‡çŽî-mPÈë£ã\n¿–‘îñUeEo_á¯(NÐI¶-WZ:i“mcý“êª×ՍWÔ¥R«qÉvåQÍÄ¥<VS\s\r»m¬÷ûÒ 3鯥ªcß;A7?úµ„î’:Wî’£Á¹:úµ4î.Ù³GJñº²¢„ØèâEeE\tñ\ puæv½íqôŠ/ì\rÒëï;?ôÈÊ£—£õÇiU\tõ\pgØ\t´…¤ŠG­uŠ¢sÔжÖZ\puŽÜÖ—´ \sÐf’*êóç€_Çîž* ‘¶¥ëFä&|\qƒ¸žç¢†°\rü—D\q| U}i8]ÒÅã»RÕ—ð_Ö8‰ð]«ê{Ž_oüôoü덟Kâ…»fòZ»ÖFú9°_Ëkaí~öt˜¦!I-Äs`¿‘×–°ë\dœ»N»_Òsh8ú/êõˆÐ]Ék{}!¯å±kíž»Æ\\ý™±ÿÌV¶wØ5æêE±Wì+-”ð\\TÛT\0¼Q~P’à’þÁɾ䵤ª¿¨¯\dU\pÔ\r\\×më‹z2\sÐn\dU \pÔ:º¥Ó,•œsIUm:G½Tõ5¸­/hª©PúÕÖà|㢨Â×W’*X[Ÿ=\dÀg:,Ä¥0ä‚öîy±‰w#,äqk¯»Å­Ü“îÖëò¶î¬²¢„_ÇÈw‹ŸÏ7Yˆ KyäZY(Ý\qgéšqr|^Ÿ–”÷g¬<löÁGqy/ü)Á£òÒHѹڳÛ\\»2ÊYU9^Kžý¼ª¼¯è³‘½8-á:HÝ\q®¿\0Ò‘¡ÛùÚ4(ÝI*b3å}¥Y{UUþS _T•w„^÷üÁÐnü6Ÿò=cz\0Á°Æš/p6îˆeˆ\q:îç§\pµ¿íÁBºë\t»ÉêßVéÉô㊾\q^TVÀ‹®ïë2‚tº/lÐS»ì¸Õ“¨&Æ^\0n&&amp;amp;shy;„!?ûŠ[\0õJZ\t“ã =ðí‰fEA¼Z¾î†PüAŠé:*Ódü‰dÀÇ\pÉ.¹A\0{£õqoúì‹G߆ˆW¼\s ÞÁ.óhu&ÊÌŃ?½gÏ\s.UÛÀÔ鬲‚¯:iñCäí·;òu²úÄ{¿´ 9­ãq—ÜÍ9Å6“Õ•pÛÄ= ‚ð•~ËáåÊ@ƒú¬0¢²Þ4g½\t§1ëñMeØ¼d*¡À¼/¤•\pä—Åpsi\p\\ËvêþÎ}Ll÷!ðo¼Û¼òƒ½êƒ’8—œ¦\pË=«(îÍ°Ñ v?.j\tõÛö’¹#ÿíKú#û½4R/Ù÷y´avZÂc¼¨Ï‘\\ÒÌ-°#/)¥E½éíÒ\\PTByÉ9óöžûò†üôæÊzÓš8~´ç\\TÆ㼨ÒhÏ‹fÖ-wTùå KH/Ùó³õïcúÊž1Û`¹’VòÈ/:·à®¥•0äg\d\n Τ•\p9.n»\s‹3ïÉc?\pžëóKcA[ëÛîqÏdu\pÜ—Ô*€ˆåBëãÒHº¤o«õqI2¹~ë­ŸŠÖ-Ë×(` ¥e;}ÁÐòs­abž­›\0¯µ>†É\sèƳ›œi\p/GîðÖ^èk™3bŸW÷tüpžì\\XXw·9-€)[çS+_¶[9óàÇâ´¤Ô3:ÎL«ù:+K×1øtã7glè¤ì°‘\pKÙqFæØpÒk©ó¤ì\\¡íl Nx‘—ðG”N«J=¢3Wºã\s@¯\pU°Quö¥ÕŠ^V_Pân¨J½ÂñyQ©3„õ°é ‰4תú’4:™Ú]Ks4ˆ®\dU¼ Z¨3Ë0“TÁFÕåe\0÷ƒNØêÌ2€uUú?ù,Oûú9,áâ‹yìZYc¯=z¬æ’* ^­¯ŽeÐC:YÝb_z»MÐô\dzñ§…Ž+Jã§?msQYÑSü3wã8^}ʏ¶• —FOß}£…ª¾§}!F;WÕ÷VššF¯|ï# ILëâ2@W¥Z¹vÝÊp‡£¿—O˜¤\p¥VïÏ©¶[ä#/&úó“ïïY€„/ª„ž³Ë‘·óâ´†øìsVиWÒʞʑ·óÕiI\tqâò9¾ùi\t¸GÑxàèÖJ Õ8â›Ó’Ò¨èb…îîÑz\n8*z‘ÊñÍNKzŠxŽŸöëµÏ2[öâFÇI\rL‚³ëçrCz¶¦|ÁdQC}öv×@­•ôr.Ô QY\tµÝÔP]ÝŸh˜À=ZH+KrôgnÖŽêi½ÆÒéY—ÚË6­áÔ±¢xÅLU_êÍÙ©0ÿ¢×_l=Úì Wø\tqév>a-/ˆÕŸ¥©ë¼¶v—ôZ’-³Ž®©^Ö™¼ö\s’d!¯ýkJÒ£@ ë\\^ûõ‰†\dZigç—äZ^[ê“þ,3J¢uœ¾[I–ûd-aô‚#~[õ¨‚Çß#Ë~sQYÑSü³\0ù¯?°è‰ÂÓªÒlè± W’ªžÊðîÝ\r½\rà3Z¿®>D˜{ˆ*9ÒJ˜v世VÂäèChŒ«þ¬PgÒJ^ Žù…¨siåÏ#¼?zc€n¡ôÇ‹nSõHA7ˆuwB«/Ú£\tºqäz_1mëxâòÂÚڝÑñ«ÈÀMC-ÈÒñ£>-ä†ÑòÚя?àp€â`h¬†lmþ€¿gg}¼ 1ï Ç™ŽÑ\d/2³\qË0«©>¼îpŠ» ß2q³KâV—Äí.‰;]uI|Ü\pñI—ħ]OsÈ;£Þé5:¤F§³Ôètš-ÎSj_Âè\pÞ„»•õÝZ}bà?ScFÿxúa4°¦öØ™ Kzü‰9™Žé\sæÈ2Æfù“«0Œès?t_þ+Õoìç§ZúÆ\s¤Å ìÑŒÂIIAû¯ Žï;F‚}^ñ©=ìõ§“N>Õ\0 ñ©\0O5\0H>-~¸Ã-©ø´fF”¤~gLÍ¿èáéÁ»)µ~_¼u²aõ1ìGÆkéýÀéèº\r×ìx´ÉîÈb­— ØÝGÄ;ŒäS6+结ÍÒã£Ûá5¡ÿ0½ŸÝ~—Ýfe‡£Ûä_žû€}¼Ckvv›U¯‰ ÞeG·®zù ·a†CDZSß\0¹Rk¿a˜™Æˆ“ÂúÍ°u„0j\t¡q]*Äd؆ fFFK2Ø“6d°J2\\¡—0Aƒì¡’jÚLÎ8—!=+#7 ®×8(‹`—D¨=Iw–fûï”a·5’¦£L‚©Á\tP1¥™\0ÈãO±‚£®p`r0\r— Ë‘*ƒä°òY=†ÊAV¢ø9ò,’e“eÌËâ˜-ÉRôÉh\n”e–ø(¾£©T\p)Æ@)Æ]ôˆë(Ëä¤x7ùml›øa[! Aøßv¯ea&0a&#^«\paÆf=aæÄ &á·£?…‰25yQÚ]¤‡ëÉBSõf1ì¡’8VÙ W‰3:¼8m™‘ôý§â<à(B†~r\dMÙ²WJ“^ÚÚº4Ž™]3á\rŠà5+ºn[}¦÷tÝÑÇ;pTP6ëX†ÑÖDgêÊ>v ÅꊡþçKB\qŠÍtÙŽ AG†3nk0Š‚žòÞGU;‹Ì6E<mËRˆ3ï\pçb_£5ÀHÔ#£-idŸ ŽwÜ¢ÜÚ\0ƒLq§NH ¸¶Í7·`€Tú¦VÙüŠ\qùÆ“¶l·Ò©/CÙêÖã‘=´Ûš¥åw°QHÀ)u€Å\pÀÍ)o¢t¥‰¶Ô9ýqâÐÙ\0KKÄ° Þ-M‡a b+§-Ç2‰¼çr_Ø\0K„°M~½ÓZ_ë„\tÔ·¾\tÓW/oïÇeIÔ–ÖŽí±Ãûq­­ÒéÍnÒ3yY4-‚­¶¼cË1†SÇ/Õšµ9lµù“u¾5mkô³p…:ˆ‡à×ØžP7s ‡®¶Áºm·Þâ\p辎­¶¾±cµå5ÆvmÈêµ/ƒ<nËÚÂYµ­­kléŒÕšË3ÖWïü‘ð\t¿)Fµ¹¥ÐR(¨5;UàrÜ{/‰·ˆP¼Yz\t.Éâ¨m.•e4äƒ(­…ç\n­ÓHY:j“ËdÈ&[sØFÁj´Sà訧†9t¦m)!«XŠ ÖµP=ä¨Í+E=jm™èäM¯™GžûŸÄª¥5\s#ÇžKᐶ”já9k\nsƒö~â{Á ÑTV^*‹c”V­ÅÝF¹,S^–*“6ßÇ›×»0IðšÅw\n”¦xl ádÚVLó-Ž’ª‚-B¬´ÄâiKˆ-\s4ü¼­Bü£\saC+ãÍ vÕl¶•›- 2@ÈrD[izSØf[ú¦Ø¬Èbxúd¤´°)äQ[3qšÕ¤¡Eˆ•ö”\q6†Ãa[ˆ³6ñw¦ëªŽ‘r¹š¢6¬;Þ’7åÄ;M ³»\dîtIü-ySHü-y³Šz§“ô-y3¥Î’7\péa—JâtŠŸÿšu.¥„‚U‹‚ÍQpjP¨ûW•É£¶´Éìæ\dÒ?S4š \t \nx²dƒlÍn>ÕÀúý´›Æê†êÛ§ŸjtA7ŸJ°?’¦©ÉR|Ò´Á1iÖ4ÕgYÖ´ ™3;ÍšÑÏØj+[1ƒh§Nv¯³uæae,Ë}XD„Ç\qÜîö\tŽJ«Q9ˆ¨„Ú£¡aŒùL¸‘Æ¢nTjø ãˆ4Èd˜ U’{¤r]¯Ÿñ-~F·aàüY[¥‚Ù53M>ÖØš`lw›\n—¥šW.²ÿ¹ÂÇ0\né»QˆãURˆ£ 02,K#f¤î –ÅT\t™uÁr¿Ã‘›-¾”áD†Xk›ìñ[L@N¼ÓÕ†Ý\pñ×o1 ñ·˜@õN\sé[L ¥Îbbïç2á€êsœòµèÏ°‚ý‹|ZüppÈ©þMr– |âSjjœý¼œë\0Gϯìn>ä“Ai‹]ò\qY•W”ül2?¼ä1•·3Õ.+™U£q¶¥òŸÆ¥f~óŸTÄ;Õ̝*æõò›ÿ\dþæ ?UQït’¾ùO)uæ?UZ«ŸÐ…jDº÷5Þ>ÕøTà˜Ñœ:f;\sÊ<3¦;\t”Z9¯S ÇÌ‘R–ØFÉbƒ¶8âÊ-Ý ›3šÎ@¸{Ʋ­ô¯`îÙ¤Ô؝\d¾ŽÊI\\0!ì¡F\dT*„•GB›\d¾¦GãUÉ– öH\s톺4~tQ0ÔŽF<TŽ:?”¥ñ«Ï#ýƒÌãø>üV1é¹X\pî‰É§¶¶6ê‡ ª€2|@>úþºð’òÿ±2Y:•¢t ª) b|\nÖ˜Œ¡5\\–!QÆ\t3—„ÑH‚…\t“˜V ³|yý†}¢ÜÓHÅHïi]Œáß5ry)îÏh»;LgåöËø6uÎÐHñšE¦&äXù)^e®tŠ×n ï8?ã`óc¾Â^­)æ击píí· |ê 3äe»[…ÜJwür§y4¦i6mæ4³oèï)ÐÜgÞ7Þ>úx»zôÂ\rú¢õ*ñ² N©;žÕÎÑú¯†FQy½¹ÃŠ™5Öçð9\\}\d~øs„²6;ô¶2W;m³ôèå_ Í,Ť\0´ÙäV8¶Q4ÐÏÙf,­Þ g/,èÌô©Wþ\rùþÐö£ç¢Á@\rqÖ‘;\r‘ƒ|‚¼-cs@Ö†ÈA~Œc§.B ÈÙ1A†¼´ìœ“’¡9.Ä\rkkÄЗ.cŸq”¹*Ôl\t8;XÝp˜›bëm”wì6 Ç ÌiqtNÃÀِiZ¹ÈžhF\n,bS¦“öÙ\p!ônMš(zjµ:_U8‚5¶xU‘`ì/Pð–Ï•N•vœ@7‡fêfeËŠIëK=›ÿÒÛC÷\sWe”¦•É`øEwÞvåÄ;Ýcèt ‹¡Å†·@ ñ·À*êNÒ·À”:Û\t¬Þ9ÚÄs¦fzCʁ@_´¾£W/­ÊäøÖÜœÀ?Õ ªñéÿ<\0ŇíCªSO¶+ZÈöÙÕÅÌ[&ûµVoæ±¥Ò®OeÀ•8ùÙu©…=U†F“ñÈrt.z8~Ó¨fȃnxåbex!ElhlR I¨»<…-sê/Â×ß2dö^¼9ÜM;U†òQªZ[@nçwÓÚŠÆÎBèÑÇ«å–¬qÜSepAŸ:ýpK[,ŸOéµôªÑy¼1UF2h+Ù¦Î…É ¸¥m.8\\eè\q…«s±ÝÛ{fzÄ;u;õ[t\p‹¶¤Øÿh‘úÛªMHümÕVI½Óiú“­ÚN|ÒËäm–×kL.¥Ï.[y×nðÂÛ§Ý|ZüpXx1ÍuØÅdë.K{ÙÅ«@Ë.–8âèn }\p.R¹œW.Z\pØx8u†–Άq4à¶¾Fí\0Wn½¤Àu.q–g×Ú6n¦»pjà Ž†‡.nÚí\07€À[kñI;¸•ñ…÷H#¾ ÀÝpe˜!®‘!>Íç&¿X—¥_œbVRÌãÖ»À\\Z0ëV†RÐiBL« KûŸz •+ý tû££´ù¬Z¹ÞOAë<v\0]\nP聆ÙH{¨î‚žÔŸˆ0ûh5ÒÿZ¤c6`¦ÑÖyIŽ¹ð¢êc†YEÛhmT}Ì0‹ hë\\#ôêc†C;ËSosá6ÕÇ 3†¶ÕZ;çÍ Hª€ 3…¶Î S0È€L \nÈ0Chëäìà —<-È03hë<cƒÌÛ-Ä@ØÞª…\q6,ä?q‚#¬fr7A¯n‘‹W_ïÈ5ÏòQ9Œ¡Î òÑ’ òÞâØ‹W÷Þ“stŸìNehO2õ]Þ2­¸H/cî#÷eµtÃhGP­î<ì¤)›L 4:Yæ\0Ånó#K!̇M\s«/Þ:üv\dIِ\pÑyL½@¶¦ÈP(ÂÒõ¢Ð\p3»Œ¿lT¡ø[›“‰î¸ºE/Ç2”,T†ÖFSq‚ ,ÃG´\pCéxR”\r/P \s`CI± Íe`6­>ìƒÙ\nCñ·¶În›WãÿßD=Å«…¿,мW(`ÒšŽ5ÙáæoÒ=–Õ\q Œ^C­­B•6†:Vªì<€â,@ÞðìÅd}ë¹+ã\0¼Ž‘ÎÞWoCŒÂHËçoƒL€Õ =Jw\r¨GOqåйœ\n(‡Ü›. [UøyG¯oCh}—CL\s“ Ma´^Ýc×ß“IQÒ§VÓœ=ðÚ† Žsb*sÙye»O…u,´ÑÞ¦Gq…2T)ÍQ²‰Ò]±T\0И˜ÖT’3Î [Š³ØJ\sO9KõR)åÌT?ÖM±[“tÔäÙ½L9SØž¬Å@ï1‰¾2Õ/„Ó׍Ì,`ÖêiîǏø«;ta«—â ¶ÙšÃX¤D6ilµ¡g¨&R”8G©»!È é’x§ù8¦ãtšÓb2Î)ñ·£NBâoIsUÔ;¤oIs)õ~\pÍ•îpfý/H¸:z…I–›õöé9>-~¸óÄ92\sGŒhÍ€ÝXb7ÂÉçÐeÉÊ0¿£tÔÑoÒ”8ºoCËÒâè}\d~ >ÿñ‡ÎïCƒ¾wFƒ»Ûÿÿý ¼ôDx~¥>Ìà–H@áÎÉZ*Á[â̼< }üN†êÖÿ~‚g<xŠÂíà:Ø ÀeŸ\r˜çÿÛüýÀoh½7‡\n~Ë× ÙàÄsŸ‚û¾÷L¯ü+ð’”Åù_áGWÖñ\tyKAžøy‰ì·mÐZzþWA(‰­×ŒÎ?} .Uig¾\\¡-\p”„€Æ”ÓÍ£Ò¤ü\nG_½xó~0sÝ=Y¿þÞ›[2žD\n¯8\nXß²MZ„ôR¼EƒÚ!—>ª£¤g‰‡UJÏ\\yhëfdŒÁGŒÖñà_; B/ÞùèUMO.æu@fåëÁ§íŽö—\rI._·d±K»`m!\r\s\s׶ÄàŽ“™ùD»† kBg»ó±šâT5›Ã½?xˆÐnG~ý€4Ä’ŒBòßcª¶¡=Ó‰WhOÐ ´Uªè5ÉTQÕ7>Ž70ø*º`g¥\r±ð1úÊ̈~+Ú€=¢Œ¨z5BZÍì˜Ý4³ÓZ 3WP*TñÞO¼wË\dò^ði+k6FÖÜŸ=¢Õ“WÒ¬èn2eÍ}Î\søbƒ·ž‹üÁMm ÷>jH6kY9ûýPÕC¹âRuÑOKŠ¨¿È¥o߬1„œ-µ·‹0ˆw^DÃgéÊ믻DVÝ\rr²Ù¥‰»\r1o·y¤²Gö{C¬ rÿÃK=–/íÂ@)ºóÞ™H§à=\t>“,þ©R›QjKbw6^„ÿ˜¿^xBÔ·FéÏ牝j\09[d5))ß_ˆZ>êî¢p·Áî+¤Ñ&*`\q—O:æ€tú¸wd K½‰Â€¨…å‹·SO\pÆ*eSèyh ´€ìôBdmЬ´ùjâÎP1ióu¾j|©±T2üPjl@´d±º´[ˆœ\0éŸ,ÊÛ z²Àì-Ñ&ƒÕPÅPZ¡»OÒÅÊ„[ˆÞª¢™ŽaKš©°Šr’æà=³Í•-ÈÔªe—×¿YSE¶Æ\0PÒ¬o«hÊ#7ñ¾âÁ«5¢h‰\\StځN“ÆׇYH¡Šæõ v—¥,½g€‹_MQÃǬM™ågî`ø4 æfp¢Daä-GÄ\tñ\nù8¹`[ Š°EÊE\pʲƒÂÐÖ–|­w…½\sáR¯9¨_l† ³ÁZ{pƒàh`)z(¥9–Ó\\îˆ[1Xº4Á¥‚óÅŠ™™Ò™Èéq…_½˜ü5 Œ®eÉéÞîâ8a£\r\qo®æÅ13u,JIÄ… ¥/\piÊp‘Ù¶#4ÉH!ZÝKâ÷ƒ‡pð‘xWøqÿôÖb5h•zô2ø‚wƒ#rwÈ‹ŽÄ ð1ß›Nʧb¦ŠÇ›¼c•DK³Kѧty\p§vÆ^Bô\t)\s\s‡ˆ8D•ÚT]¦(²Ê©˜ï\tù“U&Š÷Ž týEûÝa8=jŽ–ŠãÎIOûà8>\nÆÄ´åLt7‚R¢#9Ñ;=‘õÛìXn¼\sÒ @ï‡ýÛpMM\t3¿ç{´Py¤úê&Ï;\0ãPl3³ŽÑä5•7eÉL*t< 5º† ºF¿€ÀŸ‘ې™·ÙW<Sƒpç}÷ìnɼÇÑ·jE€!™êí=uûãø8¦_Er*!ig N€Ê*VÑ÷\pzEÈava\d_wä[\n BoóžÔ†îË#!ô»î6j3n…ZRs1ŠñʵçYIG€š¥·ŠJ)ZªµøSõ!¡gËCº \tÉò´/”Ò©ðÕ‹G‰_‘G¼¨õàÎßSܪ]\n)Ù¼\rD›7ƒ.Ò1[éS7÷žh \p‘÷½\r¢µ´0òÀ=¯”˜-Õò³ˆ*–õZ´\sûzïBLTÊÉ‘rzØìƒ5Žâ,eá(=\rì8¤¬FŠ‚2Sú])»±»“†ì†Íq†ßY¸tÝvmv\süº#ggx‘A\tå\q÷xU³¤™´X4S‚o¬t“ œkpL ŸœY÷mW‹ƒj­¥š¥@UP®yøÌ¥¹åÑdx̦kÛ«U#T‡…ž–þÇ¡©jÖbV=” »çba‹×z5–¨ÃÑ{SAÊ㏥}h‚òS–œ@¨o¤/IzBÇ„1Õ\q}³<\\Š×¢;†e:K)iÛ7j\r¨©†à2!zˆeÜ D±ë\0\qXçÀ\tˆpÍ,Ï”¶4]ÈÄ\pëR¬ë|£\nè)x2OJ,3œ»† BðMFÍŸ‡ÓqÊÜij ”1¤\s¾ XædŽì¼-†?àíó0·Ë°xŸ¨bçü‰î÷’®­ÑŽt)ñ(UI]0­µ}~VÂ\dn+è;v÷”qcì\q&ä罨VcËÔ±ùfBˆ‘–zDç >íŠ8é\0g¨Ô¤GF¦G3šÖô@“Lbb¢5¨Dàm\pÆ>ÙG9ËUbK÷vÁû­ ÿdcî+òqìÒ&~O!Л>À‹(97®¡“\n2ØGEÊJ…öŸ@¤ð‡ªXàIgJt³C• ýP8 ›ùZÊ€D„ ÍÏò)*½|ʱb¸9ÌR*7zKiÇ­<Í‘•½ô#²œ Ã\s?‡óy hð™&Ðp(53\0È}\q†\qQž\rÈBiææ§àEÕj))ó„TÞbì*ô»\n¨“ëí #±`˜›Þ¿ ýµB‹˜CÊ\d·]óíãØC4;”L!—z_ÞRC_¶~—ÝaXäÍÎÕY³)Ó¼µÛb\nõ´2î#¡[ȧ܏–÷RFm¢ v{zjIM× ùçõ¶«·]R“Ií8&åwX ‰Ué=íãÔÞo ?á ®ÅÌ8\t“w sPLD™¦P:è†jýŸÒɝ¢êKÈOÔ\pzØÐ+DIkìH[\0Æ\n€ôGĸäGr©É’+E)Ùb¹ã\pˆåQ-I·È®ê‚ŸÂÊèÉÉü‹F©‰¿E~ɆR\\ ªã 5’–@–=<\sýùB3xÙÎà¡<4ÔWr航ôõšðü…¸è •7Çñ—ã9¸X ‹Û:©Š†po 5å¼›„š\\«F×_œ_Ú¸>ÙT=Æ\0=EÙgÆ¯˜Ÿ–þ‡*¿¾³‚hÚNù·aáúÆY cä6°}`?ñ¾¬öl›«j¼ZºÑ¨ÕRJÚþ¯ø>Ÿ‡g“ö~ÃÑŽ3òì”U‹Ó»ÿ6: V~N\r¾ u*æÚI׊ïoÝŸ‡!íØ4_¿¼aÈ0­axãW“D÷ž·êVúãíˆ*¾ºV›ñé>H#F UÛ-jù4k»{<Ê&œÈý¹ëy;±uÌY\r†êælÄ:oP¸¤\r¶š™ZJ[Uäý!Ü»š]÷­_\qüú~°`DOa4ø?#¶zàèùu\0<¨Ü€¹ŽU{ƒñ? **S}P·Áù8i«µ:,!¶¿Cöm¶m®Rë\r RÕg¬3~òëqß 4™k±niüë3®ã15å¢é)5eã\qNÔâ´c9™iªô³ô,âöɆ·&&ÃC¸¾2 šQ \d7óÝü”£è©±ºd—®GDdÉè¬ziJ4AžÏƒi¾7iB@¶·Éžf2å‹Q¶dRÝ hÐ4àâ^WqÞ÷ñe˜ÊfU‘¤§R÷\té ?½h¯H—TS»‹½ì\\à=á8ᎅ¨@Ž\pdïÕ\sg\0T^äîi¦w™™Cz\t¸¤+ ô.íPÔ»@½’`>øX›\p²¬d…kQ«Ó‹ÓJLŠ•ýÁ+´yMFô<èF딁eW2giK ›Ø¤úLñR)üÈ-é+Ã(ζVÞ#­uTFSç<QFQñø€îq\qÕOÑ1!±¸\n2©Ö&F@\\Š›‰\qT ³ÙT5ô,ˆÞÒcïÀ÷&´@QϏ`4Máyr®-ÁO7Àè‰ï)iƒré€e}‚…™8ê©ÆN‹¥oÅ1H¡!U‹)U¡SÕ8\n!÷&.íûìl à\sWêÕIÈñQãÈ1Œä\tF5ÉÜz‹Ï›à·l2jŠ‹xÀç|ät Ÿ„§\pj^Ÿ ¥_œø­O,ïà;VPdðT\0t§Çhë¬ç˜‚HB¯‡O©å\sØ«ºþNSFOø INMï\tÅ+É\tó—³õ®ð¼­©yþ@|À2\peIÑ©DSê_ÛCéQÖÓÈFc’•É< Ðeî«’†\p¡aÂŽ¥ÊqÞ4èôûùˆå\q–ÝU¹˜ìf‰/T(NòyO~=âÐù_™¶Ä=•ð;´·ú‘ÖÝñѾæÆï&¤ÐߐA¹ð áV£#Áûíð©¨Õ,Ô!~öb~\06m•4ÛÊ9ñÏ{÷\p_S}@[ò÷‡Ÿß?n„}eíƒ>_0&v+/ÂHÙ+V_­Í\d=>õœŸúHºÈT·Zý¾©à!h±ÖyœCŽÚÏ75â¥7euxtÒ/\0;Ð\p“{033nÝ*œ¿6»ó«Sh‚T3.­(íóó9žY\\žÄÿÒe\p}ñ<ê@¸§ ¬êjXgçduÈAÏZ\\œhÞÔgÃífÐWacºd]f‰,«å–HH6z:Nø–v.™C¥„Ü5™bvGiª`IEölNíGôªð:ûÚõÈ/Âàik-´\\œCp´fcpÁÊœ’:ÖóF«ZEhòd£´º3-v“™­Ø ¯ypçč÷Ž,LHŸg}Þ\d8\d“û>S—¢iKiÖz:㍲>å jÜgÜÈM©ÇêÏI¯ˆð}C/8hÖv]К‡{:XæD±)Ž~\sKš!ÔH‡ù}xÒ¹JqÂ(Á¶Þa´ò«ÈtÆ2:¥¼¦ÆÄÀ–†Ð 3駣¸s–^À¨ÑkÄ…9k\rÔH÷„¥üF¸{Â7¡»§›\0ãýF°JEñZMÊâ çR¥™Ý¸\r¦¦‘2˜4}â…ü¥ŸŽ\d¾º‚hÞ’§\d\p†òãë:B{Ÿ4Á\s¡, ¶ 9VЄ<„&Và´»^W‘…©þî\t˜\dﬨɦt0.“ý?•O¬,it¡` _:ýóÑ÷œª‹Ú± ¯;Ê[Æb¹ñžqARPà²à”haŽ’sÍd„êͳsËS÷܈¬)HÆ[•¤à)ªÀs¢™TÈò?ª2˾ÖãæPV·{?ñÞ-“&¯ÀBy]….éoòã²öZLJGŒô¸˜2.Ö@ðv†zÄU= Í\s9z@œû_täýM»†Ò.™mº¢Ìݱgy‹|äŘ(óO¾¿§Ç\nÈè*ÝÊ#\\0 &u#õ0êB:áTÈ¡ß@vÅ ¯áY¤ôÔƒèåÉ韴)h‹ßì)µÑÛ:µ™h\p“4å¢1Nêr\0“+L”•Ø„ªÈ³Èù 프ÒÓKÙÒÐX\\<.¸a õ/ı7Õ‡EˆT|„š6U:•\s]á–ÉÕšÈ Êúö8\p+}ñoö‡þ>ÁƒÙ–Ó©±ª`|liŒQßã&‹;ú^¡ø¤1§×Ñ3#áK>UÓ6 ‘ •Ò-<€cªò oJôbÙ¼_ø}¥NúÜ¿ikÈô¡É<¨^é\t©_M†’Ò}£FWÛ\r–m0;º#œnjËØ ‚,0ÉBŠü’Ï2Ý끜ØCÎtqsÑÚKï<]Gý¾\dƒ²+vÇ Å¶xýA»j‹\qþò…Œ\qhû¥—³˜â9•~ú^õ©ŠT©Œ—­<öôS3zŽŠžÞ-8pºÐöpŠòõ‚)))«â¡ç|´-]/\n]7\d£ð\nG_=š§ç¿ÁøT½¬|Ÿ‰Ó•_è\sòE*ÓLš‡>S6’nÛÉBÚ>\p5V ‘Ò\t6Ciæٍ-’<tiÈÒyXSJO½êÈbFFyªZ[dõóç÷À‰ÖŽ)oÅV—0V\qe¡éñÁUÆ.µc¥æ˜=o-¹tÂ\ro™ó&#ÙdÎüeȦíjJ/ó¨AÐ( °þSÊW!Gz°i;é¨U\p:«bÆ,¿Á,ž~“Ó]ACFž(•Ó³¥ô`Çßå´¸!¢q³Ò1ÍŠ\rÃûp‡3¢lwú½é®ç<ˆ›@´n‚.—\ n)‡üVÐEÈ”W“#û)ÇQ±ž© ÏÜ\qÛ½Àd5»F<‰Áµ¼˜‚ªêÝ£ã«l\0@åëè+D£sTÕ<GHv“‚Þ\qŸ* \n’YEð\qˆ¦øõ!n]ÿ=!¿àÁ-Fñ>§\nÅ¢¾#Í{rNùÒQƒÓ!¦D7I g †ª—5*E£×UEÑ~—h³TM*ukj³”_Û¬ÃP¡4YÌQqﺞµfq2GuG#G\rLS W¹¥TåM}‹^è’iN–izÁ•”þ¤x\q¥ÂŽÝ> 5p~\rž:ójü;ñô†¦úy|®wZažŽRn°Ð9Ô\skpÒgœTVýú;v÷42 #úKºíÅaDâùåØjn*{ZÅM×.¥ìLñ~ñtW€ù·2J-_×\\„›@~â ý[ÝRQð’ËVµ_OåIÔ‹ÆœãV~Ì@×ç˸¨&Ø—“ÓK“aet³vg’ªž0ùâ¾’Ë2! ï‰,Ué#Án >äŠJ»å(¼ª¯SŽíËXĈàü zËV¹ ¥ÍAa-‰GH©ö#´Ëó!>î–‚ÏeýÆÉù°<ÏBõëpT4£Åç;Tðǹh‚½fl@ Ô-aé¡Ÿ \s­M²†í¦Á@éÂÓB©A2–a´ÌrBœ’˜\qµššÓ3¡ìJ/>¨\tšŒ‹©ØT¤Q¤¬öHÄ¤ûd³¯FÈ#ã¥hg\sHK[-ÍÙ\p­P.”jžo8÷ÃpM¾cÏ€ô2CG+–’Uç\r\p\nSga][ŬÐV ¾Uf\07ÜarÙʤ9»ÚsE—qMñ䞀F¬)¥—\ss¨õ²Â\n’Ö\tÉCÐrŸ>г Üì“uø­|2P¦¢Ù©­\nuëî,edåNë\qÚ§7?mw※üš.­ønFPš< ݍբÖÊ= \n’þxfŒi z(Ù,×{@ ¥hšPLQçºþœ¢mʆÐº5#:ÒNÑ—S=5Åð³ìo”~ʦM§®Êͼ¥\tõ>d­ )mF^ñ¢\nÔ*·Êʳb0â&̳\s¤è‹„Cç§ Èß{ôA”¯ÞúôE”#mF3‰Œ÷ÖDu‚á~ÿ¨R´)©ªS”…u,Ÿ`ÑÝI3Ÿ¤owêú\ p\0’Šô@4 ïªÄNŸ\0ÍÛðs辤þQJ§ï9š®šlÝC…9i[&~­ù¯&«‘8\\Г½­ª·’„=H,!uÚé‚mbÑõ»þˆ\0ñäñÿEý›çœ~õˬ °×ªÆùE¹¶(d—«R}×CFµáÀUâÍ4j]xE“<Sr–ÂLß’gÚ™®DY§¾\s½ºÏu–¬³Sú’ÀdÔIBû€^oƒÝdðo‚¹ åÄH­6P áê«šUõ:Èo\dç÷Á{Jòðñ,`:*><÷Ýç™°£ÙFqç‘\qÁ¥Ù»M™§âLFYf „h¯ VÀ­ )>‚ ©•¼¦ªs£ZATu\sd7#\pÆ£5«ylÔŽU½¨Î‚‚ÐѸýHN®Á8TI\n ¿-/¥g¨·(aÇG\sôžj ¤)éwÈ¥½š©®‡}”øå+ì ¿_™}R0f¨sÛCÄb¯U£D x±CNN|â¡eryÓž>/UÌtÛØ.Ú{gŽëҍB_vï,ÚÂ\sz=\rˆy4£9ÅÌ fqב+sõ@ÍÁ<ŒH[ÒÅjõ‚Š¨“ÛˆÑû-\nUѹ:?(ðˆ³ˆ =ÝsV”™Ð}rzÉÅùi*›ÏÊâ¥òá lH’>¼úH·2Óç*¥›šš“\q¥(¿ø»jï]©ËC’—b§ºõ^í¹d”T¾•öŽnNÙ‘¿P«KRU<ô[P1RŸNÈ*²Â©/3j@ºÅW›j=e\n¡XCñÙŽ†-ËÞ¦!yÃYõØ\taÎ\\yTLŠçSJô\0^…ïÄ®4ÀØ5ÕÔØ:EµÂoPá¶@¬® ’TÑ=ñ~A¡¢Z¯‹UTK+\tEqægÙ#à=1Q•›¡ÕïJbÐѨ\qTs\0\rU©Î µ]!\pe°»6”Ÿã;ñ3uö¤\nòc1ðÄ(Áb»GªÇÙæpž]ÕšS™R•¿„ƶ2\pBÚ,£\\‘ªôLÍa–”“‘¤ÛË;—ЧOdñ‘ŠÐ²<£Ä@~Ö òôR·ÃÊç6\\Óa…Ê›rÀ ¶9b[µòƒ…½\0ßÿ6è/ÈF^Hýõ÷]HOM«¨¦!=ÅÕh4w-œ™®¢wPžð+ÊT4‹ \d¿ fȉéžd€Ñ=Äl¥”&ì:GeÚ¶þí¹mù€¼?Nz†ê’\t}æKyh²ô ™îT}&Róš©Iþ:¥êÔ>øò}0Ep`<£§öAéJ`JÊ»¢À”´¶~€4aûz1yr¸ð q±=SŒ÷úìø,h1ã&wËÆEñ\0 ’Þì)Ùó±TI#r\qzÓ#\p¤HiH( ²] œg¢•›Mà “P`–BNh&êbÌÖØ7‡‰¬§<••·¡D²5ª8§°Ó<e¯|NèºQTäÜHUG;,`k “iöh©bè!Ü»ê]a”®-…)Þ)½ìˆ¬¹MéÍ„÷äßÙT¥DuÄ\0*€C{&OŽ—änà „e…Àéé»éíŠã•yµñì—Š×.zG¨W-6¡-\\”ÏG@yh lƒé\qÄ‘ë}ÅÔ­Œ÷(NS ƒ={ôYúô5(•ë:eOǘ4þ,5FYŠ§ÿJÖˆ>û*÷ž^íEHã|ß\tåì Ñ<Û½äsDZoJUé.èHo«ýDoïùÊúŠh,ÒyË\pä—Cv“ºçè±¼\nµS¬:* z®Úß)(KC¢Vu¿Uy*Â͇ĥˆçNàñ£Í[~k©ŠfŠÑ†¾®®\qW#6ò× \tàMi’šaVåDi¬)Á”4\r`šà ~󆯔8z=\n¼œFLm DØ)·-8£Aé‰O‡҅ÇSbœ-­Û¹<­«ÚÃÕaV÷&Œ‚—ì´\\£{õ\dŠu)T¹³¡/IA`CÕ)ÐVIWœûk•‡ÆyÆVùž™]!¦i[´îø’Íûª7¤jÎ|ëpRD‡ÛÉ3Úò¿ŽchÈšâÒ¨©èœ +ÊÚ!ª–ø ·ˆ(ªï\0‚¦, ªêD=»4¢9¸wß©£ü‹‚»ü,k+Q&\sn¦¿ÆaL<E&°ý¤œ¾ù­ZzCÑ)dMö¤ j~ç£ø†4F°ßʇ©šÐ š¿ ¢F`EáWæÚ,^IS¤¸¢\p#*º´óÓv>z¾÷üd\dŒ•âÕ˜ŽXÔ¸ëZ«pð< S“¼ö5Ú°&Ó¹µÒlfåáœ>hcKž°s²{;˜x•o¢‚ó‚‹-=؉Å)½‰ŽPSm’í r°ÍB­âÚ 1GNì°Ópj&•K“ƒö2¨}ý‹/VÈÖÜVªCRû.Ð~³úDZ´µR-êGÈÁLX¤ø*Þ\0† ë`ôÔ!Æ”ˆtóˆîa쉵üéEûê“Ã0bŠÜv‘Od™ > ešü€ 4ÿHc™ Ô]³2’”;<\0ºz—\\‚H‚ÖM³ â5ÍA\s_dJô-ŸŠÅH]…®‡^¥w…ِ\\j›Rœq+ÚpÛ‚&EPÏ(©i¥RÔ½O Hì¤J©ñ=­{=¨RÒ#2FqŸ`Ãý1K°ªK±nìTó¦„m{ABó¹ ØlÈE¦*RÚË›Ÿ™\\Þ§ºj tË >½Ú&D“˜-÷epÌZàE‰ü˜JA¾bg—ë)ú׌¥|‹|÷ðv¬½¶8d—ýÝ¢À{\qÖmÑÖÌ2ƒ R_¾n½F*ÕG¨UT ß²ð‰\dêÉÉò´f2Jt\p¨ýƒÝWª¢ÆuB¸Èä_„ky.”ޝâ-,й^rÜ«b¢–ŠèGŒÖñà_;úŒäÎG\nk\dzDqö×òžxTõÉÈKßlbã¯*þ— pWÍ‘Iwi¾Û•fFmÊ+Ï•® ”VöªØP]NuÂ[uy£‚KÚEÕäA}¢I\\?UnLÄe¢ˆ”ò[û7>òHÑË3/Ì÷Q,¸¿ØÍbÅ2²š>ÿD?wäÉòˆx+”\r·#ràèùŸ­Í±fÃé3ÒNkÊép\s sÁeZ›‹¦bÑgÔ /å™tªµ¥ÞY؎趕µ˜±Sp„ŸQ¤ùTòkåõ°¦ÜºeÃé£å¥G5…6?=Ú ªÑäÙ³‚‰jÂjŸI‚ñ5T“Vuªó<l4•‘>ÃÂ)éš‘àvx#Kì\0ñëíÀ>Œ°ò6 ,0¥Ãž’j¥tØt«6a>µ\d€U—QµâV±Ðãè9EåÒà#ŠhT›n0e©ƒ‚BÝÙÚˆ «./ÕÀ>yµ¹xÚ,5ä{cíº(\0ºZÇx€4ÁÑï)ÝxÏãÕs³P,šö¾ rç•­\\“Uß f¶*E þ\0{§9óÆ€ü”Ih8ÂÁÚÛyÉk­Ôö:ltßmɹT<¥\qš_ñàÁ‹ãýQV;”‘ £`4[ÿ÷>¦Öò6RÂTåC8øHÌÀ|ÿôô»À#Ј¥äÉ~(\q)ÿq6(Ah {Þ`éaLÕÐy*\rLèäÀˆißq\n¦¬÷Æ`AV©\pT—Á)iødŒ¢5TPÔz¥Lp 2HIïtLFTþ646Q\sz¬jqP‰F†Â”F3 šF×Q™CØ\q\s¥¥r»ôœPMðàw”^“ëE¡ë†ÿ“Æ\dÞ!],×?µÀ ÙHY©ô¬ˆïÒ;Ñ€§v\\*e\p6㇠³“—…Á‡ºôk¾ÑRƒS)²ß\rmÎM–òÕ ¯¹M•’Ÿ¨¬óÞõqèïcøÁò¥–U)…­Î€‚e¯Éiä…\șó»Ö‹©\q\d\n\ dÊRE`T¡‰\srj¼ÿJ|w‰_¬\púl­Ë„`-Põ¸¹´¿†}ÚœÑåék\dùʨž®<t²rß(¿Q®C9Ë/³B¡j®ùÞˆþˆ¦Ãi\dŠæ7PÚ[odAÝeªÒAˆ\0渚³un6ËÈ\tÔÕ\\‚Ÿ™dÑ‚òk¥¡¸\0@5½ÓšÔ\rJ o ¼ ¡£záFcé1·µp5RSËúõodÕùëß~ýÛÿ÷ÿ\0ßà"
0 0 Time 12.687877
0 1 NEW "Basic Reclaimator"
0 1 NPC v_base_object
0 1 DYNLIB basemedtech_basicreclaimator_f_N_P
0 1 POS 16 4 -48
0 1 PYR 0 0 -0
0 1 MOV READY 0
0 1 HP 8030.00
0 1 HPMAX 8030.00
0 2 NEW Auto-Doc
0 2 NPC v_base_object
0 2 DYNLIB basemedtech_medicalrobot_f_N_P
0 2 POS 32 4 -81
0 2 PYR 0 0 -0
0 2 MOV READY 0
0 2 HP 8030.00
0 2 HPMAX 8030.00
0 3 NEW Robo-Surgery
0 3 NPC v_base_object

... and so on ...

In short, destructible objects get defined as NPCs via plain-text lines like those at the end of the excerpt above, but rooms, lighting levels, furniture rotation and position, etc are all defined in the binary after "Base" at the start. I haven't done a lot of picking apart of the data yet, but I imagine it would be possible to decode it with some effort, if someone wanted to put in the time...

(BTW, not a precise copy: the editor doing funky things with some character combos. There are no URL tags in the original, for example...)




 

Posted

Wow ... has it really been a week since I had time to post the next section in this thread?



With the basic idea of building Rooms using player defined Room Blocks established, how those Room Blocks are "allowed" to be structured within the Base Plot Volume through very simple "touching" rules, the fundamental concept of having a fully 3D positioning GUI to locate and move elements around within the Volume ... *and* being able to export/import all of that data to a Plain Text File in the same way that Mission Architect and Player Costumes can be exported/imported to and from text files ... it is now necessary to move on to other important considerations for dealing with the Styling of the walls, floors and ceilings, and how to place Items within the boundaries of Room Blocks.



My thoughts for Styling of (contiguous) Room Blocks is relatively simple ... but can be made more complex without too much (conceptual) difficulty, assuming that the programmers don't put their foot(s) down (too definitively). The basic notion is that every Room Block of the same Type at any given *height* within a contiguous Room has an identical Wall Styling. This is broadly similar in concept to what we have now with the Legacy Editor, in terms of Low Walls, Floor Walls, Mid Walls, High Walls and Very High Walls with respect to Wall Styling. Now to be clear, at this point I'm envisioning the classic Floor Trim and Ceiling Trim being changed into Decorative Wall Objects so as to make their inclusion/removal more of a Designer Choice and to also allow for greater design freedom(s, particularly in very irregularly shaped 3D contiguous Rooms).

The important thing to remember though is that the Base Plot Volume is essentially a "solid" or otherwise "impassable" space (in 3D), and the Room Blocks are basically "hollowing out" that space so as to give a (cubic) bubble of air which Players can move and around in and Items to be placed in. That means that any Styling of textures for the walls of these Room Blocks goes only on the "inside" of the Room Blocks ... just like what we see with the Legacy Editor. The thing is though that when Players are allowed to "free form" create Room Blocks and additively arrange them in shapes other than perfect rectangular prisms, all kinds of additional possibilities come into play which can make "auto assignments" like this less than optimal.

For example, if a player wanted to create some "swimming pool" holes in the floor of an otherwise symmetrical Room, that would have to be done with Room Blocks to "hollow out" the underwater pool space. But then you can run into a situation where a player wants those multiple pools to have different Styling within the "pits" of the pool spaces, and if EVERYTHING in the same room, at the same height has the same Wall Styling within that set of Room Blocks, then the editor is "too constricting" for what players may want to do and unnecessarily limiting of their creativity.

The compromise, of course, is to limit the continuity of Wall, Floor and Ceiling Styling to only contiguous Room Blocks at the same height/altitude. That way, you could have a "swimming pool pit" group of Room Blocks on one side of a very large Room, and a single Room Block off to the side (ie. not contiguous with the "main pool") as a "hot tub pit" in the same overall Room flooring, and be able to define the Styling of the "big pool" and "hot tub" separately. Even though "pool" and "hot tub" are located at the same height/altitude, as far as the placement of their Room Blocks is concerned, because they don't share a common contiguous Wall between them, their Floor and Wall Styling can be defined separately ... so as to have a powder blue pool and a white hot tub (for example).

The Basic Rule of Styling then becomes a matter of all *contiguous* Room Blocks, of the same Type, at the same height/altitude in the Base Plot share the same Styling for Floor, Walls and Ceiling (if applicable). Note that Room Blocks that are adjacent to each other do not have a Floor, Wall or Ceiling where another Room Block is touching them, allowing Room Blocks to be stacked and arrayed so as to be able to create wide open spaces within the Base Plot Volume. Also note that since two adjacent Door Room Blocks will be necessary to transition from one Room Type to another, it is perfectly possible to have the Door Room Blocks duplicate the Styling of any non-Door Room Blocks they are adjacent to, so as to preserve the current behavior (if desired...) of having the Styling "switch" from Room to Room at the halfway point inside any given "Door" between those Rooms.

And I know that that all reads as a lot of gobbledygook when spelled out in text. If I could demonstrate the principles using children's wooden blocks, it would make things so much clearer because all of this is very VISUAL stuff, and we're basically playing "telephone" here for some very spatial and visual concepts (except this is a pure text medium, making it even harder to clarify things).



The short end of the story is though that with all of the above, including the concepts advanced in my OP, it should be possible to create contiguous Rooms of almost any shape and size that people want to build them to within my proposed Base Editor, and have greater freedom to customize the appearance of the interior of those spaces than we have been able to achieve in the Legacy Editor.



The next question that needs to be answered is ... just how BIG is the Base Plot Volume going to be? And how will positioning data for everything that is intended to be within the Base Plot Volume going to be addressed/dealt with?

Currently, the largest Base Plot available through the Legacy Base Editor is 24x28 squares. Each of those squares has a potential volume of 2x2x3=12 Room Blocks using the system that I'm proposing.

  • 24x28 * 12 = 8,064 Room Blocks "worth" of Volume when using the Legacy Base Editor.
  • It's 48x56x3 Room Blocks of total available space.
  • That's 768 ft x 896 ft x 48 ft of total volume ... on the largest Base Plot available to the Legacy Editor. That is 33,030,144 cubic feet of space.
Now here's the interesting thing I take away from this. Even using just the Legacy Editor as a "guide" (they're not so much rules so much as more like "guidelines" really...) we're still talking about numbers that in Base-10 read as ... 3 digits X axis ... 3 digits Y axis ... 2 digits Z axis ... for recording where everything "is" inside of a Base in all three dimensions. That means that at the maximum it *should be possible* to have a volumetric addressing/recording system that is pure text/integer only based looks broadly like this:

XXXYYYZZ

So anything with a data string of 10020050 would mean X=100, Y=200, Z=50. In this case, I'm using Z as the "altitude" attribute.

Now given all of that, if using Room Blocks of 16ft x 16ft x 16ft and limiting the data recording system to an XXXYYYZZ positioning system, that means a theoretical maximum Base Plot Volume of 62x62x6 Room Blocks ... which is the equivalent to a 31x31 Legacy Base Plot with double the available height. As a practical matter, however, I would personally recommend a "one size fits all" Base Plot Volume of 60x60x6 Room Blocks of 16ft x 16ft x 16ft each. As a consequence of this, I would advocate removing the purchasing of a Base Plot as something to be bought with Prestige. My thought is that the pure SIZE of the Base Plot Volume should not be a consideration when it comes to working out what an SG can afford to buy. Instead, what is important, and what should be the REAL cost driver is how much stuff you put *into* the available space.

Essentially, instead of paying for the Base Plot *and* the Rooms, like we do in the Legacy Editor, an SG would only be paying for the Room Blocks they buy, and the Items that get placed within those Room Blocks. Want a cheap starter Base? Be frugal in your buying of Room Blocks and keep everything small, cramped and pokey.

60x60x6 Room Blocks is 960 ft x 960 ft x 96 ft of internal volume ... or 88, 473,600 cubic feet of total space (about 2.68x the volume of the Legacy Editor).

All of that from using a Plain Text formatting for a Base-10 recording of coordinates in an XXXYYYZZ format. Note that this data formatting then makes it very easy to record the positioning of Room Blocks (in multiples of 16 *only* in all three dimensions) in a way which is totally compatible with a way to record the positions of Items within the spaces of those Room Blocks. Although it would be "easiest" from a computer programming standpoint to make the XYZ origin point a 00000000 location, I'd recommend instead making the "minimum" location in all three dimensions be the "1 ft" position so as to make things "easier" for the humans/Players to do some of the more complex 3D positioning math and relationals in their heads. That means a "minimum" coordinate position of 00100101 up through a "maximum" of 96096096, and the coordinates recorded for all Room Blocks must be equal to 16^n (where 16^0=1) as part of a "sanity check" for the positioning things inside of a Base Plot Volume.

As mentioned previously in my OP, it is possible to extend this coordinate mapping system beyond simply placing things in 3D space. In the case of Room Blocks, it would be possible to extend this to include Room Type and also the number of Defensive Items permitted within that Room Block. Using the "by the foot" coordinate scheme I've just demonstrated, it should be possible to do *this* to define the "root" vertex point of a Room Block ...

Room Type Coordinates: XXXYYYZZEDFFWWCC

X = X axis coordinates (in ft)
Y = Y axis coordinates (in ft)
Z = Z axis coordinates (in ft)
E = Edit Privilege Ranking Level (0-5)
D = Max Defensive Items permitted in Room Block
F = Floor Styling type
W = Wall Styling type
C = Ceiling Styling type

The nice thing about this notation is that it organizes everything in a way which puts everything into a 16 character integer numeric string (3-3-2-1-1-2-2-2). It also allows SGs to set the "Edit" permission security level on a Room Block by Room Block basis so as to grant permission to edit the contents of Room Blocks based on their Ranking within the SG. This then allows the granting of Edit Rights to lower Ranking SG members in very specific and controlled ways over *portions* of an SG's Base ... if desired ... rather than granting Global Permission to edit anything and everything as an All Or Nothing proposition. This then makes possible the creation of "sandbox" spaces within an SG where members other than the Official Base Builder can have a chance to "play" with the design and placement of Base Items within the permitted space(s). It is then a very simple matter of changing the Global Base Edit Privilege, like we are used to in the Legacy Editor, to being something "granted" as a boolean Y/N proposition to specific SG Members by Name or by @Global through the SG Controls Window(s), rather than something which is granted simply by attaining a specific Ranking within an SG. Needless to say, adding and deleting Room Blocks would require a Global Base Edit Priviledge ... while adding and deleting Base Items placed within Room Blocks would be controlled via the Edit Privilege Ranking Level (expressed as a minimum Rank within the SG) assigned to each Room Block.

This then creates a better Base Integrity Security Scheme where SG owners don't need to be as worried about granting SG Edit Permission to newer/other players. It makes it *possible* for players other than the SG Base Admin to participate in, gain knowledge in and demonstrate their skill with my (proposed) Base Editor so as to not *necessarily* keep it as something reserved for the Ivory Tower Few so as to guard against Griefing.



Now ... where this gets "interesting" is when extending the basic XXXYYYZZ coordinate system to Items, both Decorative and Functional, placed within the available spaces of Room Blocks. In this case, I'm talking about adding rotational information in terms of yaw, pitch and roll away from zero.

My basic thought here is that it ought to be possible to code the Base Render Engine to rotate ANY placed Base Item in 15 degree increments for yaw, pitch and roll rotation. That gives a total of 24 positional increments (24*15=360) and requires the use of integers between 0 and 23. This can then be represented like so to locate the "root" vertex point of the Hit Box of that Item ...

Base Item: XXXYYYZZTVYYPPRR

X = X axis coordinates (in ft)
Y = Y axis coordinates (in ft)
Z = Z axis coordinates (in ft)
T = Room Type Exclusivity (ie. Control Items only in Control Room Blocks)
V = PvP Raid Pathing Exclusivity (0 or 1)
Y = yaw rotation
P = pitch rotation
R = roll rotation

Again, this is a 16 character integer only string (which could potentially be shortened to only 14 characters) to define the location (X, Y, Z) and orientation (yaw, pitch, roll) of a Base Item in three dimensions. It is also possible to define if an Item requires Raid Pathing Exclusivity to prevent other Items being placed within the Item's Hit Box by use of a boolean integer value.

Now, one of the limitations that will need to be made, is that the Hit Boxes which define the outer boundary "space" that an item will occupy NEEDS to be confined within the volume "carved out" of the Base Plot Volume by the Room Blocks. What I mean by this is that it should not be possible to have a Base Item's Hit Box extend beyond the boundaries of the volume of the (contiguous) Room Blocks. That means no rotating an Item in such a way as to put part of it through the Floor, Wall or Ceiling of a Room Block. Likewise, Base Items are "not allowed" to exist outside the boundaries of spaces defined by Room Blocks and a "sanity check" can be (relatively easily) programmed into my proposed Base Editor to verify these things (and flag offenders for the Player to deal with/clean up) via an optimizer script (as first mentioned in my OP).



Now as far as *I'm* concerned, the real beauty of this entire "bootstrapping" system of building things up in Room Blocks, working out a coordinate system to express that in integer strings which can then be exported/imported via text files, and having a 3D GUI element assisting with controlling it all above and beyond mere Point'n'Click interfacing is that it allows the entire rendering engine to operate on a VERY object oriented basis. It becomes possible to define each element to be used in the Base *once* and the specify all of the locations within the Base where that element is to be found ... and it uses the same scheme and notation (16 character integers) for both creating empty spaces (Room Blocks) and filling those spaces with "things" (Base Items) within those space. And the entire coordinate notation system that I've presented makes it possible to run both "sanity checks" as well as record keeping "optimizer" routines so as to sort both Room Blocks and the Base Items within them in ways which can make life easier for the game engine to render both the environment and the objects within it in a more holistic sense for the entire Base.

I see the Coordinate system basically calling for an Asset (such as a Lamp or a Tree or an Entry Room Block, for example) *ONCE* ... and then defining all of the locations within the Base Plot Volume where copies of that one Asset are found, using the 16 character integer string for each copy of that particular Asset. The next data set calls for a different Asset *once* ... and then defines all of the locations where copies of *that* Asset are located.

One side effect of doing things like this is that rather than setting up the Base Editor to have a sort of "Current Room" function like what we've got with the Legacy Editor, instead you've got something more akin to a "Current Assets" function, where you specify which Asset you wish to address, and then scroll through all of the locations scattered throughout the entire Base that that particular Asset can be found. The difference is that with data organized (and optimized) the way I've been talking about so far, it should be perfectly possible to streamline (by resequencing) the sequencing of Assets by coordinates such that a "search" through the location(s) of any particular type of Asset is not limited to only a First In-First Out ordering like what we've got using the Legacy Editor in its Current Room functionality and limited by Room to addressing particular Base Items.



By the way, in case anyone is wondering ... I can easily see an SG Base with 30,000 Assets (Room Blocks, Base Items and Storage Container Contents combined) needing about 500kb (at most) worth of plain text file to record the WHAT and WHERE of everything that is needed to record an SG Base in a plain text file that could be saved locally to a player's CoH game client and potentially(?) speed up the zoning transition when entering one's own SG Base. Considering that Mission Architect allows us to have THREE story arcs of up to 100k each to begin with ... that's not all that bad considering that Players can only be a part of ONE Supergroup at a time. In fact, I'd argue that allocating 0.5 MB *at most* to an SG Base, with the understanding that that is a MAXIMUM and that hardly any SG Bases would be that "big" ... and that most would be hard pressed to exceed 300kb worth of 16 character integer data strings (~18k Assets) ... I'm thinking that would be a *bargain* for Paragon Studios in terms of data management and storage. And that's assuming I'm even doing the math right on how much memory these things would cost (ie. I'm probably not, but work with me here).



Oh and just so there's no confusion ... when I'm talking about Base Items above, I'm referring to every object that can be found in the Personal Item and Place Item modes of the Legacy Editor. That means all the Arcane, Tech, Lighting, Room Details, Chairs, Shelves, Wall Items, Pillars, etc. etc. etc. I'm just lumping under the general heading of "Base Items" for simplicity. Hope that didn't trip anyone up.



Anyway, that's about all the time I've got for this trip to the WALL OF TEXT CRITS YOU!

If you're still reading this at this point ... you may actually have more patience and/or interest in this sort of thing than I do! I'll try to get back to writing up more of my ideas concerning revamping the Base Editor in particular (and SGs in general) probably by next week sometime. Next time I'll try to get around to discussing things like how an entirely revamped Base Editor would handle things like Base Rent (including if this is even relevant going forward) as well as how to deal with Raid Pathing and the fabled PvP Base Raiding Options that could be built into a Base Editor like the one I'm envisioning (and at great length laying out here in this thread).



Until then ... May The Force Field Defender Be With You.


It's the end. But the moment has been prepared for ...