-
Notifications
You must be signed in to change notification settings - Fork 0
/
header_items.py
396 lines (317 loc) · 16.7 KB
/
header_items.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
###################################################
# header items.py
# This file contains declarations for items
# DO NOT EDIT THIS FILE!
###################################################
from header_common import *
from header_item_modifiers import *
# item flags
itp_type_horse = 0x0000000000000001
itp_type_one_handed_wpn = 0x0000000000000002
itp_type_two_handed_wpn = 0x0000000000000003
itp_type_polearm = 0x0000000000000004
itp_type_arrows = 0x0000000000000005
itp_type_bolts = 0x0000000000000006
itp_type_shield = 0x0000000000000007
itp_type_bow = 0x0000000000000008
itp_type_crossbow = 0x0000000000000009
itp_type_thrown = 0x000000000000000a
itp_type_goods = 0x000000000000000b
itp_type_head_armor = 0x000000000000000c
itp_type_body_armor = 0x000000000000000d
itp_type_foot_armor = 0x000000000000000e
itp_type_hand_armor = 0x000000000000000f
itp_type_pistol = 0x0000000000000010
itp_type_musket = 0x0000000000000011
itp_type_bullets = 0x0000000000000012
itp_type_animal = 0x0000000000000013
itp_type_book = 0x0000000000000014
itp_force_attach_left_hand = 0x0000000000000100
itp_force_attach_right_hand = 0x0000000000000200
itp_force_attach_left_forearm = 0x0000000000000300
itp_attach_armature = 0x0000000000000f00
itp_attachment_mask = 0x0000000000000f00
itp_unique = 0x0000000000001000
itp_always_loot = 0x0000000000002000
itp_no_parry = 0x0000000000004000
itp_default_ammo = 0x0000000000008000
itp_merchandise = 0x0000000000010000
itp_wooden_attack = 0x0000000000020000
itp_wooden_parry = 0x0000000000040000
itp_food = 0x0000000000080000
itp_cant_reload_on_horseback = 0x0000000000100000
itp_two_handed = 0x0000000000200000
itp_primary = 0x0000000000400000 # for weapons
itp_replaces_helm = 0x0000000000400000 # for armor, allows body armor items which include helmet
itp_secondary = 0x0000000000800000 # for weapons
itp_replaces_shoes = 0x0000000000800000 # for armor, allows body armor items which include boots
itp_covers_legs = 0x0000000001000000
itp_doesnt_cover_hair = 0x0000000001000000
itp_can_penetrate_shield = 0x0000000001000000
itp_consumable = 0x0000000002000000
itp_bonus_against_shield = 0x0000000004000000
itp_penalty_with_shield = 0x0000000008000000
itp_cant_use_on_horseback = 0x0000000010000000
itp_civilian = 0x0000000020000000
itp_next_item_as_melee = 0x0000000020000000
itp_fit_to_head = 0x0000000040000000
itp_offset_lance = 0x0000000040000000
itp_covers_head = 0x0000000080000000
itp_couchable = 0x0000000080000000
itp_crush_through = 0x0000000100000000
#itp_knock_back = 0x0000000200000000 being used?
itp_remove_item_on_use = 0x0000000400000000
itp_unbalanced = 0x0000000800000000
itp_covers_beard = 0x0000001000000000 # remove beard mesh
itp_no_pick_up_from_ground = 0x0000002000000000
itp_can_knock_down = 0x0000004000000000
itp_covers_hair = 0x0000008000000000 # remove hair mesh for armors only
itp_force_show_body = 0x0000010000000000 # forces showing body (works on body armor items)
itp_force_show_left_hand = 0x0000020000000000 # forces showing left hand (works on hand armor items)
itp_force_show_right_hand = 0x0000040000000000 # forces showing right hand (works on hand armor items)
itp_extra_penetration = 0x0000100000000000
itp_has_bayonet = 0x0000200000000000
itp_cant_reload_while_moving = 0x0000400000000000
itp_ignore_gravity = 0x0000800000000000
itp_ignore_friction = 0x0001000000000000
itp_is_pike = 0x0002000000000000
itp_offset_musket = 0x0004000000000000
itp_no_blur = 0x0008000000000000
itp_cant_reload_while_moving_mounted = 0x0010000000000000
itp_has_upper_stab = 0x0020000000000000
itp_kill_info_mask = 0x0700000000000000
itp_kill_info_bits = 56
# equipment slots
ek_item_0 = 0
ek_item_1 = 1
ek_item_2 = 2
ek_item_3 = 3
ek_head = 4
ek_body = 5
ek_foot = 6
ek_gloves = 7
ek_horse = 8
ek_food = 9
max_inventory_items = 96
num_equipment_kinds = ek_food + 1
num_weapon_proficiencies = 7
# damage types:
cut = 0
pierce = 1
blunt = 2
ibf_armor_mask = 0x00000000000000000000000ff
ibf_damage_mask = 0x00000000000000000000003ff
ibf_10bit_mask = 0x00000000000000000000003ff
ibf_weight_mask = 0x000000000000000000000ffff
ibf_head_armor_bits = 0
ibf_body_armor_bits = 8
ibf_leg_armor_bits = 16
ibf_weight_bits = 24
ibf_difficulty_bits = 40
ibf_hitpoints_mask = 0x0000ffff
ibf_hitpoints_bits = 50
iwf_swing_damage_bits = 60
iwf_swing_damage_type_bits = 68
iwf_thrust_damage_bits = 70
iwf_thrust_damage_type_bits = 78
iwf_weapon_length_bits = 80
iwf_speed_rating_bits = 90
iwf_shoot_speed_bits = 100
iwf_max_ammo_bits = 110 # use this for shield endurance too?
iwf_abundance_bits = 120
iwf_accuracy_bits = 16 # reuse leg_armor for accuracy
iwf_damage_type_bits = 8
def weight(x):
a = int(4.0 * x)
a = ibf_weight_mask & a
return (((bignum | a) & ibf_weight_mask) << ibf_weight_bits)
def get_weight(y):
a = (y >> ibf_weight_bits) & ibf_weight_mask
return 0.25 * a
def head_armor(x):
return (((bignum | x) & ibf_armor_mask) << ibf_head_armor_bits)
def get_head_armor(y):
return (y >> ibf_head_armor_bits) & ibf_armor_mask
def body_armor(x):
return (((bignum | x) & ibf_armor_mask) << ibf_body_armor_bits)
def get_body_armor(y):
return (y >> ibf_body_armor_bits) & ibf_armor_mask
def leg_armor(x):
return (((bignum | x) & ibf_armor_mask) << ibf_leg_armor_bits)
def get_leg_armor(y):
return (y >> ibf_leg_armor_bits) & ibf_armor_mask
def difficulty(x):
return (((bignum | x) & ibf_armor_mask) << ibf_difficulty_bits)
def get_difficulty(y):
return (y >> ibf_difficulty_bits) & ibf_armor_mask
def hit_points(x):
return (((bignum | x) & ibf_hitpoints_mask) << ibf_hitpoints_bits)
def get_hit_points(y):
return (y >> ibf_hitpoints_bits) & ibf_hitpoints_mask
def spd_rtng(x):
return (((bignum | x) & ibf_armor_mask) << iwf_speed_rating_bits)
def get_speed_rating(y):
return (y >> iwf_speed_rating_bits) & ibf_armor_mask
def shoot_speed(x):
return (((bignum | x) & ibf_10bit_mask) << iwf_shoot_speed_bits)
def get_missile_speed(y):
return (y >> iwf_shoot_speed_bits) & ibf_10bit_mask
def horse_scale(x):
return (((bignum | x) & ibf_10bit_mask) << iwf_weapon_length_bits)
def weapon_length(x):
return (((bignum | x) & ibf_10bit_mask) << iwf_weapon_length_bits)
def shield_width(x):
return weapon_length(x)
def shield_height(x):
return shoot_speed(x)
def get_weapon_length(y):
return ((y >> iwf_weapon_length_bits) & ibf_10bit_mask)
def max_ammo(x):
return (((bignum | x) & ibf_armor_mask) << iwf_max_ammo_bits)
def get_max_ammo(y):
return (y >> iwf_max_ammo_bits) & ibf_armor_mask
def swing_damage(damage,damage_type):
x = ((damage_type << iwf_damage_type_bits) | (damage & ibf_armor_mask))
return (((bignum | x) & ibf_damage_mask) << iwf_swing_damage_bits)
def get_swing_damage(y):
return (y >> iwf_swing_damage_bits) & ibf_damage_mask
def thrust_damage(damage,damage_type):
x = ((damage_type << iwf_damage_type_bits) | (damage & ibf_armor_mask))
return (((bignum | x) & ibf_damage_mask) << iwf_thrust_damage_bits)
def get_thrust_damage(y):
return (y >> iwf_thrust_damage_bits) & ibf_damage_mask
def horse_speed(x):
return shoot_speed(x)
def horse_maneuver(x):
return spd_rtng(x)
def horse_charge(x):
return thrust_damage(x,0)
def food_quality(x):
return head_armor(x)
def abundance(x):
return (((bignum | x) & ibf_armor_mask) << iwf_abundance_bits)
def get_abundance(y):
abnd = (y >> iwf_abundance_bits) & ibf_armor_mask
if (abnd == 0):
abnd = 100
return abnd
def accuracy(x):
return leg_armor(x)
def custom_kill_info(x): # you have to add ico_custom_x (where x is a number between 1 and 7) mesh in order to display it correctly.
return (((bignum | x) & (itp_kill_info_mask >> itp_kill_info_bits)) << itp_kill_info_bits)
blunt_min_val = (blunt << iwf_damage_type_bits)
pierce_min_val = (pierce << iwf_damage_type_bits)
def get_damage_str(x):
if (x >= blunt_min_val):
return '%db'%(x - blunt_min_val)
elif (x >= pierce_min_val):
return '%dp'%(x - pierce_min_val)
else:
return '%dc'%(x)
def get_raw_damage(x):
if x >= blunt_min_val:
return x - blunt_min_val
elif x >= pierce_min_val:
return x - pierce_min_val
else:
return x
# Item capabilities:
itcf_thrust_onehanded = 0x0000000000000001
itcf_overswing_onehanded = 0x0000000000000002
itcf_slashright_onehanded = 0x0000000000000004
itcf_slashleft_onehanded = 0x0000000000000008
itcf_thrust_twohanded = 0x0000000000000010
itcf_overswing_twohanded = 0x0000000000000020
itcf_slashright_twohanded = 0x0000000000000040
itcf_slashleft_twohanded = 0x0000000000000080
itcf_thrust_polearm = 0x0000000000000100
itcf_overswing_polearm = 0x0000000000000200
itcf_slashright_polearm = 0x0000000000000400
itcf_slashleft_polearm = 0x0000000000000800
itcf_shoot_bow = 0x0000000000001000
itcf_shoot_javelin = 0x0000000000002000
itcf_shoot_crossbow = 0x0000000000004000
itcf_throw_stone = 0x0000000000010000
itcf_throw_knife = 0x0000000000020000
itcf_throw_axe = 0x0000000000030000
itcf_throw_javelin = 0x0000000000040000
itcf_shoot_pistol = 0x0000000000070000
itcf_shoot_musket = 0x0000000000080000
itcf_shoot_mask = 0x00000000000ff000
itcf_horseback_thrust_onehanded = 0x0000000000100000
itcf_horseback_overswing_right_onehanded = 0x0000000000200000
itcf_horseback_overswing_left_onehanded = 0x0000000000400000
itcf_horseback_slashright_onehanded = 0x0000000000800000
itcf_horseback_slashleft_onehanded = 0x0000000001000000
itcf_thrust_onehanded_lance = 0x0000000004000000
itcf_thrust_onehanded_lance_horseback = 0x0000000008000000
itcf_carry_mask = 0x00000007f0000000
itcf_carry_sword_left_hip = 0x0000000010000000
itcf_carry_axe_left_hip = 0x0000000020000000
itcf_carry_dagger_front_left = 0x0000000030000000
itcf_carry_dagger_front_right = 0x0000000040000000
itcf_carry_quiver_front_right = 0x0000000050000000
itcf_carry_quiver_back_right = 0x0000000060000000
itcf_carry_quiver_right_vertical = 0x0000000070000000
itcf_carry_quiver_back = 0x0000000080000000
itcf_carry_revolver_right = 0x0000000090000000
itcf_carry_pistol_front_left = 0x00000000a0000000
itcf_carry_bowcase_left = 0x00000000b0000000
itcf_carry_mace_left_hip = 0x00000000c0000000
itcf_carry_axe_back = 0x0000000100000000
itcf_carry_sword_back = 0x0000000110000000
itcf_carry_kite_shield = 0x0000000120000000
itcf_carry_round_shield = 0x0000000130000000
itcf_carry_buckler_left = 0x0000000140000000
itcf_carry_crossbow_back = 0x0000000150000000
itcf_carry_bow_back = 0x0000000160000000
itcf_carry_spear = 0x0000000170000000
itcf_carry_board_shield = 0x0000000180000000
itcf_carry_katana = 0x0000000210000000
itcf_carry_wakizashi = 0x0000000220000000
itcf_show_holster_when_drawn = 0x0000000800000000
itcf_reload_pistol = 0x0000007000000000
itcf_reload_musket = 0x0000008000000000
itcf_reload_mask = 0x000000f000000000
itcf_parry_forward_onehanded = 0x0000010000000000
itcf_parry_up_onehanded = 0x0000020000000000
itcf_parry_right_onehanded = 0x0000040000000000
itcf_parry_left_onehanded = 0x0000080000000000
itcf_parry_forward_twohanded = 0x0000100000000000
itcf_parry_up_twohanded = 0x0000200000000000
itcf_parry_right_twohanded = 0x0000400000000000
itcf_parry_left_twohanded = 0x0000800000000000
itcf_parry_forward_polearm = 0x0001000000000000
itcf_parry_up_polearm = 0x0002000000000000
itcf_parry_right_polearm = 0x0004000000000000
itcf_parry_left_polearm = 0x0008000000000000
itcf_horseback_slash_polearm = 0x0010000000000000
itcf_overswing_spear = 0x0020000000000000
itcf_overswing_musket = 0x0040000000000000
itcf_thrust_musket = 0x0080000000000000
itcf_force_64_bits = 0x8000000000000000
# combined capabilities
itc_cleaver = itcf_force_64_bits|(itcf_overswing_onehanded|itcf_slashright_onehanded|itcf_slashleft_onehanded|itcf_horseback_slashright_onehanded|itcf_horseback_slashleft_onehanded)
itc_dagger = itc_cleaver|itcf_thrust_onehanded
itc_parry_onehanded = itcf_force_64_bits|itcf_parry_forward_onehanded|itcf_parry_up_onehanded|itcf_parry_right_onehanded|itcf_parry_left_onehanded
itc_longsword = itc_dagger|itc_parry_onehanded
itc_scimitar = itc_cleaver|itc_parry_onehanded
itc_parry_two_handed = itcf_force_64_bits|itcf_parry_forward_twohanded|itcf_parry_up_twohanded|itcf_parry_right_twohanded|itcf_parry_left_twohanded
itc_cut_two_handed = itcf_force_64_bits|(itcf_slashright_twohanded|itcf_slashleft_twohanded|itcf_overswing_twohanded|itcf_horseback_slashright_onehanded|itcf_horseback_slashleft_onehanded)
itc_greatsword = itc_cut_two_handed|itcf_thrust_twohanded|itc_parry_two_handed|itcf_thrust_onehanded_lance
itc_nodachi = itc_cut_two_handed|itc_parry_two_handed
itc_bastardsword = itc_cut_two_handed|itcf_thrust_twohanded|itc_parry_two_handed|itc_dagger
itc_morningstar = itc_cut_two_handed|itc_parry_two_handed|itc_cleaver
itc_parry_polearm = itcf_parry_forward_polearm|itcf_parry_up_polearm|itcf_parry_right_polearm|itcf_parry_left_polearm
itc_poleaxe = itc_parry_polearm|itcf_overswing_polearm|itcf_thrust_polearm|itcf_slashright_polearm|itcf_slashleft_polearm
itc_staff = itc_parry_polearm| itcf_thrust_onehanded_lance |itcf_thrust_onehanded_lance_horseback | itcf_overswing_musket | itcf_overswing_polearm |itcf_thrust_polearm|itcf_slashright_polearm|itcf_slashleft_polearm
itc_spear = itc_parry_polearm|itcf_thrust_onehanded_lance|itcf_thrust_onehanded_lance_horseback|itcf_thrust_polearm
itc_cutting_spear = itc_spear|itcf_overswing_polearm
itc_pike = itcf_thrust_onehanded_lance|itcf_thrust_onehanded_lance_horseback|itcf_thrust_polearm
itc_guandao = itc_parry_polearm|itcf_overswing_polearm|itcf_thrust_polearm|itcf_slashright_polearm|itcf_slashleft_polearm|itcf_horseback_slashright_onehanded|itcf_horseback_slashleft_onehanded|itcf_horseback_slash_polearm
itc_greatlance = itcf_thrust_onehanded_lance|itcf_thrust_onehanded_lance_horseback|itcf_thrust_polearm
itc_musket_melee = itc_parry_polearm|itcf_overswing_musket|itcf_thrust_musket|itcf_slashright_twohanded|itcf_slashleft_twohanded
# Extra Mesh IDs
ixmesh_inventory = 0x1000000000000000
ixmesh_flying_ammo = 0x2000000000000000
ixmesh_carry = 0x3000000000000000