User:Gumi/Tiled/NPC Proposal

From The Mana World

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;
}