HavenHold
Elexxorine
19 Mar 2007, 11:16007bond
20 Mar 2007, 06:31Elexxorine
20 Mar 2007, 11:13lyteside
20 Mar 2007, 15:09Elexxorine
20 Mar 2007, 19:04Right bit of info now... Spend two full days with nothing but programming the game and I've managed to do all the battle codes, so now you can attack monsters and players (in pvp zones) and monsters can attack you and other monsters. And monsters can gain exp and level up jsut like players... in fact they run off all the same procedures!!! Scary? Need to tweek it so monsters can attack each toher when there's no palyer in the room though. All shop stuff and equiping works perfectly... Currently doing object cloning and spawning, which with then be expanded for monsters... All npc's can move independant around the maps, follow palyers around, and attack stuff. Feel of the game is good, I've even managed to make independant timers for players to make cutscenes and an intro for palyes (something Tron said couldn't be done in quest, I showed him!). The next stuff on my list is to finish off all the stats stuff, increasing them when you level, and modifiers (base for them at least)... after that all the system stuff for the alpha will be done. Just need to make the real maps and story lines, etc and it'll be ready!!! Tron's helping a bit on story ideas, but I'd appriate anybody else wanting to help on this part of the game (and getting their name on the cedits!!! OMG!!!)
lyteside
20 Mar 2007, 20:07elexxorine wrote:Need to tweek it so monsters can attack each toher when there's no palyer in the room though.
dude, that's what i'm working on right now too! cool.
let me know if there's any code you can share to help with that.
Elexxorine
20 Mar 2007, 20:42lyteside
20 Mar 2007, 21:00GameBoy
21 Mar 2007, 00:08Elexxorine
21 Mar 2007, 12:52Lyteside, I've had a look at your battle codes... Timers are hard to do in multiplayer games and flags go out hte window (but I replaced them with properties!) Anyway here's a look at my codes:
!addto game
command <attack #target2#; /attack #target2#> {
if property <#name[userid]#; dead> then msg <You cannot do that.> else {
set string <target2; $getobjectname(#target2#)$>
if property <#target2#; attackable> then {
msg <You rush to attack $capfirst(#(target2):alias#)$.>
do <player.att(%userid%; #target2#)>
}
else msg <You cannot attack #(target):article#.>
}
}
' this is a really cool rode for npc's, letting them attack players and each other!
afterturn {
for each object in <#quest.currentroom[userid]#> {
if property <#quest.thing#; attackable> and ( #(quest.thing):t_hp# > 0 ) then {
set string <att_mob; #quest.thing#>
if ( #(att_mob):target# =) or ( $locationof(#(att_mob):target#)$ <> $locationof(#att_mob#)$ ) then do <mob_tar> else {
if ( #(att_mob):target# <>) and ( $locationof(#(att_mob):target#)$ = $locationof(#att_mob#)$ ) then {
' do <mob.att(#att_mob#; #(att_mob):target#)>
do <att.att(#att_mob#; #(att_mob):target#)>
}
}
}
}
}
!end
define procedure <mob_tar>
set numeric <att_rand; $rand(1; 10)$>
if ( #(att_mob):aggro# > %att_rand% ) then {
set numeric <att_tars; 0>
for each object in <$locationof(#att_mob#)$> {
if property <#quest.thing#; netplayer> then {
inc <att_tars>
set string <att_tar[att_tars]; #quest.thing#>
}
else {
if property <#quest.thing#; attackable> and ( #quest.thing# <> #att_mob# ) then {
inc <att_tars>
set string <att_tar[att_tars]; #quest.thing#>
}
}
set numeric <att_rand; $rand(1; %att_tars%)$>
if ( $locationof(#att_tars[att_rand]#)$ = $locationof(#att_mob#)$ ) then {
property <#att_mob#; target=#att_tars[att_rand]#>
if property <#(att_mob):target#; netplayer> then {
for each object in <$locationof(#att_mob#)$> {
if property <#quest.thing#; netplayer> then {
if ( #quest.thing# = #(att_mob):target# ) then {
set numeric <us; #(quest.thing):userid#>
if property <#name[us]#; not blind> then msgto <player%us%; You see $capfirst(#(att_mob):alias#)$ rush towards you.>
}
else {
set numeric <us; #(quest.thing):userid#>
set string <att_def; #(att_mob):target#>
if property <#name[us]#; not blind> then msgto <player%us%; You see $capfirst(#(att_mob):alias#)$ rush towards $capfirst(#(att_def):alias#)$.>
}
}
}
}
else {
for each object in <$locationof(#att_mob#)$> {
if property <#quest.thing#; netplayer> then {
set numeric <us; #(quest.thing):userid#>
set string <att_def; #(att_mob):target#>
if property <#name[us]#; not blind> then msgto <player%us%; You see $capfirst(#(att_mob):alias#)$ rush towards $capfirst(#(att_def):alias#)$.>
}
}
}
}
}
end define
define procedure <player.att>
' p1= userid p2=target.
if property <$parameter(2)$; attackable> then {
set string <att_mob; player$parameter(1)$>
' the part where the poor ol' monster finially get to attack.
set string <pa.tar; $parameter(2)$>
if ( $locationof(#pa.tar#)$ = $locationof(#att_mob#)$ ) then {
set string <att_def; #pa.tar#>
' do <player.att2(player%userid%; $parameter(2)$)>
do <att.att(player$parameter(1)$; $parameter(2)$)>
}
else if property <$parameter(2)$; netplayer> then {
set string <pa; player$parameter(1)$>
set string <pa; $locationof(#pa#)$>
if property <#pa#; pvp> then {
set string <att_mob; player$parameter(1)$>
' the part where the poor ol' monster finially get to attack.
set string <pa.tar; $parameter(2)$>
if ( $locationof(#pa.tar#)$ = $locationof(#att_mob#)$ ) then {
set string <att_def; #pa.tar#>
' do <player.att2(player%userid%; $parameter(2)$)>
do <att.att(player$parameter(1)$; $parameter(2)$)>
}
}
else msgto <$parameter(1)$; |crThis is not a PVP zone.|cb>
}
end define
define procedure <att_att>
set string <att_def; $parameter(2)$>
set string <att_mob; $parameter(1)$>
' the part where the poor ol' monster finially get to attack.
if ( #(att_mob):t_dex# > #(att_def):t_agl# ) then {
set numeric <att_da; #(att_mob):t_str# * 10>
set numeric <att_var; >
if ( $rand(1; 2)$ = 1 ) then set numeric <att_da; %att_da% + #(att_mob):t_str#> else set numeric <att_da; %att_da% - #(tt_mob):t_str#>
set numeric <att_da; %att_da% / 10>
set string <att_wep; #(att_mob):equip_weapon#>
if ( #att_wep# =) or ( #att_wep# = ! ) then set numeric <att_wea; 0> else set numeric <att_wea; #(att_wep):damage#>
if ( %att_wea% < 1 ) then set numeric <att_wea; 0>
set numeric <att_da; %att_da% + %att_wea%>
set string <att_arm; #(att_def):total_armour>
if ( %att_arm% < 1 ) then set numeric <att_arm; 0>
set numeric <att_da; %att_da% - %att_arm%>>
set numeric <hp; #(att_def):c_hp#>
set numeric <hp; %hp% - %att_def%>
property <#att_def#; c_hp=%hp%>
if property <#att_def#; netplayer> then {
for each object in <$locationof(#att_mob#)$> {
if property <#quest.thing#; netplayer> then {
if ( #quest.thing# = #att_def# ) then {
set numeric <us; #(quest.thing):userid#>
msgto <player%us%; $capfirst(#(att_mob):alias#)$ attacks you, causing %att_da% damage.>
}
else {
set numeric <us; #(quest.thing):userid#>
if property <#name[us]#; not blind> then msgto <player%us%; $capfirst(#(att_mob):alias#)$ attacks $capfirst(#(att_def):alias#)$, causing %att_da% damage.>
}
}
}
}
else {
for each object in <$locationof(#att_mob#)$> {
if property <#quest.thing#; netplayer> then {
set numeric <us; #(quest.thing):userid#>
if property <#name[us]#; not blind> then msgto <player%us%; $capfirst(#(att_mob):alias#)$ attacks $capfirst(#(att_def):alias#)$, causing %att_da% damage.>
}
}
}
' check if it's dead...
if ( #(att_def):c_hp# < 1 ) then {
property <#att_def#; dead>
if property <#(att_def#; netplayer> then {
do <player.dead(#(att_def):userid#)$>
}
else {
do <mobclear(#att_def#)>
}
set numeric <expm; #(att_def):level#>
set numeric <expm; %expm% * 100>
set numeric <expm; %expm% / #(attmob):level#>
set numeric <expm; %expm% /10>
set numeric <exp; #(att_mob):exp#>
set numeric <exp; %exp% + %expm%>
property <#att_mob#; exp=%exp%>
if property <#att_mob#; netplayer> then do <levelupcheck(#(att_mob):alias#)> else do <levelupcheck(#att_mob#)>
}
}
' and then if it misses.
else {
if property <#att_def#; netplayer> then {
for each object in <$locationof(#att_mob#)$> {
if property <#quest.thing#; netplayer> then {
if ( #quest.thing# = #att_def# ) then {
set numeric <us; #(quest.thing):userid#>
msgto <player%us%; $capfirst(#(att_mob):alias#)$ tries to attack you, but you manage to dodge out of the way.>
}
else {
set numeric <us; #(quest.thing):userid#>
if property <#name[us]#; not blind> then msgto <player%us%; $capfirst(#(att_mob):alias#)$ tries to attack $capfirst(#(att_def):alias#)$, but $capfirst(#(att_def):alias#)$ manages to dodge out of the way.>
}
}
}
}
else {
for each object in <$locationof(#att_mob#)$> {
if property <#quest.thing#; netplayer> then {
set numeric <us; #(quest.thing):userid#>
if property <#name[us]#; not blind> then msgto <player%us%; $capfirst(#(att_mob):alias#)$ tries to attack $capfirst(#(att_def):alias#)$, but $capfirst(#(att_def):alias#)$ manages to dodge out of the way.>
}
}
}
}
end define
Both players and monster use the same battle codes, but have seperate ines for allowing the attack... I'm going to try jsut changing '#quest.currentroom[userid]#' to game on selecting the monsters and test if that allows al monsters to attack. The only fear is if lots of people are playing the afterturn script will go crazy... Oh well that's what the testing is for I guess.Anyway, going to go now, Got a free period, then lunch then another free period so should be able to get lots of programming done.
Also just wondering, how big is your game now? The previous version I had was huge.... Seeing the new stuff you've put I'm wondering how much bigger it is!!
paul_one
21 Mar 2007, 13:54There's bits where you seem to treat players and objects slightly differently - but not really differently at all..
There's also the fact you use "att_mob" quite a bit - surely you'll find that having more than one person fighting will cause this to become confused.
Each procedure should be section-ised, because Quest uses global variables instead of localised variables.. How you can also make it player-centric (if that makes sense) and local is quite tricky.
GameBoy
21 Mar 2007, 16:09Elexxorine
22 Mar 2007, 08:26Tron, yeah... I was going to but it into smaller chunks once tested. The differences between palyer's and monsters are small, for example between using the name and 'player%number%' because palyers and monsters are named differently. I could lob a '[userid]' on the wnd of everthing but then monsters couldn't attack without players...
Btw on Tuesday night I did my first bit of programming in 'Gambas', which is the linux version of say visual basic. It was fun but I hate having to 'dim' all the variables!!! I'm writing a maths program that works out pi using arctans and stuff... and loops! I love loops... lol. Anyway, back to the school type thing.
I really need to test al lthe battle stuff, need to make monsters and a way to spawn them first though... It'll use the small procedures as object cloning! lol. That's what I'll be working on now.
paul_one
22 Mar 2007, 11:11Don't know if gambas is any different to normal VB in alot of ways. There should be an option to turn that off - but it's better programming practice to:It was fun but I hate having to 'dim' all the variables!!!
make a 'data structure' that you require,
get the required amount of memory you need (using dim),
run through the code - using the data structure.
Otherwise, getting a list of variables you're using, etc, is such a pain, plus you could produce multiple variables which serve the same purpose.
I'm sure you'll get it working

Elexxorine
22 Mar 2007, 15:15I was actually wondering if Gameboy ever got his quest emulator working? And wasn't quest built in VB? I think actually thinking of re-making HavenHold into VB sometime but like with its own interface, and maybe graphics insteed of text, but I'll finish the asl version first... spend so much time on it, I deserve to be killed if I was to leave it now...
Tron, I'm going to be sending you a copy of all what I've done early next week so you can test the codes actually work... kk?
My to do list looks a little like this:
The stats stuff is half done, picking up done, going to reverse it for dropping. I've donw cloning but need to do spawning, which will then be applied for mob spawning... I've got drawings off all the maps and the starting cutscenes and so on are practically done, jsut want to tweek them a bit. Once this list is got through, I'll jsut need to put all the people in and do the story lines... and that'll actually prolly be more than the alpha... lol.* skills...
* 'stat_workout' proc.
* picking up and dropping.
* cloning objects from orig's.
* make monster spawning in an arena/whatever.
* Make main city maps and put them in.
* Make sewer maps, plus complex.
* Finish off cut-scenes and other starting off stuff.
* Redo the dieing stuff... with new idea.
Freak
22 Mar 2007, 20:24GameBoy
23 Mar 2007, 02:08As for your visual (I assume 2D?) version of Havenhold, Elex, I can already help you there. http://www.os.nevetsweb.com. M:RPGe was originally an open source project, until M:RPGe 2 in which I wanted to build something that would compete with PlayerWorlds. I decided to go back to making it open source, but I changed the name to Oasis Source.
Our next version includes a Development Suite (Named, DevSuite), which is one peice of software that contains all the development tools needed to construct your world. This DevSuite can be compiled, and released publically allowing people to submit their own ideas, and contribute to the game. With this you could allow your game to be player-constructed, based on a set of rules that players should follow in order to submit new things to the game. Or you can just send the software to your developers.
I already released a couple of versions, the current available version is really different to our upcoming version, and I recommend waiting for v1.0, it'll be great.
Also Elex, I saw you on MSN today, but it wasn't you, it was somebody else! Anyway, I wanted to ask for the website, do you want a plain HTML website, or do you want a website like the Oasis Source site, where you can easily control your content from an admin panel. I can create a skin for it so it looks unique and RPG-ish. Let me know.
Elexxorine
23 Mar 2007, 09:01GameBoy
25 Mar 2007, 02:22I decided to back to it's original roots and release a new open source engine, only this time it's not buggy, it's faster, more secure, and has a new DevSuite program so you can do all your game editing through one peice of software, and share it with other developers.
I know you like programming Elex, get a copy of Visual Basic Studio 6, and Oasis will be a greating learning tool for you.
I'll get the HavenHold website up as soon as possible
007bond
25 Mar 2007, 08:24GameBoy
26 Mar 2007, 02:46I'm now working on the HavenHold website:
http://www.havenhold.co.nr/
What do you think of this:

Elexxorine
26 Mar 2007, 07:57Could you also pm me admin account details for the site, so I can but my stuff on it.
GameBoy
26 Mar 2007, 10:24Elexxorine
26 Mar 2007, 11:30Elexxorine
27 Mar 2007, 10:49Been testing the battle codes loads, killed lots of bugs (mainly typo's) and it now works quite smoothly. Added colours to the battle texts, red for you were hit, green if you hit your target. I also got monster spawning perfect - in the test map whne you enter a room it'll spawn a giant rat for you to kill (A hyper one that always attacks you too), it actually checks to see if there's a spare giant rat in the monster store room, if there is it moves that one to where it wants, otherwise it makes a clone of the 'back-up' copy of the monster and grabs that one. This means that therre's enough rats to go around but the onject will keep being used and reused. (The monsters are moved back to the store room and healed back to normal stats when killed).
There's only normal physical attacks so far with damage changing with your weapon and enemy's armour then an added bit a variance...
I think it's getting very nearly ready for first alpha now. I just to do a few more things and it's ready. Can everybody here who wants to test it let me know somehow? Also if sme-one can come up with a really cool name for the starting city I'll give them a prize!!!
Steve, I'll be needing that server very soon though I amy be able to do some of my own hosting over the holidays... I'd like to get my site in order before them though.... kk??
GameBoy
29 Mar 2007, 09:31Elexxorine
29 Oct 2007, 20:04I'm also making good progress with the actual game content. I want to have 1-2 hours playing material in the release so you can get a good feel for what the game will be like. You'll also be the first to find out about the plot, at least the start of it. Tron knows it already though as he's been helping me get some ideas together and such.
Lot me know if you're interested. I know I've been saying 'almost ready' for ages now but I keep wanting to add more to it. But I've written myself a set list of what to add, and when that's done I'll be releasing it for testing.
Hope this list sounds good! It'll be first released after 1.6 is finished. I'll play it all myself a few times first tom ake sure stuff works ok at least single player, and that there's enough content to keep you going for a while...Alpha 1.6:
Done:
* Skills.
* Redo stats.
* Simple weather system, with visability.
* Make list of bio mods, effects. (don't ask!)
To-Do:
* Finish bio mods.
* Make journal/quest log.
* Add AR to equipable armour.
* Finish 'stat_workout' proc.
Game:
* One section of main city.
* Estimated 1-2 hours game play on release.
Alpha 1.7:
* Timered fast travel (eg: boat, train, spaceships).
* Put laws in (no killing or stealing).
* Bounty system.
* MAGIC.
* Trading.
* Write up poss new battle system.
Game:
* Whole of city, plus outside.
* Continue with the plot.
* 3-5 hours game play.
Alpha 1.8:
* Space travel.
* Prayer owned houses, ships, etc.
Game:
* New world!
* New race?

paul_one
30 Oct 2007, 18:43Whenever I think of things being released I remember some quote I read that nothing is ever 'perfect' when it's released - it's more a balance of setting out specific goals, and getting close enough to have something people can use/enjoy.
The story is cool - although MUDs aren't my bag.
Elexxorine
30 Oct 2007, 18:48Bio mods is neat, it covered all thing that can be different about your body. Such as going blind in one or both eyes, losing them, deafness, super hearing, night vision, gills, lungs, arms, legs, tails, wings.... !