A base editor

A forum for the discussion and development of programs to assist working on or playing with the Vegastrike engine and data sets.
pheonixstorm
Elite
Elite
Posts: 1567
Joined: Tue Jan 26, 2010 2:03 am

Re: A base editor

Post by pheonixstorm »

klauss wrote:Cockpits in VS should be all 3D by now.
Soo... where are they? I would rather have a bunch of 2D cockpits than NO cockpit
klauss wrote:There is support for 3D virtual cockpits in the engine, they're great, they should be used.
So why aren't they? And how do we activate then?
klauss wrote:The only 3D cockpit mesh we have is an old one from strangelet IIRC.
Is this the ugly kludge from .4.3?
klauss wrote:3D cockpits go like thits: a 3D mesh for the surrounding environment, which will show proper movement (ie: shake when the ship is under stress) and then the 2D elements that make up the HUD, radars, viewscreens, etc, all overlaid in the usual 2D cockpit fashion.

Eventually, the 2D elements will be integrated into the 3D model by virtue of projected screens, but ATM, there's no engine support for that.

I'd discourage further making of 2D-only cockpits. I've played with 3D cockpits and it's immensely more immersive.
Lucky lucky you... So where can we find a modeler to do some cockpits for our completed ships?
Because of YOU Arbiter, MY kids? can't get enough gas. OR NIPPLE! How does that mkae you feeeel? ~ Halo
travists
Expert Mercenary
Expert Mercenary
Posts: 893
Joined: Thu Jul 08, 2010 11:43 pm
Location: Sol III North American Continent

Re: A base editor

Post by travists »

Well, what kind of poly count do you guys think a cockpit should have? Some ships, like the mule, the existing no cockpit cockpit makes sense. The lama looks like it has a cockpit dome, so should have a cockpit. Give me some loose sketches, and a suggested poly count, and I can see if I can make something that measures up. I think my base editor may be on hold for now.
ace123
Lead Network Developer
Lead Network Developer
Posts: 2560
Joined: Sun Jan 12, 2003 9:13 am
Location: Palo Alto CA
Contact:

Re: A base editor

Post by ace123 »

By the way, there's a stupid program I wrote like 6 years ago where I ripped out the base rendering engine from vegastrike. It's write-only of course, since it doesn't have a python engine.

You can compile it with:
cd objconv/basemaker
g++ -g -I../.. -I../../src ../../src/xml_support.cpp base_maker*.cpp -obasemaker -lGL -ljpeg -lpng -lglut

./basemaker somebase

And it will make the sprites directory and the bases/ python code.

It's really dumb, and I think for sprites you have to place them at the center, but for links you click one in the lower left corner, and then once again in the upper right corner. I think it would need to be updated since it expects .png or .jpg only and not the .image extension we use now.

If you want to get it working again, I can probably help you find what you need to change, but it might better serve as a starting point for rewriting the whole thing in python (seriously, this would probably be way less code using Tkinter)--and you would have the benefit of being able to read *and* write base files for free.
travists
Expert Mercenary
Expert Mercenary
Posts: 893
Joined: Thu Jul 08, 2010 11:43 pm
Location: Sol III North American Continent

Re: A base editor

Post by travists »

ace123 wrote:If you want to get it working again, I can probably help you find what you need to change, but it might better serve as a starting point for rewriting the whole thing in python (seriously, this would probably be way less code using Tkinter)--and you would have the benefit of being able to read *and* write base files for free.

I have zero experiance writing python, but it looks like the way to go. Is your thing the basemaker prog in the svn? I've grabed that and can't even get it to run. Anyway, If I get the bones of the editor working in Visual Basic would you beable to help me translate? Or, are there some editors and tutorials you might sugest to get me up to speed? Thanks for the offer of help :D
pheonixstorm
Elite
Elite
Posts: 1567
Joined: Tue Jan 26, 2010 2:03 am

Re: A base editor

Post by pheonixstorm »

I might be able to get it to run. As long as I can get all the correct files for it I should be able to tinker with it and hopefully make it work. If I do I can split mesher off the main VC solution and create a tools solution. Will leave the make and cmake files to someone else though...
Because of YOU Arbiter, MY kids? can't get enough gas. OR NIPPLE! How does that mkae you feeeel? ~ Halo
travists
Expert Mercenary
Expert Mercenary
Posts: 893
Joined: Thu Jul 08, 2010 11:43 pm
Location: Sol III North American Continent

Re: A base editor

Post by travists »

If one of you has the experiance to get this done, that would be just fine. Seemed to me something that was missing. This is a interface I just put together in VB, to try to get my thoughts on this hammered out. No code yet...
pheonixstorm
Elite
Elite
Posts: 1567
Joined: Tue Jan 26, 2010 2:03 am

Re: A base editor

Post by pheonixstorm »

Nice look, easy to follow.

Busy reading over old threads so no chance to look at basemaker. Do you want me to add you on to my sf project? You can use my svn to keep this updated and I can tinker with it as well.
Because of YOU Arbiter, MY kids? can't get enough gas. OR NIPPLE! How does that mkae you feeeel? ~ Halo
travists
Expert Mercenary
Expert Mercenary
Posts: 893
Joined: Thu Jul 08, 2010 11:43 pm
Location: Sol III North American Continent

Re: A base editor

Post by travists »

Before posting it, I think I should have a working version in at least ONE language. But perhaps. Is there a guide that tells me what the numbers mean when defining your ship and links?
klauss
Elite
Elite
Posts: 7243
Joined: Mon Apr 18, 2005 2:40 pm
Location: LS87, Buenos Aires, República Argentina

Re: A base editor

Post by klauss »

pheonixstorm wrote:
klauss wrote:Cockpits in VS should be all 3D by now.
Soo... where are they? I would rather have a bunch of 2D cockpits than NO cockpit
klauss wrote:There is support for 3D virtual cockpits in the engine, they're great, they should be used.
So why aren't they? And how do we activate then?
klauss wrote:The only 3D cockpit mesh we have is an old one from strangelet IIRC.
Is this the ugly kludge from .4.3?
Only aera ships use it ATM (try to buy or hack yourself into an aera fighter).

There's the ugly cage from .4.3, but I wasn't talking about that s**t ugly thing. ;)

The polycount needs not be huge, there's very limited navigability inside the cockpits (just a bit of head movement), so a few polies should be enough. Anyway, the same limits apply as any other model: 1k - 3k polies should be OK on modern hardware. 10k and above on higher-end hardware.

But texturing is the most important thing in cockpits, and we can afford big textures here. I'd say 1024x1024, easy, or perhaps more (2048x2048?)

They should have diffuse map, light map (for interior lights), normal map, ambient occlusion, and if possible even a PRT map (xNormal can produce them). But the bare minimum would be a diffuse, light and normal map set.

@travists: that looks simple and intuitive enough. If you can output the kind of XML XGUI.py would take when finished, we have something.
Oíd mortales, el grito sagrado...
Call me "Menes, lord of Cats"
Wing Commander Universe
pheonixstorm
Elite
Elite
Posts: 1567
Joined: Tue Jan 26, 2010 2:03 am

Re: A base editor

Post by pheonixstorm »

klauss wrote:Only aera ships use it ATM (try to buy or hack yourself into an aera fighter).

There's the ugly cage from .4.3, but I wasn't talking about that s**t ugly thing. ;)

The polycount needs not be huge, there's very limited navigability inside the cockpits (just a bit of head movement), so a few polies should be enough. Anyway, the same limits apply as any other model: 1k - 3k polies should be OK on modern hardware. 10k and above on higher-end hardware.

But texturing is the most important thing in cockpits, and we can afford big textures here. I'd say 1024x1024, easy, or perhaps more (2048x2048?)

They should have diffuse map, light map (for interior lights), normal map, ambient occlusion, and if possible even a PRT map (xNormal can produce them). But the bare minimum would be a diffuse, light and normal map set.
Not to hijack the thread or anything but... Does the 3D cockpits have corect radar placement? I noticed on a screenshot for the rlan cockpit that the radars were not correctly placed. Ok, end thread hijack.
Because of YOU Arbiter, MY kids? can't get enough gas. OR NIPPLE! How does that mkae you feeeel? ~ Halo
klauss
Elite
Elite
Posts: 7243
Joined: Mon Apr 18, 2005 2:40 pm
Location: LS87, Buenos Aires, República Argentina

Re: A base editor

Post by klauss »

pheonixstorm wrote:Not to hijack the thread or anything but... Does the 3D cockpits have corect radar placement? I noticed on a screenshot for the rlan cockpit that the radars were not correctly placed. Ok, end thread hijack.
No, as I said, HUD elements still have to be overlaid in 2D, and are fixed in the screen. Think like a helmet-mounted display.

It's not a big deal, just the placement and HUD design must account for that fact and that's it - but having the 3D mesh around really adds a lot of immersiveness, it reminds you that you're on a cockpit, in a ship, and not flying "naked".

And you can feel the speed during SPEC.

And you can feel the acceleration during dogfighting.

It's really a better experience.
Oíd mortales, el grito sagrado...
Call me "Menes, lord of Cats"
Wing Commander Universe
travists
Expert Mercenary
Expert Mercenary
Posts: 893
Joined: Thu Jul 08, 2010 11:43 pm
Location: Sol III North American Continent

Re: A base editor

Post by travists »

klauss wrote: But texturing is the most important thing in cockpits, and we can afford big textures here. I'd say 1024x1024, easy, or perhaps more (2048x2048?)

They should have diffuse map, light map (for interior lights), normal map, ambient occlusion, and if possible even a PRT map (xNormal can produce them). But the bare minimum would be a diffuse, light and normal map set.

@travists: that looks simple and intuitive enough. If you can output the kind of XML XGUI.py would take when finished, we have something.
That level of texturing is a bit out of my league. As for what I can output, I can certainly dump anything I want to a text file and save it with the .py extension.
This is the Carribean Code.

Code: Select all

import Base
import vsrandom
import dynamic_mission
import VS
import fixers
plist=VS.musicAddList('carribean.m3u')
VS.musicPlayList(plist)    
dynamic_mission.CreateMissions()

time_of_day='_day'

#landing = Base.Room ('Landing Platform')
#Base.Texture (landing, 'tex', 'bases/carribean/landing.spr', 0, 0)
relax = Base.Room ('Pool')
Base.Texture (relax, 'tex', 'bases/carribean/relax.spr', 0, 0)
Base.Ship (relax, 'ship', (0,.388,8), (0,.9,-.15), (1,0,0))
Base.LaunchPython (relax, 'Launch','bases/launch_music.py', -0.1, 0.25, 0.2, 0.268229, 'Launch')
bar = Base.Room ('Bar')
Base.Texture (bar, 'tex', 'bases/carribean/bar.spr', 0, 0)
Base.Texture (bar,'bartender','bases/generic/big_bartender%d.spr' % (vsrandom.randrange(0,2)), -0.469922, 0.155208)
Base.Python (bar, 'talk', -0.669922, -0.119792, 0.4, 0.4, 'Talk to the Bartender', 'bases/bartender_carribean.py',0)
concourse = Base.Room ('Concourse')
Base.Texture (concourse, 'tex', 'bases/carribean/concourse.spr', 0, 0)
Base.Comp (concourse, 'cargcomp', -0.755859, -0.450521, 0.253906, 0.471354,  'Hardware Purchases/Sales', 'Cargo ShipDealer Upgrade Info')
Base.Comp (concourse, 'misscomp', 0.458984, -0.414063, 0.232422, 0.505208, 'Mission Computer', 'News Missions')
Base.Link (concourse, 'bar', -0.232422, -0.447917, 0.431641, 0.442708, 'Bar', bar)
Base.Link (concourse, 'Pool', -0.996094, -0.994792, 1.99219, 0.309896, 'Pool', relax)
#fixers.CreateFixers(concourse,[(-.7,-1,.4,.4),(.3,-1,.4,.4),])

Base.Link (relax, 'Concourse', -0.310547, -0.078125, 0.638672, 0.273438, 'Concourse', concourse)
Base.Link (bar, 'Concourse', 0.34375, -0.557292, 0.654297, 1.3151, 'Concourse', concourse)
Base.Link (bar, 'Concourse', -0.123047, -0.0807292, 0.164063, 0.601563,'Concourse',concourse)
I get the import, used in java and c++ to include external code
*.link goes to another room
I can read and interpret most of it. What do the dang number sets do :?:
Should be an X and Y pos for the point to click on, and a bounding box. But what order?
X, Y, Width, Height? The ship looks to have rotational markers?
If there is a guide I’m missing please point it out.
Then I can try to code this thing and bost a beta.
breese
Bounty Hunter
Bounty Hunter
Posts: 152
Joined: Thu Sep 02, 2010 8:00 pm

Re: A base editor

Post by breese »

travists wrote:I can read and interpret most of it. What do the dang number sets do :?:
Should be an X and Y pos for the point to click on, and a bounding box. But what order?
X, Y, Width, Height? The ship looks to have rotational markers?
If there is a guide I’m missing please point it out.
If I have understood the code correctly, the Python Base functions end up calling C++ BaseUtil functions, so you can find the list of arguments in src/cmd/base_util.h.
breese
Bounty Hunter
Bounty Hunter
Posts: 152
Joined: Thu Sep 02, 2010 8:00 pm

Re: A base editor

Post by breese »

klauss wrote:It's really a better experience.
Except you cannot really see a damn thing in an Aeran cockpit.
klauss
Elite
Elite
Posts: 7243
Joined: Mon Apr 18, 2005 2:40 pm
Location: LS87, Buenos Aires, República Argentina

Re: A base editor

Post by klauss »

breese wrote:
klauss wrote:It's really a better experience.
Except you cannot really see a damn thing in an Aeran cockpit.
Well... tough luck ;)

I mean, cockpits are a reality of any kind of space sim. It's part of the game what you can and cannot see. Now, whether aeran cockpits are too obtrusive is another matter. They might just need to be calibrated better (better centering).

And you can still disable them (repeatedly press 1 to toggle between cockpit and no cockpit).

About Base.Link stuff, it's messy. You give it the center X/Y and dimensions. Take a look at GUI.py's GUIRect class which has quite some documentation. In fact, I'd recommend using GUI.py's classes instead of Base.Link directly, you have examples in main_menu.py
Oíd mortales, el grito sagrado...
Call me "Menes, lord of Cats"
Wing Commander Universe
travists
Expert Mercenary
Expert Mercenary
Posts: 893
Joined: Thu Jul 08, 2010 11:43 pm
Location: Sol III North American Continent

Re: A base editor

Post by travists »

Thanks Breese, Your post was more helpful than it appeared at first blush. Here is what I think I've come up with

Code: Select all

Line 1: Bases.h
Line 2: Ocean_Lib.py
Line 3: My reading

void Ship ( int room, std::string index, QVector pos, Vector R, Vector Q );
Base.Ship (room, 'my_ship', (-0.122559,-0.146484,4), (0, 0.93, -0.34), (-1, 0, 0))
--ship (where, what, position (?,?,?), Rotation?(?,?,?),??(?,?,?);

void Link( int room, std::string index, float x, float y, float wid, float hei, std::string text, int to );
Base.Link (room0, 'my_link_id', -1, -0.997396, 1.99805, 0.315104, 'Main_Concourse', room1)
--link(At now, define as link, x position ,y position, width, height, label, where to);

void Launch( int room, std::string index, float x, float y, float wid, float hei, std::string text );
Base.LaunchPython (room0, 'my_launch_id', 'bases/launch_music.py', -0.609375, -0.502604, 0.712891, 0.65625, 'Launch')
--launch (at now, define as launch, set music*optional*,X position, Y position, Width, Height, label)

void Comp( int room, std::string index, float x, float y, float wid, float hei, std::string text, std::string modes );
Base.Comp (room1, 'my_comp_id', -0.998047, -0.03125, 0.550391, 0.681771, 'Mission_Computer', 'Missions News Info ')
--comp (at now, define as computer ,x position, y position, width, height ,label, panels available);
Do I have it right? The vectors are still escaping me. Also, is there a compelling reason to have the bar defined separately, or can I use some of the bar.py code to place fixers directly? Might be nice to have a "shady character by the loading docks" option.
pheonixstorm
Elite
Elite
Posts: 1567
Joined: Tue Jan 26, 2010 2:03 am

Re: A base editor

Post by pheonixstorm »

klauss wrote: Well... tough luck ;)

I mean, cockpits are a reality of any kind of space sim. It's part of the game what you can and cannot see. Now, whether aeran cockpits are too obtrusive is another matter. They might just need to be calibrated better (better centering).

And you can still disable them (repeatedly press 1 to toggle between cockpit and no cockpit).

About Base.Link stuff, it's messy. You give it the center X/Y and dimensions. Take a look at GUI.py's GUIRect class which has quite some documentation. In fact, I'd recommend using GUI.py's classes instead of Base.Link directly, you have examples in main_menu.py
Yeah, the cockpit takes up way too much of the screen. I tried docking at serinity and was unable to as well. Got too close on one pass and collided with the base then got attacked... after that point my cockpit looked like it was having seizures. Better experience?? Hardly. Radar in the helmet? Makes the overall experience kinda crappy IMO. Thats one things the privateer cockpits have right. The vdu and radats should be PART of the cockpit not seperate. Another thing about being in the helm.. then they should follow you when you hit 2 or 3 for the right and left cockpit views (but they don't)

@travists
I think the fixers are placed by the campaign.py or connected mission files while the base related files just tell where fixers will be placed in the bar when called from campaigns.py heres an example

Code: Select all

HAULER_SPRITE   = ("campaign/hauler.spr","Talk_To_The_Hauler") #sprite file for the fixer
HAULER2_SPRITE  = ("campaign/hauler.spr","Talk_To_Jenek") #sprite file for the fixer
HAULER_LOCATION = ("Crucible/Cephid_17","Atlantis")
So, from campaigns.py only the base/planet it listed on where to find the fixer not the exact location in the bar.
Because of YOU Arbiter, MY kids? can't get enough gas. OR NIPPLE! How does that mkae you feeeel? ~ Halo
travists
Expert Mercenary
Expert Mercenary
Posts: 893
Joined: Thu Jul 08, 2010 11:43 pm
Location: Sol III North American Continent

Re: A base editor

Post by travists »

In looking back over the Caribbean code I posted as an example, it looks like that one handles the bar internally, the ocean (I'm using its further features for my baseline) calls an external bar.py to handle the bar. This will take some further research. I have much of the coding done and can now place rooms and computers. I'll look deeper into the bar codes of other planets to get a feel for that. Further info on the vector settings for the ships would be appreciated. And can I set different music for each room, or just for the whole base? Still pre-alpha; can't load, but I'm nearly to where I can save. Once I round it out, then I'll see what can be done about cross platform. Even a compleat rewrite if needed will be helped by doing it once! :)
breese
Bounty Hunter
Bounty Hunter
Posts: 152
Joined: Thu Sep 02, 2010 8:00 pm

Re: A base editor

Post by breese »

travists wrote:

Code: Select all

void Ship ( int room, std::string index, QVector pos, Vector R, Vector Q );
Base.Ship (room, 'my_ship', (-0.122559,-0.146484,4), (0, 0.93, -0.34), (-1, 0, 0))
--ship (where, what, position (?,?,?), Rotation?(?,?,?),??(?,?,?);
The vectors consists of x, y, and z coordinates. QVector is the same as Vector except it has more precision, but that should not concern you here.

The R and Q vectors define a plane for the orientation of the ship. I believe that they should be orthogonal unit vectors (i.e. the length of each vector must be 1 and their inner product must be 0.) It would probably have been easier to use this function if we could have passed three rotation angles (around the x, y, and z axes) instead.
travists wrote:

Code: Select all

void Launch( int room, std::string index, float x, float y, float wid, float hei, std::string text );
Base.LaunchPython (room0, 'my_launch_id', 'bases/launch_music.py', -0.609375, -0.502604, 0.712891, 0.65625, 'Launch')
--launch (at now, define as launch, set music*optional*,X position, Y position, Width, Height, label)
Python LaunchPython maps to C++ LaunchPython. LaunchPython will call both Launch and the supplied python script (bases/launch_music.py).

There seem to be a general pattern that most functions exists in two versions: with and without a python script.
charlieg
Elite Mercenary
Elite Mercenary
Posts: 1329
Joined: Thu Mar 27, 2003 11:51 pm
Location: Manchester, UK
Contact:

Re: A base editor

Post by charlieg »

pheonixstorm wrote:Yeah, the cockpit takes up way too much of the screen.
You are all just spoilt. I remember playing Wing Commander 2 and Privateer and the cockpits easily overlaid 50% or moree of the screen. That left less than half of 320x240 to track your targets and the radar was a critical tool for navigation and combat.

:D
Free Gamer - free software games compendium and commentary!
FreeGameDev forum - open source game development community
Deus Siddis
Elite
Elite
Posts: 1363
Joined: Sat Aug 04, 2007 3:42 pm

Re: A base editor

Post by Deus Siddis »

charlieg wrote:You are all just spoilt. I remember playing Wing Commander 2 and Privateer and the cockpits easily overlaid 50% or moree of the screen. That left less than half of 320x240 to track your targets and the radar was a critical tool for navigation and combat.
All games from that time were like that. Almost certainly because the bulky, static interfaces didn't have to be redrawn all the time, while the view of the game world did.

But I will create in the near future a 3D cockpit for the Purist craft, because we need them anyway for walkable interiors. Do not expect this in time for the next release though.
travists
Expert Mercenary
Expert Mercenary
Posts: 893
Joined: Thu Jul 08, 2010 11:43 pm
Location: Sol III North American Continent

Re: A base editor

Post by travists »

Haven't had opportunity to mess with 3d cockpits, but I did extract an obj from the llama model. Loaded it up into my animation software, and placed a camera in the cockpit. Good ship design, lots of visibility, but that also lends to having little cockpit framework to show. And in my mind, any 3d cockpit (or 2d for that matter) should show the parts of the ship you can see. Gauges should either follow the player through all views, or be static displays on the forward view. It doesn’t much matter which way you go; it just needs to be consistent. Also, I'm not sure how 3d cockpits are set up, but head waggle isn't enough. You should be able to have 310 degrees lateral twist and 160 ventral tilt with everywhere in-between. Weather accessible or not, perhaps the nav/mission panel should be somewhere. But, if you have an immerseve 3d cockpit around you, then you should be able to crane your head all the way around.

PS I'll look through the latest info on bases here and should have a mostly working creator soon.
klauss
Elite
Elite
Posts: 7243
Joined: Mon Apr 18, 2005 2:40 pm
Location: LS87, Buenos Aires, República Argentina

Re: A base editor

Post by klauss »

pheonixstorm wrote: Yeah, the cockpit takes up way too much of the screen. I tried docking at serinity and was unable to as well. Got too close on one pass and collided with the base then got attacked...
Well, we then just make sure any new cockpits aren't that intrusive. ;-)
pheonixstorm wrote:after that point my cockpit looked like it was having seizures. Better experience?? Hardly.
Try dogfighting. When a station pounds you hard, the cockpit really shakes real bad. but, in any case, it can be dialed down, there are config options for that.
In fact, I thought I had committed some adustments to cockpit shaking, I'll check if by chance I didn't commit them.
pheonixstorm wrote:Radar in the helmet? Makes the overall experience kinda crappy IMO. Thats one things the privateer cockpits have right. The vdu and radats should be PART of the cockpit not seperate. Another thing about being in the helm.. then they should follow you when you hit 2 or 3 for the right and left cockpit views (but they don't)
Come on... yeah, it's not ideal, but it's the same you got with 2D cockpits, it can't be as crappy as you paint it.
Oíd mortales, el grito sagrado...
Call me "Menes, lord of Cats"
Wing Commander Universe
klauss
Elite
Elite
Posts: 7243
Joined: Mon Apr 18, 2005 2:40 pm
Location: LS87, Buenos Aires, República Argentina

Re: A base editor

Post by klauss »

travists wrote:But, if you have an immerseve 3d cockpit around you, then you should be able to crane your head all the way around.
The '7' key will make your head track your target. I use it all the time.

If you're within a virtual 3D cockpit, it's all the better.

If you mean you'd rather have a key to explicitly move your head, feel free to add an issue to sourceforge's tracker, and it will be addressed as son as I can (it should be rather easy).
Oíd mortales, el grito sagrado...
Call me "Menes, lord of Cats"
Wing Commander Universe
travists
Expert Mercenary
Expert Mercenary
Posts: 893
Joined: Thu Jul 08, 2010 11:43 pm
Location: Sol III North American Continent

Re: A base editor

Post by travists »

[quote="klauss]If you mean you'd rather have a key to explicitly move your head, feel free to add an issue to sourceforge's tracker, and it will be addressed as son as I can (it should be rather easy).[/quote] That's kinda what I was thinking, I see the feature request forum, and I think links to add to the feature request wiki? Is that what you are in reference to?


Anyway, I checked out the code for a commerce center, and fixers are as easy as everything else, but them dang vectors. brease is right passing xyz rotations would be a whole lot easier.
Post Reply