Have questions? Not a programmer? AI can help!

I do my best to view the forums a few times a day and answer questions. I’ve noticed many of them could easily be figured out if the players checked the source code but many players aren’t programmers and can’t read code.

When I taught myself to code back in 2005 using WinterLoves code most players were also trying to figure out how to host their own servers so many RSPS players had a basic understanding. Many 2004scape players didn’t find out about this server from Rune-Server or Moparscape etc but from content creators.

So I wanted to bridge that divide and I went to see if an AI could maybe help players and I think it can.

I went to

Copied the text, saved it in notepad and uploaded it to Grok (I’m sure ChatGPT or other models would do the same).

“Can you explain this code for me”


This code appears to be a script written in a custom or game-specific scripting language, likely for a game (possibly a multiplayer online game like RuneScape or a similar RPG). It defines the loot drop behavior when a specific NPC (non-player character), in this case, a “black dragon,” is defeated. Let’s break it down step-by-step:


1. Header and Context

[ai_queue3,black_dragon]
  • This line likely identifies the script or subroutine tied to an NPC called “black_dragon” in an AI behavior queue (ai_queue3). It suggests this code runs when the black dragon dies.

2. Subroutine Call and Condition

gosub(npc_death);
if (npc_findhero = false) {
    return;
}
  • gosub(npc_death);: This calls a subroutine labeled npc_death, which presumably handles generic NPC death logic (e.g., removing the NPC from the game world).
  • if (npc_findhero = false): Checks if a “hero” (likely the player who killed the NPC) is present or detected. If no hero is found (false), the script exits early with return;. This ensures loot only drops when a player is involved.

3. Default Loot Drops

// Default drop from config.
obj_add(npc_coord, npc_param(death_drop), 1, ^lootdrop_duration);
obj_add(npc_coord, dragonhide_black, 1, ^lootdrop_duration);
  • obj_add(): A function to spawn an object (item) in the game world.
    • npc_coord: The coordinates where the NPC died.
    • npc_param(death_drop): A parameter defining a default drop item, pulled from a configuration (e.g., a bone or generic drop for this NPC).
    • dragonhide_black: A specific item (black dragonhide), likely a guaranteed drop unique to the black dragon.
    • 1: The quantity of the item.
    • ^lootdrop_duration: A variable or constant defining how long the item persists on the ground before disappearing.
  • These lines ensure every black dragon kill drops its default item (from config) and one black dragonhide.

4. Tertiary Drop

~trail_hardcluedrop(128, npc_coord);
  • This seems to call a function or macro trail_hardcluedrop with a parameter 128 (possibly a drop rate or roll range) and the NPC’s coordinates. It likely handles a rare “clue scroll” or treasure trail drop, common in games like RuneScape. The exact mechanics depend on how trail_hardcluedrop is defined elsewhere.

5. Randomized Loot Table

def_int $random = random(128);
  • Defines an integer variable $random and assigns it a random value between 0 and 127 (since random(128) typically generates numbers from 0 to 127 inclusive in many scripting languages).
  • This value determines which additional item (if any) drops based on a weighted probability table.

The following if/else if block uses $random to decide the drop:

  • Each condition checks if $random falls within a specific range, and if so, an item is added using obj_add().
  • The ranges are cumulative, creating a “roll” system where rarer items have smaller ranges (lower probabilities).

Here’s the loot table with approximate drop chances (out of 128):

  • 0–3 (4/128 ≈ 3.13%): mithril_2h_sword (quantity 1)
  • 4–6 (3/128 ≈ 2.34%): mithril_axe (quantity 1)
  • 7–9 (3/128 ≈ 2.34%): mithril_battleaxe (quantity 1)
  • 10–12 (3/128 ≈ 2.34%): rune_knife (quantity 2)
  • 13 (1/128 ≈ 0.78%): mithril_kiteshield (quantity 1)
  • 14 (1/128 ≈ 0.78%): adamant_platebody (quantity 1)
  • 15 (1/128 ≈ 0.78%): rune_longsword (quantity 1)
  • 16–35 (20/128 ≈ 15.63%): adamant_javelin (quantity 30)
  • 36–43 (8/128 ≈ 6.25%): firerune (quantity 50)
  • 44–50 (7/128 ≈ 5.47%): adamant_dart_p (quantity 16)
  • 51–55 (5/128 ≈ 3.91%): lawrune (quantity 10)
  • 56–58 (3/128 ≈ 2.34%): bloodrune (quantity 15)
  • 59 (1/128 ≈ 0.78%): airrune (quantity 75)
  • 60–99 (40/128 ≈ 31.25%): coins (quantity 196)
  • 100–109 (10/128 ≈ 7.81%): coins (quantity 330)
  • 110 (1/128 ≈ 0.78%): coins (quantity 690)
  • 111–113 (3/128 ≈ 2.34%): adamantite_bar (quantity 1)
  • 114–116 (3/128 ≈ 2.34%): chocolate_cake (quantity 1)
  • 117–119 (3/128 ≈ 2.34%): ~randomjewel (quantity 1, likely a random gem or jewel)
  • 120–121 (2/128 ≈ 1.56%): ~ultrarare_getitem (quantity 1, likely an ultra-rare item defined elsewhere)
  • 122–127 (6/128 ≈ 4.69%): No drop (implicit, since no condition covers this range)

Summary

  • Guaranteed Drops: Default item (from config) + 1 black dragonhide.
  • Tertiary Drop: A chance at a hard clue scroll via trail_hardcluedrop.
  • Random Drop: One additional item (or none) based on a 1/128 roll, with common items like coins (31.25% for 196 coins) and rare items like a rune longsword (0.78%) or ultra-rare item (1.56%).

This system mimics loot tables in games like RuneScape, balancing common and rare rewards. The script assumes functions like obj_add() and variables like ^lootdrop_duration are defined elsewhere in the game’s codebase. Let me know if you’d like a deeper dive into any part!

1 Like

I also wanted to show players how to search the code.

So lets begin. How do I find what NPCs drop clues?

Lets see!

First we’ll start at the homepage and click “Source Code”

Once here we’re going to hit the “.” button.

This should bring up this screen

When it’s done loading you should see this

Now we’re going to hold CTRL + SHIFT and hit F

That should bring up the “search” option.

Now let’s search

“easyclue”

and as we can see there are 5 monsters that can drop easy clues

  1. Barbarian
  2. Goblin
  3. Man
  4. Mugger
  5. Rogue

Cool. Lets try mediums.

Another 5 monsters

  1. Bandit
  2. Guard
  3. Ice Warriors
  4. Jogre
  5. Paladin

Finally lets try hardclue

  1. King Black Dragon
  2. Greater Demon
  3. Hellhound
  4. Green Dragon
  5. Blue Dragon
  6. Red Dragon
  7. Black Dragon
1 Like

Awesome guide and information to have! Although I do love everybody interacting and sharing information and tips with each other, it never hurts to have tools the community can use to learn more about how everything works, thank you for this post.