By Land, By Sea, By Air

Discuss the IceBlink Engine

By Land, By Sea, By Air

Postby Lurking Grue » Mon Feb 25, 2013 9:54 am

Even in the Ye Olde Tymes of CRPGs, there have been different modes of transport available to PCs. Going back to Ultima IV, for example (been replaying it recently), which was made all the way back in 1985 (i.e. barely out of the computer stone age), there are horses, frigates/ships, and even a hot air balloon available to the characters, in addition to plain old walking; to say nothing of the moongates which teleport you around the map (a really good way to handle quick travel, IMO). This in a game made almost 30 years ago. Not too shabby!

While it most certainly isn't a priority, it would be nice if the IB Engine would support different modes of transport by e.g. allowing the party icon to change into a different icon depicting the mode of transport (be that a horse, sailboat or a starship) and changing the movement speed and, if needed, the allowable terrain (a boat allows you to travel on water but not on land, etc.). There could be additional things done via scripting, like fuel usage or wind direction etc., but the bare basics of changing the status of the party to be embarked/mounted and changing the travel speed would be nice to have in the release version from the get-go.

Just a thought.
"It is pitch black. You are likely to be eaten by a grue."
User avatar
Lurking Grue
Backer
Backer
 
Posts: 291
Joined: Sat Dec 08, 2012 12:26 pm

Re: By Land, By Sea, By Air

Postby Pongo » Mon Feb 25, 2013 9:34 pm

yeah completely agree.

Although I suck at drawing horses!
User avatar
Pongo
Backer
Backer
 
Posts: 636
Joined: Tue Nov 27, 2012 4:58 pm

Re: By Land, By Sea, By Air

Postby slowdive » Wed Feb 27, 2013 2:32 am

Changing the party token is already in the plans and the concept of having Z coordinates on maps is being looked at as well. The amount of time that passes on each move should be assignable by the module author.
User avatar
slowdive
Site Admin
Site Admin
 
Posts: 3111
Joined: Wed Nov 21, 2012 11:58 pm

Re: By Land, By Sea, By Air

Postby Lurking Grue » Wed Feb 27, 2013 2:11 pm

OK, good! Not having tinkered much with the toolset yet (reason for that being, I'm waiting until the "foundations have been set" in the toolset, so that it's at a stage where one doesn't have to remake a module when a new version is released - I'm lazy like that ;)), I wonder if the terrain tiles could have two different modes/states depending on your mode of transport, or if their state could change depending on your equipment. For example, a water tile which is impassable to the party on foot, but if they acquire a boat, the water tiles become passable when using the boat (but land tiles now become impassable until the party disembarks); or a lava tile which kills anyone entering it without wearing dragonscale boots (yes, UU, I remember you). This isn't a big issue, really, just wondering.

With party icon change and change in movement speed, one can do a lot already. Also, I intend to handle water travel (if any) in my intro module via conversation for simplicity's sake. E.g. you talk to a fisherman (or someone else with a boat) and persuade them to take you to an island you need to get to by boat, maybe paying them for it or doing a small sidequest for him. The dialogue gives you this option to travel and the engine auto-magically transports you to a new map at the choosing of the relevant dialogue option - with a short transition text. Simple and easy to implement. Afterwards, once I get more XP in the IB Toolset Use (and level up a few times), I intend to implement horses and boating/sailing for fantasy modules and more fancy modes of transport for sci-fi ones (starships ho!).
"It is pitch black. You are likely to be eaten by a grue."
User avatar
Lurking Grue
Backer
Backer
 
Posts: 291
Joined: Sat Dec 08, 2012 12:26 pm

Re: By Land, By Sea, By Air

Postby youngneil1 » Mon Mar 04, 2013 6:28 pm

So, slowly catching up on the open ends here. Great questions, Grue, and great that Jer is right on track with changing party token (which will besides travel have plenty other potential uses like e.g. disguising, transformation into animals, expressing party leader change, support perspective change in map, swimming/diving, climbing, express party level progress, party succuessfully sneaking on world map,...) as well as flexible ingame time used up per tile moved (depending on the nature of the tile, perhaps modified by transporation device, party skills, weather, day/night time, rested stauts of the party, etc.).

Z-coordinates will get intruiging. Still not certain how they will be used - they might define what is shown on top of what. As the background map will always be shown in the back (exception: invisible party, haha), they might refer to the relation between e.g. props and the party icon. A party might very well walk under tress (onyl partially visible then where the tress leave space), but fly over them with a balloon.

Or Z-coordinates are an easy additonal numercial property of map fields: 0 flat land, -1 sea, +1 hills..., but I think that would be too simple and one dimensional (what about "forest", "swamp", "desert" - it wont be aboput elevation only). Better to have each square indeed a "terrain type" property, which can be expressed by the current OnEnter event system of the toolset.

For example, a water tile which is impassable to the party on foot, but if they acquire a boat, the water tiles become passable when using the boat (but land tiles now become impassable until the party disembarks); or a lava tile which kills anyone entering it without wearing dragonscale boots (yes, UU, I remember you). This isn't a big issue, really, just wondering.


Somehwat good news, Grue. A part of this should work already (not tested, just from toolset tinkering impression) - a water tile might right now have a transition event pushing the party back to shore OnEnter (a little difficult with potentially several candidate fields for the field where the party came from, but still). The activation of this event itself might be coupled with a script that checks for a global variable "BoatEmbarked". If the party has embarked boat already, that push pack event is disabled and on we sail (well, walterwalk right now :-))! Now embarking a boat would work via dialogue at select coastal points (and if the party has a boat, condition check in that conversation). The same spots would allow for disembarking. All walkable land tiles that are not such spots would get a push back event if "BoatEmbarked" == 1, i.e. if we sail right now. This only works "somewhat" has ideally our boat would actually be left stranded where we disembark (oh well, it's an inflatable wonderboat). Coming to think of it, perhaps the dis-/embark locations woudl haev numbers and on each disembark a variabale "AnchorPlace" would be assigned to that number. Yes, it migth even fully work. It will be a lot of adding OnEnter events though, especially on long coast lines, sigh. Same for taking damage OnEnter, if e.g. not wearing such protective boots.

Also, I intend to handle water travel (if any) in my intro module via conversation for simplicity's sake. E.g. you talk to a fisherman (or someone else with a boat) and persuade them to take you to an island you need to get to by boat, maybe paying them for it or doing a small sidequest for him. The dialogue gives you this option to travel and the engine auto-magically transports you to a new map at the choosing of the relevant dialogue option - with a short transition text. Simple and easy to implement.


Absolutely, this should work out fine by running a custom transition script as action from the conversation editor (a little tricky part will be coordinate system).
User avatar
youngneil1
Backer
Backer
 
Posts: 4906
Joined: Sat Dec 08, 2012 7:51 am

Re: By Land, By Sea, By Air

Postby youngneil1 » Mon Mar 04, 2013 10:45 pm

Despite the above described possibilities, it would probably be nice if squares/fields could have a "type of square/field" property (like e.g. ocean, river, wood, jungle, deep space, lower neuron core, etc.). Just a tag for scripts to easily recognize what they deal with (in combat as well as on world map). Thinking of this perhaps just a ListOfTags per field/square would do.

Also some accessible value like "PlayerPositionOnEndOfLastTurn" would be helpful for e.g. repelling a player to that position, e.g. player tries to a enter sea field without boat and would be transitioned back to that position consequently.
User avatar
youngneil1
Backer
Backer
 
Posts: 4906
Joined: Sat Dec 08, 2012 7:51 am

Re: By Land, By Sea, By Air

Postby slowdive » Tue Mar 05, 2013 5:20 am

I added the functions needed to change any Creature/NPC/PC sprite to a different sprite. Just supply the new sprite filename (.spt) and the sprite sheet filename (.png):
Code: Select all
        public void LoadSpriteStuff(string path, string sprtFilename, string bitmapFilename)
        {
            this.CharSprite = CharSprite.loadSpriteFile(path + "\\" + sprtFilename);
            this.CharSprite.passRefs(game);
            this.CharSprite.Image = CharSprite.LoadSpriteSheetBitmap(path + "\\" + bitmapFilename);
        }

When you want to change it back, just access this function:
Code: Select all
        public void LoadSpriteStuff(string path)
        {
            this.CharSprite = CharSprite.loadSpriteFile(path + "\\" + this.SpriteFilename);
            this.CharSprite.passRefs(game);
            this.CharSprite.Image = CharSprite.LoadSpriteSheetBitmap(path + "\\" + this.CharSprite.SpriteSheetFilename);
        }


Also, the player's last location is already saved in the current versions of the engine (used to send you back when you retreat from combat). Just call this:
Code: Select all
sf.gm.playerPosition.X = sf.gm.lastPlayerLocation.X;
sf.gm.playerPosition.Y = sf.gm.lastPlayerLocation.Y;

That will move you back to the last square.
User avatar
slowdive
Site Admin
Site Admin
 
Posts: 3111
Joined: Wed Nov 21, 2012 11:58 pm

Re: By Land, By Sea, By Air

Postby youngneil1 » Tue Mar 05, 2013 7:40 am

I added the functions needed to change any Creature/NPC/PC sprite to a different sprite. Just supply the new sprite filename (.spt) and the sprite sheet filename (.png):


Intruiging stuff :-). The usage of "this" seems to indicate that these functions are called directly from the character/creature whose sprite is to be changed? Typically I would expect some OnEnter script to fire when the party enters a square to board the ship or from a convo when talking to e.g. a captain to take the party on board. In both cases the script would be attached either to a square/field or to a certain conversation. How would a call of LoadSpriteStuff from such a script work out? I would expect to hand some addtional parameter like the tag of the creature/party whose sprite is to be changed over to the LoadSpriteStuff function?

Also, the player's last location is already saved in the current versions of the engine (used to send you back when you retreat from combat). Just call this:


Ah, great, many thanks. I have to find a way to somehow organize all this cool info better. A few days ill and I start becoming disorientated in the forum even though I know it rather thorughly indeed.
User avatar
youngneil1
Backer
Backer
 
Posts: 4906
Joined: Sat Dec 08, 2012 7:51 am


Return to General Engine Discussion

Who is online

Users browsing this forum: No registered users and 1 guest

cron