Plurple

Plurple is an esoteric programming language by User:Laclale.
==Why Plurple?==
"Programming Language Using Role-Playing Syntax", with "le".
==Syntax==
===Sigil and Space===
Plurple has Spaceless Syntax and Sigilless Syntax. Shows both in commands, but you can replace ":-;." to space, or add space to near of that sigil.
*":" is start sigil. "-" is connect sigil. "." ";" is end sigil. Metatext for these exists.
**":"→"[Start]"
**"-"→"[Minus]"
**"."→"[Dot]"
**";"→"[End]"
*Due to this, only 4 type of spaces will be kept in quote. However, metatext exists also.
**Space:" "→"[Space]"
**Horizonital tab:"\t"→"[hTab]"
**Vertical tab:"\v"→"[vTab]"
**New line:"\n"→"[LF]"
===Calculatives===
If you use these on the right side of <stat> or position of group, you can't get created value. Instead, it calculates. ([] aka metatext also works.)
Calculative	E.g.
+ 	5 + 2 ⇒ 7
-([Minus]) 	5 - 2 ⇒ 3
* 	5 * 2 ⇒ 10
/ 	5 / 2 ⇒ 2
% 	5 % 2 ⇒ 1
^ 	5 ^ 2 ⇒ 25
= 	a == b
~ 	a ~= b
>([Less]) 	a > b
<([More]) 	a <= b
not 	not a
or 	a or b
and 	a and b
Also, some depend on implements.
===@ prefix===
Use prefix @ to any group, to make foreach control of an array.
===<group>[<number>]===
This leads to the inside of the group(array). Many right side stat can have multiple [<number>]s, while the left side can't.
==Commands==
 Some commands doesn't have actual Sigilless. <> is arguments.
Spaceless 	Sigilless 	Description
ooc:▪▪▪ 	ooc ▪▪▪ 	Comment. Nothing does until first End sigil even if sigilless. Be careful with using any count of " in there.
d-<number> 	d<number> 	Returns random number, only sets highest value and lowest value is always 1. You can't use variable to there.
<numberA>-d-<numberB> 	<number>d<number> 	Returns sum of <numberA> times called d<numberB>. You can't use variable to there also.
<stat>:up-<number> 	<stat> up <number> 	Increment. Variable allowed.
<stat>:up! 	<stat> up! 	1 increment. You can replace "!" to end sigil.
<stat>:down-<number> 	<stat> down <number> 	Decrement. Variable allowed.
<stat>:down! 	<stat> down! 	1 decrement. You can replace "!" to end sigil.
create:<menuA>-<menuB>-<stat>	create <menuA> <menuB> <stat>	Make new <menuA> <menuB> named <stat>.
*<menuA>
**melee(Local)
**ranged(Global)
*<menuB>:
**number(Integer)
**quote(String)
**group(Array)
**skill(Function)
**class(Class) will be supported.
<stat>:is-number 	<stat> is number 	Changes stat's type to number(Integer). stat can be <group>[<number>].
<stat>:is-quote 	<stat> is quote 	Changes stat's type to quote(String). stat can be <group>[<number>].
<stat>:is-melee 	<stat> is melee 	Changes stat's type to melee(Local).
<stat>:is-ranged 	<stat> is ranged 	Changes stat's type to ranged(Global).
<statA>:is-<statB> 	<statA> is <statB> 	Changes statA's value to statB's value. statA can be <group>[<number>]. For statB, {,} can be used for group(Array), ◆◆ can be used for skill(Function), but can't nest functions at once.
grind:<stat> 	grind <stat> 	Next in loop. If true, continues. Foreach loop's target is changed in this command.
attack:<stat> 	attack <stat> 	If. This along with hit and miss will be set.
hit: 	hit 	Set with attack, and if that was True then run this block.
miss: 	miss 	Set with attack, and if that was False then run this block.
done! 	done! 	End block for hit, miss, menu, and fight. You can replace "!" to end sigil.
menu:<stat> 	menu <stat> 	Switch. This along with option will be set.
option:<stat> 	option <stat> 	Set with menu, and if menu's stat equal to this then run this block.
fight:<stat>-<number> 	fight <stat> <number> 	For loop. Creates initial melee stat and requires grind.
fight:@<group> 	fight @<group> 	Foreach loop. Use target to control current one. Also requires grind.
<group>[<number>]:join-<stat>	<group>[<number>] join <stat>	Add stat to group, you can omit [] if adding to last.
<group>[<number>]:leave! 	<group>[<number>] leave! 	Delete stat from group, you can omit [] if removing from last. You can replace "!" to end sigil.
use:<skill>-<group> 	use <skill> <group> 	Call function named <skill>, with sending <group> as targets(argument).
result:<stat> 	result <stat> 	Return <stat> as used skill's result.
say:<stat> 	say <stat> 	Output. Spaceless command like d<number> will be executed if said at once. Metatext can be used for output of sigil.
==Examples==
===Looping counter===
ooc:My lua implementation doesn't allow this due to in Fandom.
fight:first-1.
 fight:second-first.
 grind:second>0.
 say "*".
 second:down.
 done.
 say "[LF]".
 first up.
done.
===XKCD fish===
ooc:Used targets as input.
create ranged number acc.
fight:@targets.
 attack (acc<0 or acc==256);
 hit:
 acc is 0.
 done.
 menu target.
 option:"x".
 acc up.
 option:"d".
 acc down.
 option:"k".
 acc is (acc ^ 2).
 option:"c".
 say acc.
 done.
 grind yes.
 ooc:this is valid.
done.
If anybody comes up with any example programs, feel free to add them here.
==Implementations==
You can make your implement.
* Wip: Laclale trying to implement in Lua
Category:2022
Category:Turing complete
Category:Thematic
Category:Object-oriented paradigm