segunda-feira, 18 de fevereiro de 2008

Integer Division

Some divisions are optimized into a multiplication and a shift.
The result of the mul operation is in two combined registers [edx:eax].
The value of edx is result/0xFFFFFFFF.
This optimization takes advantage of that fact:
(value*multiply/0xFFFFFFFF)>>shift =>; value*original

A multiplication followed by a division is sometimes optimized the same way.

MultiplyShiftOriginal
0x069C16BD0665/25756
0x10624DD341/250
0x10624DD351/500
0x10624DD361/1000
0x2AAAAAAB01/6
0x30C30C3131/42
0x38E38E3911/9
0x4EC4EC4F31/26
0x51EB851F51/100
0x5555555601/3
0x6666666711/5
0x6666666721/10
0x6666666731/20
0x6666666741/40
0x6666666751/80
0x6666666761/160
0x6666666771/320
0x6666666781/640
0x6BCA1AF351/76
0x8888888981/480
0x9249249331/14
0xA0A0A0A171/204
0xAAAAAAAB11/3
0xAAAAAAAB21/6
0xAAAAAAAB31/12
0xAAAAAAAB41/24
0xAE147AE1517/800
0xB21642C951/46
0xB60B60B751/45
0xBA2E8BA331/11
0xEA0EA0EB032/35

Note: these optimization are only used if the resulting value doesn't lose precision in comparison to the original operation.

domingo, 13 de janeiro de 2008

EFST

These values appear to be like the SC_* values in eAthena.
Unknown info is read from ".\scriptbin\buff.bin".
The meaning of the internal fields is unknown.
See the comment to know how each EFST is set.

Values:
???
???
isSave 0/1 - if the status is saved?
isSendPacket 0/1 - if packet 0x196 is sent
???


#define EFST_PROVOKE 0x0 /* CBuffInfo,1,1,1,1,0 */
#define EFST_ENDURE 0x1 /* CBuffInfo,0,0,1,1,0 */
#define EFST_TWOHANDQUICKEN 0x2 /* CBuffInfo,1,1,1,1,0 */
#define EFST_CONCENTRATION 0x3 /* CBuffInfo,1,1,1,1,0 */
#define EFST_HIDING 0x4
#define EFST_CLOAKING 0x5
#define EFST_ENCHANTPOISON 0x6 /* CBuffInfo,1,1,1,1,0 */
#define EFST_POISONREACT 0x7 /* CBuffInfo,1,1,1,1,0 */
#define EFST_QUAGMIRE 0x8 /* CBuffInfo,1,1,0,1,0 */
#define EFST_ANGELUS 0x9 /* CBuffInfo,1,1,1,1,0 */
#define EFST_BLESSING 0xa /* CBuffInfo,1,1,1,1,0 */
#define EFST_CRUCIS 0xb
#define EFST_INC_AGI 0xc /* CBuffInfo,1,1,1,1,0 */
#define EFST_DEC_AGI 0xd /* CBuffInfo,1,1,0,1,0 */
#define EFST_SLOWPOISON 0xe /* CBuffInfo,1,1,1,1,0 */
#define EFST_IMPOSITIO 0xf /* CBuffInfo,1,1,1,1,0 */
#define EFST_SUFFRAGIUM 0x10 /* CBuffInfo,1,1,1,1,0 */
#define EFST_ASPERSIO 0x11 /* CBuffInfo,1,1,1,1,0 */
#define EFST_BENEDICTIO 0x12 /* CBuffInfo,1,1,0,1,0 */
#define EFST_KYRIE 0x13 /* CBuffInfo,1,1,1,1,0 */
#define EFST_MAGNIFICAT 0x14 /* CBuffInfo,1,1,0,1,0 */
#define EFST_GLORIA 0x15 /* CBuffInfo,1,1,1,1,0 */
#define EFST_LEXAETERNA 0x16 /* CBuffInfo,1,1,0,1,0 */
#define EFST_ADRENALINE 0x17 /* CBuffInfo,1,1,1,1,0 */
#define EFST_WEAPONPERFECT 0x18 /* CBuffInfo,1,1,1,1,0 */
#define EFST_OVERTHRUST 0x19 /* CBuffInfo,1,1,1,1,0 */
#define EFST_MAXIMIZE 0x1a /* CBuffInfo,1,1,1,1,0 */
#define EFST_RIDING 0x1b
#define EFST_FALCON 0x1c
#define EFST_TRICKDEAD 0x1d /* CBuffInfo,1,1,0,1,0 */
#define EFST_SHOUT 0x1e /* CBuffInfo,1,1,1,1,0 */
#define EFST_ENERGYCOAT 0x1f /* CBuffInfo,1,1,1,1,0 */
#define EFST_BROKENARMOR 0x20
#define EFST_BROKENWEAPON 0x21
#define EFST_ILLUSION 0x22
#define EFST_WEIGHTOVER50 0x23
#define EFST_WEIGHTOVER90 0x24
#define EFST_ATTHASTE_POTION1 0x25 /* CBuffInfo,1,1,1,1,0 */
#define EFST_ATTHASTE_POTION2 0x26 /* CBuffInfo,1,1,1,1,0 */
#define EFST_ATTHASTE_POTION3 0x27 /* CBuffInfo,1,1,1,1,0 */
#define EFST_ATTHASTE_INFINITY 0x28
#define EFST_MOVHASTE_POTION 0x29 /* CBuffInfo,1,1,0,1,0 */
#define EFST_MOVHASTE_INFINITY 0x2a
#define EFST_AUTOCOUNTER 0x2b
#define EFST_SPLASHER 0x2c
#define EFST_ANKLESNARE 0x2d
#define EFST_POSTDELAY 0x2e
#define EFST_NOACTION 0x2f
#define EFST_IMPOSSIBLEPICKUP 0x30
#define EFST_BARRIER 0x31 /* CBuffInfo,1,1,1,1,0 */
#define EFST_NOEQUIPWEAPON 0x32 /* CBuffInfo,1,0,0,1,0 */
#define EFST_NOEQUIPSHIELD 0x33 /* CBuffInfo,1,0,0,1,0 */
#define EFST_NOEQUIPARMOR 0x34 /* CBuffInfo,1,0,0,1,0 */
#define EFST_NOEQUIPHELM 0x35 /* CBuffInfo,1,0,0,1,0 */
#define EFST_PROTECTWEAPON 0x36 /* CBuffInfo,1,0,1,1,0 */
#define EFST_PROTECTSHIELD 0x37 /* CBuffInfo,1,0,1,1,0 */
#define EFST_PROTECTARMOR 0x38 /* CBuffInfo,1,0,1,1,0 */
#define EFST_PROTECTHELM 0x39 /* CBuffInfo,1,0,1,1,0 */
#define EFST_AUTOGUARD 0x3a /* CBuffInfo,1,1,1,1,0 */
#define EFST_REFLECTSHIELD 0x3b /* CBuffInfo,1,1,1,1,0 */
#define EFST_DEVOTION 0x3c /* CBuffInfo,1,1,0,1,0 */
#define EFST_PROVIDENCE 0x3d /* CBuffInfo,1,1,0,1,0 */
#define EFST_DEFENDER 0x3e /* CBuffInfo,1,1,1,1,0 */
#define EFST_MAGICROD 0x3f /* CBuffInfo,1,1,0,1,0 */
#define EFST_WEAPONPROPERTY 0x40 /* CBuffInfo,1,1,1,0,0 */
#define EFST_AUTOSPELL 0x41 /* CBuffInfo,0,0,1,1,0 */
#define EFST_SPECIALZONE 0x42 /* CBuffInfo,1,1,0,1,0 */
#define EFST_MASK 0x43 /* CBuffInfo,1,1,0,1,0 */
#define EFST_SPEARQUICKEN 0x44 /* CBuffInfo,1,1,0,1,0 */
#define EFST_BDPLAYING 0x45
#define EFST_WHISTLE 0x46
#define EFST_ASSASSINCROSS 0x47
#define EFST_POEMBRAGI 0x48
#define EFST_APPLEIDUN 0x49
#define EFST_HUMMING 0x4a
#define EFST_DONTFORGETME 0x4b
#define EFST_FORTUNEKISS 0x4c
#define EFST_SERVICEFORYOU 0x4d
#define EFST_RICHMANKIM 0x4e
#define EFST_ETERNALCHAOS 0x4f
#define EFST_DRUMBATTLEFIELD 0x50
#define EFST_RINGNIBELUNGEN 0x51
#define EFST_ROKISWEIL 0x52
#define EFST_INTOABYSS 0x53
#define EFST_SIEGFRIED 0x54
#define EFST_BLADESTOP 0x55 /* CBuffInfo,1,1,0,1,0 */
#define EFST_EXPLOSIONSPIRITS 0x56 /* CBuffInfo,1,1,0,1,0 */
#define EFST_STEELBODY 0x57 /* CBuffInfo,1,1,0,1,0 */
#define EFST_EXTREMITYFIST 0x58
#define EFST_COMBOATTACK 0x59
#define EFST_PROPERTYFIRE 0x5a /* CBuffInfo,0,0,1,1,0 */
#define EFST_PROPERTYWATER 0x5b /* CBuffInfo,0,0,1,1,0 */
#define EFST_PROPERTYWIND 0x5c /* CBuffInfo,0,0,1,1,0 */
#define EFST_PROPERTYGROUND 0x5d /* CBuffInfo,0,0,1,1,0 */
#define EFST_MAGICATTACK 0x5e
#define EFST_STOP 0x5f /* CBuffInfo,1,1,0,1,0 */
#define EFST_WEAPONBRAKER 0x60
#define EFST_PROPERTYUNDEAD 0x61 /* CBuffInfo,1,1,0,1,0 */
#define EFST_POWERUP 0x62
#define EFST_AGIUP 0x63
#define EFST_SIEGEMODE 0x64
#define EFST_INVISIBLE 0x65
#define EFST_STATUSONE 0x66 /* CBuffInfo,1,1,0,1,0 */
#define EFST_AURABLADE 0x67 /* CBuffInfo,1,1,0,1,0 */
#define EFST_PARRYING 0x68 /* CBuffInfo,1,1,0,1,0 */
#define EFST_LKCONCENTRATION 0x69 /* CBuffInfo,1,1,0,1,0 */
#define EFST_TENSIONRELAX 0x6a /* CBuffInfo,1,1,0,1,0 */
#define EFST_BERSERK 0x6b /* CBuffInfo,1,1,0,1,0 */
#define EFST_SACRIFICE 0x6c /* CBuffInfo,1,1,0,1,0 */
#define EFST_GOSPEL 0x6d /* CBuffInfo,1,1,0,1,0 */
#define EFST_ASSUMPTIO 0x6e /* CBuffInfo,1,1,1,1,0 */
#define EFST_BASILICA 0x6f /* CBuffInfo,1,1,0,1,0 */
#define EFST_GROUNDMAGIC 0x70 /* CBuffInfo,1,1,0,1,0 */
#define EFST_MAGICPOWER 0x71 /* CBuffInfo,1,1,0,1,0 */
#define EFST_EDP 0x72
#define EFST_TRUESIGHT 0x73 /* CBuffInfo,1,1,0,1,0 */
#define EFST_WINDWALK 0x74 /* CBuffInfo,1,1,0,1,0 */
#define EFST_MELTDOWN 0x75
#define EFST_CARTBOOST 0x76
#define EFST_CHASEWALK 0x77
#define EFST_SWORDREJECT 0x78
#define EFST_MARIONETTE_MASTER 0x79
#define EFST_MARIONETTE 0x7a
#define EFST_MOON 0x7b
#define EFST_BLOODING 0x7c /* CBuffInfo,1,1,0,1,0 */
#define EFST_JOINTBEAT 0x7d /* CBuffInfo,1,1,0,1,0 */
#define EFST_MINDBREAKER 0x7e /* CBuffInfo,1,1,0,1,0 */
#define EFST_MEMORIZE 0x7f /* CBuffInfo,1,1,0,1,0 */
#define EFST_FOGWALL 0x80 /* CBuffInfo,1,1,0,1,0 */
#define EFST_SPIDERWEB 0x81
#define EFST_PROTECTEXP 0x82
#define EFST_SUB_WEAPONPROPERTY 0x83
#define EFST_AUTOBERSERK 0x84
#define EFST_RUN 0x85 /* CBuffInfo,1,1,0,1,0 */
#define EFST_TING 0x86
#define EFST_STORMKICK_ON 0x87
#define EFST_STORMKICK_READY 0x88
#define EFST_DOWNKICK_ON 0x89
#define EFST_DOWNKICK_READY 0x8a
#define EFST_TURNKICK_ON 0x8b
#define EFST_TURNKICK_READY 0x8c
#define EFST_COUNTER_ON 0x8d
#define EFST_COUNTER_READY 0x8e
#define EFST_DODGE_ON 0x8f
#define EFST_DODGE_READY 0x90
#define EFST_STRUP 0x91 /* CBuffInfo,1,1,0,1,0 */
#define EFST_PROPERTYDARK 0x92 /* CBuffInfo,1,1,0,1,0 */
#define EFST_ADRENALINE2 0x93 /* CBuffInfo,1,1,0,1,0 */
#define EFST_PROPERTYTELEKINESIS 0x94 /* CBuffInfo,1,1,0,1,0 */
#define EFST_SOULLINK 0x95 /* CBuffInfo,1,1,0,1,0 */
#define EFST_PLUSATTACKPOWER 0x96 /* CBuffInfo,1,1,1,1,0 */
#define EFST_PLUSMAGICPOWER 0x97 /* CBuffInfo,1,1,1,1,0 */
#define EFST_DEVIL1 0x98
#define EFST_KAITE 0x99 /* CBuffInfo,1,1,0,1,0 */
#define EFST_SWOO 0x9a
#define EFST_STAR2 0x9b
#define EFST_KAIZEL 0x9c
#define EFST_KAAHI 0x9d /* CBuffInfo,1,1,0,1,0 */
#define EFST_KAUPE 0x9e /* CBuffInfo,1,1,0,1,0 */
#define EFST_SMA_READY 0x9f
#define EFST_SKE 0xa0
#define EFST_ONEHANDQUICKEN 0xa1 /* CBuffInfo,1,1,0,1,0 */
#define EFST_FRIEND 0xa2
#define EFST_FRIENDUP 0xa3
#define EFST_SG_WARM 0xa4
#define EFST_SG_SUN_WARM 0xa5
#define EFST_SG_MOON_WARM 0xa6
#define EFST_SG_STAR_WARM 0xa7
#define EFST_EMOTION 0xa8
#define EFST_SUN_COMFORT 0xa9
#define EFST_MOON_COMFORT 0xaa
#define EFST_STAR_COMFORT 0xab
#define EFST_EXPUP 0xac
#define EFST_GDSKILL_BATTLEORDER 0xad
#define EFST_GDSKILL_REGENERATION 0xae
#define EFST_GDSKILL_POSTDELAY 0xaf
#define EFST_RESISTHANDICAP 0xb0
#define EFST_MAXHPPERCENT 0xb1
#define EFST_MAXSPPERCENT 0xb2
#define EFST_DEFENCE 0xb3
#define EFST_SLOWDOWN 0xb4
#define EFST_PRESERVE 0xb5 /* CBuffInfo,1,1,0,1,0 */
#define EFST_CHASEWALK2 0xb6 /* CBuffInfo,1,1,0,1,0 */
#define EFST_NOT_EXTREMITYFIST 0xb7
#define EFST_CLAIRVOYANCE 0xb8
#define EFST_MOVESLOW_POTION 0xb9 /* CBuffInfo,1,1,0,1,0 */
#define EFST_DOUBLECASTING 0xba /* CBuffInfo,1,1,0,1,0 */
#define EFST_GRAVITATION 0xbb /* CBuffInfo,1,1,0,1,0 */
#define EFST_OVERTHRUSTMAX 0xbc /* CBuffInfo,1,1,0,1,0 */
#define EFST_LONGING 0xbd
#define EFST_HERMODE 0xbe
#define EFST_TAROTCARD 0xbf /* CBuffInfo,1,1,0,1,0 */
#define EFST_HLIF_AVOID 0xc0
#define EFST_HFLI_FLEET 0xc1
#define EFST_HFLI_SPEED 0xc2
#define EFST_HLIF_CHANGE 0xc3
#define EFST_HAMI_BLOODLUST 0xc4
#define EFST_CR_SHRINK 0xc5
#define EFST_WZ_SIGHTBLASTER 0xc6
#define EFST_DC_WINKCHARM 0xc7
#define EFST_RG_CCONFINE_M 0xc8 /* CBuffInfo,0,0,0,1,0 */
#define EFST_RG_CCONFINE_S 0xc9 /* CBuffInfo,0,0,0,1,0 */
#define EFST_DISABLEMOVE 0xca
#define EFST_GS_MADNESSCANCEL 0xcb
#define EFST_GS_GATLINGFEVER 0xcc
#define EFST_EARTHSCROLL 0xcd
#define EFST_NJ_UTSUSEMI 0xce /* CBuffInfo,1,1,0,1,0 */
#define EFST_NJ_BUNSINJYUTSU 0xcf /* CBuffInfo,1,1,0,1,0 */
#define EFST_NJ_NEN 0xd0
#define EFST_GS_ADJUSTMENT 0xd1
#define EFST_GS_ACCURACY 0xd2
#define EFST_NJ_SUITON 0xd3
#define EFST_PET 0xd4
#define EFST_MENTAL 0xd5 /* CBuffInfo,1,1,0,1,0 */
#define EFST_EXPMEMORY 0xd6 /* CBuffInfo,1,1,0,1,0 */
#define EFST_PERFORMANCE 0xd7 /* CBuffInfo,1,1,0,1,0 */
#define EFST_GAIN 0xd8 /* CBuffInfo,1,1,0,1,0 */
#define EFST_GRIFFON 0xd9
#define EFST_DRIFT 0xda /* CBuffInfo,1,1,0,1,0 */
#define EFST_WALLSHIFT 0xdb /* CBuffInfo,1,1,0,1,0 */
#define EFST_REINCARNATION 0xdc /* CBuffInfo,1,1,0,1,0 */
#define EFST_PATTACK 0xdd
#define EFST_PSPEED 0xde
#define EFST_PDEFENSE 0xdf
#define EFST_PCRITICAL 0xe0
#define EFST_RANKING 0xe1
#define EFST_PTRIPLE 0xe2
#define EFST_DENERGY 0xe3 /* CBuffInfo,1,1,0,1,0 */
#define EFST_WAVE1 0xe4
#define EFST_WAVE2 0xe5
#define EFST_WAVE3 0xe6
#define EFST_WAVE4 0xe7
#define EFST_DAURA 0xe8 /* CBuffInfo,1,1,0,1,0 */
#define EFST_DFREEZER 0xe9 /* CBuffInfo,1,1,0,1,0 */
#define EFST_DPUNISH 0xea /* CBuffInfo,1,1,0,1,0 */
#define EFST_DBARRIER 0xeb /* CBuffInfo,1,1,0,1,0 */
#define EFST_DWARNING 0xec /* CBuffInfo,1,1,0,1,0 */
#define EFST_MOUSEWHEEL 0xed /* CBuffInfo,1,0,0,1,0 */
#define EFST_DGAUGE 0xee
#define EFST_DACCEL 0xef /* CBuffInfo,1,1,0,1,0 */
#define EFST_DBLOCK 0xf0 /* CBuffInfo,1,1,0,1,0 */
#define EFST_FOOD_STR 0xf1 /* CBuffInfo,1,0,1,1,1 */
#define EFST_FOOD_AGI 0xf2 /* CBuffInfo,1,0,1,1,1 */
#define EFST_FOOD_VIT 0xf3 /* CBuffInfo,1,0,1,1,1 */
#define EFST_FOOD_DEX 0xf4 /* CBuffInfo,1,0,1,1,1 */
#define EFST_FOOD_INT 0xf5 /* CBuffInfo,1,0,1,1,1 */
#define EFST_FOOD_LUK 0xf6 /* CBuffInfo,1,0,1,1,1 */
#define EFST_FOOD_BASICAVOIDANCE 0xf7 /* CBuffInfo,1,1,1,1,0 */
#define EFST_FOOD_BASICHIT 0xf8 /* CBuffInfo,1,1,1,1,0 */
#define EFST_FOOD_CRITICALSUCCESSVALUE 0xf9 /* CBuffInfo,1,1,1,1,0 */
#define EFST_CASH_PLUSEXP 0xfa /* CBuffInfo,0,0,1,1,1 */
#define EFST_CASH_DEATHPENALTY 0xfb /* CBuffInfo,0,0,1,1,1 */
#define EFST_CASH_RECEIVEITEM 0xfc /* CBuffInfo,0,0,1,1,1 */
#define EFST_CASH_BOSS_ALARM 0xfd /* CBuffInfo,1,0,0,1,1 */
#define EFST_DA_ENERGY 0xfe /* CBuffInfo,1,1,0,1,0 */
#define EFST_DA_FIRSTSLOT 0xff /* CBuffInfo,1,1,0,1,0 */
#define EFST_DA_HEADDEF 0x100 /* CBuffInfo,1,1,0,1,0 */
#define EFST_DA_SPACE 0x101 /* CBuffInfo,1,0,0,1,0 */
#define EFST_DA_TRANSFORM 0x102
#define EFST_DA_ITEMREBUILD 0x103 /* CBuffInfo,1,0,0,1,0 */
#define EFST_DA_ILLUSION 0x104 /* CBuffInfo,1,1,0,1,0 */
#define EFST_DA_DARKPOWER 0x105
#define EFST_DA_EARPLUG 0x106 /* CBuffInfo,1,0,0,1,0 */
#define EFST_DA_CONTRACT 0x107 /* CBuffInfo,0,0,1,1,0 */
#define EFST_DA_BLACK 0x108 /* CBuffInfo,1,0,0,1,0 */
#define EFST_DA_MAGICCART 0x109 /* CBuffInfo,1,1,0,1,0 */
#define EFST_CRYSTAL 0x10a /* CBuffInfo,1,0,0,1,0 */
#define EFST_DA_REBUILD 0x10b /* CBuffInfo,0,0,1,1,0 */
#define EFST_DA_EDARKNESS 0x10c /* CBuffInfo,1,1,0,1,0 */
#define EFST_DA_EGUARDIAN 0x10d /* CBuffInfo,1,1,0,1,0 */
#define EFST_DA_TIMEOUT 0x10e /* CBuffInfo,1,1,0,1,0 */
#define EFST_FOOD_STR_CASH 0x10f /* CBuffInfo,0,0,1,1,1 */
#define EFST_FOOD_AGI_CASH 0x110 /* CBuffInfo,0,0,1,1,1 */
#define EFST_FOOD_VIT_CASH 0x111 /* CBuffInfo,0,0,1,1,1 */
#define EFST_FOOD_DEX_CASH 0x112 /* CBuffInfo,0,0,1,1,1 */
#define EFST_FOOD_INT_CASH 0x113 /* CBuffInfo,0,0,1,1,1 */
#define EFST_FOOD_LUK_CASH 0x114 /* CBuffInfo,0,0,1,1,1 */
#define EFST_MER_FLEE 0x115 /* CBuffInfo,1,0,1,0,0 */
#define EFST_MER_ATK 0x116 /* CBuffInfo,1,0,1,0,0 */
#define EFST_MER_HP 0x117 /* CBuffInfo,1,0,1,0,0 */
#define EFST_MER_SP 0x118 /* CBuffInfo,1,0,1,0,0 */
#define EFST_MER_HIT 0x119 /* CBuffInfo,1,0,1,0,0 */
#define EFST_SLOWCAST 0x11a /* CBuffInfo,0,0,0,1,0 */
#define EFST_MAGICMIRROR 0x11b
#define EFST_STONESKIN 0x11c
#define EFST_ANTIMAGIC 0x11d
#define EFST_CRITICALWOUND 0x11e /* CBuffInfo,0,0,0,1,0 */
#define EFST_NPC_DEFENDER 0x11f
#define EFST_NOACTION_WAIT 0x120
#define EFST_MOVHASTE_HORSE 0x121 /* CBuffInfo,0,0,0,1,0 */
#define EFST_PROTECT_DEF 0x122 /* CBuffInfoWithScript,1,0,1,1,0 */
#define EFST_PROTECT_MDEF 0x123 /* CBuffInfoWithScript,1,0,1,1,0 */
#define EFST_HEALPLUS 0x124 /* CBuffInfoWithScript,1,0,1,1,0 */
#define EFST_S_LIFEPOTION 0x125 /* CBuffInfoWithScript,1,0,1,1,0 */
#define EFST_L_LIFEPOTION 0x126 /* CBuffInfoWithScript,1,0,1,1,0 */
#define EFST_CRITICALPERCENT 0x127 /* CBuffInfoWithScript,1,0,1,1,0 */
#define EFST_PLUSAVOIDVALUE 0x128 /* CBuffInfoWithScript,1,0,1,1,0 */
#define EFST_ATKER_ASPD 0x129 /* CBuffInfoWithScript,1,0,1,1,0 */
#define EFST_TARGET_ASPD 0x12a /* CBuffInfoWithScript,1,0,0,1,0 */
#define EFST_ATKER_MOVESPEED 0x12b /* CBuffInfoWithScript,1,0,1,1,0 */
#define EFST_ATKER_BLOOD 0x12c /* CBuffInfoWithScript,1,0,1,1,0 */
#define EFST_TARGET_BLOOD 0x12d /* CBuffInfoWithScript,1,0,0,1,0 */
#define EFST_ARMOR_PROPERTY 0x12e /* CBuffInfo,0,0,1,1,0 */
#define EFST_REUSE_LIMIT_A 0x12f
#define EFST_HELLPOWER 0x130
#define EFST_STEAMPACK 0x131
#define EFST_REUSE_LIMIT_B 0x132
#define EFST_REUSE_LIMIT_C 0x133
#define EFST_REUSE_LIMIT_D 0x134
#define EFST_REUSE_LIMIT_E 0x135
#define EFST_REUSE_LIMIT_F 0x136
#define EFST_INVINCIBLE 0x137
#define EFST_CASH_PLUSONLYJOBEXP 0x138
#define EFST_PARTYFLEE 0x139
#define EFST_ANGEL_PROTECT 0x13a
#define EFST_LAST 0x13b


Based on a 11.2 zone.

quinta-feira, 10 de janeiro de 2008

Pushback

Pushback consists of an object being pushed in the direction of a reference position for a certain distance.
It's a side effect of certain skills, like Jupitel Thunder.

src - current position
ref - reference position
range - how much to push
dx - push increment for the x coordinate
dy - push increment for the y coordinate

The implementation can push in 8 directions.
The direction is determined by the position of ref relative to src.


if( abs(ref.y-src.y) >= 3*abs(ref.x-src.x) )
{// vertical
dx = 0;
dy = (ref.y > src.y ? 1 : -1);
}
else if( abs(ref.x-src.x) >= 3*abs(ref.y-src.y) )
{// horizontal
dx = (ref.x > src.x ? 1 : -1);
dy = 0;
}
else
{// diagonal
dx = (ref.x > src.x ? 1 : -1);
dy = (ref.y > src.y ? 1 : -1);
}


It pushes until the target range is reached or an unmovable cell is found.


for( ; range > 0; --range )
{
if( !is_movable(src.x+dx, src.y+dy) )
break;// not movable
src.x += dx;
src.y += dy;
}


Based on a 11.2 zone.