User:Gumi/Tiled/NPC Proposal
This proposal is to enable npc creation from Tiled. It could even provide a way to add a "npc finder" to manaplus so that players can easily know where a npc is (manaplus would simply have to look at the tmx). Should not be used for floating npcs (no map).
Usage[edit]
For the examples below we will use the map 009-1 and position 25, 25. The only mandatory property to make a npc is "callfunc". To make a store, put "items" instead of "callfunc".
Shop npc [RC][edit]
Object type: shop
Object name: FooBar#Baz
| Property | Value |
|---|---|
| items | Item,Item:*2,Item,Item:9 |
Gives in Hercules:
009-1,25,25,0 shop FooBar#Baz 32767,Item:*1,Item:*2,Item:*1,Item:9
Gives in TMWA:
009-1,25,25,0|shop|FooBar#Baz|32767,Item:*1,Item:*2,Item:*1,Item:9
Semi-anonymous npc[edit]
When you have multiple copies of a npc with the same name, you can add # at the end without anything else to append an auto-generated suffix. For example, the barrels would become barrel# instead of barrel#(number). This way you do not have to worry about giving a safe name to a npc.
This also works for npcs starting and ending with # like #Knockback#.
Object type: npc
Object name: FooBar#
| Property | Value |
|---|---|
| callfunc | Qux |
Gives in Hercules:
009-1,25,25,0 script FooBar#009-1_0 32767,{
callfunc "Qux";
end;
}
Gives in TMWA:
009-1,25,25,0|script|FooBar#009-1_0|32767
{
callfunc "Qux";
end;
}
Named npc[edit]
Object type: npc
Object name: FooBar
| Property | Value |
|---|---|
| callfunc | Qux |
Gives in Hercules:
009-1,25,25,0 script FooBar 32767,{
callfunc "Qux";
end;
}
Gives in TMWA:
009-1,25,25,0|script|FooBar|32767
{
callfunc "Qux";
end;
}
That's nice but this npc is not sent to the client since its ID is 32767. Let's add a sprite.
@wushin: There is a "end;" instead of a "close;" because not all function send "mes" so "close2;" should be put before "return;" in the functions
Adding a sprite[edit]
Object type: npc
Object name: #
| Property | Value |
|---|---|
| sprite | 161 |
| callfunc | Qux |
Gives in Hercules:
009-1,25,25,0 script #009-1_anon0 161,{
callfunc "Qux";
end;
}
Gives in TMWA:
009-1,25,25,0|script|#009-1_anon0|161
{
callfunc "Qux";
end;
}
The "sprite" property is non-mandatory and defaults to 32767 when not set.
Setting the direction[edit]
Tiled has a built-in "Rotation" property for objects. To set the direction, set the rotation to any multiple of 90 (or a multiple of 45 if your npc supports all 8 directions). The minimum is -180 and the maximum is 180. For example, 90 is facing west and 180 (or -180) is facing north.
Object type: npc
Object name: FooBar#Baz
Rotation: 90
| Property | Value |
|---|---|
| sprite | 161 |
| callfunc | Qux |
Gives in Hercules:
009-1,25,25,3 script FooBar#Baz 161,{
callfunc "Qux";
end;
}
Gives in TMWA:
009-1,25,25,3|script|FooBar#Baz|161
{
callfunc "Qux";
end;
}
Setting as debug npc[edit]
Object type: npc
Object name: FooBar#Baz
Rotation: 90
| Property | Value |
|---|---|
| debug | true |
| sprite | 161 |
| callfunc | Qux |
Gives in Hercules:
009-1,25,25,3 script FooBar#Baz 161,{
callfunc "Qux";
end;
OnInit:
if(DEBUG) end;
disablenpc "FooBar#Baz";
end;
}
Gives in TMWA:
009-1,25,25,3|script|FooBar#Baz|161
{
callfunc "Qux";
end;
OnInit:
if(DEBUG) end;
disablenpc "FooBar#Baz";
end;
}
Adding a trigger area[edit]
Object type: npc
Object name: FooBar#Baz
Rotation: 90
Use tiled to mark the area of the trigger. To have a 0,0 trigger set the "trigger" property to "true".
| Property | Value |
|---|---|
| debug | true |
| sprite | 161 |
| callfunc | Qux |
Gives in Hercules:
009-1,25,25,3 script FooBar#Baz 161,2,4,{
end;
OnTouch:
callfunc "Qux";
end;
OnInit:
if(DEBUG) end;
disablenpc "FooBar#Baz";
end;
}
Gives in TMWA:
009-1,25,25,3|script|FooBar#Baz|161,2,4
{
end;
OnTouch;
callfunc "Qux";
end;
OnInit:
if(DEBUG) end;
disablenpc "FooBar#Baz";
end;
}
Adding a recurring timer[edit]
Object type: npc
Object name: FooBar#Baz
Rotation: 90
| Property | Value |
|---|---|
| interval | 10000,Function |
| trigger | 2,4 |
| debug | true |
| sprite | 161 |
| callfunc | Qux |
Gives:
009-1,25,25,3 script FooBar#Baz 161,2,4,{
end;
OnTouch:
callfunc "Qux";
end;
OnTimer10000:
callfunc "Function";
initnpctimer;
end;
OnInit:
if(DEBUG >= 2) end;
initnpctimer;
if(DEBUG) end;
disablenpc "FooBar#Baz";
end;
}
Gives in TMWA:
009-1,25,25,3|script|FooBar#Baz|161,2,4
{
end;
OnTouch:
callfunc "Qux";
end;
OnTimer10000:
callfunc "Function";
initnpctimer;
end;
OnInit:
if(DEBUG >= 2) end;
initnpctimer;
if(DEBUG) end;
disablenpc "FooBar#Baz";
end;
}
Passing arguments to the function (Hercules only)[edit]
Object type: npc
Object name: FooBar#Baz
Rotation: 90
| Property | Value |
|---|---|
| arguments | 19,"ba,z" |
| interval | 10000,Function |
| trigger | 2,4 |
| debug | true |
| sprite | 161 |
| callfunc | Qux |
Gives in Hercules:
009-1,25,25,3 script FooBar#Baz 161,2,4,{
end;
OnTouch:
callfunc "Qux", 19, "ba,z";
end;
OnTimer10000:
callfunc "Function";
initnpctimer;
end;
OnInit:
if(DEBUG >= 2) end;
initnpctimer;
if(DEBUG) end;
disablenpc "FooBar#Baz";
end;
}
Adding custom variables (TMWA only)[edit]
For TMWA, any property that starts with @ is interpreted as a custom variable.
Object type: npc
Object name: FooBar#Baz
Rotation: 90
| Property | Value |
|---|---|
| @integer | 19 |
| @string$ | ba,z |
| interval | 10000,Function |
| trigger | 2,4 |
| debug | true |
| sprite | 161 |
| callfunc | Qux |
Gives in TMWA:
009-1,25,25,3|script|FooBar#Baz|161,2,4
{
end;
OnTouch:
set @integer, 19;
set @string$, "ba,z";
callfunc "Qux";
end;
OnTimer10000:
callfunc "Function";
initnpctimer;
end;
OnInit:
if(DEBUG >= 2) end;
initnpctimer;
if(DEBUG) end;
disablenpc "FooBar#Baz";
end;
}