Silgrad Tower from the Ashes

Full Version: Technical Info concerning Interiors
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3 4
This thread is for technical matters related to making interiors for Silgrad Tower.

Questions.



[tm=green]TABLE OF CONTENTS[/tm]







More Tutorials, FAQ board.
Anthology of hard-to-find CS tips
Scripting and quests.
CS Wiki.

Never made a mod before? Check this link.

Many thanks to HeIsTheDarkness, Razorwing, Smokindan, TheImperialDragon, and Zurke for their contributions.
The first Topic.

The Northmarker, the rotation and "XYZ" placement

If the rotation of the exterior building is -40. The Northmarker placed aside the interior has a rotation of +40. The "WatersEdgeBieneAmelionsHouse" is nice example. XYZ is at 0, you can find many of these interiors in Oblivion.

If you see an interior with a "XYZ" not equal to 0, I think the following applies. Many people start the right placement (XYZ=0) of the tileset pieces. But during the modding process they shifted the whole interior.
I think that was the case with the Oblivion team as well, you'll see many interiors (in Oblivion) which differ (even with rotated interiors) from the ideal situation.


The official guideline: Create a new interior with a "XYZ"=0. If the numbers are not equal to 0, it's not a big issue. The claimholder doesn't have to change "XYZ" numbers. The interior rotation has to be equal to 0.




blue[/HR]
Second Topic.

Bartering

If your NPC has to barter do as follows:

First create a new container (or make a copy of a merchant container for your kind of class). Place the chest under the interior (floating in "space"). Add the objects you like to sell (-5 wine etc, -5 mugs etc.).
Assign ownership to the chest and check "persistent ref.".

The "-" means: Unlimited stock.

Select your NPC and double click.

Edit base.
Go to the AI.

Check what you like him to sell/buy (uncheck autocalc) . Give him barter gold and add e.g. "aaaserviceseditorloc8812". If you want to edit the time, create a new package. The defined time, is the time during which the NPC can barter.

Save etc.

Select your NPC again.

Go to the tab "merchant container" and select "ref. in render window", select your merchant container.

If you already assigned ownership to the container you don't have to select the container through the tab "merchant container".

AI package.

More info.
Third Topic.

Modder's Abbreviaton's

Quote:Posted (by Razorwing) "Reich Parkeep Claims Board -Readme-"

Whenever you're modding for Silgrad Tower and add your own entries in the Construction Set you must start the name of the entry with your "modder abbreviation".

It might not make sense to you right now, but from our experience of working on the old TES3 mod using and adhering to this system is crucial when our mod grows to hold thousands of entries from many dozen modders. With everyone using their abbreviation it'll be quick and easy for you to locate your stuff that's been added to the main mod whenever you want to use it again.

Resuming:

When modding for Silgrad Tower: Oblivion, you'll use a StXX prefix when creating any new item. Whether you're re-ID'ing a static for a new purpose, putting together your own chest, importing a cool weapon made by someone else, or whichever may be the case.
After the XX add your claimcode.


Claim Your Abbrev.
Fourth Topic.

Dialogue

ALWAYS EDIT the Dialogue through the quest window to avoid contaminations.

Part I, Creating the Quest

You need to define a "quest", before you can add the dialogue.

I'll take ReichParkeep18, Nirtunus Rulician's home as a guideline.

If you want to make a test file. Create an interior and one NPC (from scratch). Give the NPC this ID:"StSrRPC18NirtunusRulician1" and give the NPC the name "Nirtunus Rulician".

If you follow the instructions, the NPC will have (when finished) one greeting and one topic "Owner".

Create a quest (right-click and select new) and give it the following ID: "StSrRPC18Q1" (screenshot 1).

In the "Quest data" tab set the priority to 6 (this means that your greeting has a higher pirority over the normal greetings and will be displayed first).

Select "Start game enabled"
In the conditions listing add: "GetIsPlayableRace == 1".
Target = no and the function info = none (screenshot 3, quest for Reich Parkeep 09).

Go to the "Topics" tab. Select it.

You get a new screen.
To your left you see the "quest listings", with your quest selected.

Then (right of the quest listing, screenshot 2) you see the "Editor ID listing". Next (right of the Editor ID listing) top half of the screen you see the "Topic text" displayed and beneath it there you see the "info listing".

Creating a topic.

Go to the editor ID listing. Right-click. Select "Add Topic".
You'll see a new listing "select topic". Select the existing topic "Greeting".

Now you'll see the Topic text: "Greeting".
The info listing is still empty.

Create your first info.

Put the mouse over the info listing and right-click. Select new.

The "New response" screen appears. Type the following text "Hello, I am Nirtunus Rulician".

Select "OK".

Go back to the info listing and select the new ("Hello I...") info.

At the bottom of the screen there you will find a "conditions listing".

Select New.

Leave the target as it is (no).

Select "GetIsID" (Condition Function). Select "StSrRPC18NirtunusRulician" (Function Parameters). Select "==" (Comparison). Set value to "1".
This means that the new info in the Greetings topic is assigned to Nirtunus, only he will say this greeting.

Select "New" again.

Leave the target as it is (no).
Select the following data: Getdisposition Target >= 50. This means the info will be spoken if his disposition is higher or equal than 50.

In this way you can determine if you want the player to raise the disposition before he/she gets the answer.

The second info.

Go back to the editor ID listing. Right-click. Select "Add Topic".
You'll see a new listing "select topic". Right-click in the listing add select "new". Type "StSrOwner1". Hit enter.

Edit the "Topic Text" which is "StSrOwner1" and change it to "Owner".

In the Editor ID you'll see the new topic "StSrOwner1".

Select this topic. Go to the info listing. Right-click and select new.
The "New response" screen appears. Type the following text: "I am the owner of this house. Select OK.

Keep the info selected and give this info the following conditions.

Leave the target as it is (no).
Select "GetIsID" (Condition Function) and select "StSrRPC18NirtunusRulician" (Function Parameters). Select "==" (Comparison) and set the value to "1".
This means that the new info in the Owner topic is assigned to the Nirtunus NPC, only he will say this info.

Select again New.

Leave the target as it is (no).
Select the following data: Getdisposition Target >= 60. This means the info will be spoken if his disposition is higher or equal than 60.
You have to raise his disposition the get the answer.


Add the new info to the Greeting Topic.

Select in the Editor ID the Topic Greeting.

Select in the info listing the first info "Hello I am ......". The only one, for now.

In the middle of the screen, right side, there is small listing named "Add topic". Go there and right-click and select Add topic (*). Select the topic "StSrOwner1" and select Ok.

Now Nirtunus has a Greeting and one topic named "Owner".


Part II, The NPC

In the CS.
Go to the interior ReichParkeep18. Select the NPC Nirtunus Rulician (double click), select Edit Base and select Dialogue.
In the editor ID you'll see the greeting and owner topics listed (among others). Go to the Greeting topic (listed in the Editor ID), you'll see that the quest has been added at the greeting topic. Select it and you'll see the greeting "Hello I am....", in the small listing "Add topic" you'll see the topic StSrOwner1.

Playtest and in-game Nirtunus will greet you, raise his disposition and he will answer for the Owner topic.

(*)
From June first 2007 onwards, it isn't allowed to add topics through the add topic listing. Add the topics through the result script listing, to avoid problems when merged to the esm (topics don't show up in-game), because of bug in the CS. For example: addtopic StSrSol0501Soluthis. Look at the screenshot.


sandor has attached these images (downsized versions):

[Image: tn_attachment-1839.jpg] [Image: tn_attachment-1840.jpg] [Image: tn_attachment-7651.jpg] [Image: tn_attachment-9109.jpg]
screen1.jpg (132 KB) | screen2.jpg (208 KB) | GetISPlayableRace.jpg (145.41 KB) | Result Script Listing.jpg (185 KB)
Dialogue II

Adding topics via script and why to start from scratch with a new NPC (no copy).

Adding topics via script.

As I said in Dialogue I you can add topics via a small listing (add topic) in the topics tab of the quest menu. It's also possible to add topics via script.

Go to your NPC.
Double click and select "Edit base". Go to the script listing and click on the button with "...". Now you can add a new script. Type the following (for Baro Carbo in ReichParkeep18).

Code:
Scriptname StSrRPC18servantScript

Begin Gamemode

addtopic"proprietor"
addtopic"servant"

end
addtopic"xxx" The "xxx" should be the exact name of the existing topic.


Don't copy a NPC.

If you make a copy of an existing NPC, you copy everything.
This means AI packages, dialogue etc. This could lead to unwanted side effcts in-game. For example dialogue you don't want or strange AI behaviour. Of course you can "clean" the AI and dialogue, a lot of work and it's easy to forget something.

It's a lot more fun to start from scratch.

Class and race determine the basics for the dialogue. For example a "Merch Publician" and "Imperial". The NPC will have the standard greetings for a Imperial NPC and the class arranges the correct answers for bartering etc.
Fifth Topic

Light Settings

Select your cell in the cell view window (screenshot 1), then right click and select edit.
Select the "lighting" (screenshot 2) tab. You normally change the ambient one (Red, Green and Blue).

Lighting is very important to create the right atmosphere.
Make sure there is enough light, so the player can see what he/she should see or it should be intentional (dark) for example an abandoned house. I am talking about the interiors for Reich Parkeep, Soluthis, Steadhelm etc. I am not referring to dungeons or caves.

If you set the light setting (intentional) very bright (e.g. 150,150,150), bear in mind that there should be some source from which the light is coming. You have to add enough "Candlestick04Fake" etc. If you place a lot of normal candlesticks etc. the interior gets even brighter!

A very bright interior without any lights (it could be intentional) would be strange and not normal.

So I recommend to start with a lower light setting (e.g. 50,50,50) and try to "light" the interior with real lights (no fakes). Check this link as well (especially for large interiors).

If you think it's still too dark, it's possible to make it brighter via the edit function, as described above. If necessary, correct the number of light sources with a few fakes.

There are also a number of other lights (looking like a lightbulb) for example ARBlueAmb300 (starting with AR..). You can use these to mimic sunlight shining into the interior etc.

You could create special light effects, but always keep in mind (in a normal interior): Where does the light come from, the source e.g. sun, candles etc.

Hereafter is a list with settings used in Oblivion, for your reference.
It's a selection, maybe it can help you to find the right setting for your own interior.

The numbers mean the settings for R, G and B.

AnvilCastleDiningHallandServantQuarters hall 48 48 64
AnvilCastlePrivateQuarters 39 37 48
AnvilChapelHall 25 25 25
AnvilFightersGuild 30 29 35
AnvilTheCountsArms 31 32 37
BravilAndragilHouse 41 51 61
BravilCastleGreatHall 40 50 60
BravilFightersGuild 40 50 60
BravilFightersGuildBasement 40 50 60
BravilRanalineHouse 40 50 60
BrumaArnorasHouse 20 20 10
BrumaBradonLirriansHouse 53 67 83
BrumaCastleDungeon 25 25 25
BrumaCastleGreatHall 25 25 25
BrumaHelviusCeciasHouse 40 40 40
BrumaMagesGuild 35 35 35
BrumaMagesGuildBasement 70 70 70
CheydinhalAldosOthransHouse 50 50 50
CheydinhalBorbasGoodsandStores 50 50 50
CheydinhalFightersGuild 46 51 55
CheydinhalMachNasBooks 46 50 55
ChorrolFireAndSteel 35 35 35
ChorrolJirolinDoransHouse 45 45 68
ChorrolMagesGuild 75 75 75
ChorrolMagesGuildBasement 60 60 60
ChorrolReynaldJemanesHouse 25 25 25
ChorrolReynaldJemanesBasement 47 47 66.
ICArcaneUniversitySpellmaker 50 50 50
ICArenaBloodworks 70 50 50
ICElvenGardensDovynArensHouseUpstairs 50 50 50
ICElvenGardensGeemJasaiinsHouseBasement 30 30 30
ICElvenGardensIdaVlinormansHouseBasement 30 26 34
ICElvenGardensRajhansHouse 50 50 50
ICElvenGardensRajhansHouseBasement 30 30 30
ICImperialLegionHQBarracks 50 50 50
ICImperialLegionWatchTowerNECaptainsQuarters 60 60 60
ICMarketDistrictAFightingChance 50 50 50
ICMarketDistrictDivineElegance 50 50 50
ICMarketDistrictDivineEleganceBasement 30 30 30
ICPalaceLibrary 15 18 18
ICPalacePrivateQuarters 15 18 18
ICTalosPlazaAgarmirsHouse 50 50 50
ICTalosPlazaAgarmirsHouseBasement 60 60 60
ICTalosPlazaHelvoAtiusHouse 50 50 50
ICTalosPlazaHelvoAtiusHouseBasement 50 50 50
ICTalosPlazaTheTiberSeptimHotel 75 75 75
ICTempleDistrictAmantiusAllectusHouse 50 50 50
ICTempleDistrictAmantiusAllectusBasement 50 50 50
ICTempleDistrictSalomonGeonettesHouse 50 50 50
ICTempleDistrictSalomonGeonettesBasement50 50 50
ICWaterfrontDarelothsHouse 50 50 50
ICWaterfrontImpTradingCoOffice 50 50 50
ImperialSewerSystemSE 10 17 14
KindredCavern02 20 21 22
KvatchCastleRooms 37 37 37
LeyawiinAhdarjisHouse 40 50 60
LeyawiinAlvalUvanisHouse 40 50 60
LeyawiinAlvalUvanisHouseBasement 40 50 60
LeyawiinCastlePrivateQuarters 32 32 43
LeyawiinFightersGuild 41 51 61
LeyawiinFightersGuildBasement 40 50 60
SkingradBernadettePenelesHouse 30 30 30
SkingradGlarthirsHouse 75 75 75

sandor has attached these images (downsized versions):
[Image: tn_attachment-1842.jpg] [Image: tn_attachment-1843.jpg]
screen1.jpg (134.02 KB) | screen2.jpg (105 KB)
Sixth Topic

Havok

About the "Havok" button.

Many objects aren't static and can be thrown around with the havok button enabled. For example armor, weapons, clutter etc.

Enable "havok" and drop an item in the render window (if you want to correct the placement during havok press CTRL and ALT, and hold).

Save.

Check the interior in-game. If you walk directly towards the object (e.g. placed on a the table) and move a bit (approach close enough), the object "jumps" (havok behaviour) from the table and falls down.

After 3 days (in-game) the objects reset to their original position (thanks to Zekebe).

Havoked objects will stay put unless you walk directly towards them or grab the objects in question.
Seventh Topic.

AI packages Technical terms

Types of Packages

Quote:Originally written by Seafort

Seafort FAQ board.

Escort package:
If the follower falls behind by a specified distanct, the escorting actor will stop and wait, doing a "come along" animation or traveling to the actor to get back within range. The wait distance is determined by two game settings, one for indoors and one for outdoors.
If the Player is being escorted, he does not get a follow package forced onto him. Also, the wait distance is set on the target tab. It is recommended that the wait distance be a value greater than 400.

Eat package:

In order to eat the actor must have an ingredient that restores fatigue in his container. If he/she does not have the food item they will attempt to gain the object by buying, killing, stealing or finding it. No actor with a responsiblilty above 30 will steal or kill for food unless it is a creature. If they can not find food they can use they will go into a wander state (act just like wander behavior) and search for food again perodically.

Cast package:

The location is where you want the spell cast. This means if the location is a reference and the spell to cast is a touch or target then that is the intended target. The target of the package is the spell you want to cast. It can be a specific spell which they will cast even if it is not in their spell list. If you pick a object type to cast it will only use their spell list.

Accompany package:

Target: Who/what to accompany. A target is required for an accompany package.

Find package:

Location: When the actor reaches the location, do a search (within radius = fAIAcquireObjectDistance) and build a list of targets up to the specified Count. Go and activate each of them. If you run out of targets before you reach Count, wander within Radius of the Location for the duration of the package, periodically rechecking the area for targets.

Target: Travel towards the target until you get within Target Radius, then activate the target. The count setting determines how many of these the actor will attempt to find.
Actor travels to within the specified Radius of the Location, then finds the target and "activates" it. The meaning of activate depends on the target.

Targets: NPC - Talk to him, or fight if you don't like him.
Creature - Attack it.
Object - Pick it up.
Container - Open it.
Chair - Sit in it.
Door - Open it. Go through for load doors.

Flee package:

Will cause an actor to run to a location or from a target. If you don't put a target on the package then the actor will flee to a location and remain there running the cower animation. If you put a target on it then the actor will run away from a target keeping the distance that is specified in the target data. If he is the right distance from the target he will stand and cower. This package will not end until a new package evaluates.

Follow package:

Location: Who/what to follow. A target is required for a follow package.

Sleep package:

Location: Where to sleep. It can be as specific as the third bed from the left in the mages guild or as general as Tom's house. If it is a general location then the actor will sleep any bed in that location that is not owned by another NPC (unless they have a low responsibility) and is not occupied. If they can not find a bed they will go into a wander state perodically checking for a bed.

Travel package:

Location: Go to specified location. If the quest conditions force the actor to use this package again, he will just stand there. If a furniture object such as a bed or chair is seletected then the actor will lay in the bed or sit in the chair.

Useitem Package:

Target: The item to be used. It can be in the actor's inventory or in the world near that location.


Wander package:
Location: Go to specified location and wander near it, within specified radius. . Actors in wander packages are also trying to find people to talk to within their social radius. If they find a chair in their wander radius they will likely sit down for a while.


Quote:From the Elderscrolls Construction set Wiki
CS Wiki,

Flags on AI Packages

Continue if PC near: This package will not terminate (iterate to done) so long as the PC is nearby. Primarily used to keep shops open so long as the PC is in there, even if the package should have expired.

Must Reach Location: Package will not terminate until the location conditions are satisfied.

Offers Services: If the actor is a service provider, he will offer services so long as this package is running.

Must Complete: Package will not terminate until all the conditions are met. For example, the target must be found with a find, the location must be reached with a travel, etc.

Once per day: Package will no run again in the same day. A day is defined as a 24 hour block beginning when the package was first selected by the actor. This is useful to make sure that a package is not immediately selected again after being completed, even though the conditions might select it.

Skip Fallout Behavior: The actor will not engage in dialogue or other behavior not relevant to the package. He will enter combat to defend himself, but not for other reasons.

Always Run: Actor always runs during this package. Some packages are actually collections of other packages. For example, Wander may initiate travel or dialogue. In some cases these secondary packages will not inherit the Always Run status. Dialogue is the most notable example. Therefore the actor will run from place to place, but when the Wander selects a nearby NPC to engage in dialogue, he will walk to the NPC. This can be corrected with the ForceRun script command if necessary.

Always Sneak: Actor always sneaks during this package. Some packages are actually collections of other packages. For example, Wander may initiate travel or dialogue. In some cases these secondary packages will not inherit the Always Sneak status. Dialogue is the most notable example. Therefore the actor will sneak from place to place, but when the Wander selects a nearby NPC to engage in dialogue, he will walk to the NPC. This can be corrected with the ForceSneak script command if necessary.

Allow Swimming: Actors will not swim to reach destinations unless this flag is set.

Allow Falls: Actors will not jump off of an elevation that will cause damage unless this flag is set.

Armor Unequipped: The actor will unequip armor (and equip clothing) for the duration of this package. Very useful for sleep packages on armored characters.

Weapons Unequipped: The actor will unequip weapons for the duration of this package. Very useful for sleep packages on armed characters.

Defensive Combat: The actor will not attack an NPC or creature, unless he is attacked first. Normally an actor will attack characters he hates, or that attack his friends or steal his stuff. This flag cancels that behavior. The exception is for the Accompany, Escort and Follow packages. For these three, if the target is attacked, the actor will join into the combat.


Door Flags
At package start: Lock/unlock doors: When the package starts, the actor will lock or unlock all the doors in the cell.

When at location: Lock/unlock doors: For the duration of the package, the actor will keep all doors in the cell locked or unlocked. If the player or another actor changes the lock status of a door, the NPC will force it back to the indicated value.

At package end: Lock/unlock doors: When the package end, the actor will lock or unlock all the doors in the cell.


Priority of packages.

In the AI window you'll see the packages listed.

The higher the package, the higher the priority.
Let's assume we have two packages, a sleep pack and an eat pack, both with a "duration 0 and time of any". The eat pack is above the sleep pack and therefore has a higher priority.

Because of the "duration 0 and time of any" the eat pack will be executed and the sleep pack can't be executed, it has a lower priority.

The meaning of "duration 0 and time of any" --> If there are no packages with a higher priority, this pack will run for ever. In general this type of packages has to be placed below (last in the list) the other packages unless you added a specific condition.


In the next reply I'll start explaining a few packages e.g. eat, sleep etc.
Packages explained

For technical terms the post "AI Packages Technical terms".

The first package we'll to look into:

Travel --> Service Package

Necessary for bartering.

First look at the menu Character and select the submenu Packages.
Look for the following package: aaaServicesEditorLoc8x12. This is a standard package for letting a NPC barter. Double-click and you'll see the screenshot AI Package 1.

If you go back and select the same package and right-click, you could make a new package, as I did for RPC18.

Go to the NPC to which you want to add a package. Double click. Select "edit base". Now you'll see screenshot NPC 2 (for RPC18, Nirtunus). Here you'll see an option Autocalc stats, unselect it (if selected). Now you can change the data in the AI menu, after you're done, reselect the Autocalc stats.

Select the AI button. You'll see screenshot NPC AI 3 with all the packages for Nirtunus. Here you can select what the NPC sells/buys, if the NPC repairs items or not etc. The bartering gold can be altered, as well (Auto calc unselected).

How do you insert the package?
Open the character, packages menu as described before. Select the package you'll need, and drag it from there into the AI window of the NPC (*).

Double-click at the service package: StsRaaaServicesEditorLoc8x2.
Now you'll see the next screenshot: NPC AI Service 4.
As you see "Offer services" is selected (as we are making a service package).

Two things are important: The schedule and the location.

The schedule for Nirtunus is from 8 am to 10 am.
Duration means in this case two hours: 8 am + 2 makes 10 am.
It means he will barter from 8 am until 10 am.

Select the tab: Location, you'll see the next screenshot, NPC AI Service Location 5. In the location tab select "near editor location". This is near where you placed the NPC in the cell. I selected a radius of 1024. This means the NPC will walk around, if you set it to 0, he'll wil remain on the same spot.

If you select "Continue if PC is near" (only intended for shopkeepers) the NPC wil continue bartering even after 10 am (e.g. a shopkeeper NPC). After the PC is gone the next package will be executed. If you defined the next package to start at 10 am and the PC leaves at 11 am, the next package will start at 11 am and not at 10 am!

In my case I didn't select it, Nirtunus will start to wander after 10 am.

(*) If you right-click in this window you can select new and create a new package, as well.

sandor has attached these images (downsized versions):
[Image: tn_attachment-1832.jpg] [Image: tn_attachment-1833.jpg] [Image: tn_attachment-1834.jpg] [Image: tn_attachment-1837.jpg] [Image: tn_attachment-1838.jpg]
AI Package 1.jpg (67.44 KB) | NPC 2.jpg (95.28 KB) | NPC AI 3.jpg (74 KB) | NPC AI Service 4.jpg (67.46 KB) | NPC AI Service Location 5.jpg (84 KB)
Packages explained

For technical terms read the post "AI Packages Technical terms".

The second and third package.

Eat/Sleep Package.

I'll use the eat package as an example.

How do you insert the package ?
Open the Character, Packages menu. Select the package you want, and drag it from there into the AI listing screenshot 2. You can also make a new package by selecting a package, right-click and select new.

I am still using RPC18 as an example.
Go to the interior and select the NPC (in my case Nirtunus) and double-click and select "edit base". Now you'lll see screenshot 1. Select the AI and you'll see screenshot 2. Select the eat package and you'lll see screenshot 3. Screenshot 4 is showing the location tab.

I selected weapons unequipped . The schedule is from 22 pm for a duration of two hours (until 00 am). The package type is of course "eat"

The location tab (screenshot 4). I selected "near editor location".

You can also select "near reference". For example another cell (a tavern).
Select a reference or place a X-marker, the NPC will have dinner outside.

In order to eat, the NPC needs an ingredient that restores fatigue, in the inventory. If there's no food in the inventory the NPC starts wandering from time to time instead of eating. The NPC is trying to find food. This isn't a problem when he's in his own house or owns a food container. Add a food item count "-1" (never runs out) to his inventory and there's no problem.

If the responsibility is lower than 30 the NPC can attempt to steal the food or even kill, for food .

The sleeping package works in a similar way (of course without the food in the inventory).

sandor has attached these images (downsized versions):
[Image: tn_attachment-1861.jpg] [Image: tn_attachment-1862.jpg] [Image: tn_attachment-1863.jpg] [Image: tn_attachment-1864.jpg]
screen1.jpg (95.28 KB) | screen2.jpg (75.35 KB) | screen3.jpg (67 KB) | screen4.jpg (86.13 KB)
Pages: 1 2 3 4