72 lines
3.0 KiB
Python
Executable File
72 lines
3.0 KiB
Python
Executable File
#! /usr/bin/python3
|
|
|
|
import sys
|
|
|
|
if sys.version_info[0] < 3:
|
|
print("This game is written in python 3.\nRun 'python3 "+sys.argv[0]+"' or './"+sys.argv[0]+"'")
|
|
sys.exit(-1)
|
|
|
|
import argparse
|
|
import getpass
|
|
import json
|
|
import os
|
|
import os.path
|
|
|
|
from . import client
|
|
|
|
thisPath = os.path.dirname(__file__)
|
|
charMapPath = os.path.join(thisPath, "charmaps")
|
|
keybindingsPath = os.path.join(thisPath, "keybindings")
|
|
|
|
standardCharFiles = [name[:-5] for name in os.listdir(charMapPath) if name[-5:] == ".json"]
|
|
standardKeyFiles = [name[:-5] for name in os.listdir(keybindingsPath) if name[-5:] == ".json"]
|
|
|
|
|
|
defaultAdresses = {
|
|
"abstract": "asciifarm",
|
|
"unix": "asciifarm.socket",
|
|
"inet": "localhost:9021",
|
|
}
|
|
|
|
def main():
|
|
|
|
parser = argparse.ArgumentParser(description="The client to AsciiFarm. Run this to connect to to the server.", epilog="""
|
|
Gameplay information:
|
|
Walk around and explore the rooms.
|
|
Kill the goblins and plant the seeds.
|
|
|
|
~troido""", formatter_class=argparse.RawDescriptionHelpFormatter)
|
|
parser.add_argument('-n', '--name', help='Your player name (must be unique!). Defaults to username', default=getpass.getuser())
|
|
parser.add_argument("-a", "--address", help="The address of the socket. When the socket type is 'abstract' this is just a name. When it is 'unix' this is a filename. When it is 'inet' is should be in the format 'address:port', eg 'localhost:8080'. Defaults depends on the socket type")
|
|
parser.add_argument("-s", "--socket", help="the socket type. 'unix' is unix domain sockets, 'abstract' is abstract unix domain sockets and 'inet' is inet sockets. ", choices=["abstract", "unix", "inet"], default="abstract")
|
|
parser.add_argument('-k', '--keybindings', help='The file with the keybindings. If it is either of these names: {} it will be loaded from the keybindings directory.'.format(standardKeyFiles), default="default")
|
|
parser.add_argument('-c', '--characters', help='The file with the character mappings for the graphics. If it is either of these names: {} it will be loaded from the charmaps directory.'.format(standardCharFiles), default="default")
|
|
parser.add_argument('-l', '--colours', '--colors', help='', action="store_true")
|
|
args = parser.parse_args()
|
|
|
|
charFile = args.characters
|
|
if charFile in standardCharFiles:
|
|
charFile = os.path.join(charMapPath, charFile + ".json")
|
|
with open(charFile, 'r') as cf:
|
|
charMap = json.load(cf)
|
|
keyFile = args.keybindings
|
|
if keyFile in standardKeyFiles:
|
|
keyFile = os.path.join(keybindingsPath, keyFile + ".json")
|
|
with open(keyFile, 'r') as kf:
|
|
keybindings = json.load(kf)
|
|
|
|
address = args.address
|
|
if address == None:
|
|
address = defaultAdresses[args.socket]
|
|
if args.socket == "abstract":
|
|
address = '\0' + address
|
|
elif args.socket == "inet":
|
|
hostname, sep, port = address.partition(':')
|
|
address = (hostname, int(port))
|
|
|
|
client.main(args.name, args.socket, address, keybindings, charMap, args.colours)
|
|
|
|
|
|
if __name__=="__main__":
|
|
main()
|