ID:272926
 
I have gone through a lot of Login Screen demos but they never reveal one detail.How the heck does the DM know what's Load,Delete,or Create?Are we suppose to put it on the map?What's happening here?aghhh.
Hm, well usually people make a Screen as they want. Then Map it. then make an obj such as
obj
Create
icon='blahblah.dmi'
icon_state = "blahblah"
Click()
set src in oview(src)
Create()

then they map the Obj over the Create. usually u keep the Icon file for it Transparent so they just see the login.

And when they click it it takes them to the Creat() proc or whatever u named ur Character Creation proc. The Same thing is repeated for Load and Delete. Good luck with ur game
In response to Cyberlord34
So map it?Do I have to create a new map fire?What if I got a file Jpeg?This is quiet confusing @_@
In response to Gr1m d4 r34p3r
Rofl
Hm, Do you have an msn? I could show you easier There.
In response to Cyberlord34
Well I got to go to sleep,maybe you can show me some other time?
Gr1m d4 r34p3r wrote:
I have gone through a lot of Login Screen demos but they never reveal one detail.How the heck does the DM know what's Load,Delete,or Create?Are we suppose to put it on the map?What's happening here?aghhh.

The basic level of a login screen is any image type DM supports (JPG, GIF, DMI, PNG, and to a lesser extent, BMP) stuck onto the map. You then use a series of invisible atomic objects to be clicked on that you place on top of the areas you wish to make clickable on the login screen.

obj
login_screen
icon = 'somefile.jpg'
turf
login_screen
icon = null
layer = 6
mouse_opacity = 2 //this makes this turf take precedence over all other atomic objects at this location for a click, which is useful for an invisible turf sitting on top of a login screen
create //place this over your Create button, for example
Click()
var/mob/m = usr //better typecasted as your game's "logging in" mob
if(istype(m)) m.create_char()

mob/proc
create_char()
src << "You create a character here!"
In response to Gr1m d4 r34p3r
Look.

Make a turf with your login screen image as the icon

turf
loginscreen
icon = 'loginscreen.png'
density = 1
layer = 999


Then you must have the procedure in which a player creates a character or jsut starts the game. Im gonna show youa proc which starts the game.

PLACE THIS TURF WHICH HAS NO ICON OVER THE PLACE WHERE IT SAYS "START" (Just an example)
turf
STARTGAME
Click()
usr.startgame()

When u click on that turf you will be redirected to the game start procedure
mob
proc
startgame()
src.name = src.key // the players name will be their key
src.loc = locate(1,1,1) // coordinates where the player will be located (x,y,z)
world<< "[src] has joined the game!"


ps.
First you have to be located on the login screen when you join the server. To do that, find your login screen on the map and find the coordinates on the middle of the login screen picture then place them like so:

mob
Login()
src.loc = locate(12,13,1) // place coordinates of YOUR login picture
In response to Mobius Evalon
Mobius Evalon wrote:
You then use a series of invisible atomic objects to be clicked on that you place on top of the areas you wish to make clickable on the login screen.

Huh? That's kinda dumb. What you should do is use turfs for the title screen and make the turfs which represent the buttons do something when they're Click()ed... I dunno why you felt the need to do it so backwards.
In response to Kaioken
Kaioken wrote:
Mobius Evalon wrote:
You then use a series of invisible atomic objects to be clicked on that you place on top of the areas you wish to make clickable on the login screen.

Huh? That's kinda dumb. What you should do is use turfs for the title screen and make the turfs which represent the buttons do something when they're Click()ed... I dunno why you felt the need to do it so backwards.

Either way, you end up with the purely graphical segments that do nothing, and the small collection of atomic objects that respond to clicks. The only difference is that using one atomic type for all of these items means that the "clickable" atomic objects will contain their own graphics, and I find it tons easier to reposition a few invisible turfs over a new JPG image as opposed to figuring out which segments of the image go into certain groups of turfs for them to contain their own pieces of the login screen graphic.
In response to Mobius Evalon
You can always just flag the buttons through the map editor's instance editor or something, to make them do something when clicked.
Though when I think about it, both options kinda rely on the buttons falling exactly in convenient 32x32 positions in your image for them to work right (i.e. so everywhere you click on the button works for its function, but it does nothing if you click around a button's edges). To remedy this one method would indeed be to use objs, for the buttons only (and with their edges transparent), so they are above the title screen (turf) graphic (and don't have mouse_opacity=2, of course). Then only clicking the actual buttons does something. Of course, you can do this with just turfs by pixel bounding the buttons using Click()'s params... but that would be a pain. So basically you have to have the buttons' graphics separate.
In response to Kaioken
Can you guys put screen shots?D:
In response to Gr1m d4 r34p3r
Eh... just this once, then, because it may be difficult to understand the layout from words, and because I happen to feel like it at the moment. =P Also, I get to show the worldmy amazing quick-drawing skillz! I'll skip to the best method discussed in this topic, of course.

Basically: for the title screen graphic, you use turfs. These do nothing when clicked. For the buttons, you use objs, which are placed on top of the turfs (which are the title screen graphic). The graphics of the title screen and the clickable buttons must be separate for the end result to work nicely.

Here's an example implementation - it doesn't have to be all exactly like this, it just needs to follow the basic idea. For example, you can store the graphics in different ways/formats if you want.
Here's my title screen - it's stored in one image file (PNG, JPG...):
title screen
Here are my buttons - as they are multiple, separate graphics, I store them as multiple (big) states in a DMI:
Buttons inside a DMI
(These are programmed as icons of atom objects as outlined above:)
turf/title_screen //the main title screen graphic
icon = 'titlescreen.png'

//each button is a separate obj
obj/title_screen_button
icon = 'buttons.dmi'
newc
icon_state = "new"
load
icon_state = "load"
quit
icon_state = "quit"


Now for laying those on the map editor: first, for the title screen area on the map, choose some secluded, sealed-off area on a Z-level that isn't played in (if you have a large map you could have it in a Z-level that's played, just make sure the players can't just walk to the title screen). Here I chose to put it on the 2nd Z-level, and I put a border turf around it (opacity and density 1, and it denies entry even to non-dense objects - normally it can't be passed):
Title screen on the map

Then, afterward, we just lay the button objs on top of the turfs making up the main title graphic:
Buttons on top of the title screen

After that, the title screen is properly set up. All that's left is to program the rest; show the player the title screen when he logs in* (I recommend moving his eye to it on client/New() - remember to change the perspective), and programming what each button does, which can be done by simple Click() overrides on the objs:
obj/title_screen_button
icon = 'buttons.dmi'
newc
icon_state = "new"
Click()
usr << "You create a new character!"
...
load
icon_state = "load"
Click()
usr << "You load a character!"
...
quit
icon_state = "quit"
Click()
usr << "You leave! Bye!"
del usr


*: You may want to tweak the title screen size, player's view size and map icon-size when he sees the title screen in order to make it fit and displayed nicely.
In response to Kaioken
The formatting on this page OWNS Google Chrome. -.-' Looked like the post exploded and started overflowing onto the rest of the page.
In response to AJX
Teh EDITed: Heh. Isn't bad on FF or IE... though my image resizes didn't show as intended due to "crappy" HTML, I fixed it now; perhaps it's more Chrome-friendly now. =P
In response to Kaioken
How did you specified it be on the 2nd Z level 0.o
In response to Gr1m d4 r34p3r
:\ I went to the Map Editor, switched the view to the 2nd z-level, and laid my /turf/title_screen atom there...? (The Map Editor automatically splits big graphics into multiple atoms for you, so it's easy to quickly lay them with one click)
Hopefully you have the basic knowledge of how to map. This isn't Dream Maker 101 :P
In response to Kaioken
Kaioken wrote:
Teh EDITed: Heh. Isn't bad on FF or IE... though my image resizes didn't show as intended due to "crappy" HTML, I fixed it now; perhaps it's more Chrome-friendly now. =P

Yay, I can actually look at the post now. Very pretty.
In response to Kaioken
Yeah I went around and played with the map editor :D.So now I have to work up save files and such.I'm working from scratch.
Personally, my preferred method would be to leave the map panel out of it. I'd just use the skins introduced in 4.x. Something like:

winset(thisClient,"childMainView","left=ViewLoginScreen")


Now, it's real simple to make a login screen, just set up the ViewLoginScreen pane to have all the appropriate buttons. I'm pretty sure you can even set a backdrop on that pane of whatever picture you want. Then, when you need the map, you just swap the map pane back in.

(I can hear it now, "oh, sure, if you want to do it the wimpy way then I guess that'd work, but..." )
In response to Geldonyetich
*grins*
I actually use the same approach (packing most of the skin into a child to switch between 'login' and actual game), but instead of using BYOND's interface elements, I go with the built in browser.
Easy to style with CSS, good graphical support and you could even get some dynamic into it, by applying JavaScript.
Just my two cents though.
Page: 1 2