#ifndef _DOS_LEMM_H #define _DOS_LEMM_H uint8 lemm_count_to_process; // [0x39] uint8 lemm_spawned_count; // [0x40] uint8 lemm_out_count; // [0x42] uint8 lemm_level_count; // [0x44] uint8 next_spawn_ticks; // [0x45] uint8 spawn_rate_ticks; // [0x46] struct _avail_skils { /* ds:si == 0b5b:0067 */ uint8 sk_climber, sk_climber2, sk_climber_tag; // [0x67] uint8 sk_floater, sk_floater2, sk_floater_tag; // [0x6a] uint8 sk_bomber, sk_bomber2, sk_bomber_tag; // [0x6d] uint8 sk_blocker, sk_blocker2, sk_blocker_tag; // [0x70] uint8 sk_builder, sk_builder2, sk_builder_tag; // [0x73] uint8 sk_basher, sk_basher2, sk_basher_tag; // [0x76] uint8 sk_miner, sk_miner2, sk_miner_tag; // [0x79] uint8 sk_digger, sk_digger2, sk_digger_tag; // [0x7c] }; struct _state { uint8_t s_splatting:1; //0x01 uint8_t s_exploding:1; //0x02 combinable uint8_t s_falling:1; //0x04 uint8_t s_ascending:1; //0x08 uint8_t s_digging:1; //0x10 uint8_t s_climbing:1; //0x20 uint8_t s_climb_ending:1; //0X40 uint8_t s_building:1; //0X80 uint8_t s_blocking:1; //0x01 uint8_t s_bashing:1; //0x02 uint8_t s_floating:1; //0x04 uint8_t s_mining:1; //0x08 uint8_t s_drawning:1; //0x10 uint8_t s_ending:1; //0x20 uint8_t s_dying:1; //0X40 uint8_t s_exploding2:1; //0X80 } __attribute__ ((__packed__)); union state { uint16_t raw; struct _state bf; }; struct _flags1 { uint8_t cap_climber:1; // 0x1 uint8_t unused_bit_1:1; uint8_t unused_bit_2:1; uint8_t unused_bit_3:1; uint8_t unused_bit_4:1; uint8_t unused_bit_5:1; uint8_t unused_bit_6:1; uint8_t walk_pause_for_shruggling:1; // 0X80 } __attribute__ ((__packed__)); union flags1 { uint8_t raw; struct _flags1 bf; }; struct _lemm_data { /* First lemm is at ds:si == 0b55:0085 */ uint16_t x_effective; //0x0 - 0x1 uint16_t y_effective; //0x2 - 0x3 int16_t x_spr_offset; //0x4 - 0x5 int16_t y_spr_offset; //0x6 - 0x7 union state state; //0x8 - 0x9 uint8_t b_10,b_11; uint16_t spr_data_ptr; //0xc - 0xd uint8_t floattime_dble; //0xe uint8_t b_15,b_16,b_17,b_18,b_19; uint16_t ptr2; //0x14 - 0x15 uint8_t b_22,b_23,b_24,b_25,b_26,b_27,b_28,b_29,b_30,b_31; uint8_t expl_countdown; //0x20 uint8_t steps_remain; //0x21 uint8_t b_34; uint8_t falldist; //0x23 union flags1 flags1; //0x24 uint8_t cap_floater; //0x25 uint8_t is_gone; //0x26 int8_t direction; //0x27 uint8_t spr_frame; //0x28 uint8_t draw_hint; //0x29 uint8_t b_42,b_43,b_44; } __attribute__ ((__packed__)); union lemm_data { unsigned char raw[0x2d]; struct _lemm_data s; }; enum draw_hint { hint_nothing=0x00, hint_falling=0x04, hint_special1=0x08, /* climbing or slow falling or shruggling */ hint_walking=0x09, hint_building=0x10, hint_mining=0x18, hint_bashing=0x20 }; enum state_bit { s_splatting=0, s_exploding, s_falling, s_ascending, s_digging, s_climbing, s_climb_ending, s_building, s_blocking, s_bashing, s_floating, s_mining, s_drawning, s_ending, s_dying, s_exploding2 }; #endif /*_DOS_LEMM_H*/