[FUNCTION shipfix]
IF ! 0<REGION.TAG.HATCH>
	shipinitiate
ENDIF

// Small Ships
IF (<BASEID> == i_multi_ship_small_n) || (<BASEID> == i_multi_ship_dragon_small_n)
	VAR.HATCH 0 -4 0
	VAR.TILLERMAN 1 4 0
	VAR.LEFTSIDE -2 0 0
	VAR.RIGHTSIDE 2 0 0
ELIF (<BASEID> == i_multi_ship_small_w) || (<BASEID> == i_multi_ship_dragon_small_w)
	VAR.HATCH -4 0 0
	VAR.TILLERMAN 4 0 0
	VAR.LEFTSIDE 0 2 0
	VAR.RIGHTSIDE 0 -2 0
ELIF (<BASEID> == i_multi_ship_small_s) || (<BASEID> == i_multi_ship_dragon_small_s)
	VAR.HATCH 0 4 0
	VAR.TILLERMAN 0 -4 0
	VAR.LEFTSIDE 2 0 0
	VAR.RIGHTSIDE -2 0 0
ELIF (<BASEID> == i_multi_ship_small_e) || (<BASEID> == i_multi_ship_dragon_small_e)
	VAR.HATCH 4 0 0
	VAR.TILLERMAN -4 0 0
	VAR.LEFTSIDE 0 -2 0
	VAR.RIGHTSIDE 0 2 0

// Medium Ships
ELIF (<BASEID> == i_multi_ship_medium_n) || (<BASEID> == i_multi_ship_dragon_medium_n)
	VAR.HATCH 0 -4 0
	VAR.TILLERMAN 1 5 0
	VAR.LEFTSIDE -2 0 0
	VAR.RIGHTSIDE 2 0 0
ELIF (<BASEID> == i_multi_ship_medium_w) || (<BASEID> == i_multi_ship_dragon_medium_w)
	VAR.HATCH -4 0 0
	VAR.TILLERMAN 5 0 0
	VAR.LEFTSIDE 0 2 0
	VAR.RIGHTSIDE 0 -2 0
ELIF (<BASEID> == i_multi_ship_medium_s) || (<BASEID> == i_multi_ship_dragon_medium_s)
	VAR.HATCH 0 4 0
	VAR.TILLERMAN 0 -5 0
	VAR.LEFTSIDE 2 0 0
	VAR.RIGHTSIDE -2 0 0
ELIF (<BASEID> == i_multi_ship_medium_e) || (<BASEID> == i_multi_ship_dragon_medium_e)
	VAR.HATCH 4 0 0
	VAR.TILLERMAN -5 0 0
	VAR.LEFTSIDE 0 -2 0
	VAR.RIGHTSIDE 0 2 0

// Long Ships
ELIF (<BASEID> == i_multi_ship_long_n) || (<BASEID> == i_multi_ship_dragon_long_n)
	VAR.HATCH 0 -5 0
	VAR.TILLERMAN 1 5 0
	VAR.LEFTSIDE -2 -1 0
	VAR.RIGHTSIDE 2 -1 0
ELIF (<BASEID> == i_multi_ship_long_w) || (<BASEID> == i_multi_ship_dragon_long_w)
	VAR.HATCH -5 0 0
	VAR.TILLERMAN 5 0 0
	VAR.LEFTSIDE -1 2 0
	VAR.RIGHTSIDE -1 -2 0
ELIF (<BASEID> == i_multi_ship_long_s) || (<BASEID> == i_multi_ship_dragon_long_s)
	VAR.HATCH 0 5 0
	VAR.TILLERMAN 0 -5 0
	VAR.LEFTSIDE 2 1 0
	VAR.RIGHTSIDE -2 1 0
ELIF (<BASEID> == i_multi_ship_long_e) || (<BASEID> == i_multi_ship_dragon_long_e)
	VAR.HATCH 5 0 0
	VAR.TILLERMAN -5 0 0
	VAR.LEFTSIDE 1 -2 0
	VAR.RIGHTSIDE 1 2 0
ENDIF

TRY UID.<REGION.TAG.HATCH>.hatchfix
TRY UID.<REGION.TAG.TILLERMAN>.tillermanfix
TRY UID.<REGION.TAG.LEFTSIDE>.leftsidefix
TRY UID.<REGION.TAG.RIGHTSIDE>.rightsidefix

[FUNCTION hatchfix]
IF (<LINK.MORE2> == 00)	|| (<LINK.MORE2> == 01) || (<LINK.MORE2> == 02)				// N
	DISPID 03eae
ELIF (<LINK.MORE2> == 02020000)	|| (<LINK.MORE2> == 02020001) || (<LINK.MORE2> == 02020002)	// E
	DISPID i_ship_hatch_e
ELIF (<LINK.MORE2> == 04040000)	|| (<LINK.MORE2> == 04040001) || (<LINK.MORE2> == 04040002)	// S
	DISPID 03eb9
ELIF (<LINK.MORE2> == 06060000)	|| (<LINK.MORE2> == 06060001) || (<LINK.MORE2> == 06060002)	// W
	DISPID 03e93
ENDIF
P <LINK.P>
MOVE <VAR.HATCH>

[FUNCTION tillermanfix]
IF (<LINK.MORE2> == 00)	|| (<LINK.MORE2> == 01) || (<LINK.MORE2> == 02)				// N
	DISPID 03e4e
ELIF (<LINK.MORE2> == 02020000)	|| (<LINK.MORE2> == 02020001) || (<LINK.MORE2> == 02020002)	// E
	DISPID 03e55
ELIF (<LINK.MORE2> == 04040000)	|| (<LINK.MORE2> == 04040001) || (<LINK.MORE2> == 04040002)	// S
	DISPID 03e4b
ELIF (<LINK.MORE2> == 06060000)	|| (<LINK.MORE2> == 06060001) || (<LINK.MORE2> == 06060002)	// W
	DISPID 03e50
ENDIF
P <LINK.P>
MOVE <VAR.TILLERMAN>

[FUNCTION leftsidefix]
IF (<LINK.MORE2> == 00)	|| (<LINK.MORE2> == 01) || (<LINK.MORE2> == 02)				// N
	SRC.NEWITEM 03eb1
	SRC.ACT.P <LINK.P>
	SRC.ACT.MOVE <VAR.LEFTSIDE>
	plankfix
ELIF (<LINK.MORE2> == 02020000)	|| (<LINK.MORE2> == 02020001) || (<LINK.MORE2> == 02020002)	// E
	SRC.NEWITEM i_ship_plank_n_c
	SRC.ACT.P <LINK.P>
	SRC.ACT.MOVE <VAR.LEFTSIDE>
	plankfix
ELIF (<LINK.MORE2> == 04040000)	|| (<LINK.MORE2> == 04040001) || (<LINK.MORE2> == 04040002)	// S
	SRC.NEWITEM 03eb2
	SRC.ACT.P <LINK.P>
	SRC.ACT.MOVE <VAR.LEFTSIDE>
	plankfix
ELIF (<LINK.MORE2> == 06060000)	|| (<LINK.MORE2> == 06060001) || (<LINK.MORE2> == 06060002)	// W
	SRC.NEWITEM 03e85
	SRC.ACT.P <LINK.P>
	SRC.ACT.MOVE <VAR.LEFTSIDE>
	plankfix
ENDIF
REGION.TAG.LEFTSIDE <SRC.ACT.UID>

[FUNCTION rightsidefix]
IF (<LINK.MORE2> == 00)	|| (<LINK.MORE2> == 01) || (<LINK.MORE2> == 02)				// N
	SRC.NEWITEM 03eb2
	SRC.ACT.P <LINK.P>
	SRC.ACT.MOVE <VAR.RIGHTSIDE>
	plankfix
ELIF (<LINK.MORE2> == 02020000)	|| (<LINK.MORE2> == 02020001) || (<LINK.MORE2> == 02020002)	// E
	SRC.NEWITEM 03e85
	SRC.ACT.P <LINK.P>
	SRC.ACT.MOVE <VAR.RIGHTSIDE>
	plankfix
ELIF (<LINK.MORE2> == 04040000)	|| (<LINK.MORE2> == 04040001) || (<LINK.MORE2> == 04040002)	// S
	SRC.NEWITEM 03eb1
	SRC.ACT.P <LINK.P>
	SRC.ACT.MOVE <VAR.RIGHTSIDE>
	plankfix
ELIF (<LINK.MORE2> == 06060000)	|| (<LINK.MORE2> == 06060001) || (<LINK.MORE2> == 06060002)	// W
	SRC.NEWITEM i_ship_plank_n_c
	SRC.ACT.P <LINK.P>
	SRC.ACT.MOVE <VAR.RIGHTSIDE>
	plankfix
ENDIF
REGION.TAG.RIGHTSIDE <SRC.ACT.UID>

[FUNCTION plankfix]
SRC.ACT.MORE1 <MORE1>
SRC.ACT.MORE2 <MORE2>
SRC.ACT.ATTR <ATTR>
SRC.ACT.LINK <LINK>

IF (<TYPE> == t_ship_plank)
	SRC.ACT.TYPE t_ship_side
	SRC.ACT.DCLICK
ELSE
	SRC.ACT.TYPE <TYPE>
ENDIF

REMOVE

[SPEECH spk_ship_cmds]

ON=Set name *
// Changes Ship's name, where *=name.
// NAME=<strmid(<args>,8,64)>

ON=Furl sail			// Stop
ON=Stop				// Stops current ship movement.
	SHIPSTOP

ON=Turn Left
ON=Port				// Turn Left
	SHIPTURNLEFT
	SHIPFIX

ON=Turn Right
ON=Starboard			// Turn Right
	SHIPTURNRIGHT
	SHIPFIX

ON=Left				// Move ship in desired direction.
ON=Drift Left
	SHIPDRIFTLEFT

ON=Right			// Move ship in desired direction.
ON=Drift Right
	SHIPDRIFTRIGHT

ON=Back				// Move ship backwards
ON=Backward			// Move ship backwards
ON=Backwards			// Move ship backwards
	SHIPBACK

ON=Forward
ON=Foreward			// Moves ship forward.
ON=Unfurl sail			// Moves ship forward.
	SHIPFORE

ON=Forward left
	SHIPFORELEFT

ON=forward right
	SHIPFORERIGHT

ON=backward left
ON=back left
	SHIPBACKLEFT

ON=backward right
ON=back right
	SHIPBACKRIGHT

ON=Raise Anchor
	SHIPANCHORRAISE

ON=Drop Anchor
	SHIPANCHORDROP

ON=Turn around			// Turns ship around and proceeds.
ON=Come about			// Turns ship around and proceeds.
	SHIPTURN
	SHIPFIX

ON=Up
	SHIPUP

ON=Down
	SHIPDOWN

ON=Land
	SHIPLAND

[FUNCTION shipinitiate]
SRC.NEWITEM i_gold
VAR.UID <SRC.ACT>
SRC.ACT.P <P>
SRC.ACT.MOVE nw 10
SRC.NUKE shipinitiate_n <UID>
SRC.LAST
SRC.ACT.MOVE se 20
SRC.LAST
TRY UID.<VAR.UID>.REMOVE
VAR.UID

SRC.HIDEMESSAGE
SRC.SYSMESSAGE Please cancel this target cursor (Esc key), targetting an object will have no effect.

[FUNCTION shipinitiate_n]
IF (<UID> != <ARGN>) && (<LINK.UID> == <ARGN>) && (<REGION.UID> == <LINK.REGION.UID>)
	IF (<TYPE> == t_ship_side) || (<TYPE> == t_ship_side_locked) || (<TYPE> == t_ship_plank) || (<TYPE> == t_ship_tiller) || (<TYPE> == t_ship_hold_lock) || (<TYPE> == t_ship_hold)
		IF (<TYPE> == t_ship_hold) || (<TYPE> == t_ship_hold_lock)
			LINK.REGION.TAG.HATCH <UID>
		ELIF (<TYPE> == t_ship_tiller)
			LINK.REGION.TAG.TILLERMAN <UID>
		ELSE
			IF (<LINK.MORE2> == 00)	|| (<LINK.MORE2> == 01) || (<LINK.MORE2> == 02)				// N
				IF (<P.X> > <LINK.P.X>)
					LINK.REGION.TAG.RIGHTSIDE <UID>
				ELIF (<P.X> < <LINK.P.X>)
					LINK.REGION.TAG.LEFTSIDE <UID>
				ENDIF
			ELIF (<LINK.MORE2> == 02020000)	|| (<LINK.MORE2> == 02020001) || (<LINK.MORE2> == 02020002)	// E
				IF (<P.Y> > <LINK.P.Y>)
					LINK.REGION.TAG.RIGHTSIDE <UID>
				ELIF (<P.Y> < <LINK.P.Y>)
					LINK.REGION.TAG.LEFTSIDE <UID>
				ENDIF
			ELIF (<LINK.MORE2> == 04040000)	|| (<LINK.MORE2> == 04040001) || (<LINK.MORE2> == 04040002)	// S
				IF (<P.X> < <LINK.P.X>)
					LINK.REGION.TAG.RIGHTSIDE <UID>
				ELIF (<P.X> > <LINK.P.X>)
					LINK.REGION.TAG.LEFTSIDE <UID>
				ENDIF
			ELIF (<LINK.MORE2> == 06060000)	|| (<LINK.MORE2> == 06060001) || (<LINK.MORE2> == 06060002)	// W
				IF (<P.Y> < <LINK.P.Y>)
					LINK.REGION.TAG.RIGHTSIDE <UID>
				ELIF (<P.Y> > <LINK.P.Y>)
					LINK.REGION.TAG.LEFTSIDE <UID>
				ENDIF
			ENDIF
		ENDIF
	ENDIF
ENDIF

[FUNCTION hidemessage]
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE
SYSMESSAGE