Jump to content

Campfire to regenerate HP/SP

Recommended Posts

Yesterday, after rambles on Discord with Dastgir and Asheraf,

I've got another Brilliant Idea for a Release from Habilis!


The Idea:

Camp Fire to restore / regenerate HP & SP.

When you sit by the Camp fire, you start feeling the warmth and the comfort, so your HP & SP begin to regenerate.




There is a nice contribution from Meko on that subject 

Menhir (Big rock that possesses magical powers and able to restore Health and Energy of Seekers)

Thanks Meko!

So, I thought to myself, well, that is wonderful, but why not make it portable?


Because, conveniently, there is this NPC sprite :


ID: 10252 (0x280C)


Even more conveniently, there is this item:

7035.gif Matchstick    Item ID# 7035 (Matchstick)


A phosphorus tipped stick that can be used to start a fire.



Dastgir, suggested using this plugin to make this possible:





When you use the item   Matchstick   in your inventory, it will spawn a duplicate of the NPC called Camp Fire.

So that when you are in the field, farming, grinding you could rest.


- You need to sit close to the Camp Fire  (3 cells ) to feel the warmth.

- Anyone can sit by your Camp Fire and rest.

- Camp Fire lasts 2-3 minutes.

- Need to sit for at least 3 seconds to begin feeling the warmth and comfort.

- you cannot start a fire within 5 cells of another Camp Fire.

- If you use a match one more time, old Camp Fire disappears and a new one appears.


I think it will add an element of roleplay and romanticism to the gameplay.

(Habilis is a soft, sensitive and romantic type B38cFIv.jpg).


Expect the Release sometime soon...







Edited by Habilis

Share this post

Link to post
Share on other sites

The animated fire is a relatively new NPC sprite.

I've had a little sprite problem. I will add all the instructions on how to add this sprite if you don't have it

(Basically instructions how to add a custom NPC, server side & client side)



Note that it says in the chat, 

You are feeling warm and cozy.



Share this post

Link to post
Share on other sites

Here is the pre-releae version.

anyone, who feel like it,  can contribute!


prt_fild08,138,364,0	script	Camp Fire#CF	4_BONFIRE,{


	getmapxy(.@map$, .@x, .@y, UNITTYPE_PC);
	getmapxy(.@npc_map$, .@npc_x, .@npc_y, UNITTYPE_NPC);
	if (.@map$ != .@npc_map$ || distance(.@npc_x, .@npc_y, .@x, .@y) > .refill_distance || !(issit())) {
		@camp_fire_regen = 0;
		@camp_fire_tick = 0;
	if(@camp_fire_regen == 1) {
		heal(.refillHP_rate, .refillSP_rate);
	} else {
		if(@camp_fire_tick >= .camp_fire_delay) {
			@camp_fire_regen = 1;
			@camp_fire_tick = 0;
			dispbottom("You are feeling warm and cozy.");
		} else {

	getmapxy(.@npc_map$, .@npc_x, .@npc_y, UNITTYPE_NPC);
	.@count = getunits(BL_PC, .@units[0], false, .@npc_map$, (.@npc_x - .refill_distance),
		(.@npc_y - .refill_distance), (.@npc_x + .refill_distance), (.@npc_y + .refill_distance));

	for (.@i = 0; .@i < .@count; ++.@i) {
		addtimer(rand(.refill_timer),  strnpcinfo(NPC_NAME) + "::OnRefill", .@units[.@i]);

	deltimer(strnpcinfo(NPC_NAME) + "::OnRefill");

	.refillHP_rate = 15;	// number of HP to give every refill
	.refillSP_rate = 5;		// number of SP to give every refill
	.refill_distance = 3;	// max distance from fire HP/SP regeneration will work
	.camp_fire_delay = 5;	// Skip how many ticks before feel warm ;)
	.refill_timer = 300;	// wait rand(X) ms before refil

function	script	F_CreateCFDup	{
	.@nofire_distance = 5;		// How far from other NPCs allowed to make fire.
	.@fire_duration = 60000;	//180000; // 3 minutes (How long will the Camp fire last)
	.@curr_char_id = getarg(0);
	getmapxy(.@mapname$, .@mapx, .@mapy, UNITTYPE_PC);

	if(getmapxy(.@dupe_mapname$, .@dupe_mapx, .@dupe_mapy, UNITTYPE_NPC, sprintf("Camp Fire#CF_%d",.@curr_char_id)) == 0) {
		deltimer(sprintf("Camp Fire#CF_%d::OnRemoveDup", .@curr_char_id));
		duplicateremove(sprintf("Camp Fire#CF_%d", .@curr_char_id));
	if(getunits(BL_NPC, .@units[0], false, .@mapname$, (.@mapx - .@nofire_distance),(.@mapy - .@nofire_distance), (.@mapx + .@nofire_distance), (.@mapy + .@nofire_distance)) > 0) {
		dispbottom("A fire cannot be started here.");
	} else {
		soundeffect ("strike-matchstick.wav",0);
		duplicatenpc("Camp Fire#CF", "Camp Fire", sprintf("CF_%d", .@curr_char_id), .@mapname$, .@mapx, .@mapy, 0);
		addtimer(.@fire_duration, sprintf("Camp Fire#CF_%d::OnRemoveDup", .@curr_char_id));


Here is in the 



	Id: 7035
	AegisName: "Matchstick"
	Name: "Matchstick"
	Type: 2
	Buy: 100
	Weight: 10
	BuyingStore: true
	Delay: 15000
	Script: <" callfunc("F_CreateCFDup", getcharid(CHAR_ID_CHAR)); ">


There is still some work to be done.


Edited by Habilis

Share this post

Link to post
Share on other sites

Hi Habilis, this is my attempts..

Feel free to comment :D


Updated the campfire:

- slowly decrease the effectiveness of healing rate and area range every 10 seconds.

- may use item like wooden block, tree root, to prolong the campfire duration, or increase healing rate and area range too.





Share this post

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Create New...

Important Information

By using this site, you agree to our Terms of Use.