summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
m---------client-data0
m---------tools0
-rw-r--r--world/conf/char_athena.conf8
-rw-r--r--world/map/db/const.txt42
-rw-r--r--world/map/db/item_db_use.txt2
-rw-r--r--world/map/news.d/55-v2016.2.9.txt30
-rw-r--r--world/map/npc/002-1/bard.txt5
-rw-r--r--world/map/npc/002-2/eurni.txt44
-rw-r--r--world/map/npc/002-2/stranger.txt5
-rw-r--r--world/map/npc/006-1/spirit.txt6
-rw-r--r--world/map/npc/009-1/jack.txt7
-rw-r--r--world/map/npc/009-2/wyara.txt5
-rw-r--r--world/map/npc/009-4/waric.txt9
-rw-r--r--world/map/npc/011-1/auldsbel.txt12
-rw-r--r--world/map/npc/013-1/sagatha.txt5
-rw-r--r--world/map/npc/015-1/sword.txt5
-rw-r--r--world/map/npc/018-2/angus.txt5
-rw-r--r--world/map/npc/019-1/snowman.txt7
-rw-r--r--world/map/npc/020-2/baktar.txt6
-rw-r--r--world/map/npc/027-2/crying_child.txt9
-rw-r--r--world/map/npc/027-2/headless_man.txt8
-rw-r--r--world/map/npc/027-2/husband.txt20
-rw-r--r--world/map/npc/027-2/innkeeper.txt19
-rw-r--r--world/map/npc/029-2/sorfina.txt38
-rw-r--r--world/map/npc/029-2/stat_reset.txt12
-rw-r--r--world/map/npc/029-2/tanisha.txt3
-rw-r--r--world/map/npc/031-4/cindyCave.txt6
-rw-r--r--world/map/npc/functions/announcements.txt5
-rw-r--r--world/map/npc/functions/barber.txt128
-rw-r--r--world/map/npc/functions/game_rules.txt1
-rw-r--r--world/map/npc/functions/global_event_handler.txt2
-rw-r--r--world/map/npc/functions/gm_island.txt33
-rw-r--r--world/map/npc/functions/headstyles.txt125
-rw-r--r--world/map/npc/items/mirror.txt21
-rw-r--r--world/map/npc/items/pickled_beets.txt10
-rw-r--r--world/map/npc/items/scissors.txt6
-rw-r--r--world/map/npc/items/shock_sweet.txt2
-rw-r--r--world/map/npc/scripts.conf1
38 files changed, 409 insertions, 243 deletions
diff --git a/client-data b/client-data
-Subproject e3a7d7aa1ec52c43c2488a9b5eacd5b944b9fd4
+Subproject aed37c0ac8e958e3fcf0683f191443fb33b64e4
diff --git a/tools b/tools
-Subproject 5c0af2dba65a391a08e8a6cc1a94777a662a00d
+Subproject ac88cc365e1f35764bab5ff9c27549fc3a02d65
diff --git a/world/conf/char_athena.conf b/world/conf/char_athena.conf
index 64f8b082..3e0fa61d 100644
--- a/world/conf/char_athena.conf
+++ b/world/conf/char_athena.conf
@@ -45,17 +45,17 @@ min_name_length: 4
char_slots: 9
// max hair style and hair color
-max_hair_style: 20
-max_hair_color: 11
+max_hair_style: 1
+max_hair_color: 1
// the minimum value for stats (str, agi, ...)
min_stat_value: 1
// the maximum value for stats (str, agi, ...)
-max_stat_value: 9
+max_stat_value: 1
// the sum of all stats combined (str + agi + int + ...)
-total_stat_sum: 30
+total_stat_sum: 6
// Filename of the file which receives the online players list in text
online_txt_filename: online.txt
diff --git a/world/map/db/const.txt b/world/map/db/const.txt
index af5cc476..d3b42ee4 100644
--- a/world/map/db/const.txt
+++ b/world/map/db/const.txt
@@ -14,7 +14,7 @@ Hp 5 1
MaxHp 6 1
Sp 7 1
MaxSp 8 1
-//StatusPoint 9 1
+StatusPoint 9 1
BaseLevel 11 1
//SkillPoint 12 1
Class 19 1
@@ -209,26 +209,26 @@ LOOK_MISC2 13
// Hairstyles
HS_Bald 0
-HS_FlatPonytail 1
-HS_BowlCut 2
-HS_CombedBack 3
-HS_Emo 4
-HS_Mohawk 5
-HS_Pompadour 6
-HS_CenterParting 7
-HS_LongAndSlick 8
-HS_ShortAndCurly 9
-HS_Pigtails 10
-HS_LongAndCurly 11
-HS_Parted 12
-HS_PerkyPonytail 13
-HS_Wave 14
-HS_Mane 15
-HS_Bun 16
-HS_ShoulderLengthFlick 17
-HS_Fizzy 18
-HS_LongAndClipped 19
-HS_BaldTwo 20
+HS_BaldTwo 1
+HS_FlatPonytail 2
+HS_BowlCut 3
+HS_CombedBack 4
+HS_Emo 5
+HS_Mohawk 6
+HS_Pompadour 7
+HS_CenterParting 8
+HS_LongAndSlick 9
+HS_ShortAndCurly 10
+HS_Pigtails 11
+HS_LongAndCurly 12
+HS_Parted 13
+HS_PerkyPonytail 14
+HS_Wave 15
+HS_Mane 16
+HS_Bun 17
+HS_ShoulderLengthFlick 18
+HS_Fizzy 19
+HS_LongAndClipped 20
// Hair Colors
HC_LIGHT_BROWN 0
diff --git a/world/map/db/item_db_use.txt b/world/map/db/item_db_use.txt
index 8015786d..65acd000 100644
--- a/world/map/db/item_db_use.txt
+++ b/world/map/db/item_db_use.txt
@@ -90,7 +90,7 @@
3007, Marshmallow, 0, 5, 1, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 10, 0, 1;}, {}
3009, JellySkull, 0, 5, 1, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 10, 0, 1;}, {}
3010, CandyPumpkin, 0, 5, 1, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 10, 0, 1;}, {}
-4035, PickledBeets, 0, 100, 50, 150, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 50, 0, 1; setlook LOOK_HAIR_COLOR, HC_PURPLE;}, {}
+4035, PickledBeets, 0, 100, 50, 150, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {callfunc "usePickledBeets";}, {}
4036, RoastedAcorn, 0, 100, 50, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, {heal 15, 0, 1;}, {}
5126, MTJarofOwnBlood, 0, 200, 100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {heal -250, 0;getitem 5127, 1;}, {}
//ID, Name___________________, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, {UseScript}, {EquipScript}
diff --git a/world/map/news.d/55-v2016.2.9.txt b/world/map/news.d/55-v2016.2.9.txt
new file mode 100644
index 00000000..20269968
--- /dev/null
+++ b/world/map/news.d/55-v2016.2.9.txt
@@ -0,0 +1,30 @@
+{title:Third Gender}
+{date:2016-02-09}
+
+Some modifications pertaining to gender and char creation,
+along with the usual bug fixes.
+
+{red}This release will change your hairstyle. You can change it back by talking to the barber in Tulimshar, or Jessie in Candor.{/red}
+
+Release Notes v2016.02.09
+{ul}
+{li}You can now choose male, female or non-binary (third gender) genders.{/li}
+{li}Sex change is now free.{/li}
+{li}Barbers can perform sex change.{/li}
+{li}All characters on an account can now have a separate gender.{/li}
+{li}Character creation has been moved in-game.{/li}
+{li}You can once again register chars with a space in the name.{/li}
+{li}The Great Typo Hunt continues, with some more sentences fixed.{/li}
+{li}The towel cooldown has been reduced to 20 minutes.{/li}
+{li}Other towels will no longer be removed from your inventory upon using one.{/li}
+{li}The rubber bat now has a 2 second delay.{/li}
+{li}The Sanguine Vault bartender no longer sells Small Mana Elixir.{/li}
+{li}The potion shop in Nivalis now sells Small, Medium and Large Mana Elixirs.{/li}
+{li}A new shop in Candor sells Tiny and Small Mana Elixirs.{/li}
+{li}The restrictions on the Skeleton Charm have been lifted.{/li}
+{li}Valia (the npc for the Illia quest) has been moved indoors.{/li}
+{/ul}
+
+Read More: {link:http://bit.ly/1PLaVbx}
+
+{author:TMW Development Team}
diff --git a/world/map/npc/002-1/bard.txt b/world/map/npc/002-1/bard.txt
index 22c3b113..c8e67582 100644
--- a/world/map/npc/002-1/bard.txt
+++ b/world/map/npc/002-1/bard.txt
@@ -7,10 +7,7 @@
"\"As the Sun sets down in the forest's brown, she whom the fragrance holds counts her gold.\"";
set @name$, "Bill Ballshaker the Bard";
mes "[" + @name$ + "]";
- if (Sex)
- mes "\"Greetings, traveler! Have you come to listen to my stories?\"";
- if (!Sex)
- mes "\"Greetings, fair lady! Well met, on such a lovely day! Might I entertain you with a tale or two?\"";
+ mes "\"Greetings, traveler! Have you come to listen to my stories?\"";
next;
goto L_Main;
diff --git a/world/map/npc/002-2/eurni.txt b/world/map/npc/002-2/eurni.txt
index f965b84b..7e7254ed 100644
--- a/world/map/npc/002-2/eurni.txt
+++ b/world/map/npc/002-2/eurni.txt
@@ -2,40 +2,46 @@
002-2,22,77,0|script|Eurni|136
{
- set @SERVICES_ZENY, 10000;
-
set @halloween_npc_id, $@halloween_npc_eurni;
callfunc "TrickOrTreat";
- if (BaseLevel < 10) goto L_TooYoung;
- if (Zeny < @SERVICES_ZENY) goto L_NoMoney;
-
mes "[Eurni the Surgeon]";
mes "\"Are you tired of who you are?\"";
next;
- mes "\"Would you be interested in changing your sex?";
- mes "It'll cost ##B" + @SERVICES_ZENY + " GP##b.\"";
+ mes "\"Would you be interested in changing your sex?\"";
next;
menu
- "Please do.", L_Change,
+ "Please do.", L_Change_Menu,
"Leave my family treasures alone!", L_Close;
-L_Change:
- if (Zeny < @SERVICES_ZENY)
- goto L_NoMoney;
- set Zeny, Zeny - @SERVICES_ZENY;
- set Sex, !Sex;
- close;
+L_Change_Menu:
+ menu
+ "Female.", L_Female,
+ "Male.", L_Male,
+ "Non-binary.", L_NonBinary;
-L_TooYoung:
- mes "[Eurni the Surgeon]";
- mes "\"Move along, kid.\"";
+L_Female:
+ set @sex, 0;
+ goto L_Change;
+
+L_Male:
+ set @sex, 1;
+ goto L_Change;
+
+L_NonBinary:
+ set @sex, 3;
+ goto L_Change;
+
+L_Change:
+ if (Sex == @sex)
+ goto L_Already_Change;
+ set Sex, @sex;
close;
-L_NoMoney:
+L_Already_Change:
mes "[Eurni the Surgeon]";
- mes "\"You don't have the kind of money to pay for my services.\"";
+ mes "\"Umm, you are that gender already.\"";
close;
L_Close:
diff --git a/world/map/npc/002-2/stranger.txt b/world/map/npc/002-2/stranger.txt
index 0b47e716..8186636b 100644
--- a/world/map/npc/002-2/stranger.txt
+++ b/world/map/npc/002-2/stranger.txt
@@ -1,9 +1,12 @@
+// FIXME: this script is very cringeworthy and almost never clears the arrays so they just fill up
+// also some arrays should be global (and npc vars later), not stored in every single player
+// -> should GET RID of that fugly magic-secrets system; the answers are public anyway
002-2,38,57,0|script|Stranger|192
{
set @IRONINGOT, 5;
set @PINKANTENNA, 21;
set @Exp, 20000;
- setarray @towelReq$, "WhiteHitchhikersTowel","RedHitchhikersTowel","GreenHitchhikersTowel","BlueHitchhikersTowel","YellowHitchhikersTowel","PurpleHitchhikersTowel","OrangeHitchhikersTowel","PinkHitchhikersTowel","TealHitchhikersTowel","LimeHitchhikersTowel","HitchhikersTowel";
+ setarray @towelReq$[0], "HitchhikersTowel";
if (FLAGS & FLAG_TOWEL_COMPLETED) goto L_Event_Done;
if ((gettimetick(2)-TUT_var < 6*7*86400) || (BaseLevel < 42)) //player must be created at least 6 weeks ago and at least level 42
diff --git a/world/map/npc/006-1/spirit.txt b/world/map/npc/006-1/spirit.txt
index ecf3a4b1..8c7155fa 100644
--- a/world/map/npc/006-1/spirit.txt
+++ b/world/map/npc/006-1/spirit.txt
@@ -21,9 +21,6 @@ L_message:
set @Q_STATUS_STUDENT2, 4;
set @Q_STATUS_STUDENT3, 5;
- set @s$, "girl";
- if (Sex) set @s$, "boy";
-
if (MAGIC_FLAGS & MFLAG_KNOWS_IMP) goto L_wb;
mes "[Well]";
@@ -261,7 +258,7 @@ L_silly_close:
mes "[Earth Spirit]";
if (!(MAGIC_FLAGS & MFLAG_KNOWS_IMP))
mes "[Well]";
- mes "\"Silly " + @s$ + ".\"";
+ mes "\"Fool.\"";
goto L_Close;
L_Close:
@@ -278,7 +275,6 @@ L_Close:
set @Q_STATUS_STUDENT1, 0;
set @Q_STATUS_STUDENT2, 0;
set @Q_STATUS_STUDENT3, 0;
- set @s$, "";
return;
S_update_var:
diff --git a/world/map/npc/009-1/jack.txt b/world/map/npc/009-1/jack.txt
index 05c9f8c5..7a4f6573 100644
--- a/world/map/npc/009-1/jack.txt
+++ b/world/map/npc/009-1/jack.txt
@@ -149,13 +149,8 @@ L_Shield_state_0:
set @Q_Woodenshield, 1;
callsub S_Update_Mask;
- if (Sex == 0)
- set @child_of_jack$, "daughter";
- if (Sex == 1)
- set @child_of_jack$, "son";
-
mes "[Jack Lumber]";
- mes "\"You no doubt remember how I struggled with those beasts, fighting for my life. Scared me, those seven-branched little stumps did! Never since that day have I strayed near them, and yet there you are, cutting them down one by one. I'm proud of you – to dare to fight those trunks is admirable indeed. You're as strong as if you were my own " + @child_of_jack$ + "!\"";
+ mes "\"You no doubt remember how I struggled with those beasts, fighting for my life. Scared me, those seven-branched little stumps did! Never since that day have I strayed near them, and yet there you are, cutting them down one by one. I'm proud of you – to dare to fight those trunks is admirable indeed. You're as strong as if you were my own child!\"";
next;
goto L_Shield_state_1;
diff --git a/world/map/npc/009-2/wyara.txt b/world/map/npc/009-2/wyara.txt
index 99ad3681..ba33d29f 100644
--- a/world/map/npc/009-2/wyara.txt
+++ b/world/map/npc/009-2/wyara.txt
@@ -31,10 +31,7 @@
if (@Q_status == @STATUS_PURIFY_TWICE) goto L_M_purify_done;
mes "[Wyara the witch]";
- if (!Sex)
- mes "\"Greetings, fair traveller! What can I do for you?\"";
- if (Sex)
- mes "\"Hello! What brings you here?\"";
+ mes "\"Greetings, fair traveller! What can I do for you?\"";
next;
set MAGIC_FLAGS, MAGIC_FLAGS | MFLAG_KNOWS_WYARA;
goto L_Main;
diff --git a/world/map/npc/009-4/waric.txt b/world/map/npc/009-4/waric.txt
index 83c1ba78..9598ecaa 100644
--- a/world/map/npc/009-4/waric.txt
+++ b/world/map/npc/009-4/waric.txt
@@ -2,20 +2,13 @@
009-4,99,33,0|script|#WizardTrap|32767,2,1
{
- set @gender$, "They're";
- if (Sex == 0)
- set @gender$, "She's";
- if (Sex == 1)
- set @gender$, "He's";
-
mes "As you explore further into the cave you see a figure looking at you who appears angry. But as you begin to speak, he quickly chants some words and you start to lose conciousness!";
next;
warp "009-4", 117, 40;
mes "When you awake you find yourself unable to move. You seem to be held in place by something. As your eyes regain focus you see Orum talking with the figure you saw earlier. Orum looks over at you and mumbles.";
mes "";
mes "[Orum]";
- mes "\"Be quiet Waric... " + @gender$ + " awake...\"";
- set @gender$, "";
+ mes "\"Be quiet Waric... They're awake...\"";
close;
}
diff --git a/world/map/npc/011-1/auldsbel.txt b/world/map/npc/011-1/auldsbel.txt
index 0f650c9a..094651e9 100644
--- a/world/map/npc/011-1/auldsbel.txt
+++ b/world/map/npc/011-1/auldsbel.txt
@@ -31,10 +31,6 @@
set @has_magic, getskilllv(SKILL_MAGIC);
- set @address$, "chap";
- if (Sex == 0)
- set @address$, "girl";
-
if (@Q_main_status >= @Q_STATUS_POSTINTRO)
goto L_short_intro;
@@ -70,8 +66,6 @@ L_intro_nopowder:
L_intro_identity:
mes "[Robed Man]";
mes "He eyes you more carefully.";
- if (Sex == 0)
- mes "\"How odd. I could have sworn that you were a man the last time we met. Not that I mind...\"";
mes "\"Wait. You're not Padric.\"";
next;
set @xmsg$, "Right... my name is " + strcharinfo(0) + ".";
@@ -783,11 +777,11 @@ L_c_quest_1:
mes "\"Good, good... I am trying to come up with a way to best use the Mauve leaves you brought me, but it seems that I will need further components. I am not sure about the exact composition yet, but I will need a few potions.\"";
next;
mes "[Auldsbel the Wizard]";
- mes "\"Please be a good " + @address$ + " and get me an iron potion, a concentration potion, and three small and three medium healing potions.\"";
+ mes "\"Please be a good helper and get me an iron potion, a concentration potion, and three small and three medium healing potions.\"";
next;
menu
"Here you are.", L_Next4,
- "I'm not your 'good " + @address$ + "'!", L_main_menu,
+ "I'm not your 'good helper'!", L_main_menu,
"I'll see what I can do.", L_main_menu;
L_Next4:
@@ -859,7 +853,7 @@ L_Next6:
delitem "MaggotSlime", 25;
set Zeny, Zeny + 5000;
mes "[Auldsbel the Wizard]";
- mes "\"Good " + @address$ + "! Another 5,000 GP for you.\"";
+ mes "\"Good helper! Another 5,000 GP for you.\"";
mes "\"I believe that I have figured out one possible way to integrate the tincture into the spell... I will let you know how that goes.\"";
mes "[You gain 10,000 experience points]";
getexp 10000, 0;
diff --git a/world/map/npc/013-1/sagatha.txt b/world/map/npc/013-1/sagatha.txt
index 456b184b..558e9b70 100644
--- a/world/map/npc/013-1/sagatha.txt
+++ b/world/map/npc/013-1/sagatha.txt
@@ -106,10 +106,7 @@ L_next:
mes "Before you stands a beautiful woman, dressed in dark purple robes and wearing a witch's hat.";
- if (Sex)
- mes "She looks at you suspiciously.";
- if (!Sex)
- mes "She looks at you impassively.";
+ mes "She looks at you suspiciously.";
next;
menu
"Who are you?", L_Next,
diff --git a/world/map/npc/015-1/sword.txt b/world/map/npc/015-1/sword.txt
index 7f32bf60..239de752 100644
--- a/world/map/npc/015-1/sword.txt
+++ b/world/map/npc/015-1/sword.txt
@@ -190,10 +190,7 @@ L_Next1:
mes "\"Lords of Thunder, Fire, Rage!\"";
mes "\"Grant thy powers to this mage,\"";
mes "\"Rising with thy dreadful roar,\"";
- if (Sex)
- mes "\"Answer to his call to War!\"";
- if (!Sex)
- mes "\"Answer to her call to War!\"";
+ mes "\"Answer to their call to War!\"";
next;
mes "[Mystic Sword]";
mes "Your heart starts pounding, and suddenly you can hear the sound of drums in your head.";
diff --git a/world/map/npc/018-2/angus.txt b/world/map/npc/018-2/angus.txt
index e49d91ae..3c53862d 100644
--- a/world/map/npc/018-2/angus.txt
+++ b/world/map/npc/018-2/angus.txt
@@ -2,9 +2,6 @@
018-2,31,39,0|script|Angus|147
{
- set @honorific$, "lad";
- if (Sex == 0) set @honorific$, "lass";
-
set @inspector, ((QUEST_Hurnscald & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT);
if (@inspector == 10) goto L_NohMask;
@@ -16,7 +13,7 @@
L_NohMask:
mes "[Angus]";
- mes "\"I'm sorry, " + @honorific$ + ", I truely am, but I stay in the town. One o' the miners might have heard something.\"";
+ mes "\"I'm sorry, I truely am, but I stay in the town. One o' the miners might have heard something.\"";
goto L_Close;
L_Close:
diff --git a/world/map/npc/019-1/snowman.txt b/world/map/npc/019-1/snowman.txt
index 893ddce4..98b749df 100644
--- a/world/map/npc/019-1/snowman.txt
+++ b/world/map/npc/019-1/snowman.txt
@@ -11,16 +11,12 @@
goto L_Close;
L_Quest:
- if (Sex == 0)
- set @sex$, "lady";
- if (Sex == 1)
- set @sex$, "man";
set @candy_amount, 15;
set @chocolate_amount, 10;
set @cactus_amount, 5;
mes "[Snowman]";
- mes "\"Hello there young " + @sex$ + ".";
+ mes "\"Hello there.";
mes "Would you like a Christmas hat?\"";
next;
goto L_Menu;
@@ -84,7 +80,6 @@ L_TooMany:
goto L_Close;
L_Close:
- set @sex$, "";
set @candy_amount, 0;
set @chocolate_amount, 0;
set @cactus_amount, 0;
diff --git a/world/map/npc/020-2/baktar.txt b/world/map/npc/020-2/baktar.txt
index b769e1e9..9d1f658b 100644
--- a/world/map/npc/020-2/baktar.txt
+++ b/world/map/npc/020-2/baktar.txt
@@ -69,14 +69,10 @@ L_Delivery:
goto L_Close;
L_Start:
- if(Sex)
- set @type$, "man";
- if(!Sex)
- set @type$, "woman";
if(QL_BAKTAR & (1<<@BIT_KNOWHIM)) goto L_KnowAlready;
mes @npcname$;
- mes "\"Hello, " + @type$ + ", did you come from Tulimshar? Because you have a nice tan. \"";
+ mes "\"Hello, did you come from Tulimshar? Because you have a nice tan. \"";
menu
"Yes, I'm from Tulimshar", L_exotic,
"Well, I just like sunbathing", L_Close,
diff --git a/world/map/npc/027-2/crying_child.txt b/world/map/npc/027-2/crying_child.txt
index 4a1254ec..0a7b2396 100644
--- a/world/map/npc/027-2/crying_child.txt
+++ b/world/map/npc/027-2/crying_child.txt
@@ -21,8 +21,6 @@
set @minLevel, 85;
- if (Sex == 0) set @madamsir$, "Madam";
- if (Sex == 1) set @madamsir$, "Sir";
if (@state == 7) goto L_return5;
if (@state == 6) goto L_return4;
if (@state == 4 || @state == 5) goto L_return3;
@@ -50,13 +48,13 @@ L_intro:
L_WhatHappen:
mes "[Crying Child]";
- mes "\"Oh, what? Who are you "+@madamsir$+", what are you doing here?\"";
+ mes "\"Oh, what? Who are you, what are you doing here?\"";
next;
menu
"My name is "+strcharinfo(0)+". I heard you cry and decided to check if you needed any help.",L_MyNameIs;
L_MyNameIs:
- mes "The child looks at you from head to toe and says: \"" +@madamsir$+ ", aren't you scared of me?\"";
+ mes "The child looks at you from head to toe and says: aren't you scared of me?\"";
next;
menu
"No... Why would I be scared of you?",L_NotScaredOf;
@@ -101,7 +99,7 @@ L_DontWorryFind:
L_return:
mes "[Aldred]";
- mes "\"Please, help me " +@madamsir$+ ". If you find that ring, I think things will be a little better between me and my parents.\"";
+ mes "\"Please, help me. If you find that ring, I think things will be a little better between me and my parents.\"";
goto L_Close;
@@ -207,7 +205,6 @@ L_full:
goto L_Close;
L_Close:
- set @madamsir$, "";
set @Graveyard_Inn_MASK, 0;
set @Graveyard_Inn_SHIFT, 0;
set @state, 0;
diff --git a/world/map/npc/027-2/headless_man.txt b/world/map/npc/027-2/headless_man.txt
index 7345b535..fafa17ef 100644
--- a/world/map/npc/027-2/headless_man.txt
+++ b/world/map/npc/027-2/headless_man.txt
@@ -7,9 +7,6 @@
027-2,22,76,0|script|Thurstan|318
{
- if (Sex == 0) set @madamsir$, "Madam";
- if (Sex == 1) set @madamsir$, "Sir";
-
set @Graveyard_Inn_MASK, NIBBLE_6_MASK;
set @Graveyard_Inn_SHIFT, NIBBLE_6_SHIFT;
@@ -39,14 +36,14 @@
if (BaseLevel < 85)
goto L_greet;
mes "[Headless Man]";
- mes "\"Hello " + @madamsir$ + ". My name is Thurstan. Could I ask your assistance with something? I seem to be in a spot of difficulty.\"";
+ mes "\"Hello. My name is Thurstan. Could I ask your assistance with something? I seem to be in a spot of difficulty.\"";
menu
"I'll listen, just keep that thing from dripping on me.", L_Quest_ask,
"Ack, a bloody talking head! Gross, no way!", L_Close;
L_greet:
mes "[Headless Man]";
- mes "\"Greetings " + @madamsir$ + "! Do you have any duck tape?\"";
+ mes "\"Greetings! Do you have any duck tape?\"";
goto L_Close;
L_Quest_ask:
@@ -189,7 +186,6 @@ L_Final:
L_Close:
- set @madamsir$, "";
set @Graveyard_Inn_MASK, 0;
set @Graveyard_Inn_SHIFT, 0;
set @state, 0;
diff --git a/world/map/npc/027-2/husband.txt b/world/map/npc/027-2/husband.txt
index e62b5097..8897e697 100644
--- a/world/map/npc/027-2/husband.txt
+++ b/world/map/npc/027-2/husband.txt
@@ -194,12 +194,8 @@ L_Savaric:
mes "\"That cheeky egomaniac - \"";
next;
- if ((Sex == 0)
- && (@kidstate < 7))
- goto L_Woman;
- if ((Sex == 1)
- && (@kidstate < 7))
- goto L_Man;
+ if (@kidstate < 7)
+ goto L_Problem;
mes "\"Well, I have been thinking about you. You seem to be a very helpful and wise person. Even my son told me good things about you, making a long speech about how great you are and your ability to comprehend and deal with delicate matters. I wonder how he reached that conclusion... But anyway, I'll tell you about Savaric.\"";
next;
goto L_Jealousy;
@@ -223,17 +219,9 @@ L_Jealousy:
callsub S_Update_Mask;
goto L_Close;
-L_Man:
+L_Problem:
mes "[Hamond]";
- mes "\"You're a man - I think you would understand what is happening to me.\"";
- mes "\"But, to be honest, I think I'd only be able to talk about such a complicated matter if I am sure I am sharing my feelings with a good, wise and understanding person. No offense, it is just that I barely know you...\"";
- goto L_Close;
-
-L_Woman:
- mes "[Hamond]";
- mes "\"Hrm - I don't think you'll understand. It is a problem between men.\"";
- next;
- mes "\"And, to be honest, I'd only be able to talk about such a complicated matter if I am sure I am sharing my feelings with a good, wise and understanding person. No offense, it is just that I barely know you...\"";
+ mes "\"To be honest, I think I'd only be able to talk about such a complicated matter if I am sure I am sharing my feelings with a good, wise and understanding person. No offense, it is just that I barely know you...\"";
goto L_Close;
L_Ring:
diff --git a/world/map/npc/027-2/innkeeper.txt b/world/map/npc/027-2/innkeeper.txt
index adc4a75d..ac4e867a 100644
--- a/world/map/npc/027-2/innkeeper.txt
+++ b/world/map/npc/027-2/innkeeper.txt
@@ -235,12 +235,8 @@ L_Check_Kid:
menu
"Hi. I found this in the main hall. Do you know to whom it belongs?", L_Ring;
- if ((Sex == 1)
- && (@kidstate < 7))
- goto L_Man;
- if ((Sex == 0)
- && (@kidstate < 7))
- goto L_Woman;
+ if (@kidstate < 7)
+ goto L_Problem;
mes "\"What I'm going to tell you is very personal, but your acts have shown me that you're a person I can trust. You kindly asked me about that ring you have found... and also, even my son, who is always so reserved with strangers, came to me and spent a long time telling me a lot of nice things about you. So I will tell you about my sad love.\"";
next;
@@ -405,16 +401,9 @@ L_Not_Enough_Tears:
mes "\"This is beautiful! But " + @tears + " of them aren't enough to represent my sadness.\"";
goto L_Close;
-L_Man:
+L_Problem:
mes "[Reid's Ghost]";
- mes "\"What I have to tell is very personal. You're a man - I'm not sure if I want to tell you. I know you helped me already and showed me you are a sensitive man, but I barely know you. I am sorry, but I have to think a little bit more. Maybe later, when I know you better, I can tell you more about it. \"";
- goto L_Close;
-
-L_Woman:
- mes "[Reid's Ghost]";
- mes "\"What I have to tell you is something very personal. You are a woman like me - I'm sure you would understand.\"";
- next;
- mes "\"But I'm not sure if I want to tell you. I know you helped me already and showed me you are a sensitive woman, but I barely know you. I am sorry, but I have to think a little bit more. Maybe later, when I know you better, I can tell you more about it. \"";
+ mes "\"What I have to tell is very personal. I'm not sure if I want to tell you. I know you helped me already and showed me you are a sensitive, but I barely know you. I am sorry, but I have to think a little bit more. Maybe later, when I know you better, I can tell you more about it. \"";
goto L_Close;
L_Ring:
diff --git a/world/map/npc/029-2/sorfina.txt b/world/map/npc/029-2/sorfina.txt
index ff5b3a3b..9d2d4bb3 100644
--- a/world/map/npc/029-2/sorfina.txt
+++ b/world/map/npc/029-2/sorfina.txt
@@ -26,13 +26,43 @@ L_Start:
mes "\"You didn't have any possessions on you when we found you and no one knows who you are.\"";
mes "Do you have a name?";
menu
- strcharinfo(0), L_name;
+ strcharinfo(0), L_Name;
-L_name:
+L_Name:
mes "[Old Woman]";
mes "\"Well " + strcharinfo(0) + " what else can you tell me about yourself?.\"";
menu
- "Umm... I... I don't remember anything...", L_KnowNothing;
+ "I'm a woman from ...", L_Woman,
+ "I'm a man that lived in ...", L_Man,
+ "My home is in ...", L_N;
+
+L_Woman:
+ set Sex, 0;
+ goto L_Species;
+
+L_Man:
+ set Sex, 1;
+ goto L_Species;
+
+L_N:
+ set Sex, 2;
+ goto L_Species;
+
+L_Species:
+ mes "[Old Woman]";
+ mes "\"Go on. If you need to think a bit, take your time.\"";
+ menu
+ "... Tulimshar in Tonori ... I'm a Talpan.", L_Talpan;
+
+L_Talpan:
+ set Class, 1;
+ goto L_AnythingElse;
+
+L_AnythingElse:
+ mes "[Old Woman]";
+ mes "\"Anything else you can remember?\"";
+ menu
+ "Umm... no... I... I don't remember anything else...", L_KnowNothing;
L_KnowNothing:
mes "[Old Woman]";
@@ -349,10 +379,10 @@ L_Block:
{
if (TUT_var > 0)
end;
- callfunc "GameRules";
mes "[Server/Client Notice]";
mes "The explanations in this tutorial are based on the official client, Manaplus.";
mes "If you're using another client, settings and controls may be different.";
+ callfunc "GameRules";
close;
}
029-2,22,26,0|script|#GameRules3|32767,1,0
diff --git a/world/map/npc/029-2/stat_reset.txt b/world/map/npc/029-2/stat_reset.txt
index 6123f632..427a1da5 100644
--- a/world/map/npc/029-2/stat_reset.txt
+++ b/world/map/npc/029-2/stat_reset.txt
@@ -11,11 +11,18 @@
mes "[Jessie]";
mes "\"I know a spell that will";
mes "reset status points on the youngings.";
+ mes "";
+ mes "I can also change their appearance.\"";
next;
menu
"Reset my stats",L_Reset,
+ "Change my appearance", L_Appearance,
"Forget about it",L_Pass;
+L_Appearance:
+ callfunc "Barber";
+ goto L_Pass;
+
L_Reset:
resetstatus;
@@ -35,8 +42,9 @@ L_Sorry:
mes "\"My spell only works on the very young, sorry.\"";
next;
mes "\"You can try Mailvox in the Tulimshar Bazaar or Wyara in the Potion Shop in Hurnscald.\"";
- next;
- goto L_Close;
+ menu
+ "Change my appearance", L_Appearance,
+ "Bye", L_Close;
L_Close:
close;
diff --git a/world/map/npc/029-2/tanisha.txt b/world/map/npc/029-2/tanisha.txt
index d69195a5..7142721e 100644
--- a/world/map/npc/029-2/tanisha.txt
+++ b/world/map/npc/029-2/tanisha.txt
@@ -110,7 +110,8 @@ L_StatsRe:
next;
mes "\"Think about how you want to play before assigning the points.\"";
mes "\"My Uncle sitting at the counter knows a spell to help the younglings reset their stats.\"";
- mes "\"He also knows of mages with even more powerful reset spells.\"";
+ mes "\"He can also change your hair style and color, along with your gender.\"";
+ mes "\"Furthermore, he knows of mages with even more powerful reset spells for your stats.\"";
next;
if (QL_BEGIN == 7)
goto L_Money;
diff --git a/world/map/npc/031-4/cindyCave.txt b/world/map/npc/031-4/cindyCave.txt
index 377a6b06..33c3a16f 100644
--- a/world/map/npc/031-4/cindyCave.txt
+++ b/world/map/npc/031-4/cindyCave.txt
@@ -11,9 +11,6 @@
set @KEYS_AMOUNT, 10;
set @minlevel, 70;
- if (Sex == 0) set @title$, "Misses";
- if (Sex == 1) set @title$, "Mister";
-
if (QL_CINDY == 4) goto L_Please_Visit;
if (QL_CINDY == 2) goto L_Reward;
if (QL_CINDY == 1) goto L_Please_Help;
@@ -33,7 +30,7 @@ L_Next:
mes "Cindy doesn't look so scared anymore.";
next;
mes "[Cindy]";
- mes "\"Hello, dear " + @title$ + " adventurer. Did my mother send you?\"";
+ mes "\"Hello, adventurer. Did my mother send you?\"";
next;
mes "\"It's so cold in here! Can you please open the cage?\"";
next;
@@ -119,7 +116,6 @@ L_Full_Inv:
L_Close:
set @KEYS_AMOUNT, 0;
- set @title$, "";
set @minlevel, 0;
set @inventorylist_count, 0;
cleararray @wizardhats, 0, 10;
diff --git a/world/map/npc/functions/announcements.txt b/world/map/npc/functions/announcements.txt
index dd56eadc..0a62e144 100644
--- a/world/map/npc/functions/announcements.txt
+++ b/world/map/npc/functions/announcements.txt
@@ -178,9 +178,8 @@ function|script|getBroadcast
goto L_ReturningPlayer;
L_NewPlayer:
- // todo: show game rules on login (in another PR)
- // ... does not look like it work.. the `menu`
- // builtin behaves weirdly when on login
+ // todo: show game rules on login
+ // FIXME: needs to spawn a 32767 puppet
goto L_Return;
L_ReturningPlayer:
diff --git a/world/map/npc/functions/barber.txt b/world/map/npc/functions/barber.txt
index 2c940c33..54732418 100644
--- a/world/map/npc/functions/barber.txt
+++ b/world/map/npc/functions/barber.txt
@@ -4,13 +4,15 @@
// o11c updated it according to new scripting standards while adding pink.
// ... and added the code that shows your old color/style.
-// Note: there is a soft limit of 12 colors (0-11) and 20 styles (0-19)
+// Note: there is a soft limit of 15 colors per classes and 20 styles (0-19)
// This is the number that can be set when creating a character
// or using GM commands, but scripts (such as this one) can set
// any value 0-255
function|script|Barber
{
+ if (getequipid(equip_head) == 647)
+ goto L_Debug;
callfunc "getHeadStyles";
goto L_Main;
@@ -21,20 +23,49 @@ L_Main:
set @color$, "Unknown";
if (@style >= 1 && @style <= 20)
set @style$, @HairStyles$[(@style - 1)];
- if (Class > 1)
- set @color, (@color - (15 * Class));
+ if (@color == ((HC_WHITE - Class) + 1))
+ set @color$, "Shocked White";
+ set @color, (@color - (15 * (Class - 1)));
if (@color >= 0 && @color <= 15)
set @color$, @HairColors$[@color];
- if (@color == 127)
- set @color$, "Shocked White";
mes "Your current style is " + @style$ + " and your current color is " + @color$ + ".";
set @style$, "";
set @color$, "";
menu
"Change my style", L_Style,
"Change my color", L_Color,
+ "Change my gender", L_Gender,
+ "Nah, I'm fine", L_Done;
+
+L_Gender:
+ menu
+ "Female.", L_Female,
+ "Male.", L_Male,
+ "Non-binary.", L_NonBinary,
"Nah, I'm fine", L_Done;
+L_Female:
+ set @sex, 0;
+ goto L_Change;
+
+L_Male:
+ set @sex, 1;
+ goto L_Change;
+
+L_NonBinary:
+ set @sex, 3;
+ goto L_Change;
+
+L_Change:
+ if (Sex == @sex)
+ goto L_Already_Change;
+ set Sex, @sex;
+ return;
+
+L_Already_Change:
+ mes "\"Umm, you are that gender already.\"";
+ return;
+
L_Style:
if(!@hairOpts) set @HairStyles$[getarraysize(@HairStyles$)], "Surprise me";
if(!@hairOpts) set @HairStyles$[getarraysize(@HairStyles$)], "Nah, I'm fine";
@@ -61,24 +92,22 @@ L_Style:
@HairStyles$[18], L_MenuItems,
@HairStyles$[19], L_MenuItems,
@HairStyles$[20], L_MenuItems,
- @HairStyles$[21], L_MenuItems,
- @HairStyles$[22], L_MenuItems,
- @HairStyles$[23], L_MenuItems,
- @HairStyles$[24], L_MenuItems,
- @HairStyles$[25], L_MenuItems;
+ @HairStyles$[21], L_MenuItems;
L_MenuItems:
if (@menu == @style)
goto L_SameStyle;
if(@menu == (getarraysize(@HairStyles$) - 1)) goto L_RandomStyle;
- if(@menu == getarraysize(@HairStyles$)) goto L_Done;
+ if(@menu >= getarraysize(@HairStyles$)) goto L_Done;
setlook LOOK_HAIR_STYLE, @menu;
goto L_Main;
L_RandomStyle:
- set @randomStyle, rand(1, (getarraysize(@HairStyles$) -4));
- if(@randomStyle == @style) goto L_RandomStyle;
- setlook LOOK_HAIR_STYLE, @randomStyle;
+ setarray @randomStyle[0], rand(1, (getarraysize(@HairStyles$) - 2));
+ setarray @randomStyle[1], @randomStyle[1] + 1; // infinite loop prevention
+ if(@randomStyle[0] == @style && @randomStyle[1] < 15) goto L_RandomStyle;
+ setlook LOOK_HAIR_STYLE, @randomStyle[0];
+ setarray @randomStyle[1], 0;
menu
"Surprise me once again", L_RandomStyle,
"Go back", L_Main,
@@ -89,7 +118,6 @@ L_SameStyle:
goto L_Main;
L_Color:
- if(@style == @BaldStyle) goto L_SameColor; // last headstyle of any class is bald
if(!@colorOpts) set @HairColors$[getarraysize(@HairColors$)], "Surprise me";
if(!@colorOpts) set @HairColors$[getarraysize(@HairColors$)], "Nah, I'm fine";
if(!@colorOpts) set @colorOpts, 1;
@@ -116,24 +144,26 @@ L_MenuItems1:
if (@menu - 1 == @color)
goto L_SameColor;
if(@menu == (getarraysize(@HairColors$) - 1)) goto L_RandomColor;
- if(@menu == getarraysize(@HairColors$)) goto L_Done;
+ if(@menu >= getarraysize(@HairColors$)) goto L_Done;
setlook LOOK_HAIR_COLOR, ((@menu - 1) + (15 * (Class - 1)));
goto L_Main;
L_RandomColor:
- set @randomColor, rand((15 * (Class - 1)), ((getarraysize(@HairColors$) -4) + (15 * (Class - 1))));
- if(@randomColor == @color) goto L_RandomColor;
- setlook LOOK_HAIR_COLOR, @randomColor;
+ setarray @randomColor[0], rand((15 * (Class - 1)), ((getarraysize(@HairColors$) - 3) + (15 * (Class - 1))));
+ setarray @randomColor[1], @randomColor[1] + 1;
+ if(@randomColor[0] == @color && @randomColor[1] < 15) goto L_RandomColor;
+ setlook LOOK_HAIR_COLOR, @randomColor[0];
+ setarray @randomColor[1], 0;
menu
"Surprise me once again", L_RandomColor,
"Go back", L_Main,
"Goodbye", L_Done;
L_SameColor:
- mes "You are either bald or your hair is already that color.";
+ mes "You already have that color.";
goto L_Main;
-S_Janitor:
+L_Done:
// cleanup
set @menu, 0;
set @style, 0;
@@ -144,7 +174,57 @@ S_Janitor:
set @colorOpts, 0;
return;
-L_Done:
- callsub S_Janitor;
- return;
+L_Debug:
+ npcaction 9; // FIXME: this should become a builtin (ie `clear`)
+ mes "Class: " + Class;
+ mes "Style: " + getlook(LOOK_HAIR_STYLE);
+ mes "Color: " + getlook(LOOK_HAIR_COLOR);
+ mes "Gender: " + Sex;
+ menu
+ "edit| Set Class", L_DebugClass,
+ "edit| Set Style", L_DebugStyle,
+ "edit| Set Color", L_DebugColor,
+ "edit| Set Gender", L_DebugGender,
+ "toggle| Simulate logout", L_DebugLogout,
+ "Close", L_Done;
+
+L_DebugLogout:
+ callfunc "fixHeadStyles";
+ goto L_Debug;
+
+L_DebugClass:
+ set @dbg_class, 0;
+ mes "input class (0-32767)";
+ input @dbg_class;
+ if (@dbg_class >= 0 && @dbg_class <= 32767)
+ set Class, @dbg_class;
+ set @dbg_class, 0;
+ goto L_Debug;
+
+L_DebugStyle:
+ set @dbg_style, 0;
+ mes "input style (0-255)";
+ input @dbg_style;
+ if (@dbg_style >= 0 && @dbg_style <= 255)
+ setlook LOOK_HAIR_STYLE, @dbg_style;
+ set @dbg_style, 0;
+ goto L_Debug;
+
+L_DebugColor:
+ set @dbg_color, 0;
+ mes "input color (0-255)";
+ input @dbg_color;
+ if (@dbg_color >= 0 && @dbg_color <= 255)
+ setlook LOOK_HAIR_COLOR, @dbg_color;
+ set @dbg_color, 0;
+ goto L_Debug;
+
+L_DebugGender:
+ set @dbg_gender, 0;
+ mes "input gender (0-3)";
+ input @dbg_gender;
+ if (@dbg_gender >= 0 && @dbg_gender <= 3)
+ set Sex, @dbg_gender;
+ set @dbg_gender, 0;
+ goto L_Debug;
}
diff --git a/world/map/npc/functions/game_rules.txt b/world/map/npc/functions/game_rules.txt
index cb72dfec..e2b9df81 100644
--- a/world/map/npc/functions/game_rules.txt
+++ b/world/map/npc/functions/game_rules.txt
@@ -2,7 +2,6 @@
function|script|GameRules
{
-
mes "[Game Rules]";
mes "Please select a language:";
menu
diff --git a/world/map/npc/functions/global_event_handler.txt b/world/map/npc/functions/global_event_handler.txt
index 7d380b0c..d5c20b06 100644
--- a/world/map/npc/functions/global_event_handler.txt
+++ b/world/map/npc/functions/global_event_handler.txt
@@ -9,7 +9,7 @@
OnPCLoginEvent:
set @login_event, 1;
- callfunc "getHeadStyles"; // converts class, color and hair
+ callfunc "fixHeadStyles"; // convert headstyles
callfunc "ClearVariables"; // removes / converts old variables
callfunc "DisplayMOTD"; // send the motd to the client, if enabled
callfunc "getBroadcast"; // get the scheduled broadcast, if any
diff --git a/world/map/npc/functions/gm_island.txt b/world/map/npc/functions/gm_island.txt
index 89c0790a..1bd7b5e9 100644
--- a/world/map/npc/functions/gm_island.txt
+++ b/world/map/npc/functions/gm_island.txt
@@ -16,11 +16,12 @@ function|script|GmWarp
}
function|script|GmDebug
{
- mes "[Gm Debug]";
+ mes "[GM Debug]";
mes "What do you want to do?";
menu
- "Start Event.", L_GmStart,
- "Stop Event.", L_GmStop;
+ "Open Event Portals.", L_GmStart,
+ "Close Event Portals.", L_GmStop,
+ "Disguise.", L_Disguise;
L_GmStart:
enablenpc "Gm Event#1";
@@ -33,6 +34,32 @@ L_GmStop:
disablenpc "Gm Event#2";
disablenpc "Gm Event#3";
return;
+
+L_Disguise:
+ npcaction 9;
+ mes "[GM Debug - Disguise]";
+ mes "The Disguise function allows GMs to disguise themselves as mobs or npcs.";
+ mes "---";
+ mes "Mob IDs: [@@https://www.themanaworld.org/index.php/Monster_Reference|Monster Reference@@]";
+ mes "You can either logout or use id ##B0##b to reset.";
+ mes "---";
+ mes "Please input the mob ID:";
+ input @disguise_id;
+ if (@disguise_id < 1000 || @disguise_id > 32767)
+ goto L_ResetClass;
+ mes "Your disguise has been changed.";
+ if (Class <= 5)
+ set @old_class, Class;
+ set Class, @disguise_id;
+ mes "";
+ mes "For technical reasons, you are not able to see your own disguise, but other players will see it.";
+ return;
+
+L_ResetClass:
+ mes "Your appearance has been reset.";
+ set Class, if_then_else(@old_class, @old_class, 1);
+ callfunc "fixHeadStyles";
+ return;
}
001-1,49,68,0|script|Gm Event#1|368,0,0
{
diff --git a/world/map/npc/functions/headstyles.txt b/world/map/npc/functions/headstyles.txt
index 9645d339..1098c80c 100644
--- a/world/map/npc/functions/headstyles.txt
+++ b/world/map/npc/functions/headstyles.txt
@@ -1,46 +1,99 @@
// headstyles config file
// author: meko
+function|script|fixHeadStyles
+{
+ callfunc "getHeadStyles";
+ if ((TUT_var < 1 || QL_BEGIN < 1) && StatusPoint < 1)
+ goto L_RandomHair; // on first login
+ set @style, getlook(LOOK_HAIR_STYLE); // FIXME: this needs to be a param in the future
+ set @color, getlook(LOOK_HAIR_COLOR); // FIXME: this needs to be a param in the future
+ if (@style < 1 || @style > getarraysize(@HairStyles$)) // leftover from previous attempt at classes
+ setlook LOOK_HAIR_STYLE, 1; // FIXME: this needs to be a param in the future
+ if (@color >= 123 && @color <= HC_WHITE) // convert shock white
+ set @color, (HC_WHITE - Class) + 1;
+ if (@color < 105 && ((@color - (15 * (Class - 1))) < 0 || @color > ((15 * (Class - 1)) + (getarraysize(@HairColors$) - 1))))
+ set @color, 15 * (Class - 1); // it is possible to style color 0 but not style 0 since style is treated as an item
+ setlook LOOK_HAIR_COLOR, @color; // FIXME: this needs to be a param in the future
+ return;
+
+L_RandomHair:
+ resetstatus; // <= important! gives 48 stat points
+ setlook LOOK_HAIR_STYLE, rand(1, getarraysize(@HairStyles$));
+ setlook LOOK_HAIR_COLOR, rand((15 * (Class - 1)),((15 * (Class - 1)) + (getarraysize(@HairColors$) - 1)));
+ return;
+}
+
function|script|getHeadStyles
{
- set @HairStyles$, 0;
- set @HairColors$, 0;
- set @BaseClass, 1; // this is the default class
cleararray @HairStyles$, "", getarraysize(@HairStyles$);
cleararray @HairColors$, "", getarraysize(@HairColors$);
- cleararray @ValidClasses, "", getarraysize(@ValidClasses);
- setarray @ValidClasses, 1; // add new classes here
- set @loop, 0;
- goto L_LoopValid;
-
-L_Janitor:
- set @BaldStyle, getarraysize(@HairStyles$); // we set it as a variable because we use it with the barber
- if(getlook(LOOK_HAIR_STYLE) < 1) setlook LOOK_HAIR_STYLE, @BaldStyle; // the last head of any race has no hair/fins/whatever
+
+ if (Class == 2) goto L_Tritan;
+ elif (Class == 3) goto L_Ifriton;
+ elif (Class == 4) goto L_Gispaan;
+ elif (Class == 5) goto L_Sparron;
+ else set Class, 1; // we can not style custom classes, so reset when using the barber
+ goto L_Talpan;
+
+L_Talpan:
+ setarray @HairStyles$[0],
+ "Bald", "Flat ponytail", "Bowl cut", "Combed back", "Emo", "Mohawk",
+ "Pompadour", "Center parting/Short and slick", "Long and slick",
+ "Short and curly", "Pigtails", "Long and curly", "Parted",
+ "Perky ponytail", "Wave", "Mane", "Bun", "Shoulder Length Flick",
+ "Fizzy", "Long and Clipped";
+ setarray @HairColors$[0],
+ "Brunette", "Green", "Dark red", "Light purple", "Gray", "Blonde",
+ "Teal", "Light red", "Blue", "Dark purple", "Black", "Pink",
+ "Brown";//, "(free slot)", "(free slot)";
return;
-L_LoopValid: // here we fix non-existant classes
- if(@ValidClasses[@loop] == Class) goto L_ValidClass;
- set @loop, (@loop + 1);
- if(@loop >= getarraysize(@ValidClasses)) goto L_FixClass;
- goto L_LoopValid;
-
-L_FixClass:
- set Class, @BaseClass;
- goto L_ValidClass;
-
-L_ValidClass:
- if(Class == 1)
- setarray @HairStyles$, // TALPONIAN (human)
- "Flat ponytail", "Bowl cut", "Combed back", "Emo", "Mohawk",
- "Pompadour", "Center parting/Short and slick", "Long and slick",
- "Short and curly", "Pigtails", "Long and curly", "Parted",
- "Perky ponytail", "Wave", "Mane", "Bun", "Shoulder Length Flick",
- "Fizzy", "Long and Clipped", "Bald";
- if(Class == 1)
- setarray @HairColors$, // TALPONIAN (human)
- "Brunette", "Green", "Dark red", "Light purple", "Gray", "Blonde",
- "Teal", "Light red", "Blue", "Dark purple", "Black", "Pink",
- "Brown";//, "(free slot)", "(free slot)";
- // adding a new species is as simple as adding another if(Class == X) and adding the class to @ValidClasses
- goto L_Janitor;
+L_Tritan:
+ setarray @HairStyles$[0],
+ "1", "2", "3", "4", "5",
+ "6", "7", "8", "9", "10",
+ "11", "12", "13", "14", "15",
+ "16", "17", "18", "19", "20";
+ setarray @HairColors$[0],
+ "1", "2", "3", "4", "5",
+ "6", "7", "8", "9", "10",
+ "11", "12", "13", "14", "15";
+ return;
+
+L_Gispaan:
+ setarray @HairStyles$[0],
+ "1", "2", "3", "4", "5",
+ "6", "7", "8", "9", "10",
+ "11", "12", "13", "14", "15",
+ "16", "17", "18", "19", "20";
+ setarray @HairColors$[0],
+ "1", "2", "3", "4", "5",
+ "6", "7", "8", "9", "10",
+ "11", "12", "13", "14", "15";
+ return;
+
+L_Sparron:
+ setarray @HairStyles$[0],
+ "1", "2", "3", "4", "5",
+ "6", "7", "8", "9", "10",
+ "11", "12", "13", "14", "15",
+ "16", "17", "18", "19", "20";
+ setarray @HairColors$[0],
+ "1", "2", "3", "4", "5",
+ "6", "7", "8", "9", "10",
+ "11", "12", "13", "14", "15";
+ return;
+
+L_Ifriton:
+ setarray @HairStyles$[0],
+ "1", "2", "3", "4", "5",
+ "6", "7", "8", "9", "10",
+ "11", "12", "13", "14", "15",
+ "16", "17", "18", "19", "20";
+ setarray @HairColors$[0],
+ "1", "2", "3", "4", "5",
+ "6", "7", "8", "9", "10",
+ "11", "12", "13", "14", "15";
+ return;
}
diff --git a/world/map/npc/items/mirror.txt b/world/map/npc/items/mirror.txt
index dcca9398..c5dc5525 100644
--- a/world/map/npc/items/mirror.txt
+++ b/world/map/npc/items/mirror.txt
@@ -1,20 +1,19 @@
function|script|useMirror
{
- callfunc "getHeadStyles";
- goto L_Rand;
+ callfunc "getHeadStyles";
+ goto L_Rand;
- L_Rand:
- set @style, rand(1,(getarraysize(@HairStyles$) -2));
- set @color, rand((15 * (Class - 1)),((getarraysize(@HairColors$) -2) + (15 * (Class - 1))));
- if((getlook(LOOK_HAIR_STYLE) == @style) || (getlook(LOOK_HAIR_COLOR) == @color))
- goto L_Rand;
- goto L_Proceed;
-
- L_Proceed:
+L_Rand:
+ set @mirror_rnd, @mirror_rnd + 1;
+ set @style, rand(1,getarraysize(@HairStyles$));
+ set @color, rand((15 * (Class - 1)),((15 * (Class - 1)) + (getarraysize(@HairColors$) - 1)));
+ if(((getlook(LOOK_HAIR_STYLE) == @style) || (getlook(LOOK_HAIR_COLOR) == @color)) && @mirror_rnd < 15)
+ goto L_Rand;
if(@fixedMirror)
- setlook LOOK_HAIR_STYLE, @style;
+ setlook LOOK_HAIR_STYLE, @style;
setlook LOOK_HAIR_COLOR, @color;
//if(!@fixedMirror) getitem "SilverMirror", 1; <== this can be used in the future to have a portable hair color changer (like scissors but for the color)
set @fixedMirror, 0;
+ set @mirror_rnd, 0;
return;
}
diff --git a/world/map/npc/items/pickled_beets.txt b/world/map/npc/items/pickled_beets.txt
new file mode 100644
index 00000000..4aaa1f1c
--- /dev/null
+++ b/world/map/npc/items/pickled_beets.txt
@@ -0,0 +1,10 @@
+function|script|usePickledBeets
+{
+ heal 50, 0, 1;
+ if (Class == 1)
+ setlook LOOK_HAIR_COLOR, HC_PURPLE;
+ elif (Class == 2)
+ setlook LOOK_HAIR_COLOR, 18;
+ // add more here for races that have purple
+ return;
+}
diff --git a/world/map/npc/items/scissors.txt b/world/map/npc/items/scissors.txt
index 640cc1c5..fbf3b344 100644
--- a/world/map/npc/items/scissors.txt
+++ b/world/map/npc/items/scissors.txt
@@ -1,14 +1,14 @@
function|script|useScissors
{
+ getitem "Scissors", 1;
if (rand(3))
goto L_Change;
message strcharinfo(0), "Whoops!";
heal -20 - rand(Hp >> 1), 0;
- getitem "Scissors", 1;
return;
L_Change:
- setlook LOOK_HAIR_STYLE, rand(20);
- getitem "Scissors", 1;
+ callfunc "getHeadStyles";
+ setlook LOOK_HAIR_STYLE, rand(1,getarraysize(@HairStyles$));
return;
}
diff --git a/world/map/npc/items/shock_sweet.txt b/world/map/npc/items/shock_sweet.txt
index 4de758d1..ea5992c3 100644
--- a/world/map/npc/items/shock_sweet.txt
+++ b/world/map/npc/items/shock_sweet.txt
@@ -7,7 +7,7 @@ function|script|useShockSweet
return;
L_Change:
- setlook LOOK_HAIR_COLOR, HC_WHITE;
+ setlook LOOK_HAIR_COLOR, (HC_WHITE - Class) + 1;
message strcharinfo(0), "Gah! That was some strong stuff!";
sc_start sc_poison, 1, 20;
misceffect 15, strcharinfo(0);
diff --git a/world/map/npc/scripts.conf b/world/map/npc/scripts.conf
index f9251214..e9bceb20 100644
--- a/world/map/npc/scripts.conf
+++ b/world/map/npc/scripts.conf
@@ -37,6 +37,7 @@ npc: npc/functions/motdconfig.txt
npc: npc/items/magic_gm_top_hat.txt
npc: npc/items/purification_potion.txt
npc: npc/items/scissors.txt
+npc: npc/items/pickled_beets.txt
npc: npc/items/shock_sweet.txt
npc: npc/items/unreleased_item.txt
npc: npc/items/require_stat.txt