SP Native Ranger Company version 1.8 (updated April, 18,2010) testers still needed!!

Should the loot wagon require an npc to run? see page 8 for details.

  • Yes, more npc's please.

    Votes: 13 61.9%
  • No, I want all the loot, all the time.

    Votes: 4 19.0%
  • What's a loot wagon?

    Votes: 4 19.0%

  • Total voters
    21
  • Poll closed .

Users who are viewing this thread

Abhuva said:
Hi, i am relative new to this forum, but i visit this board now for over a year and modding/playing a bit longer. I really enjoy your work and thought i can contribute with some little bug report.
One thing that happens (and i guess its repeatable) is when u send out skirmishers, then fight the same enemy as the skirmishers and after the battle ends u fill up your party with rescued prisoners then your skirmisher just disappear. The reason is that your party is full before the skirmisher returns.
Would be nice to either have a option to change them with troops of your party, or let them stay on the worldmap as a seperate party, so u can disband some troops and get the Rangers back.
(happened with the latest update)

Thanks for the bug report, Abhuva.  I will see what I can do to fix this for the next version.  Probably the easiest way to fix it is to force add the rangers back into your party, leaving them on the map will cause problems. You can then decide which ones you want to keep.
 
Uploaded version 1.6 containing Adorno's enhanced scenes and the new supply wagon feature.

In this version you start out with a supply wagon.  You can use it to store excess loot.  Loot will automatically be added to the supply wagon after a battle.  If you assign an npc to command the supply wagon, you can send it to a town of your choice to sell any loot or prisoners you don't want.  If the supply wagon is attacked and lost on the way to town, you can build a new one if you have 2 sumpter horses and tools in your inventory.  The npc commanding the supply wagon will either escape and return to your party with the news, or he will be captured, in which case, you will have to rescue him.
 
Adorno said:
Sounds great. The scripts must be complicated as hell but the feature sounds simple and realistic.
I suppose any NPC can command the wagon regardless of skills (pathfinding)?
  Maybe more complicated than they need to be, seeing as how I'm just learning this stuff.  But what the hell, it works.
 
  Any npc can command the wagon, but npc's with high trade skill will get you a much better price for your goods.  You will see a definite difference between Marnid and any other npc.
  I also plan to make prisoner management an important skill in the future for the wagon master.  A low prisoner management skill and a high prisoner count could end up in a slave revolt  :twisted:
  I started on a new npc specifically for the wagon, but he isn't finished yet.
 
A little bug report, i worked a bit with the code (implementing in my own mod, using your mod as basic code ... turned the loot wagon off when u start the game so u have to build it first). When i looted a party a text appears above the first loot option (the 3 hour one) but that only happens when i dont have a loot wagon build, maybe thats why you normally dont recognize that. Tried that several times and i am pretty sure its not cause of my changes to the code, but i cant figure out what it is atm. I also couldnt read the appearing text (would have maked it easier to track this bug down) cause its above  the normal text so its really hard to read.

A second thing isnt really a bug, but a feature which i think isnt so good. Happens during a long battle with sea raiders, i always 3hour looted them and got overrun everytime from another party. I won battle after battle and my loot wagon was full after it. Finally my party was killed, i got captured and after i escaped i realize my whole loot wagon with full loot was still there. Was nice in that moment but i think its pretty unrealistic. I guess a better option would be to destroy/disband the loot wagon after your party got raided so that u loose the loot and the wagon.

All in all i have to say its a real great update, especially the options to either get away from battlefield fast (and dont get overrun by other partys) or to loot and gain honor but have to fear to get battle after battle till u loose everything =)
 
Abhuva said:
A little bug report, i worked a bit with the code (implementing in my own mod, using your mod as basic code ... turned the loot wagon off when u start the game so u have to build it first). When i looted a party a text appears above the first loot option (the 3 hour one) but that only happens when i dont have a loot wagon build, maybe thats why you normally dont recognize that. Tried that several times and i am pretty sure its not cause of my changes to the code, but i cant figure out what it is atm. I also couldnt read the appearing text (would have maked it easier to track this bug down) cause its above  the normal text so its really hard to read.

A second thing isnt really a bug, but a feature which i think isnt so good. Happens during a long battle with sea raiders, i always 3hour looted them and got overrun everytime from another party. I won battle after battle and my loot wagon was full after it. Finally my party was killed, i got captured and after i escaped i realize my whole loot wagon with full loot was still there. Was nice in that moment but i think its pretty unrealistic. I guess a better option would be to destroy/disband the loot wagon after your party got raided so that u loose the loot and the wagon.

All in all i have to say its a real great update, especially the options to either get away from battlefield fast (and dont get overrun by other partys) or to loot and gain honor but have to fear to get battle after battle till u loose everything =)

The first bug you mention has already been fixed.  There is a version 1.6.1 at the mb repository.  It is save game compatible.

The second bug, where you were captured and still retained your loot, that was overlooked by me.  You should lose the loot wagon when captured.  I'll fix it for the next update and thanks very much for the bug report.

A strategy you can try to not get caught while looting or burying the dead is to send out a small skirmish party at any nearby enemies before you attack someone.  Make sure that the skirmishers have engaged the enemy and he will not be able to join in the battle you are in.  You can also slow down enemies in this way so that you can chase the smaller enemies further away from the group.

As far as changing the code so that you don't start with a supply wagon, all that you need to do is change these lines in the script set_town_spy_count

Code:
	 (assign,"$wagon_attached",1),   #used for checking if party has loot wagon attached or on trade run 
	 (assign,"$owns_wagon",1),    # 1 if player owns a wagon, 0 if not.

set them to look like this:

Code:
	 (assign,"$wagon_attached",0),   #used for checking if party has loot wagon attached or on trade run 
	 (assign,"$owns_wagon",0),   # 1 if player owns a wagon, 0 if not.

Now when you start a new game, you start with no supply wagon.  Make sure to set both variables to 0.
 
@abhuva

Okay, to fix the problem with the supply wagon not being emptied if you are defeated in battle, there is one line that needs to be added in module_game_menus.py  in the simple_encounter menu.  Add the line I have marked with arrows ----->  <---------
It is towards the very bottom of the menu.

Code:
    "simple_encounter",mnf_enable_hot_keys|mnf_scale_picture,
    "{s2} ^{s15}",
    "none",
    [	
#TEMPERED CHANGES BEGIN
		(str_clear,s15),
		(str_store_string,s15,"@_"),
		(try_begin),
			(party_get_slot,":party_entrenched","p_main_party",slot_party_entrenched),
			(ge,":party_entrenched",1),
			(neq, "$duel_encounter",1),#TEMPERED ADDED FOR WILDERNESS DUEL
			(str_store_string,s15,"str_entrench"),
			(assign, "$cant_leave_encounter", 1),
		(try_end),
#TEMPERED CHANGES END
        (assign, "$g_enemy_party", "$g_encountered_party"),
        (assign, "$g_ally_party", -1),
        (call_script, "script_encounter_calculate_fit"),
        (try_begin),
			(eq, "$new_encounter", 1),
			(assign, "$new_encounter", 0),
			(assign, "$g_encounter_is_in_village", 0),
			(assign, "$g_encounter_type", 0),
			(try_begin),
				(party_slot_eq, "$g_enemy_party", slot_party_ai_state, spai_raiding_around_center),
				(party_get_slot, ":village_no", "$g_enemy_party", slot_party_ai_object),
				(store_distance_to_party_from_party, ":dist", ":village_no", "$g_enemy_party"),
				(try_begin),
					(lt, ":dist", raid_distance),
					(assign, "$g_encounter_is_in_village", ":village_no"),
					(assign, "$g_encounter_type", enctype_fighting_against_village_raid),
				(try_end),
			(try_end),
			(try_begin),
				(gt, "$g_player_raiding_village", 0),
				(assign, "$g_encounter_is_in_village", "$g_player_raiding_village"),
				(assign, "$g_encounter_type", enctype_catched_during_village_raid),
				(party_quick_attach_to_current_battle, "$g_encounter_is_in_village", 1), #attach as enemy
				(str_store_string, s1, "@Villagers"),
				(display_message, "str_s1_joined_battle_enemy"),
			(else_try),
				(eq, "$g_encounter_type", enctype_fighting_against_village_raid),
				(party_quick_attach_to_current_battle, "$g_encounter_is_in_village", 0), #attach as friend
				(str_store_string, s1, "@Villagers"),
				(display_message, "str_s1_joined_battle_friend"),
            # Let village party join battle at your side
			(try_end),
			(call_script, "script_let_nearby_parties_join_current_battle", 0, 0), 
			(call_script, "script_encounter_init_variables"),
			(assign, "$encountered_party_hostile", 0),
			(assign, "$encountered_party_friendly", 0),
			(try_begin),
				(gt, "$g_encountered_party_relation", 0),
				(assign, "$encountered_party_friendly", 1),
			(try_end),
			(try_begin),
				(lt, "$g_encountered_party_relation", 0),
				(assign, "$encountered_party_hostile", 1),
				(try_begin),
					(encountered_party_is_attacker),
					#(neq,"$g_encountered_party","$loot_wagon"),
					(assign, "$cant_leave_encounter", 1),
				(try_end),
			(try_end),
			(assign, "$talk_context", tc_party_encounter),
			(call_script, "script_setup_party_meeting", "$g_encountered_party"),
		(else_try), #second or more turn
#          (try_begin),
#            (call_script, "script_encounter_calculate_morale_change"),
#          (try_end),
			(try_begin),
            # We can leave battle only after some troops have been killed. 
				(eq, "$cant_leave_encounter", 1),
				
				(call_script, "script_party_count_members_with_full_health", "p_main_party_backup"),
				(assign, ":org_total_party_counts", reg0),
				(call_script, "script_party_count_members_with_full_health", "p_encountered_party_backup"),
				(val_add, ":org_total_party_counts", reg0),
				(call_script, "script_party_count_members_with_full_health", "p_main_party"),
				(assign, ":cur_total_party_counts", reg0),
				(call_script, "script_party_count_members_with_full_health", "p_collective_enemy"),
				(val_add, ":cur_total_party_counts", reg0),

				(store_sub, ":leave_encounter_limit", ":org_total_party_counts", 10),
				(lt, ":cur_total_party_counts", ":leave_encounter_limit"),
				(assign, "$cant_leave_encounter", 0),
				(assign,"$force_presentation_shown",1), #Tempered do not show presentation if battle has started
			(try_end),
			(eq, "$g_leave_encounter",1),
			(change_screen_return),
        (try_end),

        #setup s2
        (try_begin),
			(party_is_active,"$g_encountered_party"),
			(str_store_party_name, s1,"$g_encountered_party"),
			(try_begin),
				(eq, "$duel_encounter",1),#TEMPERED ADDED FOR WILDERNESS DUEL
				(str_store_string,s2,"@The time for talk is over. {s1} is waiting to begin the duel."),
			(else_try),
				(eq, "$g_encounter_type", 0),
				(neq, "$duel_encounter",1),#TEMPERED ADDED FOR WILDERNESS DUEL
				#(str_store_string, s2,"@You have encountered {s1}. You have {reg10} troops fit for battle against their {reg11}."),
				(str_store_string, s2,"@You have encountered {s1}. You have {reg10} troops fit for battle."),
			(else_try),
				(eq, "$g_encounter_type", enctype_fighting_against_village_raid),
				(str_store_party_name, s3, "$g_encounter_is_in_village"),
				(str_store_string, s2,"@You have engaged {s1} while they were raiding {s3}. You have {reg10} troops fit for battle."),
			(else_try),
				(eq, "$g_encounter_type", enctype_catched_during_village_raid),
				(str_store_party_name, s3, "$g_encounter_is_in_village"),
				(str_store_string, s2,"@You were caught by {s1} while your forces were raiding {s3}. You have {reg10} troops fit for battle."),
			(try_end),
		(try_end),
        (try_begin),
			(call_script, "script_party_count_members_with_full_health", "p_collective_enemy"),
			(assign, ":num_enemy_regulars_remaining", reg(0)),
			(assign, ":enemy_finished",0),
			(try_begin),
				(eq, "$g_battle_result", 1),
				(eq, ":num_enemy_regulars_remaining", 0), #battle won
				(assign, ":enemy_finished",1),
			(else_try),
				(eq, "$g_engaged_enemy", 1),
				(le, "$g_enemy_fit_for_battle",0),
				(ge, "$g_friend_fit_for_battle",1),
				(assign, ":enemy_finished",1),
			(try_end),
			(this_or_next|eq, ":enemy_finished",1),
			(eq,"$g_enemy_surrenders",1),
			(assign, "$g_next_menu", -1),
			(jump_to_menu, "mnu_total_victory"),
        (else_try),
#          (eq, "$encountered_party_hostile", 1),
			(call_script, "script_party_count_members_with_full_health","p_main_party"),
			(assign, reg(3), reg(0)),
			(assign, ":friends_finished",0),
			(try_begin),
				(eq, "$g_battle_result", -1),
				(eq, reg(3), 0), #battle lost
				(assign,  ":friends_finished",1),
			(else_try),
				(eq, "$g_engaged_enemy", 1),
				(ge, "$g_enemy_fit_for_battle",1),
				(le, "$g_friend_fit_for_battle",0),
				(assign,  ":friends_finished",1),
			(try_end),
			(this_or_next|eq,  ":friends_finished",1),
			(eq,"$g_player_surrenders",1),
			(assign, "$g_next_menu", "mnu_captivity_start_wilderness"),
 --------->        (troop_clear_inventory,"trp_loot_wagon_storage_1"),   <----------------     ADD THIS LINE
			(jump_to_menu, "mnu_total_defeat"),
        (try_end),
 
Cool, i have to say i really love your fast responses Tempered =)
Thx for the update. I will try out the solution for the raided loot-wagon, and one question before i try it out myself - does the little one-liner-code-change only empty the wagon or totally destroy it?
(the code looks like it only empty the loot-wagon inventory) Cause i would prefer to get the wagon destroyed (maybe just with a percentage-chance) ... hehe guess i will just try around with it.

PS:
Would the code-snippet from the game-initialization
    (assign,"$wagon_attached",0),  #used for checking if party has loot wagon attached or on trade run
    (assign,"$owns_wagon",0),    # 1 if player owns a wagon, 0 if not.
manage to loose the wagon or is this unnecasarry during the game?
I guess together with
    (troop_clear_inventory,"trp_loot_wagon_storage_1")
this would be a good way to empty and destroy the loot wagon also during a quest...

Edit:
Just a thing i forgot to mention, like i said i already disabled the loot wagon at the start, the first time i build it (with 2 sumpter horses and the tools) after the building process was finished the items still remained in the party inventory, is this intentional? I guess a nice option is to clear the 3 items from the inventory and when u choose to destroy the wagon by yourself u get the items back. But i really have no clue how to clear the specific items from the party-inventory...
 
The tools must stay, but the horses shouldn't. In reality tools can be used more than once, right? But if you leave them in the wagon, for emergency repairs or something, they could be removed too.

EDIT: Best thing to do - ignore the above part of the post.

Anyway, Tempered, great work. You always make the cool stuff before me. :razz:
 
@Lumos: You are right, tools can be used more than one time, so i only would like to see that the horses vanish from the inventory (else i could sell them after building the wagon and actually my men have to pull it =P )

@Tempered:
Another bug i found have to do with overridden tags for the quality of the looted items. You can loot lets say a rusty sword and after you looted it and looks in the inventory of the supply wagon the sword has turned into a normal one (aka loosing its quality-tag).

Beside that i have to say thx for a fixed feature i didnt recognized really till now, the possibility to return to your builded entranchments is really great, in one of the first versions i never was able to use this feature properly cause when i got chased and send out skirmishers to get more time to build the entrenchmants, everytime they returned my camp was broken and i had to face them on normal battle map, now i can send them out, build my entranchment and after they returned i just go back there. Really loving this feature now (so much more entranched battles now for me). Again thumbs up for the great fix of this =)

Edit: Another question regarding prisoners and the supply wagon. I changed the calculation for the prisoner price in my mod (script_game_get_prisoner_price ... only adding the (assign, reg0, ":ransom_amount") to the original script) and recognized that when i sell the prisoners via the supply wagon i get way less. I searched the script for your calculations and found them in script_loot_wagon_trade. The strange thing is its the exact same calculation (getting the lvl, adding 10, multiplier by itself, dividing through 4). So i really have no clue atm whats going on and why i get more money when i sell them myself.

Edit2: Tested a bit more with the supply wagon and got another strange thing happening, but i am unsure if its a bug or just a feature i am not aware of. I have a trading skill of 0, companion (who also leads the supply wagon) have trading skill 3. When i manually sell the loot by myself i got like 3 times the money as if i send the loot wagon. Tested it with the loot from a raided village, all the loot in my inventory sold for 3.2k if i did it myself in the town, i saved before, reloaded the game and let the same loot sell via supply wagon and got like 0.9k. 
I guess its the same like with the prisoners, i looked through the codes and i cant figure out what is wrong, the code seems all right for me...
 
Abhuva,
  The quality tags are a little strange, they should be working correctly, but if they are not, I can't say why.  I'll test it some more and see what I can find.

As far as the difference in prices, my calculation assumes a skill of no less than 1, so if you have zero skill, it gives you the price for having a 1 skill.  I also took a few shortcuts with the calculation, so it is not going to be exactly the same as an in person trade.  Just assume that the sales clerk likes you better the farther away you are  :razz:  The native game goes through a huge list of variables and calculations for each town in order to arrive at a price. I don't want to add that kind of overhead to the code. Unfortunately, the native game assumes a face to face trade, so I really can't just have the game do the calculation.

Tools.  You can lose tools if your camp is over run.  You will get a message telling you if your camp has been over run.  You do not lose tools if you lose the wagon unless you had them stored on the wagon.  You should keep tools in your personal inventory.  The mod won't know that you have tools, otherwise.

Sumpter horses remaining in inventory has been fixed. They should be properly removed now when building a new wagon.

Also, I forgot to add that the difference in price is also because the npc running the wagon is the one selling items, not you. So it goes by his trade skill and not the party trade skill or the players trade skill.
 
Abhuva said:
Cool, i have to say i really love your fast responses Tempered =)
Thx for the update. I will try out the solution for the raided loot-wagon, and one question before i try it out myself - does the little one-liner-code-change only empty the wagon or totally destroy it?
(the code looks like it only empty the loot-wagon inventory) Cause i would prefer to get the wagon destroyed (maybe just with a percentage-chance) ... hehe guess i will just try around with it.

PS:
Would the code-snippet from the game-initialization
    (assign,"$wagon_attached",0),  #used for checking if party has loot wagon attached or on trade run
    (assign,"$owns_wagon",0),    # 1 if player owns a wagon, 0 if not.
manage to loose the wagon or is this unnecasarry during the game?
I guess together with
    (troop_clear_inventory,"trp_loot_wagon_storage_1")
this would be a good way to empty and destroy the loot wagon also during a quest...

Edit:
Just a thing i forgot to mention, like i said i already disabled the loot wagon at the start, the first time i build it (with 2 sumpter horses and the tools) after the building process was finished the items still remained in the party inventory, is this intentional? I guess a nice option is to clear the 3 items from the inventory and when u choose to destroy the wagon by yourself u get the items back. But i really have no clue how to clear the specific items from the party-inventory...

  The wagon and the wagon inventory are really two separate things.  Clearing the inventory does nothing to the wagon and removing the wagon does nothing to the inventory.  The inventory should have been cleared when the wagon was abandoned. 
  The variables I showed you are only read at the start of a new game.  There should not be any inventory in the wagon at the start of a new game since the inventory hasn't been created until the first time you own a wagon.
 
I played a bit with the code and found a nice solution for the supply-wagon/getting raided thingy which i wanted to share:
(Unfortunately i dont know the forum command to get that spoilers, sry for it)


(assign, "$g_next_menu", "mnu_captivity_start_wilderness"),
(try_begin),  # only destroy supply wagon if he is attached to party
  (eq, "$wagon_attached", 1),
  (troop_clear_inventory,"trp_loot_wagon_storage_1"),  ## supply wagon inventory cleaned after total defeat
  (assign,"$wagon_attached",0),  # supply wagon destroyed
                  (assign,"$owns_wagon",0),      # supply wagon destoyed
  (display_message, "@_Your supply wagon is getting looted and destroyed.", 0xFF0000),  # message for destroyed supply wagon
(try_end),
(jump_to_menu, "mnu_total_defeat"),

(The first and last line is to better find the place for the code in game_menus.py)

It basicly checks if a wagon is attached and deletes the wagon and the inventory.
I tried it ingame and it works very well, if u got raided and u have a wagon the wagon is gone,
but if u send the wagon to town and got raided while the wagon is on a trade-run nothing happens, and after u escape the wagon returns to u (when he dont get caught too =) )

I hope u find that useful, i for sure pretty like it.
 
Abhuva said:
I played a bit with the code and found a nice solution for the supply-wagon/getting raided thingy which i wanted to share:
(Unfortunately i dont know the forum command to get that spoilers, sry for it)


(assign, "$g_next_menu", "mnu_captivity_start_wilderness"),
(try_begin),  # only destroy supply wagon if he is attached to party
  (eq, "$wagon_attached", 1),
  (troop_clear_inventory,"trp_loot_wagon_storage_1"),  ## supply wagon inventory cleaned after total defeat
  (assign,"$wagon_attached",0),  # supply wagon destroyed
                  (assign,"$owns_wagon",0),      # supply wagon destoyed
  (display_message, "@_Your supply wagon is getting looted and destroyed.", 0xFF0000),  # message for destroyed supply wagon
(try_end),
(jump_to_menu, "mnu_total_defeat"),

(The first and last line is to better find the place for the code in game_menus.py)

It basicly checks if a wagon is attached and deletes the wagon and the inventory.
I tried it ingame and it works very well, if u got raided and u have a wagon the wagon is gone,
but if u send the wagon to town and got raided while the wagon is on a trade-run nothing happens, and after u escape the wagon returns to u (when he dont get caught too =) )

I hope u find that useful, i for sure pretty like it.

You mean this is for if the player is captured?  Looks like it should work okay.  The supply wagon is more than likely going to get killed off before you're released, anyhow.  The message should be taken out, though.  The player shouldn't know that his wagon is being attacked, especially if he is a prisoner.
  I'll put the check for an attached wagon in the code and give you credit for the fix  :grin:
 
Thx, my first actual code i posted here =)
The message only appears when u have a supply wagon attached to the party (and the wagon isnt on a trade-run - thats why i only checked for the $wagen_attached) and your party got raided/destroyed.
I put the message in, mostly cause i wanted the player to know that his wagon got looted and destroyed - and the message only appears in the described scenario.
When i tested it, i send the wagon out on a trade-run, got captured by sea-raiders and was imprisoned like 2 days, when i got released i saw another party near me, looked closer and realized that my supply wagon was following me all the time  :razz:, he instantly rejoins my destroyed party and got me some nice cash from the trades. (in that scenario no message appears cause no wagon was attached to party)

The fact that u have clear variables for both owning a wagon, and having the wagon attached to the party makes things very easy to implement =)

I know i said it several times (but it cant be said enough) - i really enjoy playing around with your code, its one of the best things i have seen (mainly cause it pleases my own direction of improving the gameplay)

I am really looking forward to more stuff like that (and i hope once the module system for warband is out it isnt too hard to port it over)
 
I'm glad you like it.  Feel free to change it all you want.  You could even use it as a code base for your own mod if you like.  I don't have much time to work on it, so you could probably finish a mod before I finish this one  :grin:

Oh, I fixed the item modifier problem you mentioned earlier.  Everything in the supply wagon should now have the correct quality modifier.
 
I am using Version 1.6 atm, dont know if this is fixed in a later version but i just report it. Its the same like the bug with skirmisher returning to a party and getting lost in the reassigning process cause of party limit already reached. The same happens when u have a full party and u retrieve a spy from town, he comes to your party, rejoins and get lost.
I dont know how to fix this myself (u mentioned earlier a fix would be to force the troop in the party and let the player decide what to do before he continues the game).

The same thing for the supply wagon works really good =) the wagon just follows you on the map till u have enough spots in your party to let them rejoin. Its only buggy with the Rangers... (I know its not the same thing and let the Spy/Skirmisher remain on map isnt a option)

Another thing happening is during some quests (troublesome looters) - when u skirmish them the quest will fail - but only if u use the rangers to actually skirmish, when u hunt them down normally all is fine. I guess the game just checks which party started the battle first (so it doesnt matter if u join the battle or not, the quest always fail then - that kind of behaviour is also in native and its a bit annoying, dont know if there is a chance for fixing it)


Btw, is the fixed version with the item-modifiers available for download or should i be a bit more patient?
 
  Hmm, I thought I had fixed that bug.  I'll have another look at it when I get a chance. 

Edit The not enough room bug is fixed for good for spies and skirmishers, it will be in version 1.8Edit

I'll upload the current version with the supply wagon item modifier fix for you.  This one also has some new meshes, so you will have to start a new game.
 
Back
Top Bottom