- [FIX] Al moure en mode floating no guardava

- [NEW] Cicle d'animació [0 1 0 1]
- [CHG] Forma diferent de pillat el tipo de booster i el ID per a que no torne a apareixer
- [NEW] Nou moviment: RANDJ
- Nous gràfics, enemics, objectes
- Més habitacions
This commit is contained in:
2024-09-26 10:58:14 +02:00
parent d1ce8c9d5d
commit 1d85db4052
13 changed files with 367 additions and 67 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@@ -51,7 +51,7 @@ actor{
}
actor{
name: B-LIVE
name: B-00-LIVE
bmp: objectes.gif
bmp-rect: 114 78 15 18
bmp-offset: -8 22

View File

@@ -41,6 +41,16 @@ actor{
movement: CW
}
actor{
name: ESTANT
bmp: altres.gif
bmp-rect: 21 101 26 24
bmp-offset: -6 27
pos: 16 16 12
size: 8 5 6
movement: CW
}
actor{
name: P-PIPE
bmp: objectes.gif
@@ -194,16 +204,6 @@ actor{
movement: CW
}
actor{
name: TRANSPA-16
bmp: altres.gif
bmp-rect: 21 101 26 24
bmp-offset: -6 27
pos: 16 16 12
size: 8 5 6
movement: CW
}
actor{
name: TRANSPA-17
bmp: altres.gif

View File

@@ -5,8 +5,8 @@ door-height-xn: 1
door-height-yp: 1
color: WHITE
floor-texture: 0
wall-texture: 0
door-texture: 0
wall-texture: 3
door-texture: 1
under-door-texture: 0
exit-xp: 18
exit-xn: 22

View File

@@ -23,7 +23,7 @@ actor{
}
actor{
name: B-JUMP
name: B-01-JUMP
bmp: objectes.gif
bmp-rect: 114 78 15 18
bmp-offset: -8 22

View File

@@ -1,13 +1,95 @@
width: 2
width: 1
height: 2
door-height-xp: 0
door-height-yp: 0
door-height-yp: 3
door-height-yn: 4
color: YELLOW
floor-texture: 0
wall-texture: 0
door-texture: 0
floor-texture: 1
wall-texture: 13
door-texture: 7
under-door-texture: 0
exit-xp: 25
exit-yp: 26
exit-yn: 21
actor{
name: COFFEE-00
bmp: altres.gif
bmp-rect: 32 133 21 21
bmp-offset: 0 34
pos: 16 8 0
size: 8 8 2
orient: XP
anim-cycle: DUO
anim-wait: 3
flags: REACTIVE MOVING ANIMATED DEADLY
react-mask: XP XN YP YN ZP ZN
movement: RANDJ
}
actor{
name: COFFEE-01
bmp: altres.gif
bmp-rect: 32 133 21 21
bmp-offset: 0 34
pos: 40 48 0
size: 8 8 2
orient: XN
anim-cycle: DUO
anim-wait: 3
flags: REACTIVE MOVING ANIMATED DEADLY
react-mask: XP XN YP YN ZP ZN
movement: RANDJ
}
actor{
name: PLATH-00
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 32 48 8
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: PLATH-01
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 24 48 8
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: TRANSPA-00
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 24 8 10
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-01
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 16 24 6
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-02
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 32 32 2
size: 8 8 6
movement: CW
}

View File

@@ -2,53 +2,158 @@ width: 2
height: 2
door-height-xn: 4
color: PURPLE
floor-texture: 0
wall-texture: 0
door-texture: 0
under-door-texture: 0
floor-texture: 1
wall-texture: 13
door-texture: 7
under-door-texture: 13
exit-xn: 24
exit-zp: 21
actor{
name: ANBERNIC
bmp: altres.gif
bmp-rect: 157 80 24 14
bmp-offset: -4 16
pos: 24 40 8
size: 6 4 2
flags: PUSHABLE GRAVITY
movement: CW
}
actor{
name: BARREL
bmp: caixes.gif
bmp-rect: 96 64 18 32
bmp-offset: -7 37
pos: 40 16 0
size: 6 6 12
anim-cycle: SEQ
anim-wait: 1
flags: ANIMATED GRAVITY
movement: CW
}
actor{
name: BOX-B-00
bmp: caixes.gif
bmp-rect: 32 0 32 32
bmp-offset: 0 32
pos: 32 40 0
size: 8 8 8
flags: PUSHABLE
movement: CW
}
actor{
name: CADIRA
bmp: caixes.gif
bmp-rect: 64 96 20 32
bmp-offset: -7 38
pos: 16 48 0
size: 8 8 8
size: 6 5 8
orient: YP
flags: PUSHABLE
movement: CW
}
actor{
name: BOX-B-01
bmp: caixes.gif
bmp-rect: 32 0 32 32
bmp-offset: 0 32
pos: 32 8 0
size: 8 8 8
flags: PUSHABLE
movement: CW
}
actor{
name: PILOTA
name: CUADRO
bmp: altres.gif
bmp-rect: 0 108 21 21
bmp-offset: -6 26
pos: 32 24 0
size: 8 8 8
flags: PUSHABLE INERTIA
bmp-rect: 48 75 18 32
bmp-offset: 0 39
pos: 40 0 0
size: 1 1 9
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: PLATF
bmp: caixes.gif
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 40 24 0
size: 8 8 8
orient: ZP
movement: Z
name: ESTANT-00
bmp: altres.gif
bmp-rect: 21 101 26 24
bmp-offset: -6 27
pos: 8 8 0
size: 8 5 6
movement: CW
}
actor{
name: ESTANT-01
bmp: altres.gif
bmp-rect: 21 101 26 24
bmp-offset: -6 27
pos: 8 8 6
size: 8 5 6
movement: CW
}
actor{
name: ESTANT-02
bmp: altres.gif
bmp-rect: 21 101 26 24
bmp-offset: -6 27
pos: 8 8 12
size: 8 5 6
movement: CW
}
actor{
name: ESTANT-03
bmp: altres.gif
bmp-rect: 21 101 26 24
bmp-offset: -6 27
pos: 16 8 0
size: 8 5 6
movement: CW
}
actor{
name: ESTANT-04
bmp: altres.gif
bmp-rect: 21 101 26 24
bmp-offset: -6 27
pos: 16 8 6
size: 8 5 6
movement: CW
}
actor{
name: ESTANT-05
bmp: altres.gif
bmp-rect: 21 101 26 24
bmp-offset: -6 27
pos: 16 8 12
size: 8 5 6
movement: CW
}
actor{
name: TAULA-A
bmp: caixes.gif
bmp-rect: 128 32 32 32
bmp-offset: 0 32
pos: 16 40 0
size: 8 8 8
movement: CW
}
actor{
name: TAULA-B
bmp: caixes.gif
bmp-rect: 160 32 32 32
bmp-offset: 0 32
pos: 24 40 0
size: 8 8 8
movement: CW
}
actor{
name: YONKI
bmp: caixes.gif
bmp-rect: 168 65 19 31
bmp-offset: -6 37
pos: 32 16 0
size: 8 8 8
movement: CW
}

View File

@@ -1,9 +1,85 @@
width: 2
width: 3
height: 2
door-height-yn: 0
color: CYAN
floor-texture: 0
wall-texture: 0
floor-texture: 10
wall-texture: 1
door-texture: 0
under-door-texture: 0
exit-yn: 24
actor{
name: CADIRA
bmp: caixes.gif
bmp-rect: 64 96 20 32
bmp-offset: -7 38
pos: 0 16 0
size: 6 5 8
orient: YP
movement: CW
}
actor{
name: MESITA
bmp: caixes.gif
bmp-rect: 0 64 32 32
bmp-offset: 0 32
pos: 0 24 0
size: 8 8 4
movement: CW
}
actor{
name: NES
bmp: caixes.gif
bmp-rect: 96 0 32 32
bmp-offset: -2 33
pos: 0 32 0
size: 8 7 6
orient: YP
flags: PUSHABLE ORIENTABLE
movement: CW
}
actor{
name: SOFA
bmp: altres.gif
bmp-rect: 0 0 48 40
bmp-offset: 0 32
pos: 40 8 0
size: 16 8 6
movement: CW
}
actor{
name: TAULA-A
bmp: caixes.gif
bmp-rect: 128 32 32 32
bmp-offset: 0 32
pos: 0 8 0
size: 8 8 8
orient: YP
movement: CW
}
actor{
name: TAULA-B
bmp: caixes.gif
bmp-rect: 160 32 32 32
bmp-offset: 0 32
pos: 8 8 0
size: 8 8 8
movement: CW
}
actor{
name: TV
bmp: caixes.gif
bmp-rect: 32 64 32 32
bmp-offset: 2 35
pos: 0 24 4
size: 8 6 8
orient: YP
flags: ORIENTABLE
movement: CW
}

View File

@@ -283,6 +283,16 @@ category{
movement: CW
}
actor{
name: ESTANT
bmp: altres.gif
bmp-rect: 21 101 26 24
bmp-offset: -6 27
pos: 8 8 0
size: 8 5 6
movement: CW
}
}
category{
@@ -478,6 +488,21 @@ category{
movement: Z
}
actor{
name: COFFEE
bmp: altres.gif
bmp-rect: 32 133 21 21
bmp-offset: 0 34
pos: 32 16 0
size: 8 8 2
orient: XP
anim-cycle: DUO
anim-wait: 3
flags: REACTIVE MOVING ANIMATED DEADLY
react-mask: XP XN YP YN ZP ZN
movement: RANDJ
}
}
category{

View File

@@ -11,10 +11,11 @@
namespace actor
{
uint8_t anims[3][4] = {
uint8_t anims[4][4] = {
{0, 1, 0, 2},
{0, 1, 2, 3},
{0, 1, 2, 0}
{0, 1, 2, 0},
{0, 1, 0, 1}
};
actor_t *first = nullptr;
@@ -135,9 +136,9 @@ namespace actor
} else if (util::strcomp(key, "orient:")) {
t->orient = util::stringToInt(file::readString(buffer), {"none", "xp", "xn", "yp", "yn", "zp", "zn"}, {0, 1, 2, 4, 8, 16, 32});
} else if (util::strcomp(key, "movement:")) {
t->movement = util::stringToInt(file::readString(buffer), {"none", "x", "y", "z", "cw", "ccw", "rand", "randv", "hunt"},{MOV_NONE, MOV_X, MOV_Y, MOV_Z, MOV_CW, MOV_CCW, MOV_RAND, MOV_RANDV, MOV_HUNT});
t->movement = util::stringToInt(file::readString(buffer), {"none", "x", "y", "z", "cw", "ccw", "rand", "randv", "hunt", "randj"},{MOV_NONE, MOV_X, MOV_Y, MOV_Z, MOV_CW, MOV_CCW, MOV_RAND, MOV_RANDV, MOV_HUNT, MOV_RANDJ});
} else if (util::strcomp(key, "anim-cycle:")) {
t->anim_cycle = util::stringToInt(file::readString(buffer), {"walk", "seq", "min"},{0, 1, 2});
t->anim_cycle = util::stringToInt(file::readString(buffer), {"walk", "seq", "min", "duo"},{0, 1, 2, 3});
} else if (util::strcomp(key, "anim-wait:")) {
t->anim_wait = file::readInt(buffer);
} else if (util::strcomp(key, "flags:")) {
@@ -283,6 +284,7 @@ namespace actor
if (value==6) return "RAND";
if (value==7) return "RANDV";
if (value==8) return "HUNT";
if (value==9) return "RANDJ";
return "NONE";
}
@@ -349,7 +351,7 @@ namespace actor
fprintf(f, " %spos: %i %i %i\n", ws, act->pos.x, act->pos.y, act->pos.z);
fprintf(f, " %ssize: %i %i %i\n", ws, act->size.x, act->size.y, act->size.z);
if (act->orient!=0) fprintf(f, " %sorient: %s\n", ws, numToOrient(act->orient));
if (act->anim_cycle!=0) fprintf(f, " %sanim-cycle: %s\n", ws, act->anim_cycle==0 ? "WALK" : act->anim_cycle==1 ? "SEQ" : "MIN");
if (act->anim_cycle!=0) fprintf(f, " %sanim-cycle: %s\n", ws, act->anim_cycle==0 ? "WALK" : act->anim_cycle==1 ? "SEQ" : act->anim_cycle==2 ? "MIN" : "DUO");
if (act->anim_wait!=0) fprintf(f, " %sanim-wait: %i\n", ws, act->anim_wait);
if (act->flags!=0) fprintf(f, " %sflags: %s\n", ws, numToFlags(act->flags));
if (act->react_mask!=0) fprintf(f, " %sreact-mask: %s\n", ws, numToOrient(act->react_mask));
@@ -539,7 +541,7 @@ namespace actor
if (act->flags & FLAG_SPECIAL)
{
if (act->name[0]=='B') { // Es un booster
hero::collectBooster(act->name[1]-48, (act->name[3]-48)*10+(act->name[4]-48));
hero::collectBooster(&act->name[5], (act->name[2]-48)*10+(act->name[3]-48));
} else if (act->name[0]=='S') { // Es un skill
hero::giveSkill(&act->name[2]);
} else if (act->name[0]=='P') {
@@ -763,6 +765,7 @@ namespace actor
}
break;
case MOV_RANDV:
case MOV_RANDJ:
switch (rand()%8)
{
case 0: act->mov_push=PUSH_YP; break;
@@ -814,6 +817,14 @@ namespace actor
return;
}
// [RZC 26/09/2024] Hack usant react_push en les bambolles de café per al dz del moviment de anar pegant botets
if (act->movement==MOV_RANDJ)
{
if (act->pos.z==0) act->react_push=1;
if (act->pos.z>=6) act->react_push=-1;
act->pos.z += act->react_push;
}
int vel = (act->flags&FLAG_HERO) && (hero::getBoostRun()>0) ? 2 : 1;
if (act->push & PUSH_ZP) {
@@ -1576,7 +1587,7 @@ namespace actor
return dead;
}
const int getBoosterFromString(char *booster)
const int getBoosterFromString(const char *booster)
{
static const char *boostset_name[4] = {"RUN", "GOD", "JUMP", "LIVE"};
for (int i=0;i<4;++i)
@@ -1613,10 +1624,10 @@ namespace actor
return value!=0;
}
void collectBooster(int booster, int id)
void collectBooster(const char *booster, int id)
{
boosters_collected[id] = true;
switch (booster)
switch (getBoosterFromString(booster))
{
case BOOST_GOD: boost_god = 99*2; break;
case BOOST_RUN: boost_steps = 99*2; break;

View File

@@ -44,6 +44,7 @@
#define MOV_RAND 6 // Es mou en direcció aleatòria
#define MOV_RANDV 7 // Es mou en direcció aleatòria, diagonals incloses
#define MOV_HUNT 8 // Persegueix al heroi
#define MOV_RANDJ 9 // Es mou en direcció aleatòria, diagonals incloses, pegant botets
// Boosters
#define BOOST_NONE 0
@@ -202,10 +203,10 @@ namespace actor
void die();
bool isDead();
const int getBoosterFromString(char *booster);
const int getBoosterFromString(const char *booster);
const char *getBoosterName(int booster);
bool giveBooster(char *booster);
void collectBooster(int booster, int id);
void collectBooster(const char *booster, int id);
bool wasBoosterCollected(int id);
int getBoostGod();
int getBoostRun();

View File

@@ -93,7 +93,7 @@ namespace modules
if (act->flags & FLAG_SPECIAL)
{
if (act->name[0]=='B') { // Es un booster
minirooms[room].specials |= actor::hero::getBoosterFromString(&act->name[2]);
minirooms[room].specials |= actor::hero::getBoosterFromString(&act->name[5]);
} else if (act->name[0]=='S') { // Es un skill
minirooms[room].specials |= (actor::hero::getSkillFromString(&act->name[2])<<8);
} else if (act->name[0]=='P') { // Es una part

View File

@@ -342,7 +342,7 @@ namespace modules
selected->pos.y = floating_position.y*8;
}
draw::draw(148+floating_position.x*16-floating_position.y*16,75+floating_position.x*8+floating_position.y*8,32,16,160,0);
if (input::mouseClk(1)) actor::setFloatingEditing(false);
if (input::mouseClk(1)) { actor::setFloatingEditing(false); room::editor::modify(); }
}
draw::stencil::enable();
@@ -829,9 +829,9 @@ namespace modules
}
line+=10;
changed |= btn_opt("MOVEMNT", 2, line, act->movement, {MOV_NONE, MOV_X, MOV_Y, MOV_Z, MOV_CW, MOV_CCW, MOV_RAND, MOV_RANDV, MOV_HUNT}, {"NONE", "X", "Y", "Z", "CW", "CCW", "RAND", "RANDV", "HUNT"}, 48);
changed |= btn_opt("MOVEMNT", 2, line, act->movement, {MOV_NONE, MOV_X, MOV_Y, MOV_Z, MOV_CW, MOV_CCW, MOV_RAND, MOV_RANDV, MOV_HUNT, MOV_RANDJ}, {"NONE", "X", "Y", "Z", "CW", "CCW", "RAND", "RANDV", "HUNT", "RANDJ"}, 48);
line+=10;
changed |= btn_opt("ANIMCYC", 2, line, act->anim_cycle, {0, 1, 2}, {"0 1 0 2", "0 1 2 3", "0 1 2"}, 48);
changed |= btn_opt("ANIMCYC", 2, line, act->anim_cycle, {0, 1, 2, 3}, {"0 1 0 2", "0 1 2 3", "0 1 2", "0 1 0 1"}, 48);
line+=10;
//draw::print("ANIM SPEED:", 2, 156, 15, 0);