Loot: Difference between revisions

From The DarkMod Wiki
Jump to navigationJump to search
Petike (talk | contribs)
m adding missing categories
Geep (talk | contribs)
Add a link and comment to Framed Art under See Also
 
Line 31: Line 31:
It makes sense to keep the type at 3. For the value, be careful to not set it too high or too low.
It makes sense to keep the type at 3. For the value, be careful to not set it too high or too low.


==== See also ====
==== See Also ====
 
* "[[Framed Art]]" for a fuller and more up-to-date treatment of framed paintings, including lootable ones. The images shown above no longer represent how the looted paintings look by default, but you can still achieve that appearance by changing a spawnarg value.


* [[Combo entities]]
* [[Combo entities]]

Latest revision as of 16:42, 13 October 2021

Introduction

This wiki page is for general information and guides dealing with loot related things.

Basic Loot Objects

You can add loot into your map by right clicking the orthoview in DR and selecting 'create entity'. Preconfigured loot objects are available in the entity lists. You can also make new non-standard loot objects by changing the spawnargs on an already added loot item: inv_loot_value, model, etc.

Loot Paintings

A new feature in TDM v1.01 are loot paintings. This are simple paintings that the player can frob, and then steal.

How to add to your map

Add one of the following entities to your map:

  • atdm:loot_painting
  • atdm:loot_painting_medium
  • atdm:loot_painting_large

Customizing

You can set the spawnarg skin on the created entity and then select a different skin.

In addition, you can add the following spawnargs and modify them:

It makes sense to keep the type at 3. For the value, be careful to not set it too high or too low.

See Also

  • "Framed Art" for a fuller and more up-to-date treatment of framed paintings, including lootable ones. The images shown above no longer represent how the looted paintings look by default, but you can still achieve that appearance by changing a spawnarg value.

Advanced Loot Objects

Sometimes more elaborate loot elements are required.

Loot Cache

A Loot Cache is a special object that gives items to the player upon frobbing. A closed bag, for example. The player frobs it and receives an arrow. He frobs again and receives a health potion. When the player frobs the third time the bag is empty and the player gets nothing. These kind of objects could be useful for random stashes in the map. Mapper could prepare such a bag and teleport it anywhere in the map upon each mission restart, making the loot to be located in a different place each playtime, increasing replayability of the mission. When placing Loot Caches, be sure to make them seem unusual and different from their surroundings, luring the player to go and frob it.

Recipe: Create a func_static stash object. A bag, for example. Give it "name loot_cache" and "frobable 1". Select the object and open it in the S&R editor. Add frob from the response list. The effect of the response should be trigger. Have it to trigger an entity named exec_inventory_grab. Create a atdm:target_callscriptfunction-entity and name it "exec_inventory_grab". Also give it spawnarg "call inventory_grab".

The end result should be that when the object receives a frob, the S&R triggers the exec_inventory_grab, which in turn calls a script named inventory_grab.

Create in your maps folder, alongside the mission-name.map a file called mission-name.script. Enter this kind of script into the file:

float cache_state = 0; // a global mapwide variable to tell the map how much stuff the player has taken from the cache.
void inventory_grab()
{
sys.println("inventory grab script running"); // Print the text to the console
   if ( cache_state == 0 ) {
       sys.println("Give item 0");
       $item_name_0.addItemToInv($player1); //put item_name_0 into player inventory and let the player know about it.
   }
   if ( cache_state == 1 ) {
       sys.println("Give item 1");
       $item_name_1.addItemToInv($player1);
   }
   if ( cache_state == 2 ) {
       sys.println("Give item 2");
       $item_name_2.addItemToInv($player1);
   }
cache_state = cache_state + 1; // increment the variable to make the script give the next object to the player when he frobs the cache again.
}

You need to create item_name_X objects into your map's blueroom. These objects could be anything that can be picked up: loot, scrolls, books, player tools, player weapons, arrows. Expand the script if you have more objects in the cache, i.e. add more if sentences. Handy tip: remember that arrows have the inv_ammo_amount spawnarg. Setting this to 10 on the arrow entity could make the player receive 10 broadheads with a single frob.

If you like, you could make a visual cue suggesting the Loot Cache contains objects. You could place a dummy func_static object, a broadhead shaft for example, to stick out from the Cache. Give the dummy-func_static spawnargs: "name dummy_arrow" "bind loot_cache", "frobable 1", "frob_distance 1". Give the loot_cache spawnarg "frob_peer_1 dummy_arrow". Now the arrow shaft is glued on the Cache and moves with it when the Cache is teleported. Also when the Cache is frob-highlighted, the dummy arrowshaft will highlight as well. If you add the command

$dummy_arrow.remove();

to the last if sentence, the arrow shaft will vanish when the last object has been taken out from the cache, providing a visual clue that the cache indeed is now empty.