What kind of art? What kind of future? What kind of engine?
Moderators: Bob the Hamster, marionline, SDHawk
- SwordPlay
- Chemical Slime
- Posts: 966
- Joined: Sun Jan 22, 2017 9:32 am
- Location: London, England
- Contact:
I really want to make a game about a feudal hamster kingdom set during a period of political turmoil and social strife/upheaval...
The main characters are a band of hamster knights, but possibly it would have an eastern setting, with samurai and ninja rather than european style knights.
They also don't have to be hamsters. I made some character graphics for a ragtag group of anthro characters including a plucky nerd bird magical scholar, a charming rodent rogue sophisticate, and a rough'n'tough lion-man kinda thing.
The main characters are a band of hamster knights, but possibly it would have an eastern setting, with samurai and ninja rather than european style knights.
They also don't have to be hamsters. I made some character graphics for a ragtag group of anthro characters including a plucky nerd bird magical scholar, a charming rodent rogue sophisticate, and a rough'n'tough lion-man kinda thing.
- Attachments
-
- They're supposed to be knights of a european/western design (roughly)
- hamsterblade0006.gif (203.64 KiB) Viewed 8515 times
Last edited by SwordPlay on Sat Jun 10, 2017 12:57 pm, edited 2 times in total.
- Bob the Hamster
- Lord of the Slimes
- Posts: 7684
- Joined: Tue Oct 16, 2007 2:34 pm
- Location: Hamster Republic (Ontario Enclave)
- Contact:
- SwordPlay
- Chemical Slime
- Posts: 966
- Joined: Sun Jan 22, 2017 9:32 am
- Location: London, England
- Contact:
Thanks! I'm glad.
it's kind of like an homage?
it's kind of like an homage?
- Attachments
-
- Hamsters of a (possibly) eastern bent
- hamsterblade0009.gif (208.06 KiB) Viewed 8499 times
Last edited by SwordPlay on Thu Sep 07, 2017 5:55 pm, edited 1 time in total.
- SwordPlay
- Chemical Slime
- Posts: 966
- Joined: Sun Jan 22, 2017 9:32 am
- Location: London, England
- Contact:
I'm working on a text adventure engine thing-y.
So far, it has (some) (a few) features.
It has a note-log, which (can) record details automatically. You can also jump to a page number.
I hope to expand this functionality into a quest-log type thing.
Textboxes also have some toggle options, for example, 2 info boxes for each room.
It has 6 player- choices (so far) and I'm not sure how to script them. At this rate, I may as well write everything in the main loop.
I am also planning to have pop-ups displayed on mouse-over/mouse-hover over graphic slices, such as names and short descriptions.
So far, it has (some) (a few) features.
It has a note-log, which (can) record details automatically. You can also jump to a page number.
I hope to expand this functionality into a quest-log type thing.
Textboxes also have some toggle options, for example, 2 info boxes for each room.
It has 6 player- choices (so far) and I'm not sure how to script them. At this rate, I may as well write everything in the main loop.
I am also planning to have pop-ups displayed on mouse-over/mouse-hover over graphic slices, such as names and short descriptions.
- Attachments
-
- toggling various thingummies
- the last night0008.gif (302.8 KiB) Viewed 8359 times
-
- jump to a page number
- the last night0004.gif (81.91 KiB) Viewed 8362 times
Last edited by SwordPlay on Thu Sep 21, 2017 12:01 am, edited 2 times in total.
Looks neat! A little hard to understand what's going on without more realistic examples.
So the log is a record of room descriptions you've read?
I wonder about how you have two pages of description for each room. Is that just for descriptions that don't fit all at once, like clicking to advance to the next box? Seems a little awkward to click in the corner rather than anywhere on the box or a keypress.
I would recommend try to split up the definition of the behaviour of parts of the UI in separate scripts for organisation, rather than mashing everything together in one script.
So the log is a record of room descriptions you've read?
I wonder about how you have two pages of description for each room. Is that just for descriptions that don't fit all at once, like clicking to advance to the next box? Seems a little awkward to click in the corner rather than anywhere on the box or a keypress.
I would recommend try to split up the definition of the behaviour of parts of the UI in separate scripts for organisation, rather than mashing everything together in one script.
- SwordPlay
- Chemical Slime
- Posts: 966
- Joined: Sun Jan 22, 2017 9:32 am
- Location: London, England
- Contact:
The 2 boxes are meant to be separate (static and dynamic information)
The log works by adding the content of a string.
That string is also used to write the other text slices.
If you "Add Note" whenever you write a text slice, it will also appear in the log.
I would like if players clicked on (any) text slices to add them to the log.
Not sure what you mean by that last part.
So far, the user can get text from, and write text to any of the main text slices (2 info boxes, a choice box and a dialogue box) all of which can be sent to the log.
The log works by adding the content of a string.
That string is also used to write the other text slices.
If you "Add Note" whenever you write a text slice, it will also appear in the log.
I would like if players clicked on (any) text slices to add them to the log.
Not sure what you mean by that last part.
So far, the user can get text from, and write text to any of the main text slices (2 info boxes, a choice box and a dialogue box) all of which can be sent to the log.
Statc and dynamic info? OK, intereseting. Unusual. If the dynamic info changes, does it switch to the dynamic page?
I can understand players entering text into the log or a note book, but why are the other boxes modifiable by the player? What's that for?
The last part was in response to "It has 6 player- choices (so far) and I'm not sure how to script them. At this rate, I may as well write everything in the main loop. "
I can understand players entering text into the log or a note book, but why are the other boxes modifiable by the player? What's that for?
The last part was in response to "It has 6 player- choices (so far) and I'm not sure how to script them. At this rate, I may as well write everything in the main loop. "
- SwordPlay
- Chemical Slime
- Posts: 966
- Joined: Sun Jan 22, 2017 9:32 am
- Location: London, England
- Contact:
Ah yeah. Good points. I just wrote a few lines to make each toggle focus on the contents when it is changed.
Sorry about the bit about writing slices. I guess that was confusing.
Players would not be able to write to (any) text slice without text input, and then having the game call a script "Write (slice)"
I can think of a few ways it might be useful, but it is not intended as a gameplay feature. Perhaps for writing to independent slices (pop-ups, or temporary displays), but not game elements themselves. Actually, I might try to integrate something like that (like a journal or codeword feature).
Yes, splitting the behaviours is great advice. Thank you for that. <3
Sorry about the bit about writing slices. I guess that was confusing.
Players would not be able to write to (any) text slice without text input, and then having the game call a script "Write (slice)"
I can think of a few ways it might be useful, but it is not intended as a gameplay feature. Perhaps for writing to independent slices (pop-ups, or temporary displays), but not game elements themselves. Actually, I might try to integrate something like that (like a journal or codeword feature).
Yes, splitting the behaviours is great advice. Thank you for that. <3
Last edited by SwordPlay on Wed Sep 27, 2017 4:16 am, edited 1 time in total.
- SwordPlay
- Chemical Slime
- Posts: 966
- Joined: Sun Jan 22, 2017 9:32 am
- Location: London, England
- Contact:
not sure if something like this already exists. But I'm making it available for anyone interested. You can alter this to make it accept different graphic types too. I cribbed some of it from the ps dictionary
call this from your main loop
and this is a 2-frame version. It works by flipping the sprite.
Both kinds of script are displayed in the gif
call this from your main loop
Code: Select all
script, draw NPC, begin
variable(copy number, su count, current su, suspr)
variable(ID)
variable(s1,s2,s3,s4,s5,s6,s7,s8)
## ID is the NPC to draw on.
## s1-s8 are the graphics to load for each frame
## change alignment to bottom edge for 3d effect
ID:=1
## s1-s8 are the small enemy graphics that will be loaded
s1:=2
s2:=3
s3:=4
s4:=5
s5:=6
s6:=7
s7:=8
s8:=9
su count := NPC copy count(ID)
for (copy number, 0, su count -- 1) do, begin
current su := NPC reference(ID, copy number)
### animating larger graphics by tying them to a walkabout set
IF(
first sprite child(first sprite child(get npc slice(current su))))
THEN(
suspr := first sprite child(first sprite child(get npc slice(current su))) )
ELSE(
IF(NPC frame (current su)==1)THEN(suspr:=load small enemy sprite(s1))
IF(NPC frame (current su)==0)THEN(suspr:=load small enemy sprite(s2))
center slice(suspr)
## Add align/anchor to bottom edge if you prefer
reparent to npc (suspr, current su))
#### update directions
IF(NPC frame (current su)==1)THEN(
SWITCH(NPC direction(current su))DO(
CASE(Left)DO(
replace sprite (suspr, spritetype:small enemy, s7))
CASE(UP)DO(
replace sprite (suspr, spritetype:small enemy, s1))
CASE(DOWN)DO(
replace sprite (suspr, spritetype:small enemy, s5))
CASE(Right)DO(
replace sprite (suspr, spritetype:small enemy, s3))
) ## Switch
) ## THEN
IF(NPC frame (current su)==0)THEN(
SWITCH(NPC direction(current su))DO(
CASE(Left)DO(
replace sprite (suspr, spritetype:small enemy, s8))
CASE(UP)DO(
replace sprite (suspr, spritetype:small enemy, s2))
CASE(DOWN)DO(
replace sprite (suspr, spritetype:small enemy, s6))
CASE(Right)DO(
replace sprite (suspr, spritetype:small enemy, s4))
) ## Switch
) ## THEN
) ## FOR this ID
end
and this is a 2-frame version. It works by flipping the sprite.
Code: Select all
variable(copy number, su count, current su, suspr)
variable(ID)
variable(s1,s2)
ID:=
s1:=
s2:=
su count := NPC copy count(ID)
for (copy number, 0, su count -- 1) do, begin
current su := NPC reference(ID, copy number)
### animating larger graphics by tying them to a walkabout set
IF(
first sprite child(first sprite child(get npc slice(current su))))
THEN(
suspr := first sprite child(first sprite child(get npc slice(current su))) )
ELSE(
IF(NPC frame (current su)==1)THEN(suspr:=load small enemy sprite(s1))
IF(NPC frame (current su)==0)THEN(suspr:=load small enemy sprite(s2))
center slice(suspr)
reparent to npc (suspr, current su))
#### update directions
IF(
NPC direction(current su)==RIGHT)
THEN(
horiz flip sprite(suspr))
ELSE(
horiz flip sprite(suspr, false))
IF(NPC frame (current su)==1)THEN(replace sprite (suspr, spritetype:small enemy, s1))
IF(NPC frame (current su)==0)THEN(replace sprite (suspr, spritetype:small enemy, s2))
- Attachments
-
- trying 8-frame 4-dir small enemy graphics.
The bug enemies are using 2-frame graphics. - NIGHTMARES0004.gif (93.03 KiB) Viewed 8255 times
- trying 8-frame 4-dir small enemy graphics.
Last edited by SwordPlay on Sun Oct 08, 2017 3:21 pm, edited 4 times in total.
Ah, I had wondered exactly what you were doing there! No, I haven't seen anybody else post scripts, nor use, walkabouts larger than hero battle sprites... with the possible exception of Tim-Tim's Tower? I actually wasn't sure whether it was possible change NPC/hero sprites to something with less than 8 frames without getting an error. So yes, those could be useful for people. I recommend you indent your scripts though; these are rather hard to read.
- Spoonweaver
- Liquid Metal King Slime
- Posts: 6516
- Joined: Mon Dec 08, 2008 7:07 am
- Contact:
Yes, you get an error when you try the normal walk tall thing with a non-hero sprite.
Error said something about frames.
Clearly because only walkabout or hero pictures have frames so when you load anything else, there's no frames to animate into.
As far as games where other non-hero graphics are used, The Axe Cop ski game almost used small enemy graphics. However, there are several reasons why using them isn't idle. If you handle the frames yourself, you have to deal with layering yourself too. This includes overhead tiles, map layering, other walkabouts, and possible HUD slices/sprites.
Though, it looks like parenting copies the npc layering? That's pretty interesting, I may need to look into that.
Error said something about frames.
Clearly because only walkabout or hero pictures have frames so when you load anything else, there's no frames to animate into.
As far as games where other non-hero graphics are used, The Axe Cop ski game almost used small enemy graphics. However, there are several reasons why using them isn't idle. If you handle the frames yourself, you have to deal with layering yourself too. This includes overhead tiles, map layering, other walkabouts, and possible HUD slices/sprites.
Though, it looks like parenting copies the npc layering? That's pretty interesting, I may need to look into that.
Last edited by Spoonweaver on Sun Oct 08, 2017 1:22 pm, edited 2 times in total.
Oh, of course, it works because Sword parented another sprite to the walkabout's sprite, rather than changing the walkabout sprite itself.
Yes, parenting any slice to another one means that get drawn together (parents before children). The sorting of slices isn't affected by what children they have; it doesn't matter how far they stick out belong the edges of the parent slice.
You shouldn't have had trouble with the layering for the skiing game. Just parent the slices to the walkabout layer and they'll be automatically layered according to the Y position of their bottom edge, just like walkabouts are. Alternatively, you can parent the slices to some other slice set to "Autosort children: by bottom edge". Note: we forgot to add a script command to set a slice's autosort, so you need to set it in the slice editor instead.
Yes, parenting any slice to another one means that get drawn together (parents before children). The sorting of slices isn't affected by what children they have; it doesn't matter how far they stick out belong the edges of the parent slice.
You shouldn't have had trouble with the layering for the skiing game. Just parent the slices to the walkabout layer and they'll be automatically layered according to the Y position of their bottom edge, just like walkabouts are. Alternatively, you can parent the slices to some other slice set to "Autosort children: by bottom edge". Note: we forgot to add a script command to set a slice's autosort, so you need to set it in the slice editor instead.
- SwordPlay
- Chemical Slime
- Posts: 966
- Joined: Sun Jan 22, 2017 9:32 am
- Location: London, England
- Contact:
but what about when you want layering effects to occur in a plane other than the vertical axis? e.g. diagonal perspectiveTMC wrote: You shouldn't have had trouble with the layering for the skiing game. Just parent the slices to the walkabout layer and they'll be automatically layered according to the Y position of their bottom edge,
In that case, I think that sorting just by Y probably wouldn't look too bad, and probably would be indistinguishable if you stuck to tile-based movement. But to be totally correct you can script the sort order. However, as I said there's not yet a script command to change the autosort type of the walkabout layer. That's not hard to add, though.
Last edited by TMC on Mon Oct 09, 2017 1:38 am, edited 2 times in total.
- SwordPlay
- Chemical Slime
- Posts: 966
- Joined: Sun Jan 22, 2017 9:32 am
- Location: London, England
- Contact:
So I've been cleaning up my scripts.
Here is the script for drawing sprites on NPCs, with 3 variations
1 frame - a static image,
2 frame - corresponds to walk frame,
8 frame - corresponds to full walkabout set
This is intended to be a convenient format that takes arguments for everything.
The first argument is the NPC,
the last argument is the sprite size (1/2/3 correspond to small/med/large)
and the in-between arguments are the sprite numbers.
Anyone may use, repost, modify etc., this script.
I'm sure I didn't quite write it efficiently, but still.
Feel free to use it in your projects!
I enclosed some sprites to test it with.
Here is the script for drawing sprites on NPCs, with 3 variations
1 frame - a static image,
2 frame - corresponds to walk frame,
8 frame - corresponds to full walkabout set
This is intended to be a convenient format that takes arguments for everything.
The first argument is the NPC,
the last argument is the sprite size (1/2/3 correspond to small/med/large)
and the in-between arguments are the sprite numbers.
Anyone may use, repost, modify etc., this script.
I'm sure I didn't quite write it efficiently, but still.
Feel free to use it in your projects!
I enclosed some sprites to test it with.
Code: Select all
## HOW TO USE THIS SCRIPT
## There are 3 commands:
## Draw NPC1. This maps 1 sprite to an NPC.
## Draw NPC2. This maps 2 sprites to an NPCs walk animation, regardless of direction
## Draw NPC8. This maps 8 sprites to an NPCs walkabout
## The first argument is the ID of the NPC you want to draw on.
## The next arguments are the number of the sprites
## The last argument is the sprite type (small/medium/large correspond to 1/2/3)
script,draw NPC1, ID=0, s1=0, size=0, begin
variable(copy number, su count, current su, suspr)
su count := NPC copy count(ID)
for (copy number, 0, su count -- 1) do, begin
current su := NPC reference(ID, copy number)
switch(size)do(
case(1)do(suspr:=load small enemy sprite(s1))
case(2)do(suspr:=load medium enemy sprite(s1))
case(3)do(suspr:=load large enemy sprite(s1))
)
center slice(suspr)
reparent to npc (suspr, current su)
## add anchor/align commands here
end
end
#############################################
script, draw NPC2, ID=0, s1=0, s2=0, size=1, begin
variable(copy number, su count, current su, suspr)
su count := NPC copy count(ID)
for (copy number, 0, su count -- 1) do, begin
current su := NPC reference(ID, copy number)
### animating larger graphics by tying them to a walkabout set
IF(
first sprite child(first sprite child(get npc slice(current su)))
)
THEN(
suspr := first sprite child(first sprite child(get npc slice(current su)))
)
ELSE(
IF(NPC frame (current su)==1)THEN(
switch(size)do(
case(1)do(suspr:=load small enemy sprite(s1))
case(2)do(suspr:=load medium enemy sprite(s1))
case(3)do(suspr:=load large enemy sprite(s1))
)
)
IF(NPC frame (current su)==0)THEN(
switch(size)do(
case(1)do(suspr:=load small enemy sprite(s2))
case(2)do(suspr:=load medium enemy sprite(s2))
case(3)do(suspr:=load large enemy sprite(s2))
)
)
center slice(suspr)
reparent to npc (suspr, current su)
)
#### update directions
IF(
NPC direction(current su)==RIGHT
)
THEN(
horiz flip sprite(suspr)
)
ELSE(
horiz flip sprite(suspr, false)
)
IF(NPC frame (current su)==1)THEN(replace sprite (suspr, spritetype:small enemy, s1))
IF(NPC frame (current su)==0)THEN(replace sprite (suspr, spritetype:small enemy, s2))
)
end
##################################################################################
## Id is the NPC to draw on.
## s1-s8 are the graphics to load for each frame
## change alignment to bottom edge for 3d effect
script, draw NPC8, ID=0, s1=0, s2=0, s3=0, s4=0, s5=0, s6=0, s7=0, s8=0, size=1, begin
variable(copy number, su count, current su, suspr, spritetype)
switch(size)do(
case(1)do(spritetype:=load small enemy sprite)
case(2)do(spritetype:=load medium enemy sprite)
case(3)do(spritetype:=load large enemy sprite)
)
for (copy number, 0, su count -- 1) do, begin
current su := NPC reference(ID, copy number)
### animating larger graphics by tying them to a walkabout set
IF(
first sprite child(first sprite child(get npc slice(current su)))
)
THEN(
suspr := first sprite child(first sprite child(get npc slice(current su)))
)
ELSE(
IF(NPC frame (current su)==1)THEN(
switch(size)do(
case(1)do(suspr:=load small enemy sprite(s1))
case(2)do(suspr:=load medium enemy sprite(s1))
case(3)do(suspr:=load large enemy sprite(s1))
)
)
IF(NPC frame (current su)==0)THEN(
switch(size)do(
case(1)do(suspr:=load small enemy sprite(s2))
case(2)do(suspr:=load medium enemy sprite(s2))
case(3)do(suspr:=load large enemy sprite(s2))
)
center slice(suspr)
reparent to npc (suspr, current su)
## add align/anchor commands for perspective/3d effect such as bases
)
)
#### update directions
IF(NPC frame (current su)==1)THEN(
SWITCH(NPC direction(current su))DO(
CASE(Left)DO(
replace sprite (suspr, spritetype, s7)
)
CASE(UP)DO(
replace sprite (suspr, spritetype, s1)
)
CASE(DOWN)DO(
replace sprite (suspr, spritetype, s5)
)
CASE(Right)DO(
replace sprite (suspr, spritetype, s3)
)
) ## Switch
) ## THEN
IF(NPC frame (current su)==0)THEN(
SWITCH(NPC direction(current su))DO(
CASE(Left)DO(
replace sprite (suspr, spritetype, s8)
)
CASE(UP)DO(
replace sprite (suspr, spritetype, s2)
)
CASE(DOWN)DO(
replace sprite (suspr, spritetype, s6)
)
CASE(Right)DO(
replace sprite (suspr, spritetype, s4)
)
) ## Switch
) ## THEN
) ## FOR full animation
end
- Attachments
-
- doubles for up/down direction
- updown1.bmp (798 Bytes) Viewed 8048 times
-
- doubles for up/down direction
- updown2.bmp (798 Bytes) Viewed 8048 times
-
- left1.bmp (798 Bytes) Viewed 8048 times
-
- left2.bmp (798 Bytes) Viewed 8048 times
-
- right1.bmp (798 Bytes) Viewed 8048 times
-
- right2.bmp (798 Bytes) Viewed 8048 times
Last edited by SwordPlay on Thu Dec 21, 2017 1:36 pm, edited 3 times in total.
"Imagination. Life is your creation."