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
|
#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*/
|