summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2020-09-18 15:37:35 -0300
committerJesusaves <cpntb1@ymail.com>2020-09-18 15:37:35 -0300
commit708faac18df4851cb8dda17dc3562ca337e7dc1b (patch)
treec19bf1ff552e8dbf7293468301fe152a5d585db3
parent05bf6b06370ee7b9695d26962f08cc3641ad1f21 (diff)
parent01ae0e398d5b49db2aafb8af31acf81fb8a522c9 (diff)
downloadserverdata-jesusalva/refinery.tar.gz
serverdata-jesusalva/refinery.tar.bz2
serverdata-jesusalva/refinery.tar.xz
serverdata-jesusalva/refinery.zip
Merge branch 'master' into jesusalva/refineryjesusalva/refinery
-rw-r--r--db/constants.conf21
-rw-r--r--db/re/item_db.conf1
-rw-r--r--db/re/job_db.conf160
-rw-r--r--db/re/skill_db.conf51
-rw-r--r--db/re/skill_tree.conf230
-rw-r--r--maps/re/001-3-2.mcachebin347 -> 351 bytes
-rw-r--r--npc/000-2-3/nard.txt65
-rw-r--r--npc/001-1/koga.txt14
-rw-r--r--npc/001-1/rowboat.txt19
-rw-r--r--npc/001-1/rowboathelper.txt40
-rw-r--r--npc/001-1/sophialla.txt14
-rw-r--r--npc/001-3-2/_import.txt1
-rw-r--r--npc/001-3-2/smuggler.txt78
-rw-r--r--npc/008-1-1/_import.txt1
-rw-r--r--npc/008-1-1/cutscene.txt180
-rw-r--r--npc/008-1-1/koga.txt9
-rw-r--r--npc/008-1-1/morcant.txt36
-rw-r--r--npc/008-1/auldsbel.txt22
-rw-r--r--npc/008-2-10/airlia.txt14
-rw-r--r--npc/008-2-32/thamas.txt58
-rw-r--r--npc/config/magic.txt168
-rw-r--r--npc/functions/quest-debug/100-General_Narrator.txt3
-rw-r--r--npc/items/master_skillbook.txt4
23 files changed, 1033 insertions, 156 deletions
diff --git a/db/constants.conf b/db/constants.conf
index f6bd3f75..8dc47c78 100644
--- a/db/constants.conf
+++ b/db/constants.conf
@@ -699,14 +699,17 @@ more than one separator can be used in a row (so 12_3___456 is illegal).
comment__: "Elements"
Ele_Neutral: 0
Ele_Water: 1
- Ele_Earth: 2
+ Ele_Nature: 2
Ele_Fire: 3
- Ele_Wind: 4
- Ele_Poison: 5
Ele_Holy: 6
Ele_Dark: 7
- Ele_Ghost: 8
- Ele_Undead: 9
+
+ // Kept for Compatibility
+ Ele_Earth: 2
+ Ele_Wind: 2 // 4
+ Ele_Poison: 2 // 5
+ Ele_Ghost: 7 // 8
+ Ele_Undead: 7 // 9
Ele_All: 255
comment__: "Races"
@@ -5147,7 +5150,13 @@ more than one separator can be used in a row (so 12_3___456 is illegal).
CHEST_WAITTIME: 900 // 15 minutes
comment__: "Magic constants"
- CLASS_OTHER: 0
+ CLASS_OTHER: 0
+ CLASS_MASTER: 1
+ CLASS_WAR: 2
+ CLASS_NATURE: 3
+ CLASS_FIRE: 4
+ CLASS_WATER: 5
+ CLASS_HARMONY: 6
@include "conf/import/constants.conf"
}
diff --git a/db/re/item_db.conf b/db/re/item_db.conf
index 68b99950..da7157c2 100644
--- a/db/re/item_db.conf
+++ b/db/re/item_db.conf
@@ -1212,6 +1212,7 @@ item_db: (
Script: <"
sc_start SC_ATTHASTE_POTION1, 80000, 300; // These are totally placeholders. We want STR + 10 and VIT + 5 and max. HP + 2000 for three minutes.
sc_start SC_INCHITRATE, 80000, 300;
+ getitembound EmptyBowl, 1, IBT_ACCOUNT;
">
},
{
diff --git a/db/re/job_db.conf b/db/re/job_db.conf
index 267b6200..58de235f 100644
--- a/db/re/job_db.conf
+++ b/db/re/job_db.conf
@@ -86,22 +86,22 @@ Viro: {
6900, 6950, 7000, 7050, 7100, 7150, 7200, 7250, 7300, 7350, // 131 - 140
7400, 7450, 7500, 7550, 7600, 7650, 7700, 7750, 7800, 7850, // 141 - 150
7900, 7950, 8000, 8050, 8100, 8150, 8200, 8250, 8300, 835] // 151 - 160
- SPTable:[ 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, // 1 - 10
- 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, // 11 - 20
- 310, 320, 330, 340, 350, 360, 370, 380, 390, 400, // 21 - 30
- 410, 420, 430, 440, 450, 460, 470, 480, 490, 500, // 31 - 40
- 510, 520, 530, 540, 550, 560, 570, 580, 590, 600, // 41 - 50
- 610, 620, 630, 640, 650, 660, 670, 680, 690, 700, // 51 - 60
- 710, 720, 730, 740, 750, 760, 770, 780, 790, 800, // 61 - 70
- 810, 820, 830, 840, 850, 860, 870, 880, 890, 900, // 71 - 80
- 910, 920, 930, 940, 950, 960, 970, 980, 990, 1000, // 81 - 90
- 1010, 1020, 1030, 1040, 1050, 1060, 1070, 1080, 1090, 1000, // 91 - 100
- 1010, 1020, 1030, 1040, 1050, 1060, 1070, 1080, 1090, 1100, // 101 - 110
- 1110, 1120, 1130, 1140, 1150, 1160, 1170, 1180, 1190, 1200, // 111 - 120
- 1210, 1220, 1230, 1240, 1250, 1260, 1270, 1280, 1290, 1300, // 121 - 130
- 1310, 1320, 1330, 1340, 1350, 1360, 1370, 1380, 1390, 1400, // 131 - 140
- 1410, 1420, 1430, 1440, 1450, 1460, 1470, 1480, 1490, 1500, // 141 - 150
- 1510, 1520, 1530, 1540, 1550, 1560, 1570, 1580, 1590, 160] // 151 - 160
+ SPTable:[ 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, // 1 - 10
+ 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, // 11 - 20
+ 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, // 21 - 30
+ 165, 170, 175, 180, 185, 190, 195, 200, 205, 210, // 31 - 40
+ 215, 220, 225, 230, 235, 240, 245, 250, 255, 260, // 41 - 50
+ 265, 270, 275, 280, 285, 290, 295, 300, 305, 310, // 51 - 60
+ 315, 320, 325, 330, 335, 340, 345, 350, 355, 360, // 61 - 70
+ 365, 370, 375, 380, 385, 390, 395, 400, 405, 410, // 71 - 80
+ 415, 420, 425, 430, 435, 440, 445, 450, 455, 460, // 81 - 90
+ 465, 470, 475, 480, 485, 490, 495, 500, 505, 510, // 91 - 100
+ 515, 520, 525, 530, 535, 540, 545, 550, 555, 560, // 101 - 110
+ 565, 570, 575, 580, 585, 590, 595, 600, 605, 610, // 111 - 120
+ 615, 620, 625, 630, 635, 640, 645, 650, 655, 660, // 121 - 130
+ 665, 670, 675, 680, 685, 690, 695, 700, 705, 710, // 131 - 140
+ 715, 720, 725, 730, 735, 740, 745, 750, 755, 760, // 141 - 150
+ 765, 770, 775, 780, 785, 790, 795, 800, 805, 810] // 151 - 160
}
CaveUkar: {
@@ -139,22 +139,22 @@ CaveUkar: {
6900, 6950, 7000, 7050, 7100, 7150, 7200, 7250, 7300, 7350, // 131 - 140
7400, 7450, 7500, 7550, 7600, 7650, 7700, 7750, 7800, 7850, // 141 - 150
7900, 7950, 8000, 8050, 8100, 8150, 8200, 8250, 8300, 835] // 151 - 160
- SPTable:[ 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, // 1 - 10
- 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, // 11 - 20
- 310, 320, 330, 340, 350, 360, 370, 380, 390, 400, // 21 - 30
- 410, 420, 430, 440, 450, 460, 470, 480, 490, 500, // 31 - 40
- 510, 520, 530, 540, 550, 560, 570, 580, 590, 600, // 41 - 50
- 610, 620, 630, 640, 650, 660, 670, 680, 690, 700, // 51 - 60
- 710, 720, 730, 740, 750, 760, 770, 780, 790, 800, // 61 - 70
- 810, 820, 830, 840, 850, 860, 870, 880, 890, 900, // 71 - 80
- 910, 920, 930, 940, 950, 960, 970, 980, 990, 1000, // 81 - 90
- 1010, 1020, 1030, 1040, 1050, 1060, 1070, 1080, 1090, 1000, // 91 - 100
- 1010, 1020, 1030, 1040, 1050, 1060, 1070, 1080, 1090, 1100, // 101 - 110
- 1110, 1120, 1130, 1140, 1150, 1160, 1170, 1180, 1190, 1200, // 111 - 120
- 1210, 1220, 1230, 1240, 1250, 1260, 1270, 1280, 1290, 1300, // 121 - 130
- 1310, 1320, 1330, 1340, 1350, 1360, 1370, 1380, 1390, 1400, // 131 - 140
- 1410, 1420, 1430, 1440, 1450, 1460, 1470, 1480, 1490, 1500, // 141 - 150
- 1510, 1520, 1530, 1540, 1550, 1560, 1570, 1580, 1590, 160] // 151 - 160
+ SPTable:[ 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, // 1 - 10
+ 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, // 11 - 20
+ 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, // 21 - 30
+ 165, 170, 175, 180, 185, 190, 195, 200, 205, 210, // 31 - 40
+ 215, 220, 225, 230, 235, 240, 245, 250, 255, 260, // 41 - 50
+ 265, 270, 275, 280, 285, 290, 295, 300, 305, 310, // 51 - 60
+ 315, 320, 325, 330, 335, 340, 345, 350, 355, 360, // 61 - 70
+ 365, 370, 375, 380, 385, 390, 395, 400, 405, 410, // 71 - 80
+ 415, 420, 425, 430, 435, 440, 445, 450, 455, 460, // 81 - 90
+ 465, 470, 475, 480, 485, 490, 495, 500, 505, 510, // 91 - 100
+ 515, 520, 525, 530, 535, 540, 545, 550, 555, 560, // 101 - 110
+ 565, 570, 575, 580, 585, 590, 595, 600, 605, 610, // 111 - 120
+ 615, 620, 625, 630, 635, 640, 645, 650, 655, 660, // 121 - 130
+ 665, 670, 675, 680, 685, 690, 695, 700, 705, 710, // 131 - 140
+ 715, 720, 725, 730, 735, 740, 745, 750, 755, 760, // 141 - 150
+ 765, 770, 775, 780, 785, 790, 795, 800, 805, 810] // 151 - 160
}
FireKralog: {
BaseExpGroup: "EvolClasses"
@@ -191,22 +191,22 @@ FireKralog: {
6900, 6950, 7000, 7050, 7100, 7150, 7200, 7250, 7300, 7350, // 131 - 140
7400, 7450, 7500, 7550, 7600, 7650, 7700, 7750, 7800, 7850, // 141 - 150
7900, 7950, 8000, 8050, 8100, 8150, 8200, 8250, 8300, 835] // 151 - 160
- SPTable:[ 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, // 1 - 10
- 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, // 11 - 20
- 310, 320, 330, 340, 350, 360, 370, 380, 390, 400, // 21 - 30
- 410, 420, 430, 440, 450, 460, 470, 480, 490, 500, // 31 - 40
- 510, 520, 530, 540, 550, 560, 570, 580, 590, 600, // 41 - 50
- 610, 620, 630, 640, 650, 660, 670, 680, 690, 700, // 51 - 60
- 710, 720, 730, 740, 750, 760, 770, 780, 790, 800, // 61 - 70
- 810, 820, 830, 840, 850, 860, 870, 880, 890, 900, // 71 - 80
- 910, 920, 930, 940, 950, 960, 970, 980, 990, 1000, // 81 - 90
- 1010, 1020, 1030, 1040, 1050, 1060, 1070, 1080, 1090, 1000, // 91 - 100
- 1010, 1020, 1030, 1040, 1050, 1060, 1070, 1080, 1090, 1100, // 101 - 110
- 1110, 1120, 1130, 1140, 1150, 1160, 1170, 1180, 1190, 1200, // 111 - 120
- 1210, 1220, 1230, 1240, 1250, 1260, 1270, 1280, 1290, 1300, // 121 - 130
- 1310, 1320, 1330, 1340, 1350, 1360, 1370, 1380, 1390, 1400, // 131 - 140
- 1410, 1420, 1430, 1440, 1450, 1460, 1470, 1480, 1490, 1500, // 141 - 150
- 1510, 1520, 1530, 1540, 1550, 1560, 1570, 1580, 1590, 160] // 151 - 160
+ SPTable:[ 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, // 1 - 10
+ 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, // 11 - 20
+ 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, // 21 - 30
+ 165, 170, 175, 180, 185, 190, 195, 200, 205, 210, // 31 - 40
+ 215, 220, 225, 230, 235, 240, 245, 250, 255, 260, // 41 - 50
+ 265, 270, 275, 280, 285, 290, 295, 300, 305, 310, // 51 - 60
+ 315, 320, 325, 330, 335, 340, 345, 350, 355, 360, // 61 - 70
+ 365, 370, 375, 380, 385, 390, 395, 400, 405, 410, // 71 - 80
+ 415, 420, 425, 430, 435, 440, 445, 450, 455, 460, // 81 - 90
+ 465, 470, 475, 480, 485, 490, 495, 500, 505, 510, // 91 - 100
+ 515, 520, 525, 530, 535, 540, 545, 550, 555, 560, // 101 - 110
+ 565, 570, 575, 580, 585, 590, 595, 600, 605, 610, // 111 - 120
+ 615, 620, 625, 630, 635, 640, 645, 650, 655, 660, // 121 - 130
+ 665, 670, 675, 680, 685, 690, 695, 700, 705, 710, // 131 - 140
+ 715, 720, 725, 730, 735, 740, 745, 750, 755, 760, // 141 - 150
+ 765, 770, 775, 780, 785, 790, 795, 800, 805, 810] // 151 - 160
}
LightRaijin: {
@@ -244,22 +244,22 @@ LightRaijin: {
6900, 6950, 7000, 7050, 7100, 7150, 7200, 7250, 7300, 7350, // 131 - 140
7400, 7450, 7500, 7550, 7600, 7650, 7700, 7750, 7800, 7850, // 141 - 150
7900, 7950, 8000, 8050, 8100, 8150, 8200, 8250, 8300, 835] // 151 - 160
- SPTable:[ 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, // 1 - 10
- 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, // 11 - 20
- 310, 320, 330, 340, 350, 360, 370, 380, 390, 400, // 21 - 30
- 410, 420, 430, 440, 450, 460, 470, 480, 490, 500, // 31 - 40
- 510, 520, 530, 540, 550, 560, 570, 580, 590, 600, // 41 - 50
- 610, 620, 630, 640, 650, 660, 670, 680, 690, 700, // 51 - 60
- 710, 720, 730, 740, 750, 760, 770, 780, 790, 800, // 61 - 70
- 810, 820, 830, 840, 850, 860, 870, 880, 890, 900, // 71 - 80
- 910, 920, 930, 940, 950, 960, 970, 980, 990, 1000, // 81 - 90
- 1010, 1020, 1030, 1040, 1050, 1060, 1070, 1080, 1090, 1000, // 91 - 100
- 1010, 1020, 1030, 1040, 1050, 1060, 1070, 1080, 1090, 1100, // 101 - 110
- 1110, 1120, 1130, 1140, 1150, 1160, 1170, 1180, 1190, 1200, // 111 - 120
- 1210, 1220, 1230, 1240, 1250, 1260, 1270, 1280, 1290, 1300, // 121 - 130
- 1310, 1320, 1330, 1340, 1350, 1360, 1370, 1380, 1390, 1400, // 131 - 140
- 1410, 1420, 1430, 1440, 1450, 1460, 1470, 1480, 1490, 1500, // 141 - 150
- 1510, 1520, 1530, 1540, 1550, 1560, 1570, 1580, 1590, 160] // 151 - 160
+ SPTable:[ 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, // 1 - 10
+ 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, // 11 - 20
+ 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, // 21 - 30
+ 165, 170, 175, 180, 185, 190, 195, 200, 205, 210, // 31 - 40
+ 215, 220, 225, 230, 235, 240, 245, 250, 255, 260, // 41 - 50
+ 265, 270, 275, 280, 285, 290, 295, 300, 305, 310, // 51 - 60
+ 315, 320, 325, 330, 335, 340, 345, 350, 355, 360, // 61 - 70
+ 365, 370, 375, 380, 385, 390, 395, 400, 405, 410, // 71 - 80
+ 415, 420, 425, 430, 435, 440, 445, 450, 455, 460, // 81 - 90
+ 465, 470, 475, 480, 485, 490, 495, 500, 505, 510, // 91 - 100
+ 515, 520, 525, 530, 535, 540, 545, 550, 555, 560, // 101 - 110
+ 565, 570, 575, 580, 585, 590, 595, 600, 605, 610, // 111 - 120
+ 615, 620, 625, 630, 635, 640, 645, 650, 655, 660, // 121 - 130
+ 665, 670, 675, 680, 685, 690, 695, 700, 705, 710, // 131 - 140
+ 715, 720, 725, 730, 735, 740, 745, 750, 755, 760, // 141 - 150
+ 765, 770, 775, 780, 785, 790, 795, 800, 805, 810] // 151 - 160
}
SeaTritan: {
@@ -297,22 +297,22 @@ SeaTritan: {
6900, 6950, 7000, 7050, 7100, 7150, 7200, 7250, 7300, 7350, // 131 - 140
7400, 7450, 7500, 7550, 7600, 7650, 7700, 7750, 7800, 7850, // 141 - 150
7900, 7950, 8000, 8050, 8100, 8150, 8200, 8250, 8300, 835] // 151 - 160
- SPTable:[ 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, // 1 - 10
- 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, // 11 - 20
- 310, 320, 330, 340, 350, 360, 370, 380, 390, 400, // 21 - 30
- 410, 420, 430, 440, 450, 460, 470, 480, 490, 500, // 31 - 40
- 510, 520, 530, 540, 550, 560, 570, 580, 590, 600, // 41 - 50
- 610, 620, 630, 640, 650, 660, 670, 680, 690, 700, // 51 - 60
- 710, 720, 730, 740, 750, 760, 770, 780, 790, 800, // 61 - 70
- 810, 820, 830, 840, 850, 860, 870, 880, 890, 900, // 71 - 80
- 910, 920, 930, 940, 950, 960, 970, 980, 990, 1000, // 81 - 90
- 1010, 1020, 1030, 1040, 1050, 1060, 1070, 1080, 1090, 1000, // 91 - 100
- 1010, 1020, 1030, 1040, 1050, 1060, 1070, 1080, 1090, 1100, // 101 - 110
- 1110, 1120, 1130, 1140, 1150, 1160, 1170, 1180, 1190, 1200, // 111 - 120
- 1210, 1220, 1230, 1240, 1250, 1260, 1270, 1280, 1290, 1300, // 121 - 130
- 1310, 1320, 1330, 1340, 1350, 1360, 1370, 1380, 1390, 1400, // 131 - 140
- 1410, 1420, 1430, 1440, 1450, 1460, 1470, 1480, 1490, 1500, // 141 - 150
- 1510, 1520, 1530, 1540, 1550, 1560, 1570, 1580, 1590, 160] // 151 - 160
+ SPTable:[ 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, // 1 - 10
+ 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, // 11 - 20
+ 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, // 21 - 30
+ 165, 170, 175, 180, 185, 190, 195, 200, 205, 210, // 31 - 40
+ 215, 220, 225, 230, 235, 240, 245, 250, 255, 260, // 41 - 50
+ 265, 270, 275, 280, 285, 290, 295, 300, 305, 310, // 51 - 60
+ 315, 320, 325, 330, 335, 340, 345, 350, 355, 360, // 61 - 70
+ 365, 370, 375, 380, 385, 390, 395, 400, 405, 410, // 71 - 80
+ 415, 420, 425, 430, 435, 440, 445, 450, 455, 460, // 81 - 90
+ 465, 470, 475, 480, 485, 490, 495, 500, 505, 510, // 91 - 100
+ 515, 520, 525, 530, 535, 540, 545, 550, 555, 560, // 101 - 110
+ 565, 570, 575, 580, 585, 590, 595, 600, 605, 610, // 111 - 120
+ 615, 620, 625, 630, 635, 640, 645, 650, 655, 660, // 121 - 130
+ 665, 670, 675, 680, 685, 690, 695, 700, 705, 710, // 131 - 140
+ 715, 720, 725, 730, 735, 740, 745, 750, 755, 760, // 141 - 150
+ 765, 770, 775, 780, 785, 790, 795, 800, 805, 810] // 151 - 160
}
FrostKralog: {
diff --git a/db/re/skill_db.conf b/db/re/skill_db.conf
index ab104f3c..dd4d5da7 100644
--- a/db/re/skill_db.conf
+++ b/db/re/skill_db.conf
@@ -480,7 +480,18 @@ skill_db: (
Name: "MG_NAPALMBEAT"
Description: "Napalm Beat"
MaxLevel: 10
- Range: 9
+ Range: {
+ Lv1: 10
+ Lv2: 11
+ Lv3: 12
+ Lv4: 13
+ Lv5: 14
+ Lv6: 15
+ Lv7: 15
+ Lv8: 15
+ Lv9: 15
+ Lv10: 15
+ }
Hit: "BDT_SKILL"
SkillType: {
Enemy: true
@@ -489,25 +500,35 @@ skill_db: (
AllowReproduce: true
}
AttackType: "Magic"
- Element: "Ele_Ghost"
+ Element: "Ele_Neutral"
DamageType: {
SplashArea: true
- SplitDamage: true
}
- SplashRange: 1
+ SplashRange: {
+ Lv1: 2
+ Lv2: 3
+ Lv3: 3
+ Lv4: 4
+ Lv5: 4
+ Lv6: 5
+ Lv7: 5
+ Lv8: 5
+ Lv9: 5
+ Lv10: 5
+ }
InterruptCast: true
CastTime: 400
AfterCastActDelay: {
Lv1: 1000
- Lv2: 1000
- Lv3: 1000
- Lv4: 900
- Lv5: 900
- Lv6: 800
- Lv7: 800
- Lv8: 700
- Lv9: 600
- Lv10: 500
+ Lv2: 900
+ Lv3: 750
+ Lv4: 550
+ Lv5: 300
+ Lv6: 300
+ Lv7: 300
+ Lv8: 300
+ Lv9: 300
+ Lv10: 200
}
FixedCastTime: 100
Requirements: {
@@ -887,7 +908,7 @@ skill_db: (
{
Id: 18
Name: "MG_FIREWALL"
- Description: "Fire Wall"
+ Description: "Nature Wall"
MaxLevel: 10
Range: 9
Hit: "BDT_SKILL"
@@ -898,7 +919,7 @@ skill_db: (
AllowReproduce: true
}
AttackType: "Magic"
- Element: "Ele_Fire"
+ Element: "Ele_Nature"
InterruptCast: true
SkillInstances: 3
KnockBackTiles: 2
diff --git a/db/re/skill_tree.conf b/db/re/skill_tree.conf
index 940ea93a..8f26f66c 100644
--- a/db/re/skill_tree.conf
+++ b/db/re/skill_tree.conf
@@ -33,11 +33,9 @@ Viro: {
AC_OWL: 0
NV_BASIC: 0
NV_FIRSTAID: 0
- NV_TRICKDEAD: 0
WE_BABY: 0
WE_CALLPARENT: 0
WE_CALLBABY: 0
- ALL_INCCARRY: 0
MC_VENDING: 0
MC_PUSHCART: 0
ALL_BUYING_STORE: 0
@@ -73,7 +71,6 @@ Viro: {
AL_TELEPORT: 0
MG_SAFETYWALL: 0
WZ_QUAGMIRE: 0
- WZ_FROSTNOVA: 0
MO_BODYRELOCATION: 0
MO_CALLSPIRITS: 0
GN_HELLS_PLANT: 0
@@ -84,9 +81,50 @@ Viro: {
WE_FEMALE: 0
WE_CALLPARTNER: 0
MG_COLDBOLT: 0
- EVOL_MASS_PROVOKE: 0
EVOL_PHYSICAL_SHIELD: 0
EVOL_MONSTER_IDENTIFY: 0
+
+ SA_FREECAST: 0
+ ALL_FULL_THROTTLE: 0
+ SA_DRAGONOLOGY: 0
+ CR_TRUST: 0
+ SM_RECOVERY: 0
+ MG_SRECOVERY: 0
+ MC_MAMMONITE: 0
+ TF_DETOXIFY: 0
+ NV_TRICKDEAD: 0
+ HW_MAGICPOWER: 0
+ TF_POISON: 0
+ TF_BACKSLIDING: 0
+ MC_DISCOUNT: 0
+ GC_DARKILLUSION: 0
+ AC_CHARGEARROW: 0
+ AC_SHOWER: 0
+ ASC_METEORASSAULT: 0
+ SN_SHARPSHOOTING: 0
+ KN_AUTOCOUNTER: 0
+ AC_VULTURE: 0
+ MG_SOULSTRIKE: 0
+ MG_NAPALMBEAT: 0
+ SA_SEISMICWEAPON: 0
+ SN_WINDWALK: 0
+ MG_LIGHTNINGBOLT: 0
+ MG_FIREWALL: 0
+ SA_FLAMELAUNCHER: 0
+ MG_FIREBOLT: 0
+ MG_FIREBALL: 0
+ SO_FIREWALK: 0
+ SA_FROSTWEAPON: 0
+ MG_FROSTDIVER: 0
+ WZ_FROSTNOVA: 0
+ SM_PROVOKE: 0
+ EVOL_MASS_PROVOKE: 0
+ TF_STEAL: 0
+ MC_OVERCHARGE: 0
+ ALL_INCCARRY: 0
+ AL_HOLYLIGHT: 0
+ AL_HEAL: 0
+ AB_HIGHNESSHEAL: 0
}
}
@@ -98,11 +136,9 @@ CaveUkar: {
AC_OWL: 0
NV_BASIC: 0
NV_FIRSTAID: 0
- NV_TRICKDEAD: 0
WE_BABY: 0
WE_CALLPARENT: 0
WE_CALLBABY: 0
- ALL_INCCARRY: 0
MC_VENDING: 0
MC_PUSHCART: 0
ALL_BUYING_STORE: 0
@@ -138,7 +174,6 @@ CaveUkar: {
AL_TELEPORT: 0
MG_SAFETYWALL: 0
WZ_QUAGMIRE: 0
- WZ_FROSTNOVA: 0
MO_BODYRELOCATION: 0
MO_CALLSPIRITS: 0
GN_HELLS_PLANT: 0
@@ -149,9 +184,50 @@ CaveUkar: {
WE_FEMALE: 0
WE_CALLPARTNER: 0
MG_COLDBOLT: 0
- EVOL_MASS_PROVOKE: 0
EVOL_PHYSICAL_SHIELD: 0
EVOL_MONSTER_IDENTIFY: 0
+
+ SA_FREECAST: 0
+ ALL_FULL_THROTTLE: 0
+ SA_DRAGONOLOGY: 0
+ CR_TRUST: 0
+ SM_RECOVERY: 0
+ MG_SRECOVERY: 0
+ MC_MAMMONITE: 0
+ TF_DETOXIFY: 0
+ NV_TRICKDEAD: 0
+ HW_MAGICPOWER: 0
+ TF_POISON: 0
+ TF_BACKSLIDING: 0
+ MC_DISCOUNT: 0
+ GC_DARKILLUSION: 0
+ AC_CHARGEARROW: 0
+ AC_SHOWER: 0
+ ASC_METEORASSAULT: 0
+ SN_SHARPSHOOTING: 0
+ KN_AUTOCOUNTER: 0
+ AC_VULTURE: 0
+ MG_SOULSTRIKE: 0
+ MG_NAPALMBEAT: 0
+ SA_SEISMICWEAPON: 0
+ SN_WINDWALK: 0
+ MG_LIGHTNINGBOLT: 0
+ MG_FIREWALL: 0
+ SA_FLAMELAUNCHER: 0
+ MG_FIREBOLT: 0
+ MG_FIREBALL: 0
+ SO_FIREWALK: 0
+ SA_FROSTWEAPON: 0
+ MG_FROSTDIVER: 0
+ WZ_FROSTNOVA: 0
+ SM_PROVOKE: 0
+ EVOL_MASS_PROVOKE: 0
+ TF_STEAL: 0
+ MC_OVERCHARGE: 0
+ ALL_INCCARRY: 0
+ AL_HOLYLIGHT: 0
+ AL_HEAL: 0
+ AB_HIGHNESSHEAL: 0
}
}
@@ -163,11 +239,9 @@ FireKralog: {
AC_OWL: 0
NV_BASIC: 0
NV_FIRSTAID: 0
- NV_TRICKDEAD: 0
WE_BABY: 0
WE_CALLPARENT: 0
WE_CALLBABY: 0
- ALL_INCCARRY: 0
MC_VENDING: 0
MC_PUSHCART: 0
ALL_BUYING_STORE: 0
@@ -203,7 +277,6 @@ FireKralog: {
AL_TELEPORT: 0
MG_SAFETYWALL: 0
WZ_QUAGMIRE: 0
- WZ_FROSTNOVA: 0
MO_BODYRELOCATION: 0
MO_CALLSPIRITS: 0
GN_HELLS_PLANT: 0
@@ -214,9 +287,50 @@ FireKralog: {
WE_FEMALE: 0
WE_CALLPARTNER: 0
MG_COLDBOLT: 0
- EVOL_MASS_PROVOKE: 0
EVOL_PHYSICAL_SHIELD: 0
EVOL_MONSTER_IDENTIFY: 0
+
+ SA_FREECAST: 0
+ ALL_FULL_THROTTLE: 0
+ SA_DRAGONOLOGY: 0
+ CR_TRUST: 0
+ SM_RECOVERY: 0
+ MG_SRECOVERY: 0
+ MC_MAMMONITE: 0
+ TF_DETOXIFY: 0
+ NV_TRICKDEAD: 0
+ HW_MAGICPOWER: 0
+ TF_POISON: 0
+ TF_BACKSLIDING: 0
+ MC_DISCOUNT: 0
+ GC_DARKILLUSION: 0
+ AC_CHARGEARROW: 0
+ AC_SHOWER: 0
+ ASC_METEORASSAULT: 0
+ SN_SHARPSHOOTING: 0
+ KN_AUTOCOUNTER: 0
+ AC_VULTURE: 0
+ MG_SOULSTRIKE: 0
+ MG_NAPALMBEAT: 0
+ SA_SEISMICWEAPON: 0
+ SN_WINDWALK: 0
+ MG_LIGHTNINGBOLT: 0
+ MG_FIREWALL: 0
+ SA_FLAMELAUNCHER: 0
+ MG_FIREBOLT: 0
+ MG_FIREBALL: 0
+ SO_FIREWALK: 0
+ SA_FROSTWEAPON: 0
+ MG_FROSTDIVER: 0
+ WZ_FROSTNOVA: 0
+ SM_PROVOKE: 0
+ EVOL_MASS_PROVOKE: 0
+ TF_STEAL: 0
+ MC_OVERCHARGE: 0
+ ALL_INCCARRY: 0
+ AL_HOLYLIGHT: 0
+ AL_HEAL: 0
+ AB_HIGHNESSHEAL: 0
}
}
@@ -228,11 +342,9 @@ LightRaijin: {
AC_OWL: 0
NV_BASIC: 0
NV_FIRSTAID: 0
- NV_TRICKDEAD: 0
WE_BABY: 0
WE_CALLPARENT: 0
WE_CALLBABY: 0
- ALL_INCCARRY: 0
MC_VENDING: 0
MC_PUSHCART: 0
ALL_BUYING_STORE: 0
@@ -268,7 +380,6 @@ LightRaijin: {
AL_TELEPORT: 0
MG_SAFETYWALL: 0
WZ_QUAGMIRE: 0
- WZ_FROSTNOVA: 0
MO_BODYRELOCATION: 0
MO_CALLSPIRITS: 0
GN_HELLS_PLANT: 0
@@ -279,9 +390,50 @@ LightRaijin: {
WE_FEMALE: 0
WE_CALLPARTNER: 0
MG_COLDBOLT: 0
- EVOL_MASS_PROVOKE: 0
EVOL_PHYSICAL_SHIELD: 0
EVOL_MONSTER_IDENTIFY: 0
+
+ SA_FREECAST: 0
+ ALL_FULL_THROTTLE: 0
+ SA_DRAGONOLOGY: 0
+ CR_TRUST: 0
+ SM_RECOVERY: 0
+ MG_SRECOVERY: 0
+ MC_MAMMONITE: 0
+ TF_DETOXIFY: 0
+ NV_TRICKDEAD: 0
+ HW_MAGICPOWER: 0
+ TF_POISON: 0
+ TF_BACKSLIDING: 0
+ MC_DISCOUNT: 0
+ GC_DARKILLUSION: 0
+ AC_CHARGEARROW: 0
+ AC_SHOWER: 0
+ ASC_METEORASSAULT: 0
+ SN_SHARPSHOOTING: 0
+ KN_AUTOCOUNTER: 0
+ AC_VULTURE: 0
+ MG_SOULSTRIKE: 0
+ MG_NAPALMBEAT: 0
+ SA_SEISMICWEAPON: 0
+ SN_WINDWALK: 0
+ MG_LIGHTNINGBOLT: 0
+ MG_FIREWALL: 0
+ SA_FLAMELAUNCHER: 0
+ MG_FIREBOLT: 0
+ MG_FIREBALL: 0
+ SO_FIREWALK: 0
+ SA_FROSTWEAPON: 0
+ MG_FROSTDIVER: 0
+ WZ_FROSTNOVA: 0
+ SM_PROVOKE: 0
+ EVOL_MASS_PROVOKE: 0
+ TF_STEAL: 0
+ MC_OVERCHARGE: 0
+ ALL_INCCARRY: 0
+ AL_HOLYLIGHT: 0
+ AL_HEAL: 0
+ AB_HIGHNESSHEAL: 0
}
}
@@ -293,11 +445,9 @@ SeaTritan: {
AC_OWL: 0
NV_BASIC: 0
NV_FIRSTAID: 0
- NV_TRICKDEAD: 0
WE_BABY: 0
WE_CALLPARENT: 0
WE_CALLBABY: 0
- ALL_INCCARRY: 0
MC_VENDING: 0
MC_PUSHCART: 0
ALL_BUYING_STORE: 0
@@ -333,7 +483,6 @@ SeaTritan: {
AL_TELEPORT: 0
MG_SAFETYWALL: 0
WZ_QUAGMIRE: 0
- WZ_FROSTNOVA: 0
MO_BODYRELOCATION: 0
MO_CALLSPIRITS: 0
GN_HELLS_PLANT: 0
@@ -344,9 +493,50 @@ SeaTritan: {
WE_FEMALE: 0
WE_CALLPARTNER: 0
MG_COLDBOLT: 0
- EVOL_MASS_PROVOKE: 0
EVOL_PHYSICAL_SHIELD: 0
EVOL_MONSTER_IDENTIFY: 0
+
+ SA_FREECAST: 0
+ ALL_FULL_THROTTLE: 0
+ SA_DRAGONOLOGY: 0
+ CR_TRUST: 0
+ SM_RECOVERY: 0
+ MG_SRECOVERY: 0
+ MC_MAMMONITE: 0
+ TF_DETOXIFY: 0
+ NV_TRICKDEAD: 0
+ HW_MAGICPOWER: 0
+ TF_POISON: 0
+ TF_BACKSLIDING: 0
+ MC_DISCOUNT: 0
+ GC_DARKILLUSION: 0
+ AC_CHARGEARROW: 0
+ AC_SHOWER: 0
+ ASC_METEORASSAULT: 0
+ SN_SHARPSHOOTING: 0
+ KN_AUTOCOUNTER: 0
+ AC_VULTURE: 0
+ MG_SOULSTRIKE: 0
+ MG_NAPALMBEAT: 0
+ SA_SEISMICWEAPON: 0
+ SN_WINDWALK: 0
+ MG_LIGHTNINGBOLT: 0
+ MG_FIREWALL: 0
+ SA_FLAMELAUNCHER: 0
+ MG_FIREBOLT: 0
+ MG_FIREBALL: 0
+ SO_FIREWALK: 0
+ SA_FROSTWEAPON: 0
+ MG_FROSTDIVER: 0
+ WZ_FROSTNOVA: 0
+ SM_PROVOKE: 0
+ EVOL_MASS_PROVOKE: 0
+ TF_STEAL: 0
+ MC_OVERCHARGE: 0
+ ALL_INCCARRY: 0
+ AL_HOLYLIGHT: 0
+ AL_HEAL: 0
+ AB_HIGHNESSHEAL: 0
}
}
diff --git a/maps/re/001-3-2.mcache b/maps/re/001-3-2.mcache
index a3747e0f..4ac90083 100644
--- a/maps/re/001-3-2.mcache
+++ b/maps/re/001-3-2.mcache
Binary files differ
diff --git a/npc/000-2-3/nard.txt b/npc/000-2-3/nard.txt
index 5ecdab89..f99f1144 100644
--- a/npc/000-2-3/nard.txt
+++ b/npc/000-2-3/nard.txt
@@ -62,6 +62,7 @@ L_Checker:
L_Menu:
menu
lg("I feel ok."), L_Ok,
+ rif(islegacyaccount(), l("I only want to reach Artis, can we skip this?")), L_Skip,
l("Who's this Julia?"), L_Julia,
lg("I'm a bit sick..."), -;
@@ -219,6 +220,70 @@ L_ChefQuestComplete:
// Need to add a skill for the crew at this line.
mes "";
+L_Skip:
+ mesn;
+ mesq l("Oh noes! I can't believe it!");
+ next;
+ mesn;
+ mesq l("Well, I can bring you straight to Artis, but...");
+ next;
+ mesn;
+ mesc l("\"You will forsake items, quests and experience from the tuto-- %s from my whole crew and whatnot.\"", "##9"+l("*cough cough*")+"##1"), 1;
+ next;
+ mesn;
+ mesq l("Oh, and it is not only that.");
+ next;
+ mesn;
+ mesc l("\"This decision cannot be reverted. Which means you may have extreme difficulty and end up losing this char!\""), 1;
+ next;
+ mesn;
+ mesq l("And if that still wasn't enough to make you change your mind...");
+ next;
+ mesn;
+ mesc l("\"Deleting this char may (read: will) destroy the Legacy data associated to it!!\""), 1;
+ mesc l("i.e. Deleting the rEvolt char will delete the Legacy char associated to it. This includes levels and items."); // -- TRANSLATORS: i.e. = id est
+ next;
+ mesn;
+ mesq l("Are you absolutely, totally, certainly, completely sure, that you want a free, effortless ride to Artis, as weak and poorly equipped as you currently are?");
+ next;
+ mesc l("This decision cannot be reverted. Think with attention!"), 1;
+ select
+ l("Actually, lets do the tutorial."),
+ l("Lemme do Drasil Island!"),
+ l("YES, BRING ME TO ARTIS."),
+ l("I changed my mind.");
+ mes "";
+ if (@menu == 3) {
+ // Skip Drasil
+ setq ShipQuests_Julia, 2;
+ setq ShipQuests_Arpan, 3;
+ setq ShipQuests_Alige, 3;
+ setq ShipQuests_Peter, 15;
+ setq ShipQuests_Nard, 5; // NOTE: Completes the Beta
+ setq ShipQuests_Knife, 1;
+ setq ShipQuests_ArpanMoney, 3;
+ setq ShipQuests_Door, 1;
+ setq ShipQuests_Couwan, 2;
+ setq ShipQuests_TreasureChest, 1;
+ setq ShipQuests_Ale, 1;
+ setq ShipQuests_Astapolos, 1;
+ setq ShipQuests_Gulukan, 1;
+ setq ShipQuests_Jalad, 1;
+ setq ShipQuests_QMuller, 1;
+ setq ShipQuests_Tibbo, 1;
+ setq ShipQuests_Gugli, 2;
+ // Give Gado and Julia equal chances of winnning
+ setq ShipQuests_ChefGado, any(4,4,5,6);
+ // Automatically advance
+ mesc l("All Ship and Drasil Island Quests were auto-completed."), 1;
+ next;
+ goto L_Already;
+ }
+ mesn;
+ mesq l("Good! I was going to ask you if you wanted to help the crew search for some food and explore the island out there.");
+ next;
+ goto L_MenuQuest;
+
L_Already:
speech
l("I recommend you to take a nap on the inferior level, we will soon leave this place.");
diff --git a/npc/001-1/koga.txt b/npc/001-1/koga.txt
index e0c7eece..57d0938d 100644
--- a/npc/001-1/koga.txt
+++ b/npc/001-1/koga.txt
@@ -9,7 +9,7 @@
.@q=getq(General_Narrator);
speech
l("Ah, whom did you bring here?"),
- l("Isnt that the one Nard found on a float in the sea, with the sign of the Legion on his chest?");
+ l("Isn't that the one Nard found on a raft in the sea, with the sign of the Legion on it?");
next;
mesc l("Travel to woodlands?");
if (askyesno() == ASK_YES)
@@ -18,6 +18,7 @@
l("I hope they know what they are doing. So, come on board. I am looking forward to go back to Woodland, haven't been there for a while.");
next;
closeclientdialog;
+ setpcblock(PCBLOCK_MOVE, false);
setmount 0;
if (.@q == 1) {
warp "000-0-1", 26, 28;
@@ -26,12 +27,19 @@
warp "008-1-1", 33, 63;
dispbottom l("After a tiring, yet fast, travel by Koga, you arrive at @@.", l("Woodlands"));
}
+ else
+ {
+ // Return you to beach
+ setpcblock(PCBLOCK_MOVE, false);
+ setmount 0;
+ slide 200, 62;
+ }
close;
OnInit:
.bodytype = BODYTYPE_3;
- .distance = 4;
- .alwaysVisible = true;
+ .distance = 6;
+ //.alwaysVisible = true;
end;
}
diff --git a/npc/001-1/rowboat.txt b/npc/001-1/rowboat.txt
index 6400cc7d..a067b711 100644
--- a/npc/001-1/rowboat.txt
+++ b/npc/001-1/rowboat.txt
@@ -3,10 +3,16 @@
// Micksha, Toams
// Description:
// The rowboat, picking up the player on small beach in order to bring it to Koga.
-// TODO:
-// Check if the player who wants to enter the boat is the same as the one who called for the boat.
001-1,192,25,0 script #Rowboat NPC_ROWBOAT_STAND_WE,{
+ if (.caller != getcharid(3)) {
+ mesn;
+ mesq l("Oh, hello. I am just observing the whales.");
+ next;
+ mesn;
+ mesq l("Nobody told me anything about you, unfortunately.");
+ close;
+ }
speech S_LAST_BLANK_LINE | S_LAST_NEXT,
l("Oh, hi."),
@@ -14,10 +20,13 @@
l("Perhaps, and only perhaps, if you bring me the latter, I can bring you to a ship that will perhaps, and only perhaps, be able to bring you to Woodland."),
l("Do you have this commendatory letter?");
closeclientdialog();
- if (askyesno() == 1) {
+ if (askyesno() == ASK_YES) {
if (getq(General_Brotherhood) >= 2)
{
- slide 204, 62;
+ slide 227, 62;
+ //slide 204, 62;
+ .caller=0;
+ .clocks=gettimetick(2);
movenpc("#Rowboat", 192, 25);
setmount 1;
}
@@ -42,6 +51,8 @@ OnInit:
.bodytype = BODYTYPE_3;
.distance = 3;
.speed = 175;
+ .caller = 0;
+ .clocks = 0;
initpath "move", 202, 27,
"move", 213, 58,
diff --git a/npc/001-1/rowboathelper.txt b/npc/001-1/rowboathelper.txt
index a2311efb..efb93e8b 100644
--- a/npc/001-1/rowboathelper.txt
+++ b/npc/001-1/rowboathelper.txt
@@ -3,21 +3,24 @@
// Toams
// Description:
// helper scripts for rowboat usage
-// TODO:
-// make the script dialog different if there is no rowboat present at the cave
+// Notes:
+// Curious Hole bypass the cutscenes
// calling the Rowboat
001-1,200,60,0 script Curious Hole NPC_NO_SPRITE,{
- .@monadad = getq(ArtisQuests_MonaDad);
+ .@q = getq(General_Narrator);
- narrator(S_LAST_BLANK_LINE | S_LAST_NEXT,
- l("You see a curious hole behind some rocks"),
- l("'Hey anyone there?'"),
- l("..."),
- l("Altough you can't get rid of the feeling someone is listening on the other side, you don't get any replies"));
- if (.@monadad < 3)
+ mesc l("You see a curious hole behind some rocks.");
+ next;
+ mesn strcharinfo(0);
+ mesq l("Hey, anyone there?");
+ next;
+ mesc l("...");
+ next;
+ if (.@q < 2)
{
+ mesc l("Altough you can't get rid of the feeling someone is listening on the other side, you don't get any replies.");
close;
}
else
@@ -31,9 +34,26 @@
mesc l("Sagratha is great.");
next;
+ if (getvariableofnpc(.caller, "#Rowboat")) {
+ // Can you use it, or is it in grace time?
+ if (getvariableofnpc(.clocks, "#Rowboat") > gettimetick(2)) {
+ mesn;
+ mesq l("Please be patient. Someone else is using the rowboat right now.");
+ close;
+ }
+ // Rowboat already there, so change owner
+ mesn;
+ mesq l("Hello, a rowboat is already on the beach. You can use it.");
+ set(getvariableofnpc(.caller, "#Rowboat"), getcharid(3));
+ set(getvariableofnpc(.clocks, "#Rowboat"), gettimetick(2)+15);
+ close;
+ }
+ // Rowboat is at hideout, send it to you
speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
l("Hello, a rowboat is on his way to the beach. Please wait for a while for it to arrive.");
+ set(getvariableofnpc(.caller, "#Rowboat"), getcharid(3));
+ set(getvariableofnpc(.clocks, "#Rowboat"), gettimetick(2)+30);
doevent("#Rowboat::OnMoveToBeach");
close;
}
@@ -45,7 +65,7 @@ OnInit:
.distance = 1;
}
-
+// UNUSED
//unmounting the rowboat at eastern beach
001-1,202,62,0 script unmountrowboateast NPC_HIDDEN,1,1,{
diff --git a/npc/001-1/sophialla.txt b/npc/001-1/sophialla.txt
index 2e0a5c58..c26c3cbe 100644
--- a/npc/001-1/sophialla.txt
+++ b/npc/001-1/sophialla.txt
@@ -12,6 +12,7 @@
speech
l("Hello."),
l("Can't you see I am reading? Please go, please.");
+ // Please go, please? What?
close;
}
speech
@@ -26,7 +27,6 @@
mes "";
if (@menu == 2)
{
- // TODO: Tell to look for Henry TODO: Change curious eye conditional
speech
l("If you visit the sewers again... You'll find secret passages..."),
l("Look for the hideout, but tell no one about this. Then, say the password again.");
@@ -41,7 +41,17 @@
mesq l("I'm afraid you'll need to figure that out on your own.");
next;
mesn;
- mesq l("This password is very secret. I don't think you would learn it even if you rescued someone missing for weeks."); // FIXME: Provide a decent hint.
+ mesq l("This password is very secret. I don't think you would learn it even if you rescued someone missing for weeks.");
+ // Extra hint (TODO: Logic is crappy)
+ if (@sophiahalla_needhelp) {
+ next;
+ mesn;
+ mesq l("Actually, there is an ex-legion member whose daughter used to play nearby... How was she called? Mona I think?");
+ next;
+ mesn;
+ mesq l("...Ah! Nevermind, I was talking to myself.");
+ }
+ @sophiahalla_needhelp=true;
next;
mesc l("%s sighs.", .name$);
}
diff --git a/npc/001-3-2/_import.txt b/npc/001-3-2/_import.txt
index d70ece30..e627928d 100644
--- a/npc/001-3-2/_import.txt
+++ b/npc/001-3-2/_import.txt
@@ -2,3 +2,4 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
"npc/001-3-2/_warps.txt",
"npc/001-3-2/henry.txt",
+"npc/001-3-2/smuggler.txt",
diff --git a/npc/001-3-2/smuggler.txt b/npc/001-3-2/smuggler.txt
new file mode 100644
index 00000000..ccb0a31d
--- /dev/null
+++ b/npc/001-3-2/smuggler.txt
@@ -0,0 +1,78 @@
+// Evol scripts.
+// Author:
+// Micksha, Toams, Jesusalva
+// Description:
+// The rowboat, picking up the player on the fake pier and bringing them to
+// Argaes Westport.
+
+001-3-2,71,85,6 script Smuggler NPC_ROWBOAT_STAND_WE,{
+ function smugglerNotAuthorized;
+ function smugglerBoarding;
+ mesn;
+ mesq l("Hey dude, we actually have a pretty cool ship near Artis.");
+ next;
+ mesn;
+ mesq l("This lake may look natural, but it is not quite so. We're at sea level.");
+ next;
+ .@q=getq(ThiefQuests_Artis);
+ if (.@q < 3)
+ smugglerNotAuthorized();
+ mesn;
+ mesq l("Cool, right?");
+ next;
+ select
+ l("Yes."),
+ l("So? Will you bring me to Argaes?");
+ mes "";
+ if (@menu == 2)
+ smugglerBoarding();
+ close;
+
+function smugglerNotAuthorized {
+ mesn;
+ mesq l("We smuggle not only goods, but people too. If Henry gives me the word...");
+ next;
+ mesn;
+ mesq l("Hehehe... I've heard Hurnscald is wonderful at this time of the year!");
+ close;
+ return;
+}
+
+function smugglerBoarding {
+ mesn;
+ mesq l("Sure! Hold tight.");
+ next;
+ while (.lock)
+ {
+ mesn;
+ mesq l("Just let me finish this first...");
+ next;
+ }
+ setcam (76*32), (85*32);
+ closeclientdialog;
+ .lock=true;
+ setpcblock(PCBLOCK_MOVE, true);
+ npcwalkto(76, 85);
+ sleep2(1000);
+ setmount 1;
+ warp "001-1", 227, 62;
+ detachrid();
+ .dir = 2;
+ npcwalkto(71, 85);
+ sleep(1000);
+ .dir = 6;
+ .lock=false;
+ end;
+ return;
+}
+
+OnInit:
+ .bodytype = BODYTYPE_3;
+ .distance = 4;
+ .speed = 175;
+ .alwaysVisible = true;
+ .lock = false;
+ end;
+
+}
+
diff --git a/npc/008-1-1/_import.txt b/npc/008-1-1/_import.txt
index 4788f56c..c51a2b4e 100644
--- a/npc/008-1-1/_import.txt
+++ b/npc/008-1-1/_import.txt
@@ -2,6 +2,7 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
"npc/008-1-1/_mobs.txt",
"npc/008-1-1/_warps.txt",
+"npc/008-1-1/cutscene.txt",
"npc/008-1-1/galimatia.txt",
"npc/008-1-1/koga.txt",
"npc/008-1-1/morcant.txt",
diff --git a/npc/008-1-1/cutscene.txt b/npc/008-1-1/cutscene.txt
new file mode 100644
index 00000000..4d50ea1b
--- /dev/null
+++ b/npc/008-1-1/cutscene.txt
@@ -0,0 +1,180 @@
+// TMW Script
+// Author:
+// Jesusalva
+// Description:
+// Cutscenes for Main Story
+
+008-1-1,42,63,0 script #MQ2Cutscene NPC_HIDDEN,0,1,{
+ end;
+
+OnTouch:
+ .@q=getq(General_Narrator);
+ if (.@q != 2)
+ end;
+ if (getmap() != "008-1-1")
+ end;
+ // Cutscene time!
+ // m (from main quest) 02 map 1
+ .@mapn$="m021@"+getcharid(0);
+ .@mapx$="m022@"+getcharid(0);
+ // Build instance if it doesn't exists or has been reallocated
+ // (This only happens if you escape the map - edge case scenarios)
+ if (instanceowner(@mainquestinst) != getcharid(3)) {
+ @mainquestinst = instance_create("m102@a"+getcharid(0), getcharid(3), IOT_CHAR);
+ instance_attachmap("008-1-1", @mainquestinst, false, .@mapn$);
+ instance_attachmap("008-2-32", @mainquestinst, false, .@mapx$);
+ // Instance lasts 60 minutes
+ instance_set_timeout(3600, 3600, @mainquestinst);
+ instance_init(@mainquestinst);
+ } else {
+ // Restart instance timer if it already exists
+ instance_set_timeout(3600, 3600, @mainquestinst);
+ }
+ getmapxy(.@m$, .@x, .@y, 0);
+ warp(.@mapn$, .@x, .@y);
+ addtimer(500, instance_npcname(.name$, @mainquestinst)+"::OnBegin");
+ end;
+
+OnBegin:
+ .@n$=instance_npcname(.name$);
+ .@mc$=instance_npcname("Morcant");
+
+ // Freeze player
+ // (M+ may render this incorrectly but it is not my job to care with that)
+ setpcblock(PCBLOCK_ATTACK|PCBLOCK_SKILL|PCBLOCK_USEITEM|PCBLOCK_MOVE, true);
+ sc_start(SC_STUN, 360000, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK);
+
+ // Begin moving Morcant
+ npcwalkto(58, 64, .@mc$);
+ sleep2(3000);
+ getmapxy(.@m$, .@x, .@y, 0);
+ npcwalkto(.@x + 1, .@y, .@mc$);
+ sleep2(1000);
+ unitwarp(getnpcid(.@mc$), .@m$, .@x + 1, .@y); // FIXME PLACEHOLDER
+ npctalk l("Hoho!"), .@mc$;
+ sleep2(2500);
+ npctalk l("Look what the shore brought me!"), .@mc$;
+ sleep2(3000);
+ npctalk l("Rarely anyone uses this port."), .@mc$;
+ sleep2(3000);
+ npctalk l("...Well, anyone adhering to the law, at least! Hahahah!"), .@mc$;
+ sleep2(3000);
+ npctalk l("Anyway, come in! You must be hungry."), .@mc$;
+ sleep2(3000);
+ npcwalkto(51, 57, .@mc$);
+ sleep2(1000);
+ sc_end(SC_STUN);
+ setpcblock(PCBLOCK_ATTACK|PCBLOCK_SKILL|PCBLOCK_USEITEM|PCBLOCK_MOVE, false);
+ dispbottom col(l("1-1. Follow Morcant into his house."), 1);
+ sleep2(500);
+ .@mapx$="m022@"+getcharid(0);
+ unitwarp(getnpcid(.@mc$), .@mapx$, 40, 24);
+ end;
+}
+
+// Series 2
+008-1-1,51,58,0 script #MQ2Cutscene2 NPC_HIDDEN,0,1,{
+ end;
+OnTouch:
+ if (getmap() == "008-1-1") end;
+ .@n$=instance_npcname(.name$);
+ .@mapx$="m022@"+getcharid(0);
+ warp(.@mapx$, 40, 36);
+ addtimer(3000, .@n$+"::OnStunlock");
+ end;
+
+OnStunlock:
+ .@n$=instance_npcname(.name$);
+ addtimer(300, .@n$+"::OnBegin");
+ // Freeze player
+ // (M+ may render this incorrectly but it is not my job to care with that)
+ setpcblock(PCBLOCK_ATTACK|PCBLOCK_SKILL|PCBLOCK_USEITEM|PCBLOCK_MOVE, true);
+ sc_start(SC_STUN, 360000, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK);
+ end;
+
+OnBegin:
+ .@n$=instance_npcname(.name$);
+ .@mc$=instance_npcname("Morcant");
+ .@tm$=instance_npcname("Thamas");
+ npctalk l("Welcome to my humble abode."), .@mc$;
+ sleep2(500);
+ npctalk lg("Who is that fellow?"), .@tm$;
+ sleep2(2500);
+ npctalk l("Thamas, this is a stowaway who reached here from Artis."), .@mc$;
+ sleep2(2500);
+ npctalk lg("Yes, I remember her.", "Yes, I remember him."), .@tm$;
+ sleep2(3000);
+ npctalk l("Anyway, I assume you're trying to get into Hurnscald?"), .@mc$;
+ sleep2(2100);
+ npctalk l("Really? You should be careful, then."), .@tm$;
+ sleep2(2500);
+ npctalk l("Hurnscald is under the domain of the Brotherhood."), .@tm$;
+ sleep2(3000);
+ npctalk l("Shaddy fellas, I do not trust them the sightliest."), .@tm$;
+ sleep2(3500);
+ npctalk l("*ahem*!"), .@mc$;
+ sleep2(2000);
+ npctalk l("Hurnscald is just east of here."), .@mc$;
+ sleep2(2000);
+ npctalk l("Keep following the road, you can't miss it."), .@mc$;
+ sleep2(3000);
+ npctalk l("Do not venture into south, though."), .@mc$;
+ sleep2(2000);
+ npctalk l("It is haunted."), .@mc$;
+ sleep2(2500);
+ //atcommand("@refresh"); // FIXME -> Hercules upstream broke @refresh
+ // TODO FIXME: Check if x-1 is a collision, move to x+1 if it is
+ getmapxy(.@m$, .@x, .@y, 0);
+ npcwalkto(.@x - 1, .@y, .@mc$);
+ sleep2(1000);
+ unitwarp(getnpcid(.@mc$), .@m$, .@x - 1, .@y); // FIXME PLACEHOLDER
+ npctalk col(l("*Hey, psst.*"), 9), .@mc$;
+ sleep2(1000);
+ npctalk col(l("*I assume you're here for the Brotherhood, right?*"), 9), .@mc$;
+ sleep2(2500);
+ npctalk col(l("*Reaching Hurnscald, look for a girl called Airlia.*"), 9), .@mc$;
+ sleep2(2500);
+ npctalk col(l("*Whisper her the... password, and she'll lead you to Jonatas.*"), 9), .@mc$;
+ sleep2(3100);
+ npctalk col(l("*I don't know why Sophiahalla sent you here...*"), 9), .@mc$;
+ sleep2(2200);
+ npctalk col(l("*But I am just a retired merchant, hohoho!*"), 9), .@mc$;
+ sleep2(2200);
+ npctalk l("Anyway, that's it. Here, have a bowl of stew, Morcant special!"), .@mc$;
+ sleep2(2500);
+ npctalk l("I'll be back to the port, so see you later!"), .@mc$;
+ npcwalkto(40, 38, .@mc$);
+ sleep2(2000);
+ .@mapx$="m021@"+getcharid(0);
+ unitwarp(getnpcid(.@mc$), .@mapx$, 51, 58);
+ sc_end(SC_STUN);
+ setpcblock(PCBLOCK_ATTACK|PCBLOCK_SKILL|PCBLOCK_USEITEM|PCBLOCK_MOVE, false);
+ sleep2(1000);
+ getmapxy(.@m$, .@x, .@y, 0);
+ warp "008-2-32", .@x, .@y;
+ getitembound SailorStew, 1, IBT_ACCOUNT;
+ setq General_Narrator, 3;
+ end;
+}
+
+// WHAT ARE YOU DOING
+008-1-1,83,65,0 script #MQ2CutsceneWAYD NPC_HIDDEN,0,10,{
+ end;
+
+OnTouch:
+ if (getmap() == "008-1-1") end;
+ // What are you doing?!
+ slide 51, 63;
+ mesc l("I really should follow Morcant into his house.");
+ close;
+}
+
+008-2-32,40,37,0 script #MQ2Cutscene2WAYD NPC_HIDDEN,1,0,{
+ end;
+OnTouch:
+ if (getmap() == "008-2-32") end;
+ slide 40, 36;
+ dispbottom l("But you just arrived! Seriously. Stop.");
+ end;
+}
+
diff --git a/npc/008-1-1/koga.txt b/npc/008-1-1/koga.txt
index 26f12772..34bc75fc 100644
--- a/npc/008-1-1/koga.txt
+++ b/npc/008-1-1/koga.txt
@@ -6,6 +6,10 @@
// THIS IS A PLACEHOLDER!
008-1-1,30,60,0 script Koga#008-1-1 NPC_KOGA,{
+ function kogaWrongMap;
+ if (getmap() != "008-1-1")
+ kogaWrongMap();
+
speech
l("So, finally, we are here."),
l("Do you want to go back to Artis? You really should be afraid of the Legion there, now that you have been here in Woodland. They somehow smell the odor of the Brotherhood.");
@@ -20,6 +24,11 @@
}
close;
+function kogaWrongMap {
+ mesc l("I've just arrived here. I should enter in Morcant's house I guess.");
+ close;
+}
+
OnInit:
.bodytype = BODYTYPE_3;
.distance = 4;
diff --git a/npc/008-1-1/morcant.txt b/npc/008-1-1/morcant.txt
index e5560730..7735714d 100644
--- a/npc/008-1-1/morcant.txt
+++ b/npc/008-1-1/morcant.txt
@@ -11,10 +11,44 @@
l("My name is Morcant. I am a Captain, a bit bored since this harbor is not frequented much."),
l("I would like to offer you food and tell you stories, but.. have you ever heard of WildX? I won't need to say more, do I?");
+ next;
+ select
+ l("Not really but okay...?"),
+ l("Actually, I am after your Stew recipe!"),
+ l("Anything to do around these parts?"),
+ l("Can you tell me the directions again?");
+ mes "";
+ switch (@menu)
+ {
+ case 2:
+ mesn;
+ mesq l("Hohoho! That is a family's trade secret!");
+ break;
+ case 3:
+ mesn;
+ mesq l("Hmm, you might want to ask Galimatia, my neighbor.");
+ next;
+ mesn;
+ mesq l("She is always taking care of her bees, though.");
+ break;
+ case 4:
+ mesn;
+ mesq l("There should be a fair number of signposts around. Anyway.");
+ next;
+ mesn;
+ mesq l("Go east to reach Hurnscald. Just follow the road, really.");
+ next;
+ mesn;
+ mesq l("And do not go south. It is haunted.");
+ break;
+ }
close;
OnInit:
+OnInstanceInit:
.bodytype = BODYTYPE_3;
- .distance = 2;
+ .distance = 4;
+ .speed=120;
+ //.alwaysVisible=true;
end;
}
diff --git a/npc/008-1/auldsbel.txt b/npc/008-1/auldsbel.txt
index 7ee1994b..7f0bc2b1 100644
--- a/npc/008-1/auldsbel.txt
+++ b/npc/008-1/auldsbel.txt
@@ -22,18 +22,28 @@
}
speech
l("Hello."),
- l("Oh, you look more interested in magic.. the brotherhood did forbid most of the interesting paths of magic, but boring baby spells are still allowed."),
- lg("If you come back later, I may teach you something. But psst, practising magic is quite dangerous these days.");
-
- // Placeholder please remove
- if (debug) {
+ l("Oh, you look more interested in magic.. the brotherhood did forbid most of the interesting paths of magic, but boring baby spells are still allowed.");
+ // Give poor Auldsbel some weak magic D:
+ if (!MAGIC_CLU[EVOL_MONSTER_IDENTIFY]) {
mesn;
mesq l("May I interest you in an useless skill?");
+ ShowAbizit(true);
+ next;
+ mesc l("Identify Monsters - Unlocks the %s chat command.", "##B/mi##b");
+ mesc l("It will analyse and inform about the monster stats and drops.");
+ mesc l("If multiple monsters have same name, all of them will be listed.");
+ mesc l("Alias: %s", "##B@monsterinfo##b");
next;
+ mesn;
+ mesq l("May I interest you in an useless skill?");
+ mesc l("Skill: %s", getskillname(EVOL_MONSTER_IDENTIFY));
+ // FIXME You know that learn_magic has its own prompt, right?
if (askyesno() == ASK_YES) {
learn_magic(EVOL_MONSTER_IDENTIFY);
}
- ShowAbizit(true);
+ } else {
+ mesn;
+ mesq lg("If you come back later, I may teach you something. But psst, practising magic is quite dangerous these days.");
}
close;
diff --git a/npc/008-2-10/airlia.txt b/npc/008-2-10/airlia.txt
index 05df3ef2..fae76efb 100644
--- a/npc/008-2-10/airlia.txt
+++ b/npc/008-2-10/airlia.txt
@@ -9,8 +9,20 @@
speech
l("Hello."),
l("Do you know where the graveyard is?"),
- lg("No? Better is that. Its so dangerous there.");
+ lg("No? Better that way. It's so dangerous there.");
+ next;
+ select
+ l("Okay, thanks."),
+ l("*whisper* Sagratha is great.");
+ mes "";
+ if (@menu == 2) {
+ mesn;
+ mesq l("Ah, uhm, erm. The Governor is busy arguing with the rest of the team.");
+ next;
+ mesn;
+ mesq l("I'm afraid you'll need to wait them to reach a consensus first, before he can met with you.");
+ }
close;
OnInit:
diff --git a/npc/008-2-32/thamas.txt b/npc/008-2-32/thamas.txt
index 42871ec6..a860e562 100644
--- a/npc/008-2-32/thamas.txt
+++ b/npc/008-2-32/thamas.txt
@@ -11,10 +11,66 @@
l("I am a legion soldier who never talks much, until Jesusalva or WildX puts words in my mouth."),
l("Until then, let me be quiet. Talk to you later.");
+ next;
+ select
+ l("Okay, sorry for disturbing."),
+ l("But you said you remember me!"),
+ l("What do you think about this stew?"),
+ l("Where are you from, though? You have an odd... behavior."),
+ l("What is a legion soldier even doing here?"),
+ l("Who are Jesusalva and WildX?");
+ mes "";
+ switch (@menu)
+ {
+ case 2:
+ mesn;
+ mesq l("And I do. We were on the same ship a few times.");
+ next;
+ mesn;
+ mesq l("You stood out and I stayed on my corner. That's all.");
+ next;
+ mesn;
+ mesq l("Stop making questions which make no sense...");
+ break;
+ case 3:
+ mesn;
+ mesq l("Eh? It is okay, I guess.");
+ next;
+ mesn;
+ mesq l("I hear if you get a recipe book, you could cook things yourself.");
+ next;
+ mesn;
+ mesq l("Maybe someone in Hurnscald makes these books. I don't really care.");
+ next;
+ mesn;
+ mesq l("Stop making questions which make no sense...");
+ break;
+ case 4:
+ mesn;
+ mesq l("I'm from Esperia.");
+ next;
+ mesn;
+ mesq l("It would be tiring to describe the wonders of my hometown.");
+ next;
+ mesn;
+ mesq l("Why don't you look an article about it on this [%s|tour guide%s], instead?", "@@https://wiki.themanaworld.org/index.php/Esperia", "@@");
+ next;
+ mesn;
+ mesq l("Stop making questions which make no sense...");
+ break;
+ case 5:
+ case 6:
+ mesn;
+ mesq l("Honestly? I don't know.");
+ next;
+ mesn;
+ mesq l("Stop making questions which make no sense...");
+ break;
+ }
close;
OnInit:
.bodytype = BODYTYPE_3;
- .distance = 2;
+ .distance = 4;
end;
}
diff --git a/npc/config/magic.txt b/npc/config/magic.txt
index 3fbafbdf..dbe665a6 100644
--- a/npc/config/magic.txt
+++ b/npc/config/magic.txt
@@ -19,11 +19,6 @@
// Array of (skill ID, Level) for sk_canlevelup
-// PLACEHOLDER
-function script getskillname {
- return getarg(0);
-}
-
// This function will add MAGIC_EXP
// And manage last skills used memory
// GetManaExp(SkillID, EXP Points)
@@ -282,11 +277,174 @@ function script RegisterMagic {
OnInit:
/* RegisterMagic(MSP, Skill, MaxLv, Item, Amount,
Class, Cost, {PreReq, PostReq}) */
+ // (B) - Brawling
+ // (A) - Active
+ // (R) - Ranged (bows only)
+ // (M) - Magic
+ // (S) - Support
+ // (T) - Terrain
+ // (G) - GP on usage
+ // (P) - Passive
+ // (X) - Area Of Effect
//////////////////////// Other: Misc
// Monster Identify
RegisterMagic(0, EVOL_MONSTER_IDENTIFY, 1, Beer, 1,
CLASS_OTHER, 5000);
+ // Bash (B)
+ RegisterMagic(0, SM_BASH, 1, MagicFeather, 1,
+ CLASS_OTHER, 0);
+ // Free Cast (P)
+ RegisterMagic(0, SA_FREECAST, 1, MagicFeather, 1,
+ CLASS_OTHER, 0);
+ // Full Throttle (A)
+ RegisterMagic(0, ALL_FULL_THROTTLE, 1, MagicFeather, 1,
+ CLASS_OTHER, 0);
+
+
+ //////////////////////// Master Skill Book: Skills
+ // These skills are handled by the Master Skill Book
+ // So the definition here is duplicate.
+ // Dragon Slayer (P)
+ RegisterMagic(0, SA_DRAGONOLOGY, 1, MagicFeather, 1,
+ CLASS_MASTER, 0);
+ // HP/DEF Boosting (P)
+ RegisterMagic(0, CR_TRUST, 1, MagicFeather, 1,
+ CLASS_MASTER, 0);
+ // HP Recovery (P)
+ RegisterMagic(0, SM_RECOVERY, 1, MagicFeather, 1,
+ CLASS_MASTER, 0);
+ // MP Recovery (P)
+ RegisterMagic(0, MG_SRECOVERY, 1, MagicFeather, 1,
+ CLASS_MASTER, 0);
+ // Mammonite (G)
+ RegisterMagic(0, MC_MAMMONITE, 1, MagicFeather, 1,
+ CLASS_MASTER, 0);
+ // Anti-Poison (A)
+ RegisterMagic(0, TF_DETOXIFY, 1, MagicFeather, 1,
+ CLASS_MASTER, 0);
+ // Trick Dead (A)
+ RegisterMagic(0, NV_TRICKDEAD, 1, MagicFeather, 1,
+ CLASS_MASTER, 0);
+ // Sudden Attack (A)
+ RegisterMagic(0, GC_DARKILLUSION, 1, MagicFeather, 1,
+ CLASS_MASTER, 0);
+
+ //////////////////////// Master Skill Book: Spells
+ // MATK Charge (A)
+ RegisterMagic(0, HW_MAGICPOWER, 1, MagicFeather, 1,
+ CLASS_MASTER, 0);
+ // Poison (?)
+ RegisterMagic(0, TF_POISON, 1, MagicFeather, 1,
+ CLASS_MASTER, 0);
+ // Backslide (A)
+ RegisterMagic(0, TF_BACKSLIDING, 1, MagicFeather, 1,
+ CLASS_MASTER, 0);
+ // Discount (P)
+ RegisterMagic(0, MC_DISCOUNT, 1, MagicFeather, 1,
+ CLASS_MASTER, 0);
+
+
+ //////////////////////// War Magic: Skills
+ // Charged Shot (R)
+ RegisterMagic(1, AC_CHARGEARROW, 1, MagicFeather, 1,
+ CLASS_WAR, 0);
+ // Arrow Shower (RX)
+ RegisterMagic(1, AC_SHOWER, 1, MagicFeather, 1,
+ CLASS_WAR, 0);
+ // Ground Strike (AX)
+ RegisterMagic(1, ASC_METEORASSAULT, 1, MagicFeather, 1,
+ CLASS_WAR, 0);
+ // Sharp Shooter (R)
+ RegisterMagic(1, SN_SHARPSHOOTING, 1, MagicFeather, 1,
+ CLASS_WAR, 0);
+ // Critical Counter Attack (A)
+ RegisterMagic(1, KN_AUTOCOUNTER, 1, MagicFeather, 1,
+ CLASS_WAR, 0);
+ // Mallard's Eye (PR)
+ RegisterMagic(1, AC_VULTURE, 1, MagicFeather, 1,
+ CLASS_WAR, 0);
+
+ //////////////////////// War Magic: Spells
+ // Soul Strike (M)
+ RegisterMagic(1, MG_SOULSTRIKE, 1, MagicFeather, 1,
+ CLASS_WAR, 0);
+ // Napalm Beat (MX)
+ RegisterMagic(1, MG_NAPALMBEAT, 1, MagicFeather, 1,
+ CLASS_WAR, 0);
+
+
+ //////////////////////// Nature Magic: Skills
+ // Nature Weapon (S)
+ RegisterMagic(1, SA_SEISMICWEAPON, 1, MagicFeather, 1,
+ CLASS_NATURE, 0);
+ // Wind Walker (A)
+ RegisterMagic(1, SN_WINDWALK, 1, MagicFeather, 1,
+ CLASS_NATURE, 0);
+ //////////////////////// Nature Magic: Spells
+ // Lightning Arrow (M)
+ RegisterMagic(1, MG_LIGHTNINGBOLT, 1, MagicFeather, 1,
+ CLASS_NATURE, 0);
+ // Nature Wall (T)
+ RegisterMagic(1, MG_FIREWALL, 1, MagicFeather, 1,
+ CLASS_NATURE, 0);
+
+
+ //////////////////////// Fire Magic: Skills
+ // Fire Weapon (S)
+ RegisterMagic(1, SA_FLAMELAUNCHER, 1, MagicFeather, 1,
+ CLASS_FIRE, 0);
+ //////////////////////// Fire Magic: Spells
+ // Fire Arrow (M)
+ RegisterMagic(1, MG_FIREBOLT, 1, MagicFeather, 1,
+ CLASS_FIRE, 0);
+ // Fire Ball (MX)
+ RegisterMagic(1, MG_FIREBALL, 1, MagicFeather, 1,
+ CLASS_FIRE, 0);
+ // Fire Walk (MX)
+ RegisterMagic(2, SO_FIREWALK, 1, MagicFeather, 1,
+ CLASS_FIRE, 0);
+
+
+ //////////////////////// Water Magic: Skills
+ // Frost Weapon (S)
+ RegisterMagic(1, SA_FROSTWEAPON, 1, MagicFeather, 1,
+ CLASS_WATER, 0);
+ //////////////////////// Water Magic: Spells
+ // Frost Diver (M)
+ RegisterMagic(1, MG_FROSTDIVER, 1, MagicFeather, 1,
+ CLASS_WATER, 0);
+ // Frost Nova (MX)
+ RegisterMagic(2, WZ_FROSTNOVA, 1, MagicFeather, 1,
+ CLASS_WATER, 0);
+
+
+ //////////////////////// Harmony Magic: Skills
+ // Provoke (A)
+ RegisterMagic(1, SM_PROVOKE, 1, MagicFeather, 1,
+ CLASS_HARMONY, 0);
+ // Mass Provoke (A)
+ RegisterMagic(1, EVOL_MASS_PROVOKE, 1, MagicFeather, 1,
+ CLASS_HARMONY, 0);
+ // Stealing (A)
+ RegisterMagic(1, TF_STEAL, 1, MagicFeather, 1,
+ CLASS_HARMONY, 0);
+ // Barter (P)
+ RegisterMagic(1, MC_OVERCHARGE, 1, MagicFeather, 1,
+ CLASS_HARMONY, 0);
+ // Backpack Floating (P)
+ RegisterMagic(1, ALL_INCCARRY, 1, MagicFeather, 1,
+ CLASS_HARMONY, 0);
+ //////////////////////// Harmony Magic: Spells
+ // Holy Light (M)
+ RegisterMagic(1, AL_HOLYLIGHT, 1, MagicFeather, 1,
+ CLASS_HARMONY, 0);
+ // Healing (MS)
+ RegisterMagic(1, AL_HEAL, 1, MagicFeather, 1,
+ CLASS_HARMONY, 0);
+ // High Healing (MS)
+ RegisterMagic(2, AB_HIGHNESSHEAL, 1, MagicFeather, 1,
+ CLASS_HARMONY, 0);
end;
}
diff --git a/npc/functions/quest-debug/100-General_Narrator.txt b/npc/functions/quest-debug/100-General_Narrator.txt
index 37a674c5..a88f5d6a 100644
--- a/npc/functions/quest-debug/100-General_Narrator.txt
+++ b/npc/functions/quest-debug/100-General_Narrator.txt
@@ -15,7 +15,8 @@ function script QuestDebug100 {
GenericQuestDebug General_Narrator,
l("Game introduction"), 0,
l("Arrived in Artis"), 1,
- l("Arrived in Argaes"), 2;
+ l("Arrived in Argaes"), 2,
+ l("Sent to Airlia"), 3;
if (@menuret < 0)
{
diff --git a/npc/items/master_skillbook.txt b/npc/items/master_skillbook.txt
index d5ded1de..efd582a4 100644
--- a/npc/items/master_skillbook.txt
+++ b/npc/items/master_skillbook.txt
@@ -4,7 +4,7 @@
// Elvano
// Description:
// Contains master skills which can only be learnt after killing boss
-// See also: <link to tmw forum topic>
+// See also: https://forums.themanaworld.org/viewtopic.php?f=2&t=19918
// Notes:
// Not exactly as Elvano proposal. I actually care for restrictions you know...
// Variables:
@@ -27,6 +27,8 @@
// TODO: Reset @mb_* when register_skill() finish
// TODO: You cannot get Magic Feather anywhere in the game (yet)
// TODO: See if the time (15s) is enough.
+// TODO: Skill level up
+// TODO: Use the data supplied by magic.txt
- script #MasterBook NPC_HIDDEN,{