Shadows of Death

Complete Shadows of Death 1.2

No permission to download
Project is completed.

kimono

Well-known member
Thanks danno, I will add a Monster and an Item Book at stage 0 that shows the stats of each entity and works like the SoD How to play.
I'd like to have your opinion on this game and if there is something to improve? :)
 

dai92

Active member
kimono said:
Thanks Damon Caskey for moving this topic and Davpreec for this playthrough ;). I see that you finished the game with 13 lives, so I need to reduce them :D. You miss some bonus levels too; here's the SoD general map:
M2hNcrw.png

One tip: there are 4 hidden feathers in the first levels of the game that gives you each +2 to your max health. So you can have a double lifebar collecting all of them  8) .
kimono no problem buddy :) Yeah i did good and had alot of lives at the end "The dash move is a life saver hahaha" Not sure about reducing live's for people not so good. Maybe either just make them a random pickup and remove them from the shop? Or maybe raise the price of lives in the shop? Oh and nice i didn't know there was hidden stage's i will do another playthrough soon :) Awesome work buddy the game is great :D
 

Mardak

New member
You made a game with a graphic style from Amstrad CPC colors, it is interesting and the sound too.
Congratulations for your work.
 

kimono

Well-known member
Mardak: Thank you for your support ;).
I updated the link with some slight change like explaining how the bonus stage works and some alternative routes:
https://drive.google.com/file/d/1NjnwWctsz2qkk5HdzAvcpbNAi7IvUEVX/view?usp=sharing
The pak file:
https://drive.google.com/file/d/1DOpDKZfbkyWVj0X1XsGeJQsx9_XqgD0m/view?usp=sharing
The pdf notice (only in French currently, the english version will come soon) of the game:
http://amigamuseum.emu-france.info/Fichiers/sites/SOTD/Notice/Shadows%20of%20Death%20-%20Notice.pdf

I've got a question: Kelly has a chargeattack and I wish to make her use only twice per level. Energycost seems to no work here.
Here's how this move is set:
Code:
anim freespecial5 #Charging
	loop	0
	delay	4
	offset	31 80
	bbox 20 0 24 80

	sound	data/voice/kelly_attack.wav	
	frame	data/chars/kelly/charge1.png
	frame	data/chars/kelly/charge2.png
	frame	data/chars/kelly/charge3.png
	@cmd keyLoop "attack" 1
	energycost 	50 1 3	
	@cmd aniChange 2 "ANI_FREESPECIAL6"	
	frame	data/chars/kelly/charge3.png
	
anim freespecial6 #Charge attack
	loop	0
	delay	10
	offset	31 80
	bbox 20 0 24 80
	energycost 	50 1 3 
	sound	data/voice/kelly_taunt.wav		
	frame	data/chars/kelly/charge1.png
	@cmd	Rain "Meteor" 200 400 30 -100 1 -5
	@cmd	Rain "Meteor" 200 400 30 -100 1 -5
	frame	data/chars/kelly/charge2.png
	@cmd	Rain "Meteor" 200 400 30 -100 1 -5
	@cmd	Rain "Meteor" 200 400 30 -100 1 -5
	frame	data/chars/kelly/charge3.png
	@cmd	Rain "Meteor" 200 400 30 -100 1 -5
	@cmd	Rain "Meteor" 200 400 30 -100 1 -5
	frame	data/chars/kelly/charge2.png
	@cmd	SmartDrops "Meteo" 400 1 -5
	@cmd	Rain "Meteor" 200 400 30 -100 1 -5
	@cmd	Rain "Meteor" 200 400 30 -100 1 -5
	frame	data/chars/kelly/charge1.png
	@cmd	Rain "Meteor" 200 400 30 -100 1 -5
	@cmd	Rain "Meteor" 200 400 30 -100 1 -5
	frame	data/chars/kelly/charge2.png
	@cmd	SmartHurt 50 1 1
	frame	data/chars/kelly/charge3.png	
	
anim chargeattack #Used to disable the default engine charge attack
	chargetime 9999
	offset	31 80
	bbox 20 0 24 80
	frame	data/chars/kelly/charge1.png

Code:
void keyLoop(void key, int frame)
{//Loops defined frame if defined key is held
	void self 	= getlocalvar("self");
	int iPIndex = getentityproperty(self,"playerindex");

	if(playerkeys(iPIndex, 0, key)){updateframe(self, frame);}
}

void aniChange(int type, void ani)
{//Change animations
 //Type 0: Default animation changer
 //Type 1: Execute animation changer
 //Type 2: Performattack animation changer
	void self = getlocalvar("self");

    if(type == 0){changeentityproperty(self, "animation", openborconstant(ani));}
	  if(type == 1){executeanimation(self, openborconstant(ani), 1);}
  	if(type == 2){performattack(self, openborconstant(ani), 1);}
}

Is anyone has got an idea how can I make her use only two times? :)
 

Kratus

OpenBOR Developer
Staff member
kimono

If you are using the same charge attack script that we worked on, it's possible to control it easily.

Updated the "ondraw.c" script with a variable to count every time the charge attack is used.
Code:
void main()
{//Hold button to make a charged attack
	void self 	= getlocalvar("self");
	void vAniID = getentityproperty(self,"animationID");
	int iPIndex = getentityproperty(self,"playerindex");
	float delay	= 1; //This is how much time the key need to be held to activate the "charging" animation
	
  if(vAniID != openborconstant("ANI_FREESPECIAL5")){ //Used to not work while charging
    if(playerkeys(iPIndex, 0, "attack")){ //The attack button is held??
      if(getglobalvar("chargeStart"+iPIndex) == NULL()){setglobalvar("chargeStart"+iPIndex, openborvariant("elapsed_time"));} //Start the variable if NULL

      if(openborvariant("elapsed_time") - getglobalvar("chargeStart"+iPIndex) >= delay){ //The delay is reached??
        if(vAniID == openborconstant("ANI_IDLE")){ //The character is in the IDLE animation?? You can add others if want
          int chargeCount = getglobalvar("kellyCharge"+iPIndex); //Kelly's charge attack current counter
          int limit = 2; //Kelly's charge attack limit
          int add = 1;

          if(chargeCount < limit){
            setidle(self, openborconstant("ANI_IDLE")); //Reset to the IDLE instance
            changeentityproperty(self, "velocity", 0, 0, 0); //Reset the current velocity to zero
            executeanimation(self, openborconstant("ANI_FREESPECIAL5"), 1); //Perform the desired animation
            setglobalvar("kellyCharge"+iPIndex, chargeCount+add); //Update Kelly's charge counter value
            setglobalvar("chargeStart"+iPIndex, NULL()); //Erase the variable to be used again
          }
        }
      }
    }
  }

  if(playerkeys(iPIndex, 2, "attack")){ //The attack button is released??
    if(getglobalvar("chargeStart"+iPIndex) != NULL()){setglobalvar("chargeStart"+iPIndex, NULL());} //Erase the variable to be used again
  }
}

Used the "level.c" to reset the variable when a new level starts.
Code:
void main()
{
	//RESET "PLAYED TIME" VARIABLE TO START A NEW COUNT
	setglobalvar("playedCounter", openborvariant("elapsed_time"));

	//RESETS KELLY CHARGE ATTACK COUNTER FOR BOTH PLAYERS
	setglobalvar("kellyCharge0", 0);
	setglobalvar("kellyCharge1", 0);
}

Here's the game file with the new codes:
https://drive.google.com/file/d/1s4lndDnpWa1oQsCUBsqByt_kV_daMtjR/view?usp=sharing
 

kimono

Well-known member
Thanks Kratus, I learned much from the way you set some limited power charges ;). I owe you one for this great script :).
Is it possible to have a spirit charge counter like the shuriken ammo for Billy? (the icon is this from the light spirit entity):
PXCWlnA.png

A wip of the Shadow Book where you can see the stats and the description of the monsters:
0A9p7Xa.gif
 

Kratus

OpenBOR Developer
Staff member
kimono
I'm glad the new code worked well.
Yeah, it's possible to draw a spirit charge counter in the screen, I will take a look.

EDIT: I updated the code with the spirit icon and the total number. In addition, I changed the shuriken event from the "updateentity" to "ondraw" because this first one sometimes will blink, the ondraw event is more stable.

Here's the new file:
https://drive.google.com/file/d/1hPeDjetDY-YpCYsGandS3iDWCBoBf-Lx/view?usp=sharing
 

Mardak

New member
kimono
Thank you for the link I shall test your game in OpenBor from MorphOS where I play the OpenBor games, you don't worry for the manual, I understand a little the French, the OpenBor MorphOS port is from your country.
Again thank you for your work and port, I am a fan of Amstrad CPC games and here I can play a modern Amstrad game.
 

kimono

Well-known member
Kratus: Thank you buddy, this is a great work the counter charge works perfectly ;). I just change the font to use the same for the shuriken weapon and the icon.png image for the lightspirit charge icon. I can't wait to rework with you for the next SOR2X update :D.

Mardak: Here is the english text manual in docx that needs to be verified before the final version:
https://docs.google.com/document/d/13jCeTucYIxFwVjDELVqCI5unrthfNk-s/edit?usp=sharing&ouid=117464010419443964319&rtpof=true&sd=true
Maybye you can open a new subject for a small MorphOS tutorial, so everyone can use it?

My goal is to rediscover the sensations of playing a good old arcade game with some CPC commands (one button and one direction cross key). I will update the archive very soon with some modifications and one alternate path in progress ;) .
 

Mardak

New member
kimono
I can't help you with english manual, my domain of Shaskespere's language isn't so good, sorry.
For the tutorial of your game running on MorphOS, well, it is very easy but in this case you have very easy because the port author in MorphOS is French, and perhaps he will help you better than me, when I shall test it I can write how it works.
 

Mardak

New member
kimono
Well, the game with MorphOS doesn't work very good, settings the filters the game and OpenBor freeze and I have did a hardware reset, the game mode with Kelly level is imposible exit the current game, and the game closed OpenBor when the dead screen was showed.
 

kimono

Well-known member
Thanks Mardak for this feedback. The game uses currently the 6412 Openbor build (and the 7123 version when the engine is ready :) ).
Can you open please the Openborlog.txt and tell me if any error is written here?

I will try to contact the MorphOS developper too in order to solve your problem ;).
 

Mardak

New member
I think that problem is in the OpenBor port because BeWorld still  is improvement the SDL library and perhaps some instructions from OpenBor don't work fine until he fixed the SDL.
 

kimono

Well-known member
Invalid filename can be because of some Openbor ports are case sensitive, that's why I will send you an update tonight if you wish please to retest. The filters error is an engine port problem that can be fixed soon.
 

Mardak

New member
kimono
Ok, I shall test your new version,  the current version already is available to download in MorphOS Storage. But no problem to test your changes, only you must think the eternal problem with projects multiplataform one thing that work in a system in other not and viceversa.
 

dafamily

Active member
Here's my playthrough of the first version bro:

https://www.youtube.com/watch?v=mOfbimjObU0

Pretty awesome and original game man, I liked the concept!!  I didn't know there was hidden rooms I'll have to do another problem some time lol!! 

The only thing for me was if you dropped a weapon and it lands in the some spot as another weapons like the sickle and the nunchucks you'll keep picking up both weapons as they don't disappear!!

Also for the last boss fight I didn't know where to hit him lol, I kept driving up and down lol!!

Other than that, good job man!!  Looking forward to seeing what else you come up with!!
 

kimono

Well-known member
Hi dafamily and thanks for this playthrough ;)
You can take a look at the general map one page before to see at what stages you can find these hidden locations.
There are 4 hidden feathers that gives you +2 to your max health in the standard route.

The weapons are not designed to disappear unless you launch them with a Down, Up, Attack command.
I will add this to the How to play, thanks to mention that ;).

You play an older version of the current game thanthe latest link I posted here, version that you can finish nonetheless :):
https://drive.google.com/file/d/1NjnwWctsz2qkk5HdzAvcpbNAi7IvUEVX/view?usp=sharing
The pak file:
https://drive.google.com/file/d/1DOpDKZfbkyWVj0X1XsGeJQsx9_XqgD0m/view?usp=sharing
I will update the game with some alternate paths too for the replay value.
 

danno

Moderator
Staff member
So I finally got round to playing this game (had no computer for 3 weeks :() I think it's great, I like the colours and music and gameplay, here's some things I would change, shadowslabr's offsets seem misaligned and feels choppy, I'd also change some of the default sound fx like cursor moving and entity's falling on the floor, item sounds too and cat special.

9HmlYcf.png


for the Lucifer battle I would drawmethod scale down 50% the car and normal enemies and have the boss on the other side of the screen static firing projectiles or melee attacks, thats about all I'd change, beautiful game, congratulations again.

p.s the arcade level was fun
 

kimono

Well-known member
danno: Thank you for your test, you can try the jukebox after finishing the game ;) .
You are right, I need to revise some frames of my Shadowslabr, thank you for pointing that.

For the stage 9, that a good idea to play with the sprites size to make Lucifer more gigantic? I will think about it ;).
Currently, I plan to make more alternate path and here is my template for a stage 9bis (a front view car shooter :) ):
BHPtHQs.gif

This road has 28 frames with a delay 5 and I will add two barriers on sides, a background, some texture to the road and grass.
This is my road0 (I wish to make some curve too), but before going deeper I'm wondering what you guys think about it as my road is symetrical and if it's better to use a drawmethod on a straight road to make the same effect?
bibipXv.png
 
Top Bottom