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.