moeng-cvs Mailing List for Moonlight Engine (Page 3)
Status: Alpha
Brought to you by:
b_lindeijer
You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(145) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(226) |
Feb
(13) |
Mar
(5) |
Apr
(13) |
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
(3) |
Nov
|
Dec
(3) |
2007 |
Jan
(4) |
Feb
(27) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <b_l...@us...> - 2004-03-12 19:55:58
|
Update of /cvsroot/moeng/Mamura/tests/netobjs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31148 Modified Files: NetObjects.rb NetSessions.rb Log Message: Some more changes/corrections. I am now convinced this is not the way to do network communication. Index: NetObjects.rb =================================================================== RCS file: /cvsroot/moeng/Mamura/tests/netobjs/NetObjects.rb,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** NetObjects.rb 10 Mar 2004 20:42:59 -0000 1.2 --- NetObjects.rb 12 Mar 2004 19:28:20 -0000 1.3 *************** *** 6,10 **** class NetObjectController ! attr_reader :channel def initialize(netsession, channel) --- 6,10 ---- class NetObjectController ! attr_reader :channel, :server_objs, :netsession def initialize(netsession, channel) *************** *** 16,24 **** @netsession.on_receive(channel) { |message, from| ! self.on_receive(message, from) } end ! def on_receive(message, from) # Extract information from message server_obj = message[0] --- 16,24 ---- @netsession.on_receive(channel) { |message, from| ! receive(message, from) } end ! def receive(message, from) # Extract information from message server_obj = message[0] *************** *** 31,35 **** obj = @server_objs.at(obj_id) if obj ! obj.on_receive(from, mess) end else --- 31,37 ---- obj = @server_objs.at(obj_id) if obj ! obj.receive(from, mess) ! else ! puts "Warning, message received from unknown object!" end else *************** *** 37,44 **** obj = @client_objs.at(obj_id) if obj ! obj.on_receive(mess) elsif @create_closure obj = NetObjectClient.new(obj_id, from, self) ! if @create_closure.call(obj, mess) @client_objs[obj_id] = obj end --- 39,48 ---- obj = @client_objs.at(obj_id) if obj ! obj.receive(mess) elsif @create_closure obj = NetObjectClient.new(obj_id, from, self) ! type = mess[0] ! mess = mess[1] ! if @create_closure.call(obj, type, mess) @client_objs[obj_id] = obj end *************** *** 67,82 **** @server = server @controller = controller end ! def send(message) @server.send(@controller.channel, [true, @obj_id, message]) end ! def on_receive_call(handler) ! @handler = handler end ! def on_receive(message) ! @handler.on_receive(message) if @handler end end --- 71,90 ---- @server = server @controller = controller + @receive_closures = Hash.new end ! def send(type, message) ! message = [type, message] @server.send(@controller.channel, [true, @obj_id, message]) end ! def on_receive(type, &closure) ! @receive_closures[type] = closure end ! def receive(message) ! type = message[0] ! message = message[1] ! @receive_closures[type].call(message) if @receive_closures[type] end end *************** *** 91,98 **** def initialize(controller) @controller = controller ! @obj_id = controller.next_obj_id end ! def send(computers, message) computers.each { |comp| comp.send(@controller.channel, [false, @obj_id, message]) --- 99,111 ---- def initialize(controller) @controller = controller ! ! @obj_id = @controller.next_obj_id ! @controller.server_objs[obj_id] = self ! ! @receive_closures = Hash.new end ! def send(computers, type, message) ! message = [type, message] computers.each { |comp| comp.send(@controller.channel, [false, @obj_id, message]) *************** *** 100,109 **** end ! def on_receive_call(handler) ! @handler = handler end ! def on_receive(computer, message) ! @handler.on_receive(computer, message) if @handler end end --- 113,130 ---- end ! def on_receive(type, &closure) ! @receive_closures[type] = closure end ! def receive(computer, message) ! puts "NetObjectServer receives #{message}" ! type = message[0] ! message = message[1] ! ! if @receive_closures[type] ! @receive_closures[type].call(computer, message) ! else ! puts "No closure defined for message type #{type}" ! end end end Index: NetSessions.rb =================================================================== RCS file: /cvsroot/moeng/Mamura/tests/netobjs/NetSessions.rb,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** NetSessions.rb 10 Mar 2004 20:42:59 -0000 1.2 --- NetSessions.rb 12 Mar 2004 19:28:20 -0000 1.3 *************** *** 19,23 **** # message is expected to be an array, but can in theory be any object # that can be used with the Marshal module ! @tcp_socket.write(Marshal.dump([channel, message])) @tcp_socket.write("\n\n") end --- 19,24 ---- # message is expected to be an array, but can in theory be any object # that can be used with the Marshal module ! packet = [channel, message] ! @tcp_socket.write(Marshal.dump(packet)) @tcp_socket.write("\n\n") end *************** *** 35,77 **** class NetSession - attr_reader :computers - def initialize() @messages = Array.new ! @computers = Array.new @mutex = Mutex.new @receive_closures = Hash.new end def listen(port) ! # Start listening for connections on the given port (spawn a thread for ! # this job) ! Thread.new(port) do |port| ! gs = TCPServer.open(port) ! addr = gs.addr ! addr.shift ! puts("Server is on " + addr.join(":")) ! loop do ! Thread.start(gs.accept) do |socket| # Add a new NetComputer object for connecting computer ! comp = NetComputer.new(socket, self) ! @mutex.synchronize { @computers.push(comp) } ! # Call the closure if defined if (@computer_connected_closure) @computer_connected_closure.call(comp) end ! ! # Wait for messages until computer disconnects ! while incoming = socket.gets(nil) ! message = Marshal.load(incoming) ! print("Server received ", message, "\n") ! @mutex.synchronize { @messages.push([message, comp]) } ! end ! # Disconnected, close and remove for computers array ! puts("Computer disconnected") ! @mutex.synchronize { @computers.delete(comp) } # Call the closure if defined --- 36,83 ---- class NetSession def initialize() @messages = Array.new ! @computers = Hash.new @mutex = Mutex.new @receive_closures = Hash.new end + + def listen_async(port) + # Spawn a thread and start listening there + Thread.new(port) do |port| + listen(port) + end + end def listen(port) ! # Start listening for connections on the given port ! gs = TCPServer.open(port) ! addr = gs.addr ! addr.shift ! puts("Server is on " + addr.join(":")) ! socks = [gs] ! loop do ! nsock = select(socks) ! next if nsock == nil ! for s in nsock[0] ! if s == gs ! ns = s.accept ! socks.push(ns) ! # Add a new NetComputer object for connecting computer ! comp = NetComputer.new(ns, self) ! @mutex.synchronize { @computers[ns] = comp } ! # Call the closure if defined if (@computer_connected_closure) @computer_connected_closure.call(comp) end ! elsif s.eof? # Disconnected, close and remove for computers array ! print(s, " disconnected\n") ! s.close ! socks.delete(s) ! @mutex.synchronize { @computers.delete(s) } # Call the closure if defined *************** *** 79,82 **** --- 85,91 ---- @computer_disconnected_closure.call(comp) end + elsif incoming = s.gets("\n\n") + message = Marshal.load(incoming) + @mutex.synchronize { @messages.push([message, comp]) } end end *************** *** 88,97 **** Thread.new do # Connect to a server at adress:port ! print("Connecting to ", host, ":", port, " ...\n") STDOUT.flush socket = TCPSocket.open(host, port) comp = NetComputer.new(socket, self) ! @computers.push(comp) ! print("Connected to: ", socket.peeraddr.join(":"), "\n") while incoming = socket.gets("\n\n") --- 97,106 ---- Thread.new do # Connect to a server at adress:port ! print("Connecting to ", host, ":", port, " ... ") STDOUT.flush socket = TCPSocket.open(host, port) comp = NetComputer.new(socket, self) ! @computers[socket] = comp ! print("connected\n") while incoming = socket.gets("\n\n") *************** *** 103,107 **** # Disconnected puts("Server disconnected") ! @mutex.synchronize { @computers.delete(comp) } end end --- 112,116 ---- # Disconnected puts("Server disconnected") ! @mutex.synchronize { @computers.delete(socket) } end end *************** *** 125,128 **** --- 134,139 ---- if @receive_closures[channel] @receive_closures[channel].call(mess, from) + else + puts "No closure defined for channel (#{channel})!" end } *************** *** 130,132 **** --- 141,147 ---- } end + + def computers + @computers.values + end end |
From: <b_l...@us...> - 2004-03-10 21:09:06
|
Update of /cvsroot/moeng/Mamura/tests/netobjs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24868 Modified Files: NetObjects.rb NetSessions.rb Log Message: Use closures, and removed some debug messages Index: NetObjects.rb =================================================================== RCS file: /cvsroot/moeng/Mamura/tests/netobjs/NetObjects.rb,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** NetObjects.rb 4 Mar 2004 17:47:43 -0000 1.1 --- NetObjects.rb 10 Mar 2004 20:42:59 -0000 1.2 *************** *** 11,23 **** @netsession = netsession @channel = channel - @netsession.on_receive_call(channel, self) @next_obj_id = -1 @client_objs = Array.new @server_objs = Array.new end def on_receive(message, from) ! print("ObjectController received ", message, "\n") ! server_obj = message[0] obj_id = message[1] --- 11,25 ---- @netsession = netsession @channel = channel @next_obj_id = -1 @client_objs = Array.new @server_objs = Array.new + + @netsession.on_receive(channel) { |message, from| + self.on_receive(message, from) + } end def on_receive(message, from) ! # Extract information from message server_obj = message[0] obj_id = message[1] *************** *** 36,42 **** if obj obj.on_receive(mess) ! elsif @creator obj = NetObjectClient.new(obj_id, from, self) ! if @creator.on_create(obj, mess) @client_objs[obj_id] = obj end --- 38,44 ---- if obj obj.on_receive(mess) ! elsif @create_closure obj = NetObjectClient.new(obj_id, from, self) ! if @create_closure.call(obj, mess) @client_objs[obj_id] = obj end *************** *** 45,50 **** end ! def on_create_call(creator) ! @creator = creator end --- 47,52 ---- end ! def on_create(&closure) ! @create_closure = closure end *************** *** 76,79 **** --- 78,82 ---- def on_receive(message) + @handler.on_receive(message) if @handler end end *************** *** 102,105 **** --- 105,109 ---- def on_receive(computer, message) + @handler.on_receive(computer, message) if @handler end end Index: NetSessions.rb =================================================================== RCS file: /cvsroot/moeng/Mamura/tests/netobjs/NetSessions.rb,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** NetSessions.rb 4 Mar 2004 17:47:43 -0000 1.1 --- NetSessions.rb 10 Mar 2004 20:42:59 -0000 1.2 *************** *** 1,9 **** # $Id$ # The network session. This class can function as a server to which clients can # connect or it can connect to a server itself, or both. class NetComputer ! attr_reader :netsession def initialize(tcp_socket, netsession) --- 1,13 ---- # $Id$ + require 'socket' + require 'thread' + + # The network session. This class can function as a server to which clients can # connect or it can connect to a server itself, or both. class NetComputer ! attr_reader :netsession, :tcp_socket def initialize(tcp_socket, netsession) *************** *** 15,20 **** # message is expected to be an array, but can in theory be any object # that can be used with the Marshal module - print("Marshalling ", message, " to computer ") - print(@tcp_socket.peeraddr[1], " on channel ", channel, "\n") @tcp_socket.write(Marshal.dump([channel, message])) @tcp_socket.write("\n\n") --- 19,22 ---- *************** *** 39,43 **** @computers = Array.new @mutex = Mutex.new ! @receivers = Hash.new end --- 41,45 ---- @computers = Array.new @mutex = Mutex.new ! @receive_closures = Hash.new end *************** *** 53,64 **** loop do Thread.start(gs.accept) do |socket| comp = NetComputer.new(socket, self) - puts("New computer connecting") - - # Add to computers array @mutex.synchronize { @computers.push(comp) } ! ! print(socket, " is accepted\n") ! print(@computers.length, " computers connected\n") # Wait for messages until computer disconnects --- 55,66 ---- loop do Thread.start(gs.accept) do |socket| + # Add a new NetComputer object for connecting computer comp = NetComputer.new(socket, self) @mutex.synchronize { @computers.push(comp) } ! ! # Call the closure if defined ! if (@computer_connected_closure) ! @computer_connected_closure.call(comp) ! end # Wait for messages until computer disconnects *************** *** 72,75 **** --- 74,82 ---- puts("Computer disconnected") @mutex.synchronize { @computers.delete(comp) } + + # Call the closure if defined + if (@computer_disconnected_closure) + @computer_disconnected_closure.call(comp) + end end end *************** *** 84,97 **** STDOUT.flush socket = TCPSocket.open(host, port) - print("Connected from: ", socket.addr.join(":"), "\n") - print("Connected to: ", socket.peeraddr.join(":"), "\n") comp = NetComputer.new(socket, self) @computers.push(comp) ! print("Connected to ", @computers.length, " computers\n") ! ! print("Listening to server socket\n") while incoming = socket.gets("\n\n") message = Marshal.load(incoming) - print(socket.addr[1], " client received ", message, "\n") @mutex.synchronize { @messages.push([message, comp]) } end --- 91,101 ---- STDOUT.flush socket = TCPSocket.open(host, port) comp = NetComputer.new(socket, self) @computers.push(comp) ! print("Connected to: ", socket.peeraddr.join(":"), "\n") ! while incoming = socket.gets("\n\n") + # Unmarshal the message and put it in the messages queue message = Marshal.load(incoming) @mutex.synchronize { @messages.push([message, comp]) } end *************** *** 103,108 **** end ! def on_receive_call(channel, receiver) ! @receivers[channel] = receiver end --- 107,116 ---- end ! def on_receive(channel, &closure) ! @receive_closures[channel] = closure ! end ! ! def on_computer_connected(&closure) ! @computer_connected_closure = closure end *************** *** 115,120 **** from = message[1] ! if @receivers[channel] ! @receivers[channel].on_receive(mess, from) end } --- 123,128 ---- from = message[1] ! if @receive_closures[channel] ! @receive_closures[channel].call(mess, from) end } |
From: <b_l...@us...> - 2004-03-04 18:09:08
|
Update of /cvsroot/moeng/Mamura/tests/netobjs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32227 Added Files: NetObjects.rb NetSessions.rb Log Message: Added implementation of ClanLib's network objects model. --- NEW FILE: NetObjects.rb --- # $Id: NetObjects.rb,v 1.1 2004/03/04 17:47:43 b_lindeijer Exp $ # The NetObjectController controls a group of network objects over a single # communications channel. Incoming messages are send through to the objects # they belong to. When at the client there is no such object, it is created. class NetObjectController attr_reader :channel def initialize(netsession, channel) @netsession = netsession @channel = channel @netsession.on_receive_call(channel, self) @next_obj_id = -1 @client_objs = Array.new @server_objs = Array.new end def on_receive(message, from) print("ObjectController received ", message, "\n") server_obj = message[0] obj_id = message[1] mess = message[2] # Message can be either from server or client if server_obj # Junk if object doesn't exist obj = @server_objs.at(obj_id) if obj obj.on_receive(from, mess) end else # Maybe we need to create it obj = @client_objs.at(obj_id) if obj obj.on_receive(mess) elsif @creator obj = NetObjectClient.new(obj_id, from, self) if @creator.on_create(obj, mess) @client_objs[obj_id] = obj end end end end def on_create_call(creator) @creator = creator end def next_obj_id @next_obj_id += 1 end end # A networked object at the client. It sends messages to its server # equivalent and dispatches incoming messages to the registered handler. class NetObjectClient attr_reader :obj_id def initialize(obj_id, server, controller) @obj_id = obj_id @server = server @controller = controller end def send(message) @server.send(@controller.channel, [true, @obj_id, message]) end def on_receive_call(handler) @handler = handler end def on_receive(message) end end # A networked object at the server. It can send messages to any group of # clients. Incoming messages are dispatches to the registered handler. class NetObjectServer attr_reader :obj_id def initialize(controller) @controller = controller @obj_id = controller.next_obj_id end def send(computers, message) computers.each { |comp| comp.send(@controller.channel, [false, @obj_id, message]) } end def on_receive_call(handler) @handler = handler end def on_receive(computer, message) end end --- NEW FILE: NetSessions.rb --- # $Id: NetSessions.rb,v 1.1 2004/03/04 17:47:43 b_lindeijer Exp $ # The network session. This class can function as a server to which clients can # connect or it can connect to a server itself, or both. class NetComputer attr_reader :netsession def initialize(tcp_socket, netsession) @tcp_socket = tcp_socket @netsession = netsession end def send(channel, message) # message is expected to be an array, but can in theory be any object # that can be used with the Marshal module print("Marshalling ", message, " to computer ") print(@tcp_socket.peeraddr[1], " on channel ", channel, "\n") @tcp_socket.write(Marshal.dump([channel, message])) @tcp_socket.write("\n\n") end def disconnect() # Disconnect this computer from the server # to be implemented end end # The network session can be both a server and a client, or one of the two. # It dispatches communication to registered callbacks determined by the # channel. class NetSession attr_reader :computers def initialize() @messages = Array.new @computers = Array.new @mutex = Mutex.new @receivers = Hash.new end def listen(port) # Start listening for connections on the given port (spawn a thread for # this job) Thread.new(port) do |port| gs = TCPServer.open(port) addr = gs.addr addr.shift puts("Server is on " + addr.join(":")) loop do Thread.start(gs.accept) do |socket| comp = NetComputer.new(socket, self) puts("New computer connecting") # Add to computers array @mutex.synchronize { @computers.push(comp) } print(socket, " is accepted\n") print(@computers.length, " computers connected\n") # Wait for messages until computer disconnects while incoming = socket.gets(nil) message = Marshal.load(incoming) print("Server received ", message, "\n") @mutex.synchronize { @messages.push([message, comp]) } end # Disconnected, close and remove for computers array puts("Computer disconnected") @mutex.synchronize { @computers.delete(comp) } end end end end def connect(host, port) # Start a thread listening for incoming messages Thread.new do # Connect to a server at adress:port print("Connecting to ", host, ":", port, " ...\n") STDOUT.flush socket = TCPSocket.open(host, port) print("Connected from: ", socket.addr.join(":"), "\n") print("Connected to: ", socket.peeraddr.join(":"), "\n") comp = NetComputer.new(socket, self) @computers.push(comp) print("Connected to ", @computers.length, " computers\n") print("Listening to server socket\n") while incoming = socket.gets("\n\n") message = Marshal.load(incoming) print(socket.addr[1], " client received ", message, "\n") @mutex.synchronize { @messages.push([message, comp]) } end # Disconnected puts("Server disconnected") @mutex.synchronize { @computers.delete(comp) } end end def on_receive_call(channel, receiver) @receivers[channel] = receiver end def keep_alive() # Call callback for each received message @mutex.synchronize { @messages.each { |message| channel = message[0][0] mess = message[0][1] from = message[1] if @receivers[channel] @receivers[channel].on_receive(mess, from) end } @messages.clear } end end |
From: <b_l...@us...> - 2004-03-04 18:00:57
|
Update of /cvsroot/moeng/Mamura/tests/netobjs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30009/netobjs Log Message: Directory /cvsroot/moeng/Mamura/tests/netobjs added to the repository |
From: <b_l...@us...> - 2004-03-04 16:11:40
|
Update of /cvsroot/moeng/Mamura/tests In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5428/tests Log Message: Directory /cvsroot/moeng/Mamura/tests added to the repository |
From: <b_l...@us...> - 2004-02-17 19:37:47
|
Update of /cvsroot/moeng/Mamura/doc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30587 Modified Files: network.tex Log Message: An alternative to druby Index: network.tex =================================================================== RCS file: /cvsroot/moeng/Mamura/doc/network.tex,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** network.tex 16 Feb 2004 23:59:57 -0000 1.1 --- network.tex 17 Feb 2004 19:28:47 -0000 1.2 *************** *** 61,65 **** now. It should get the idea across. ! Below is a fracment based on a bit of UnrealScript. It is just I don't know if this is at all a convenient and efficient way to go about things. --- 61,65 ---- now. It should get the idea across. ! Below is a fragment based on a bit of UnrealScript. It is just I don't know if this is at all a convenient and efficient way to go about things. *************** *** 72,79 **** function Move(destination) function ServerMove(destination) ! var destX, destY; ! var weapon; client_to_server(:ServerChangeWeapon, :ServerMove) --- 72,84 ---- function Move(destination) + { + if (role < ROLE_Authority) { + ServerMove(destination) + } + } function ServerMove(destination) ! var destX, destY ! var weapon client_to_server(:ServerChangeWeapon, :ServerMove) *************** *** 82,85 **** --- 87,187 ---- \end{verbatim} + In the above model we try to describe both the object on the server + and the object on the client with the same code, transparently doing + remote function calls and synchronizing variables in the + background. This is the way Unreal Tournament works. + + Now I'll try to discuss an alternative, without transparent function + calls but using explicit server and client versions of the + objects. This is based on ClanLib's network code. + + \begin{verbatim} + class ServerPawn + { + ServerPawn(NetObject_Controller noc, Comp owner) { + this->netobj = new NetObj(noc) + this->owner = owner + } + + OnReceivePacket(comp, packet) + { + // Only allow object owner to change destination/weapon. + // Maybe better to check transparently, when would you want a + // non-owner to send a packet to an object? + if (comp != owner) return + + // packet is array of values, packet[0] determines type + switch (packet[0]) { + case NEW_DESTINATION: destX = packet[1]; destY = packet[2] + case NEW_WEAPON: weapon = packet[1] + } + + // TODO: + // When to update all clients? + // Tell them only about reached places? + // Don't allow network spamming by changing weapon all the + // time? + } + + var netobj + var owner + var destX, destY + var weapon + } + + class ClientPawn + { + ClientPawn(netobj, packet) + { + // Use packet to initialize ourself (should have been checked + // to be of type CREATE first?) + } + + OnReceivePacket(packet) + { + // Basically the same as on the server, might be a different + // set of messages. + + // No Comp as parameter, because the message will always be + // from the server of our netobj (possibility of multliple servers + // comes to mind). + } + + Move(destination) + { + packet = Array(NEW_DESTINATION, destination.x, destination.y) + netobj.send(packet) + } + + ChangeWeapon(weapon) + { + netobj.send(Array(NEW_WEAPON, weapon)) + } + + var destX, destY + var weapon + var netobj + } + \end{verbatim} + + Some object will need to be network-enabled while others (or even + most) won't need this. Static objects implied by the map don't need + any communication and neither will any dynamic object implied by + casting a spell or walking through a splash of water. + + Two things might be interesting to consider. One is to get rid of the + netobj variable and have the ServerPawn and ClientPawn itself be this + netobj either by inheritance or mix-in (something Ruby + offers). Another thing is to try and keep the server and client code + within one class as done in Unreal Tournament. A lot of code will be + the same and it might be tedious to write two classes for each + network-enabled object. + + On a final note, it might be nice to get rid of the switch statement + checking packet type. An alternative would be to allow binding + different functions to different packet types. This would make it + closer to the Distributed Ruby case described earlier. + + TODO: Write about creation of new objects. |
From: <b_l...@us...> - 2004-02-17 00:10:27
|
Update of /cvsroot/moeng/Mamura/doc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8581 Added Files: .cvsignore Log Message: Ignore LaTeX products. --- NEW FILE: .cvsignore --- *.toc *.log *.dvi *.aux *.pdf |
From: <b_l...@us...> - 2004-02-17 00:08:19
|
Update of /cvsroot/moeng/Mamura/doc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8191 Added Files: network.tex Log Message: Added initial network document draft. --- NEW FILE: network.tex --- \documentclass[10pt,english]{report} \usepackage{graphics, bookman, geometry, verbatim, babel} \geometry{a4paper} \setlength \parskip{\bigskipamount} \setlength \parindent{0pt} \begin{document} \title{The Network Model} \author{Bj\o rn Lindeijer} \maketitle \tableofcontents \chapter{Introduction} \section{Problem Analysis} The goal of the network model is to allow for a large number of clients to be kept in sync with the server without using much bandwidth. A second goal is to achieve playability with high (say 300ms) lag. The bulk of the game will be scripted, with the engine only handling the low level rendering tasks and resource management. We'll have to decide if the engine will handle the networking aspect for the scripts, or if the networking aspect is an integral part of the scripts. I think the latter will be easier. Three ways of reducing data transfer seem most effictive. First, use small data primitives where possible. Second, send data from which a lot of other things can be derived\footnote{Here I'm thinking about sending destination instead of current position, for example.}. And lastly, send only relevant data to the clients\footnote{Sending only data about objects the client can see is both in the interest of bandwidth and security, in that you can't modify the client to be able to see more than others.}. \section{Ruby} Ruby\footnote{http://www.ruby-lang.org/} is currently the language of choice. There is an extention module, Distributed Ruby\footnote{http://www2a.biglobe.ne.jp/~seki/ruby/druby.en.html} available to allow transparent remote method invocation similar to Java RMI. This might be interesting to use. Druby cannot be used for updating all the objects for each client. Only a few direct functions calls can be issued each second, and this will quickly become too few when more clients start connecting. This is why next to this there needs to be another way in which most of the objects will be kept up to date on the clients. \section{Variable Synchronization} ClanLib\footnote{http://www.clanlib.org/} has helper classes for synchronizing objects on the client and server. These could form a good base for object creation and removal and variable synchronization. \section{Some example code} I haven't written any Ruby code yet, so this is pseudo code for now. It should get the idea across. Below is a fracment based on a bit of UnrealScript. It is just I don't know if this is at all a convenient and efficient way to go about things. \begin{verbatim} class Pawn { function ChangeWeapon(weapon) function ServerChangeWeapon(weapon) function Move(destination) function ServerMove(destination) var destX, destY; var weapon; client_to_server(:ServerChangeWeapon, :ServerMove) server_to_client(:destX, :destY, :weapon) } \end{verbatim} \chapter{Server in detail} \chapter{Client in detail} \end{document} |
From: <b_l...@us...> - 2004-02-17 00:06:56
|
Update of /cvsroot/moeng/Mamura/doc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7939/doc Log Message: Directory /cvsroot/moeng/Mamura/doc added to the repository |
From: <geo...@us...> - 2004-02-08 15:41:14
|
Update of /cvsroot/moeng/BBRpg/data/maps In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6232/data/maps Modified Files: cells.map city1.map sewers1.map Log Message: - Added most of the sidewalls in the sewers and prison to the second layer. Some problems however couldn't be resolved this way. Index: cells.map =================================================================== RCS file: /cvsroot/moeng/BBRpg/data/maps/cells.map,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 Binary files /tmp/cvsF7wHtc and /tmp/cvstFCeNo differ Index: city1.map =================================================================== RCS file: /cvsroot/moeng/BBRpg/data/maps/city1.map,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 Binary files /tmp/cvs3TXlLe and /tmp/cvshSxz6q differ Index: sewers1.map =================================================================== RCS file: /cvsroot/moeng/BBRpg/data/maps/sewers1.map,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 Binary files /tmp/cvslEB3sh and /tmp/cvsvyh6Pt differ |
From: <geo...@us...> - 2004-02-08 14:57:03
|
Update of /cvsroot/moeng/BBRpg/data/bitmaps In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29928/data/bitmaps Modified Files: tiles_subcity.bmp Log Message: - removed white lines in tha houses - corrected mistakes in the map in the restplace (needed some extra tiles) - corrected some spellingmistakes - now different things are said when leaving the bed, corresponding to the player health (still buggy) Index: tiles_subcity.bmp =================================================================== RCS file: /cvsroot/moeng/BBRpg/data/bitmaps/tiles_subcity.bmp,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 Binary files /tmp/cvsa9gSDn and /tmp/cvsvyYQG4 differ |
From: <geo...@us...> - 2004-02-08 14:57:03
|
Update of /cvsroot/moeng/BBRpg/data/scripts In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29928/data/scripts Modified Files: BBRpgLang.lua BBRpgLangDutch.lua JakesPlace.lua SubcityObjects.lua Log Message: - removed white lines in tha houses - corrected mistakes in the map in the restplace (needed some extra tiles) - corrected some spellingmistakes - now different things are said when leaving the bed, corresponding to the player health (still buggy) Index: BBRpgLang.lua =================================================================== RCS file: /cvsroot/moeng/BBRpg/data/scripts/BBRpgLang.lua,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** BBRpgLang.lua 7 Feb 2004 18:30:00 -0000 1.33 --- BBRpgLang.lua 8 Feb 2004 14:53:59 -0000 1.34 *************** *** 381,385 **** }, Lamppost = { ! {{"{PLAYER}", "Het is een lantaarnpaal."}}, }, FenceToCells = { --- 381,385 ---- }, Lamppost = { ! {{"{PLAYER}", "It's a lamppost."}}, }, FenceToCells = { *************** *** 389,392 **** --- 389,397 ---- {{"{PLAYER}", "According to the map there should be some levers on the other side of this fence."}}, }, + BedTiredAfterTable = { + {{"{PLAYER}", "I'm feeling kind of tired."}}, + {{"{PLAYER}", "I'm feeling not to bad."}}, + {{"{PLAYER}", "Ah, I'm feeling great!"}}, + }, }; Index: BBRpgLangDutch.lua =================================================================== RCS file: /cvsroot/moeng/BBRpg/data/scripts/BBRpgLangDutch.lua,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** BBRpgLangDutch.lua 7 Feb 2004 18:30:01 -0000 1.8 --- BBRpgLangDutch.lua 8 Feb 2004 14:53:59 -0000 1.9 *************** *** 376,379 **** --- 376,385 ---- {{"{PLAYER}", "Volgens de kaart zouden er aan de andere kant van dit hek hendels moeten zijn."}}, }, + BedTiredAfterTable = { + {{"{PLAYER}", "Ik voel me nog steeds moe."}}, + {{"{PLAYER}", "Ik voel me redelijk."}}, + {{"{PLAYER}", "Ah, ik voel me geweldig!"}}, + }, + }; Index: JakesPlace.lua =================================================================== RCS file: /cvsroot/moeng/BBRpg/data/scripts/JakesPlace.lua,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** JakesPlace.lua 13 Jan 2004 16:32:35 -0000 1.6 --- JakesPlace.lua 8 Feb 2004 14:53:59 -0000 1.7 *************** *** 16,20 **** self.doorPortal:setOutDir(DIR_UP) ! self:spawn(WallJakesPlace, 5, 21); self:spawn(Keyboard, 10, 17); self:spawn(Onderstel, 10, 17); --- 16,20 ---- self.doorPortal:setOutDir(DIR_UP) ! --self:spawn(WallJakesPlace, 5, 21); self:spawn(Keyboard, 10, 17); self:spawn(Onderstel, 10, 17); Index: SubcityObjects.lua =================================================================== RCS file: /cvsroot/moeng/BBRpg/data/scripts/SubcityObjects.lua,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -d -r1.39 -r1.40 *** SubcityObjects.lua 13 Jan 2004 16:32:35 -0000 1.39 --- SubcityObjects.lua 8 Feb 2004 14:53:59 -0000 1.40 *************** *** 196,204 **** ActionSetVariable(obj, "dir", DIR_DOWN), ActionChangeBitmap(self, bitmapje), ! ActionConversation(lang:getConv("BedTiredAfter")), ActionSetVariable(obj, "obstacle", 1), ActionSetVariable(self, "bOccupied", false), } ! end), } else --- 196,204 ---- ActionSetVariable(obj, "dir", DIR_DOWN), ActionChangeBitmap(self, bitmapje), ! ActionConversation(lang:getConv("BedTiredAfterTable")[math.floor(table.getn(lang:getConv("BedTiredAfterTable")) * obj.health / obj.maxHealth) + 1]), ActionSetVariable(obj, "obstacle", 1), ActionSetVariable(self, "bOccupied", false), } ! end),get_new_n(self.prev_random, table.getn(self.convTable)) } else |
From: <geo...@us...> - 2004-02-08 14:57:03
|
Update of /cvsroot/moeng/BBRpg/data/maps In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29928/data/maps Modified Files: jakesplace.map restplace.map Log Message: - removed white lines in tha houses - corrected mistakes in the map in the restplace (needed some extra tiles) - corrected some spellingmistakes - now different things are said when leaving the bed, corresponding to the player health (still buggy) Index: jakesplace.map =================================================================== RCS file: /cvsroot/moeng/BBRpg/data/maps/jakesplace.map,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 Binary files /tmp/cvsYX7QSl and /tmp/cvsVYSLT2 differ Index: restplace.map =================================================================== RCS file: /cvsroot/moeng/BBRpg/data/maps/restplace.map,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 Binary files /tmp/cvsCahC4t and /tmp/cvs2Dul9a differ |
From: <geo...@us...> - 2004-02-08 14:57:01
|
Update of /cvsroot/moeng/BBRpg In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29928 Modified Files: TODO Log Message: - removed white lines in tha houses - corrected mistakes in the map in the restplace (needed some extra tiles) - corrected some spellingmistakes - now different things are said when leaving the bed, corresponding to the player health (still buggy) Index: TODO =================================================================== RCS file: /cvsroot/moeng/BBRpg/TODO,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -d -r1.39 -r1.40 *** TODO 7 Feb 2004 18:30:00 -0000 1.39 --- TODO 8 Feb 2004 14:53:57 -0000 1.40 *************** *** 22,34 **** - Experience/levelup weergeven ? Fix brother still lying in bed when he slept Georg: - ? Witte lijntjes in Jake's optrekje wegwerken - - Corpses should not be obstacles in most of the cases - - Different messages corresponding to different percentages of - maxHealth when leaving the bed. - Record new sounds. - - Get rid of mistakes in the map of restplace - - `Al I need' Frode: --- 22,29 ---- - Experience/levelup weergeven ? Fix brother still lying in bed when he slept + - Corpses should not be obstacles in most of the cases Georg: - Record new sounds. Frode: |
From: <b_l...@us...> - 2004-02-07 19:16:48
|
Update of /cvsroot/moeng/BBRpg In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16650 Modified Files: Makefile.in Log Message: This can go. Index: Makefile.in =================================================================== RCS file: /cvsroot/moeng/BBRpg/Makefile.in,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** Makefile.in 13 Jan 2004 16:32:34 -0000 1.7 --- Makefile.in 7 Feb 2004 19:03:23 -0000 1.8 *************** *** 15,21 **** ENGINE_OBJS := $(patsubst %.cpp, %.o, $(wildcard src/*.cpp)) COMMON_LIBS := @libs@ - #COMMON_LIBS := -lalleg -llua -llualib ENGINE_LIBS := @libs_engine@ - #ENGINE_LIBS := =lalogg -logg -lvorbis -lvorbisfile -lvorbisenc DATA_LUA := $(wildcard data/scripts/*.lua) --- 15,19 ---- |
From: <geo...@us...> - 2004-02-07 18:33:26
|
Update of /cvsroot/moeng/BBRpg/data/scripts In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10017/data/scripts Modified Files: BBRpgLang.lua BBRpgLangDutch.lua Sewers.lua Log Message: - Changed a spellingmistake and added several things to the TODO list Index: BBRpgLang.lua =================================================================== RCS file: /cvsroot/moeng/BBRpg/data/scripts/BBRpgLang.lua,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** BBRpgLang.lua 13 Jan 2004 16:32:35 -0000 1.32 --- BBRpgLang.lua 7 Feb 2004 18:30:00 -0000 1.33 *************** *** 180,184 **** {"Brian", "Okay, let's get to business. We must prevent the outbreak of the Fourth World War!"}, {"Elwood", "But how?"}, ! {"Brian", "Al I need are my mini-rocket engines, and give them to Lee!"}, {"Jake", "Who's Lee?"}, {"Brian", "He's the one who is going to launch the mini attack satelite."}, --- 180,184 ---- {"Brian", "Okay, let's get to business. We must prevent the outbreak of the Fourth World War!"}, {"Elwood", "But how?"}, ! {"Brian", "All I need are my mini-rocket engines, and give them to Lee!"}, {"Jake", "Who's Lee?"}, {"Brian", "He's the one who is going to launch the mini attack satelite."}, *************** *** 383,386 **** --- 383,392 ---- {{"{PLAYER}", "Het is een lantaarnpaal."}}, }, + FenceToCells = { + {{"{PLAYER}", "Damn, this fence blocks the way to the prison. We need to find a way to open it."}}, + }, + FenceToLevers = { + {{"{PLAYER}", "According to the map there should be some levers on the other side of this fence."}}, + }, }; Index: BBRpgLangDutch.lua =================================================================== RCS file: /cvsroot/moeng/BBRpg/data/scripts/BBRpgLangDutch.lua,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** BBRpgLangDutch.lua 13 Jan 2004 16:32:35 -0000 1.7 --- BBRpgLangDutch.lua 7 Feb 2004 18:30:01 -0000 1.8 *************** *** 368,372 **** }, Lamppost = { ! {{"{PLAYER}", "It's a lamppost."}}, }, }; --- 368,378 ---- }, Lamppost = { ! {{"{PLAYER}", "Het is een lantaarnpaal."}}, ! }, ! FenceToCells = { ! {{"{PLAYER}", "Verdorie, dit hek verspert de weg naar de gevangenis. We moeten een manier vinden om hem te openen."}}, ! }, ! FenceToLevers = { ! {{"{PLAYER}", "Volgens de kaart zouden er aan de andere kant van dit hek hendels moeten zijn."}}, }, }; Index: Sewers.lua =================================================================== RCS file: /cvsroot/moeng/BBRpg/data/scripts/Sewers.lua,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** Sewers.lua 13 Jan 2004 16:32:35 -0000 1.17 --- Sewers.lua 7 Feb 2004 18:30:01 -0000 1.18 *************** *** 11,14 **** --- 11,15 ---- init = function(self) local fence1; + local obj; Map.init(self, "data/maps/sewers1.map") *************** *** 22,26 **** self:spawn(FenceH5, 131, 47); self:spawn(FenceH3, 136, 98); ! self:spawn(FenceV8, 52, 83); self:spawn(FenceV8, 153, 83); self:spawn(FenceV8, 128, 83); --- 23,27 ---- self:spawn(FenceH5, 131, 47); self:spawn(FenceH3, 136, 98); ! obj = self:spawn(FenceV8, 52, 83); obj.convTableKeyword = "FenceToLevers"; self:spawn(FenceV8, 153, 83); self:spawn(FenceV8, 128, 83); *************** *** 33,37 **** self.fence1 = self:spawn(FenceH3, 35, 38); self.fence2 = self:spawn(FenceH3, 60, 28); ! self.fence3 = self:spawn(FenceH7, 95, 26); self.fence4 = self:spawn(FenceH3, 35, 72); self.lever1 = self:spawn(Lever , 21, 21); --- 34,38 ---- self.fence1 = self:spawn(FenceH3, 35, 38); self.fence2 = self:spawn(FenceH3, 60, 28); ! self.fence3 = self:spawn(FenceH7, 95, 26); self.fence3.convTableKeyword = "FenceToPrison"; self.fence4 = self:spawn(FenceH3, 35, 72); self.lever1 = self:spawn(Lever , 21, 21); |
From: <geo...@us...> - 2004-02-07 18:33:25
|
Update of /cvsroot/moeng/BBRpg/data/maps In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10017/data/maps Modified Files: city1.map Log Message: - Changed a spellingmistake and added several things to the TODO list Index: city1.map =================================================================== RCS file: /cvsroot/moeng/BBRpg/data/maps/city1.map,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 Binary files /tmp/cvs50g62p and /tmp/cvsOXCqKq differ |
From: <geo...@us...> - 2004-02-07 18:33:14
|
Update of /cvsroot/moeng/BBRpg In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10017 Modified Files: TODO Log Message: - Changed a spellingmistake and added several things to the TODO list Index: TODO =================================================================== RCS file: /cvsroot/moeng/BBRpg/TODO,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -d -r1.38 -r1.39 *** TODO 13 Jan 2004 16:46:37 -0000 1.38 --- TODO 7 Feb 2004 18:30:00 -0000 1.39 *************** *** 9,12 **** --- 9,19 ---- - Experience fijn tunen - Animated tiles in the sewer + - Walk together so the player has to walk less in the game. + - For corpses: draw skeleton and flesh, fade out the flesh. + - Improve tha blues + - Make the combat more interesting, maybe use crowbar to fight? + - Speed up the game? + - Make the map appear more natural? + - Improve prisonguardAI Bjorn: *************** *** 18,21 **** --- 25,34 ---- Georg: ? Witte lijntjes in Jake's optrekje wegwerken + - Corpses should not be obstacles in most of the cases + - Different messages corresponding to different percentages of + maxHealth when leaving the bed. + - Record new sounds. + - Get rid of mistakes in the map of restplace + - `Al I need' Frode: |
From: <b_l...@pr...> - 2004-01-31 01:35:40
|
Update of /cvsroot/moeng/CaveAdventure In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv648 Removed Files: COPYING.TXT readme.txt RPG.cfg Log Message: Even more old files. To the attic with them. --- COPYING.TXT DELETED --- --- readme.txt DELETED --- --- RPG.cfg DELETED --- |
Update of /cvsroot/moeng/CaveAdventure/data/scripts In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32156 Removed Files: ai_boss.lua ai_char.lua animations.lua basic_types.lua boss.lua cave.lua cave_objects.lua cave_triggers.lua caveman.lua conv_box.lua effects.lua game.lua gui.lua hud.lua input.lua lang.lua music_control.lua player.lua player_sequences.lua radio.lua rat.lua spring.lua torch.lua Log Message: You are old, go away. --- ai_boss.lua DELETED --- --- ai_char.lua DELETED --- --- animations.lua DELETED --- --- basic_types.lua DELETED --- --- boss.lua DELETED --- --- cave.lua DELETED --- --- cave_objects.lua DELETED --- --- cave_triggers.lua DELETED --- --- caveman.lua DELETED --- --- conv_box.lua DELETED --- --- effects.lua DELETED --- --- game.lua DELETED --- --- gui.lua DELETED --- --- hud.lua DELETED --- --- input.lua DELETED --- --- lang.lua DELETED --- --- music_control.lua DELETED --- --- player.lua DELETED --- --- player_sequences.lua DELETED --- --- radio.lua DELETED --- --- rat.lua DELETED --- --- spring.lua DELETED --- --- torch.lua DELETED --- |
From: <b_l...@pr...> - 2004-01-29 03:37:11
|
Update of /cvsroot/moeng/CaveAdventure/data/scripts In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32605a Removed Files: ai.lua z.lua Log Message: You are old too, go away. --- ai.lua DELETED --- --- z.lua DELETED --- |
From: <b_l...@pr...> - 2004-01-29 01:40:17
|
Update of /cvsroot/moeng/CaveAdventure/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31082 Removed Files: Canvas.cpp Canvas.h Console.cpp Console.h Engine.cpp Engine.h Makefile RPG.cpp RPG.h Script.cpp Script.h Sound.cpp Sound.h TiledMap.cpp TiledMap.h lunar.h Log Message: Begone you capitalized source files, I though I had thrown you away. --- Canvas.cpp DELETED --- --- Canvas.h DELETED --- --- Console.cpp DELETED --- --- Console.h DELETED --- --- Engine.cpp DELETED --- --- Engine.h DELETED --- --- Makefile DELETED --- --- RPG.cpp DELETED --- --- RPG.h DELETED --- --- Script.cpp DELETED --- --- Script.h DELETED --- --- Sound.cpp DELETED --- --- Sound.h DELETED --- --- TiledMap.cpp DELETED --- --- TiledMap.h DELETED --- --- lunar.h DELETED --- |
From: <b_l...@pr...> - 2004-01-26 12:38:45
|
Update of /cvsroot/moeng/Mamura In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11869 Added Files: GOALS Log Message: Added goals put together by Georg. --- NEW FILE: GOALS --- -------------------- Project Goals Mamura -------------------- Main goals: ----------- * Random generated world, items, quests * Massive Multiplayer * 3D Specific goals: --------------- The world: * The main world is built more or less on a sphere * Other area's should be linked to this world by portals (e.g. caves, sewers) * At the bottom lies a tile-layer * Everything in the world above that (walls, roofs) is a 2D (e.g. snowflakes) or 3D (e.g. character) object Random generation: * Randomly generated world - Height map (radius from center) - Rivers - Roads - Villages - Caves * Randomly generated quests * Randomly generated objects Manually modification: * Admins should be able to change the world after random generation * Quests can be added manually Multiplayer: * Chatting (private, team, global) * Teamplay License: * GPL |
From: <b_l...@us...> - 2004-01-21 19:56:26
|
Update of /cvsroot/moeng/CaveAdventure/data/scripts In directory sc8-pr-cvs1:/tmp/cvs-serv31167 Added Files: CaveLangFrench.lua Log Message: Added French language file (still in old format) --- NEW FILE: CaveLangFrench.lua --- -- -- French translation of Cave Adventure -- By Gregzenegair --[[ -- -- An array containing speaker names and single words or word combinations. -- lang = {} lang.PLAYER = "Frode" lang.CAVEMAN = "L'homme des cavernes" lang.CAVEMEN = "Les hommes des cavernes" lang.THE_LORD = "Le Seigneur" lang.HEALTH = "Vie" lang.EXPERIENCE = "Expérience" lang.STRENGTH = "Force" lang.DEXTERITY = "Dextérité" lang.AGILITY = "Agilité" lang.ENDURANCE = "Endurance" -- -- An array containing all the conversations present in the game -- conv = {} -- Game just starting conv.INTRO = { {lang.PLAYER, "Arghh... Ma tête me fait un mal pas possible. Que s'est-il passé?"}, {lang.PLAYER, "Bien, si vous avez lu le README.TXT alors vous saurez comment je suis tombé dans cette grotte. En outre, vous serez informé des touches à utiliser pour me contrôler. Bon maintenant, commençons l'exploration."}, } -- Examining stuff conv.NO_WAY_OUT = {{lang.PLAYER, "Il n'est pas question que je passe par ici pour m'enfuir!"}} conv.NO_ESCAPE = {{lang.PLAYER, "S'echapper en passant par là me tuerait, c'est sûr."}} conv.REFRESHING = {{lang.PLAYER, "Ah, ça fait du bien."}} conv.COULD_USE_THAT = {{lang.PLAYER, "Je peux utiliser ça."}} conv.MUCH_BETTER = {{lang.PLAYER, "Ca va mieux."}} conv.FIRE_1 = {{lang.PLAYER, "Ca brûle bien."}} conv.FIRE_2 = {{lang.PLAYER, "C'est trop gros pour être porté. En plus, I'd only use it for evil."}} conv.FIRE_3 = {{lang.PLAYER, "Ouille! Ca brûle."}} conv.FIRE_4 = {{lang.PLAYER, "Est-ce un feu de bois que je vois devant moi?"}} -- Pickaxe and pile of rubble conv.PILE_WONT_BUDGE = { {lang.PLAYER, "Ca ne veut pas bouger. J'aurais besoin d'un outil pour pouvoir passer..."}, } conv.PICKUP_PICKAXE = { {lang.PLAYER, "Cela pourrait me donner un coup de main pour bouger de grosses pierres!"}, } conv.USE_PICKAXE = { {lang.PLAYER, "Maintenant, voyons ce que cette pioche a dans le ventre..."}, } conv.PICKAXE_WORKED = { {lang.PLAYER, "Pfou. Ca a marché. C'est dommage ma pioche s'est cassée."}, } -- Player goes into prison conv.YAWN_TIRED = { {lang.PLAYER, "<Yawn> Je suis fatigué... J'ai vraiment besoin de m'assoir un moment."}, } conv.QUIET_CORNER = { {lang.PLAYER, "Cela me semble être un coin tranquille."}, } conv.REALLY_TIRED = { {lang.PLAYER, "RRzzzz... Je suis vraiment... fatigué..."}, } conv.DISCOVER_HUMAN = { {lang.CAVEMAN, "Qu'est ce que c'est? Un humain?! Je dois en informer le roi immédiatement."}, } conv.INFORM_KING = { {lang.CAVEMAN, "Seigneur, ai-je la permission de parler?"}, {lang.THE_LORD, "Qu'y a t-il, humble serviteur?"}, {lang.CAVEMAN, "Je vous remercie de me laisser parler Seigneur. J'ai trouvé un humain assoupi. Il se trouve au sud d'ici."}, {lang.THE_LORD, "Bien, qu'en as tu fait?"}, {lang.CAVEMAN, "Rien du tout, j'ai pensé qu'il était préférable de vous en parler d'abord..."}, {lang.THE_LORD, "Non, Tu n'avais pas à m'en parler en premier imbécile! Apporte le moi immédiatement!"}, {lang.CAVEMAN, "Oui Seigneur, bien sur."}, } conv.KICK_FIRST = { {lang.CAVEMAN, "Attend! Frappons-le d'abord pour être sur qu'il soit inconscient!"}, } conv.BRING_TO_KING = { {lang.CAVEMAN, "Maintenant ramenons-le au roi."}, } conv.BROUGHT_HUMAN = { {lang.CAVEMAN, "Seigneur, nous vous avons rapporté l'humain."}, {lang.THE_LORD, "Je le vois bien crétin!"}, {lang.CAVEMAN, "Que voulez vous que l'on en fasse?"}, {lang.THE_LORD, "Hmmm... Je le mangerais bien au petit-déjeuner. En attendant, jetez-le dans la prison."}, {lang.CAVEMAN, "Bien Seigneur, ce sera fait."}, } conv.WHAT_THE = { {lang.PLAYER, "Qu'est ce..."}, } conv.WHAT_HAPPENED = { {lang.PLAYER, "Qu'est-il arrivé? Je suis dans une prison? J'ai dû tomber la-dedans pendant mon sommeil. Mince!"}, } -- Player escapes from prison conv.YEAH_RIGHT = { {lang.PLAYER, "Ouais, c'est bon. Ils avaient oublié de fermer la porte de la prison."}, } conv.NOT_LOCKED = { {lang.PLAYER, "Hein? Ce n'est pas fermé! Ces types sont vraiment stupides!"}, } conv.WOW_ESCAPED = { {lang.CAVEMAN, "Woa, Tu t'es échappé!"}, } conv.MUST_BE_STRONG = { {lang.CAVEMAN, "Tu dois être très fort!"}, } conv.KING_IS_SLAVEDRIVER = { {lang.PLAYER, "Et bien, je ne vais pas le nier ..."}, {lang.CAVEMAN, "Tu sais, c'est un gros bonhomme qui nous a dit de te jeter en prison, c'est notre négrier!"}, {lang.PLAYER, "Ah."}, {lang.CAVEMAN, "Tu dois être suffisamment fort pour lui faire face dans un combat, nous serions alors libre de cet être malfaisant!"}, {lang.PLAYER, "Hmm. Je voudrais lui parler d'abord, juste pour voir ce qui arriverait."}, {lang.CAVEMAN, "Cool, nous te serions reconnaissant pour toujours!! Le terrible roi est à l'ouest, puis prend par le nord."}, } -- Player reaches boss conv.BOSS_AFTER_PRISON = { {lang.PLAYER, "Salut Seigneur des hommes des cavernes."}, {lang.THE_LORD, "QUOI? comment t'es-tu échappé de prison!?"}, {lang.PLAYER, "J'en suis sorti, pensez que j'ai rencontré quelque résistance. Mais peu importe, je veux vous parler."}, {lang.THE_LORD, "Si tu veux. Mais je ne suis pas très bavard, alors fait vite."}, {lang.PLAYER, "J'ai appris que vous étiez un maitre malfaisant envers vos sujets. Voudriez vous être clément et laisser les hommes des cavernes libres?"}, {lang.THE_LORD, "Il faudra passer sur mon énorme corps!"}, {lang.PLAYER, "Je suppose que cela veut dire non."}, {lang.THE_LORD, "Bien sûr que cela veut dire non! Maintenant tu vas connaître mon pouvoir, j'en ai assez et tu vas payer pour ton ignorance!"}, } conv.BOSS_BEATEN_1 = { {lang.THE_LORD, "Blurk! Bwah! Blleeeh! Tu es trop fort pour moi."}, {lang.PLAYER, "Merci, je suis content de savoir ça."}, {lang.THE_LORD, "Et non, on ne sera pas si vite potes. Je te laisse vivre cette fois, mais je reviendrais! Plus gros, plus méchant et plus brutal que jamais! Muhahahaha!"}, } conv.BOSS_BEATEN_2 = { {lang.PLAYER, "Bon, Je ne succombe pas à des blagues aussi stupides . Ecoutez ce que les hommes des cavernes ont à vous dire."}, } conv.BOSS_BEATEN_3 = { {lang.CAVEMEN, "Hourra! Hourra! Hourra!"}, {lang.PLAYER, "Super."}, } ]] |
From: <b_l...@us...> - 2004-01-14 22:08:19
|
Update of /cvsroot/moeng/CaveAdventure In directory sc8-pr-cvs1:/tmp/cvs-serv9309 Modified Files: TODO Log Message: More things to do. Index: TODO =================================================================== RCS file: /cvsroot/moeng/CaveAdventure/TODO,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** TODO 13 Jan 2004 19:48:41 -0000 1.2 --- TODO 14 Jan 2004 22:08:15 -0000 1.3 *************** *** 14,17 **** --- 14,23 ---- - Add menu - Re-add HUD + - Make combat more interesting + * Add run-and-bash attack? + * Add kicking + - Add saving progress to engine/scripts (needs a lot of thought) + - Fast-skipable conversations + - Make it possible to skip certain sequences (BeginSkipable/EndSkipable) Bjorn: *************** *** 24,27 **** --- 30,34 ---- Frode: + - Create special shadow for spiders, possibly multi-directional. Hedde: |