Skip to content

Commit 024ee34

Browse files
committed
fix: keep similar idkit values when changing gender
1 parent 5179db5 commit 024ee34

3 files changed

Lines changed: 28 additions & 11 deletions

File tree

data/src/scripts/areas/area_falador/scripts/makeover_mage.rs2

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,15 @@ if_openmain(makeover_mage);
4646
[if_button,makeover_mage:com_101] %option2 = 8;
4747

4848
[if_button,makeover_mage:com_89]
49-
if (%option1 = 0 | %option2 = 0) {
50-
mes("You must make a selection from both categories."); // guess based off thessalia
49+
if (%option1 = 0 & %option2 = 0) {
50+
mes("You haven't changed anything."); // current OSRS
5151
return;
5252
}
5353

54+
// https://youtu.be/sKxvSaYuAYU?si=gYlSZJQC4rp9dAY0&t=136
5455
if_close;
55-
setgender(calc(%option1 - 1));
56-
setskincolour(calc(%option2 - 1));
56+
if(%option1 > 0) setgender(calc(%option1 - 1));
57+
if(%option2 > 0) setskincolour(calc(%option2 - 1));
5758

5859
buildappearance(worn);
5960
inv_del(inv, coins, 3000);

src/engine/entity/Player.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,24 @@ export default class Player extends PathingEntity {
112112
[4550, 4537, 5681, 5673, 5790, 6806, 8076, 4574]
113113
];
114114

115+
static readonly MALE_FEMALE_MAP = new Map<number, number>([
116+
[0, 45], [1, 47], [2, 48], [3, 49], [4, 50], [5, 51], [6, 52], [7, 53], [8, 54], [9, 55],
117+
[18, 56], [19, 56], [20, 56], [21, 56], [22, 56], [23, 56], [24, 56], [25, 56],
118+
[26, 61], [27, 63], [28, 62], [29, 65], [30, 64], [31, 63], [32, 66],
119+
[33, 67], [34, 68], [35, 69],
120+
[36, 70], [37, 71], [38, 72], [39, 76], [40, 75], [41, 78],
121+
[42, 79], [43, 80], [44, 81]
122+
]);
123+
124+
static readonly FEMALE_MALE_MAP = new Map<number, number>([
125+
[45, 0], [46, 0], [47, 1], [48, 2], [49, 3], [50, 4], [51, 5], [52, 6], [53, 7], [54, 8], [55, 9],
126+
[56, 18], [57, 18], [58, 18], [59, 18], [60, 18],
127+
[61, 26], [62, 27], [63, 28], [64, 29], [65, 29], [66, 32],
128+
[67, 33], [68, 34], [69, 35],
129+
[70, 36], [71, 37], [72, 38], [73, 36], [74, 36], [75, 40], [76, 39], [77, 36], [78, 41],
130+
[79, 42], [80, 43], [81, 44]
131+
]);
132+
115133
save() {
116134
const sav = Packet.alloc(1);
117135
sav.p2(0x2004); // magic

src/engine/script/handlers/PlayerOps.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -993,14 +993,12 @@ const PlayerOps: CommandHandlers = {
993993

994994
[ScriptOpcode.SETGENDER]: (state) => {
995995
const gender = check(state.popInt(), GenderValid);
996-
// convert idkit
996+
// convert idkit, have to use a mapping cause order + there's not always an equivalence
997997
for (let i = 0; i < 7; i++) {
998-
state.activePlayer.body[i] = -1;
999-
for (let j = 0; j < IdkType.count; j++) {
1000-
if (!IdkType.get(j).disable && IdkType.get(j).type == i + (gender === 0 ? 0 : 7)) {
1001-
state.activePlayer.body[i] = j;
1002-
break;
1003-
}
998+
if(gender === 1) {
999+
state.activePlayer.body[i] = Player.MALE_FEMALE_MAP.get(state.activePlayer.body[i]) ?? -1;
1000+
} else {
1001+
state.activePlayer.body[i] = Player.FEMALE_MALE_MAP.get(state.activePlayer.body[i]) ?? -1;
10041002
}
10051003
}
10061004
state.activePlayer.gender = gender;

0 commit comments

Comments
 (0)