Bay 12 Games Forum

Please login or register.

Login with username, password and session length
Advanced search  

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - SethCreiyd

Pages: [1] 2 3 ... 69
1
Oh snap, new version is out. Time to get busy.

Hey, you are alive :)

But I dont think that you have my tileset in here... its my creature sprites you use. Tileset would require you to mod the raws a bit, to use Phoebus or Ironhand or Obsidian Soul.

JollyBastion or Spacefox would work without Raw changes, just drag and drop. :)

Yeah, creature graphics is what I meant, thank you.

Phoebus' graphics pack more or less worked the last time I checked, but that was quite some time ago. Jolly Bastion and Spacefox both look very nice, I'll have to try them out once the new version excitement settles down.


Hey, would it be OK to use some of your geomancer's abilities for my avatar of earth?

Sure, have fun. I need to note somewhere that the mod is free to use for any appropriate purpose.


Hmm. I was trying to make some slings and stones for a wizard embark, and accidentally made about 10 thousand masterwork cloth slings out of four pieces of cloth.

Perhaps a missing [DOES_NOT_DETERMINE_PRODUCT_AMOUNT] or whatever? I don't know stuff about stuff.

1 piece of cloth has an item dimension of 10000, so it's making one sling ten thousand times. If I understand it right, [DOES_NOT_DETERMINE_PRODUCT_AMOUNT] would work, but accept any piece of cloth no matter the size of its item dimension (where 10000 is considered a 'full spool').

This should work:

Code: [Select]
[REACTION:MAKE_CLOTH_SLING]
[NAME:make cloth sling]
[BUILDING:CRAFTSMAN:NONE]
[REAGENT:A:1:CLOTH:NONE:NONE:NONE][MIN_DIMENSION:10000]
[PRODUCT:100:1:WEAPON:ITEM_WEAPON_SLING:GET_MATERIAL_FROM_REAGENT:A:NONE]
[SKILL:CLOTHESMAKING]

2
Creative Projects / Re: Programming Help Thread (For Dummies)
« on: May 27, 2014, 02:13:13 pm »
/facepalm

Yes, that was it. Thank you.

3
Creative Projects / Re: Programming Help Thread (For Dummies)
« on: May 27, 2014, 02:52:50 am »
I'm having an issue in SDL2 with creating a window inside a class constructor, and I haven't any real idea about the cause.

Code: (C++) [Select]
class Window {
    public:
        Window(const char* title,
            int x=SDL_WINDOWPOS_UNDEFINED,
            int y=SDL_WINDOWPOS_UNDEFINED,
            int w=640, int h=480,
            Uint32 flags=SDL_WINDOW_RESIZABLE);
        virtual ~Window();
        SDL_Window* handle;
};

Window::Window(const char* title, int x, int y, int w, int h, Uint32 flags) {
    handle = SDL_CreateWindow(title, x, y, w, h, flags);
    // Check that the window was successfully made
    if (handle == NULL) {
        printf("Could not create window: %s\n", SDL_GetError());
    }
    SDL_Delay(5000);
    std::cout << "Window created." << std::endl;
}

Window::~Window() {
    SDL_DestroyWindow(handle);
    std::cout << "Window destroyed." << std::endl;
}

If I create the window in the main function, it works as expected:

Code: [Select]
int main(int argc, char **argv) {
    Application app;
    app.initialize();
    Window* window = new Window("This is a Test!");

    app.sleep(5000);

    return 0;
}

The problem occurs if I move the window creation to the Application initialization and store the pointer as an Application member:

Code: [Select]
int Application::initialize() {
    try {
        SDL sdl(SDL_INIT_VIDEO|SDL_INIT_TIMER);
        window = new Window("This is a Test!");
        return 0;
    } catch (const InitError& err) {
        std::cerr
        << "Error initializing SDL:  "
        << err.what()
        << std::endl;
    }
    return 1;
}

/*-----*/

int main(int argc, char **argv) {
    bool quit = false;
    SDL_Event event;

    Application app;
    app.initialize();

    app.sleep(5000);

    return 0;


This causes the window to pop up at first as it is apparently created successfully - then the window closes right away after the call to app.initialize() is finished, long before the Window destructor is called. The program still exits successfully, and at no point does SDL throw an error, the window just disappears.

For now, I'm just going to construct the Window in the main function so I can move on, but I'd really appreciate it if someone could explain the exact issue here. Constructing the new object in the Application constructor and storing the pointer as a member are clearly problematic, I just don't know why.

If it's just a quirk of SDL2 then that's one thing, but I suspect there is some aspect of the way C++ handles data that I'm missing.

4
Mind if I co-opt some spells? I really hate reinventing the wheel and also writing interactions has become tedious since I've been doing that more than most other modding for about 2 and a third years now >_>

EDIT: Just realized that SethCreiyd hasn't been around in 3 weeks. That's a predicament.

EDIT 2: Also realized that copy+pasting other people's interactions and changing everything that matters is the same thing as making them from scratch without the tedium, so whatever.

If you haven't done so already, feel free to use what you like.  Also, thank you for answering questions here that I've been neglecting to answer.

Love this mod! I'm really only in it for the secrets though, but the other additions are nice. Especially the skin-to-clothing reactions. I can make sentient skin clothing with the help of my good friends the night trolls.
I've noticed one thing about worldgen: When a person begins to seek immortality, they will begin worshiping different gods to learn their secrets. But because not many of the secrets actually give immortality, the person will keep collecting secrets until they get vanilla necromancy, usually. Then the person will take all their slabs and go build a tower. Others will come to the tower and become apprentices. The apprentice gains all the secret the master knew, plus whatever secrets the apprentice managed to gather before coming to the tower. Towers become an adamantine spire of secrets, filled with immensely powerful magi and books of all subjects. I find this to be awesome.

Bug: Female bison, lacking a CASTE_NAME tag, are called nothings.

Also, how good is titanium for shields? I'm carrying around a bronze and a titanium one, and want to know which one to drop.
Also also, I thought being immortal barred you from gaining secrets, but I became a geomancer after becoming a vampire. I think adventure mode vampires are kinda bugged anyway, as I've passed out from pain and woken up again despite NOSTUN. Ah well, at least I can still become the god of magic I always wanted to be!

IIRC, for blocking potential, item quality matters more than anything else.  A titanium shield weighs less and sells for more.

@Jake, explosive Wizards are a problem that I want to eliminate for the next version, even if it means removing the troublesome spells entirely.  Which for now is looking like the solution.

@kuudou, Meph's old graphic tileset is still included with the download, and it works with this mod.

I will aim to make an update for this once the new version of DF comes out. Removing some redundancies, fixing some bugs, adding some new content.  With the new Adventurer stuff coming out, I'm looking forward to messing around with novel kinds of entities. 

My thanks to everyone who has enjoyed the mod so far.  If you wish to support its development, the posting of feedback is greatly appreciated.

5
-snip-
That's... a highly entertaining idea, though you should keep an eye on them while they're tripping. Have you considered spraying Salvia extract onto their weed? That would make discovering the swap before it's too late harder.
On legality: Salvia sales are prohibited. Possession (and buying) appears to be legal., and the law might not apply to Salvia extract. Order some from out of state?

On enhancing effectiveness: If you're feeling truly evil, slip them some Datura. That stuff just might be the most terrifying drug out there.

What a clever prank, poisoning someone with a mind-altering substance, terrifying and making them unable to reason, or think they're losing their mind and possibly hurting themselves or others.  It's also a felony.

6
Creative Projects / Re: Programming Help Thread (For Dummies)
« on: September 20, 2013, 11:25:27 am »
I've been writing a program in python using tkinter and I can't get it to recognize right mouse clicks.  It recognizes left mouse clicks and middle mouse clicks just fine.  Maybe it's a longshot, but anyone got suggestions what could be causing this?

Can you post the code?  All I could say offhand is that <Button-2> is for the middle button and <Button-3> is for the right.

The event in question starts at line 265, change line 298 if you want to change between right and middle mouse button.  It could also be a problem with my system and will work fine for you, which is feedback I'd appreciate.

Spoiler (click to show/hide)

I'm not sure what you're intending with the nested functions, but I'd guess that you wanted ensure that the local App.self parameter is visible to the event callback?  The way it's currently set up, you're recreating the functions every time App is instantiated, and those names are scoped to App.__init__ itself (functions defined within a function are neither static nor global). And as olemars said, you're rebinding the right mouse event with the movecenter function right after you bind the rightmouse function, so the latter is never called.

I'd suggest doing something about the binding conflict, and turning those event functions into real members of App.  Here's an edited version for comparison, with changes mainly in App.__init__:

Code: [Select]
try:
    from tkinter import *
except ImportError:
    from Tkinter import *

from random import randint

damtable = [ [0,0,0,0,0,5,10,20,30,40,60,100],
            [0,0,0,0,0,15,20,30,40,50,70,100],
            [0,0,0,0,5,25,30,40,50,70,80,100],
            [0,0,0,0,10,30,40,50,60,80,90,100],
            [0,0,0,5,15,35,50,60,70,90,100,100],
            [0,0,5,10,25,40,60,70,90,100,100,100],
            [0,5,10,20,30,50,70,80,100,100,100,100],
            [5,10,15,25,35,60,80,90,100,100,100,100],
            [10,15,20,30,45,70,90,100,100,100,100,100],
            [15,20,20,35,55,80,100,100,100,100,100,100]
          ]

stacklist = []

def ordinal(x):
    if x%10 == 1:
        return str(x) + "st"
    elif x%10 == 2:
        return str(x) + "nd"
    elif x%10 == 3:
        return str(x) + "rd"
    else:
        return str(x) + "th"

class Unit(object):
    def __init__(self, profile, *name):
        self.active = "nothing"
        self.health = 100
        self.armor = profiles[profile][0]
        self.weapons = profiles[profile][1]
        self.target = -1
        if len(name)== 1:
            self.name = name
        else:
            self.name = ordinal(profiles[profile][3])+ " " + profiles[profile][2]
            profiles[profile][3] += 1
    def unitreport(self):
        return str(self.name) + "; Armor:" + str(self.armor) + "; Weapons:" + str(self.weapons) + "; Target: " + str(self.target+1) + "; Health: " + str(self.health)

           
profiles = {
"Guard" : [20, ["Rayguns", "Raypistols"], "Guards", 1], "Rebel" : [20, ["Rayguns", "Raypistols"], "Rebels", 1], "Militia" : [10, ["Squad AA", "Militia Rifles"], "Militia", 1]
}#profile order is armor, weapons, name, and the number 1 (used in the counting function for names)
arms = {
"Rayguns": [10, 10, 1, 1], "Raypistols": [5, 5, 2, 2], "Squad AA": [1, 5, -1, -1], "Militia Rifles": [2, 20, 12, 16]


#hitroll, damroll, distance it starts shooting at, distance it keeps shooting for
}

namelist = []

for name in profiles:
    namelist.append(name)

class Stack(object):
    def __init__(self, x_pos, y_pos, *units):
        self.destroyed = []   
        self.units = []
        self.x_pos = x_pos
        self.y_pos = y_pos
        self.x_gfx = (self.x_pos-1)*mygrid.size*3/2+mygrid.offsetx
        if self.x_pos%2 == 1:
            self.y_gfx = (self.y_pos-1)*mygrid.size*.86+mygrid.offsety
        else:
            self.y_gfx = (self.y_pos-1)*mygrid.size*.86+mygrid.offsety-mygrid.size*.86
       
        for unit in units:
            self.units.append(unit)
        stacklist.append(self)
    def showunits(self):
        for unit in self.units:
            print(unit.unitreport())
    def find_gfx_pos(self):
        self.x_gfx = (self.x_pos-1)*mygrid.size*3/2+mygrid.offsetx
        if self.y_pos%2 == 1:
            self.y_gfx = (self.y_pos-1)*mygrid.size*.86+mygrid.offsety
        else:
            self.y_gfx = (stack2.y_pos-1)*mygrid.size*.86+mygrid.offsety-mygrid.size*.86*evenoddrow
    def clearunits(self):
        for unit in self.units:
            if unit.health <= 0:
                self.destroyed.append(unit)
                self.units.remove(unit)
    def addunit(self, unittype):
        self.units.append(Unit(unittype))

class Grid(object): #to be used in map creation
    def __init__(self, width, height):
        self.width = width
        self.height = height
        self.hexes = []
        self.size = 30
        self.offsetx = 40
        self.offsety = 40
        self.offset = 40
       
    def draw(self):   
        ox = self.offsetx
        oy = self.offsety
        for x in range(self.width):
            for y in range(self.height):
                for evenoddrow in [0, 1]:
                    self.hexes.append([
                        x*2+evenoddrow, y*2+evenoddrow,
                        ox-self.size+self.size*x*3+3/2*self.size*evenoddrow,
                        oy+self.size*y*1.72-self.size*.86*evenoddrow,
                        ox-self.size/2+self.size*x*3+3/2*self.size*evenoddrow,
                        oy+self.size*.86+self.size*y*1.72-self.size*.86*evenoddrow,
                        ox+self.size/2+self.size*x*3+3/2*self.size*evenoddrow,
                        oy+self.size*.86+self.size*y*1.72-self.size*.86*evenoddrow,
                        ox+self.size+self.size*x*3+3/2*self.size*evenoddrow,
                        oy+self.size*y*1.72-self.size*.86*evenoddrow,
                        ox+self.size/2+self.size*x*3+3/2*self.size*evenoddrow,
                        oy-self.size*.86+self.size*y*1.72-self.size*.86*evenoddrow,
                        ox-self.size/2+self.size*x*3+3/2*self.size*evenoddrow,
                        oy-self.size*.86+self.size*y*1.72-self.size*.86*evenoddrow
                    ])

mygrid = Grid(10,15)
mygrid.draw()


stack1 = Stack(1, 1, Unit("Militia"), Unit("Militia"))
stack2 = Stack(2, 3, Unit("Militia"), Unit("Militia"))
stack3 = Stack(5, 5, Unit("Militia"), Unit("Militia"))

def settargets(stack1, stack2, distance):
    count = (len(stack1.units))%(len(stack2.units))
    for unit in stack1.units:
        unit.target = -1
        for weapon in unit.weapons:
            if (arms[weapon][2]<=distance) and (arms[weapon][2] + arms[weapon][3] > distance):
                unit.target = (len(stack1.units)+count)%len(stack2.units)
                unit.active = weapon
                count +=1
            else:
                pass
   
def tohit(unit1, unit2):
    hitroll = randint(1, 20)
    if (hitroll + arms[unit1.active][0] >= unit2.armor):
        return True
    else:
        return False

def damage(unit1, unit2):
    if arms[unit1.weapons[0]][1] >= unit2.armor:
        rat =  (arms[unit1.active][1]-arms[active][1]%unit2.armor)/unit2.armor
        unit2.health -= damtable[int(5-rat)][randint(0,9)]
    else:
        rat = (unit2.armor-unit2.armor% arms[unit1.active][1])/ arms[unit1.active][1]
        unit2.dam = damtable[int(5+rat)][randint(0,9)]
        unit2.health -= unit2.dam
    if unit2.health > 0:
        print( unit1.name + " shoot " + unit1.active + " and deals " + str(unit2.dam) + " damage to " + unit2.name + "  HP: " + str(unit2.health))
    else:
        print( unit1.name + " shoot " + unit1.active + " and deals  " + str(unit2.dam) + " damage to " + unit2.name + "  HP: " + str(unit2.health) + " " + unit2.name + " DESTROYED")

   
def fight(stack1, stack2):
    if len(stack2.units)>0 and len(stack1.units)>0:
        for distance in range(20):
            if len(stack2.units)>0 and len(stack1.units)>0:
                #print("Range: " + str(distance))
                settargets(stack1, stack2, distance)
                settargets(stack2, stack1, distance)
                for shooter in stack1.units:
                    if shooter.target != -1:
                        if tohit(shooter, stack2.units[shooter.target]):
                            damage(shooter, stack2.units[shooter.target])
                        else:
                            print(shooter.name + " shoots " + shooter.active + " and misses " + stack1.units[shooter.target].name)
                for shooter in stack2.units:
                    if shooter.target != -1:
                        if tohit(shooter, stack1.units[shooter.target]):
                            damage(shooter, stack1.units[shooter.target])
                        else:
                            print(shooter.name + " shoots " + shooter.active + " and misses " + stack1.units[shooter.target].name)
                    shooter.target = -1
                stack1.clearunits()
                stack2.clearunits()
                print("")
            else:
                pass
    elif len(stack1.units)>0:
        print("stack 2 is empty")
    elif len(stack2.units)>0:
        print("stack 1 is empty")
    else:
        print("they're all dead, jim.")

def drawunit(self, unit_to_draw):
    self.can.create_image(((unit_to_draw.x_pos-1)*mygrid.size*3/2+mygrid.offsetx,(unit_to_draw.y_pos-1)*mygrid.size*.86+mygrid.offsety),image = unit.image)

class App:

    def __init__(self, master):

        self.unitimage = PhotoImage(file="unit.gif")
        frame = Frame(master)
        frame.pack()
       
        self.pickedstack = 1
        self.active_stack = stack1

        self.button = Button(frame, text="QUIT", fg="red", command=frame.quit)
        self.button.pack(side=LEFT)

        self.fight = Button(frame, text="Fight", command=self.fight)
        self.fight.pack(side=LEFT)
       
        self.show_units = Button(frame, text="Show Units", command=self.show_units)
        self.show_units.pack(side=LEFT)
       
        self.selectfirst = Button(frame, text="Stack One", command=self.selectfirst)
        self.selectfirst.pack(side=LEFT)
       
        self.selectsecond = Button(frame, text="Stack Two", command=self.selectsecond)
        self.selectsecond.pack(side=LEFT)
       
        self.can = Canvas(width=1000, height=700)
        self.can.pack(side = LEFT)
       
        for hex in mygrid.hexes:
            self.can.create_polygon([hex[2],hex[3],hex[4],hex[5],hex[6],hex[7],hex[8],hex[9],hex[10],hex[11],hex[12],hex[13]], outline = "black", fill = "white", width = 1)
       
        #self.can.create_image(self.can.create_image((43,43), image = self.unitimage)
        #self.can.create_image((129,146), image = self.unitimage)
       
        self.can.create_image((stack1.x_gfx, stack1.y_gfx), image = self.unitimage)
        self.can.create_image((stack2.x_gfx, stack2.y_gfx), image = self.unitimage)
        self.can.create_image((stack3.x_gfx, stack3.y_gfx), image = self.unitimage)
       
        self.can.bind("<Button-1>",self.findhex)
        self.can.bind("<Button-2>",self.movecenter)
        self.can.bind("<Button-3>",self.rightclick)
       
        self.listbox = Listbox(master)
        self.listbox.pack()
                       
        for item in namelist:
            self.listbox.insert(END, item)
       
    def findhex(self, event):       
        clickx = (event.x-mygrid.offset+mygrid.size)/mygrid.size/3*2
        clicky = (event.y-mygrid.offset)/(mygrid.size*.86)/2
        if int(round(.5+clickx))%2==0:
            clicky += .5
       
        if round(clickx+1/6)<round(.5+clickx):
            tri_x = clickx-round(clickx-.5)
            tri_y = clicky-round(clicky-.5)
            if round(tri_y)==0:
                #print("above")
                if tri_x*1.73<tri_y:
                    clicky+=1
                    clickx-=1
            else:
                #triangle below halfway on left hexagon of the junction
                if (.3-tri_x>(tri_y-.5)/1.73):
                    clickx-=1
                    if round(.5+clickx)%2==1:
                        clicky-=1
               
        #print(round(.5+clickx), round(clicky+1))
        for item in stacklist:
            if item.x_pos == round(.5+clickx) and item.y_pos == round(clicky+1):
                self.active_stack = item
                print(self.active_stack)
       
    def rightclick(self, event):
        clickx = (event.x-mygrid.offset+mygrid.size)/mygrid.size/3*2
        clicky = (event.y-mygrid.offset)/(mygrid.size*.86)/2
        if int(round(.5+clickx))%2==0:
            clicky += .5
       
        if round(clickx+1/6)<round(.5+clickx):
            tri_x = clickx-round(clickx-.5)
            tri_y = clicky-round(clicky-.5)
            if round(tri_y)==0:
                #print("above")
                if tri_x*1.73<tri_y:
                    clicky+=1
                    clickx-=1
            else:
                #triangle below halfway on left hexagon of the junction
                if (.3-tri_x>(tri_y-.5)/1.73):
                    clickx-=1
                    if round(.5+clickx)%2==1:
                        clicky-=1
        print(round(.5+clickx), round(clicky+1))
        print(self.active_stack.x_pos,self.active_stack.y_pos)
       
        if self.active_stack.x_pos == round(.5+clickx) and (self.active_stack.y_pos == (1+clicky)):
            self.active_stack.y_pos += 1
            print(self.active_stack.x_pos,self.active_stack.y_pos)
        elif self.active_stack.x_pos == round(.5+clickx) and self.active_stack.y_pos == (clicky-1):
            self.active_stack.y_pos += -1
       
        self.can.create_image((self.active_stack.x_gfx, self.active_stack.y_gfx), image = self.unitimage)
   
    def movecenter(self, event):
        mygrid.offsetx += (event.x-280)
        mygrid.offsety += (event.y-280)
        mygrid.draw()
        self.can.update_idletasks()
       
    def unitadd(self):
        print(namelist[int(self.listbox.curselection()[0])])
        if self.pickedstack == 1:
            stack1.units.append(Unit(namelist[int(self.listbox.curselection()[0])]))
        else:
            stack2.units.append(Unit(namelist[int(self.listbox.curselection()[0])]))
       
    def fight(self):
        fight(stack1, stack2)
   
    def show_units(self):
        print("Unit Report:")
        stack1.showunits()
        stack2.showunits()
   
    def selectfirst(self):
        self.selectfirst.config(relief=SUNKEN)
        self.selectsecond.config(relief=RAISED)
        self.pickedstack = 1
   
    def selectsecond(self):
        self.selectfirst.config(relief=RAISED)   
        self.selectsecond.config(relief=SUNKEN)
        self.pickedstack = 2
       
root = Tk()

app = App(root)

root.mainloop()

When you access instance.some_func, you get a reference to a Bound Method, which can be passed as a function object without further parameterizing the reference to self.  Class methods can be called in any order as long as they're defined somewhere in the Class, so you can bind them during App's initialization without worrying about their visibility.

7
Creative Projects / Re: Programming Help Thread (For Dummies)
« on: September 19, 2013, 08:14:10 am »
I've been writing a program in python using tkinter and I can't get it to recognize right mouse clicks.  It recognizes left mouse clicks and middle mouse clicks just fine.  Maybe it's a longshot, but anyone got suggestions what could be causing this?

Can you post the code?  All I could say offhand is that <Button-2> is for the middle button and <Button-3> is for the right.

8
General Discussion / Re: if self.isCoder(): post() #Programming Thread
« on: September 10, 2013, 12:04:04 pm »
In C++,

Code: [Select]
    typedef std::pair<int,int> Point;
    typedef std::map<Point,Cell> CellGrid;
    int px, py;
    for (int x=0; x < width; x++) {
        px = (x + xOff);
        for (int y=0; y < height; y++) {
            py = (y + yOff);
            other->set_cell(px, py, cellGrid[Point(x,y)]);
        }
    }


Is Point(x,y) guaranteed to be executed before cellGrid[]?

9
General Discussion / Re: if self.isCoder(): post() #Programming Thread
« on: August 30, 2013, 05:01:29 pm »
In Python, the referenced value of an int is changed when you increment it.  When you have a line like ' x = 5; y = x ', what it means to the interpreter is, 'Make a new int object named x and assign it this literal value, then make a new object named y with a reference to the same value as x.'

The line ' x += 1 ' means 'Change the reference of x to a value equal to the current referenced value plus one.'

Code: [Select]
>>> a = int(255)
>>> b = 255
>>> a += 1
>>> a is b
False
>>> b += 1
>>> a is b
True

>>> # int(a) is int(b) only if (a == b <= 256).
>>> a += 1; b += 1
>>> a is b
False
>>> n = 57
>>> id(57), id(n)
(5393408, 5393408)  # same object
>>> n = 257
>>> id(257), id(n)
(38467464, 38467476)  # different objects

In the CLASS example, by assigning a.five you're changing a value referenced by both a and b.  b is not its own CLASS instance, it's a reference to the same instance that was created with 'a = CLASS()'.  b.five is a.five because b is a.

Code: [Select]
>>> a = SomeClass()
>>> a.text = "I am referenced by a."
>>> b = a
>>> b.text += " I am also referenced by b."
>>> a.text
'I am referenced by a. I am also referenced by b.'

11
I'm back to DF after a long hiatus, and was checking if Flora and Fauna was updated (as I've been playing with it for a long while), seeing it was not, I searched a bit and stumbled onto this post. You might want to edit the original Flora and Fauna post so it points here, it will make it easier to find.

I will be looking into this mod asap. Thanks SethCreiyd!

P.S. OMG I'm in the acknowledgements! (misspelled my username btw)

Sorry about the typo.  There'll be a good number of changes to F&F for the next version - it sounds like a few plants will be made redundant, all the trees may need to be redone, things like dusk horses need to be replaced with new creature presets - but it's all kind of unclear for now, at least until the new version of DF is released.  I'll get around to putting a link here once I eventually redo the mod OPs.

is there a packaged version with a tileset available ?

Not that I am aware of.

12
Other Games / Re: Cataclysm: Dark Days Ahead
« on: August 02, 2013, 11:38:25 pm »
I just made my first couple of posts over there regarding my recent build experiences, which transited very quickly from joyous triumph to crushing confusion.

Anyway, I've been following Cataclysm for some time, but I want to remark about how impressive the game is.  I haven't enjoyed a roguelike this much since Nethack.  I'm grateful to Whales for creating it and to everyone who has maintained and contributed to it after he left the project.  I don't have any experience working with a team of coders, and I'm not a very experienced coder in the first place, but I'm getting acquainted with Github and I'd like to help out however I can.  :)

13
Forum Games and Roleplaying / Re: Replace all vowels with o
« on: July 23, 2013, 07:40:28 pm »
Thos os ovon moro fon whon yoo rood thoso oot lood.

14
Forum Games and Roleplaying / Re: Replace all vowels with o
« on: July 23, 2013, 06:17:32 pm »
Postong to wotch.  Thos os o groot odoo.

15
Play With Your Buddies / Re: Marooned in Morrowind, a suggestion game
« on: July 15, 2013, 11:46:29 am »
- Agreed that we should specifically address him as "Caius Cosades."  That we've heard of him and that we would be friends of the Emperor.
I don't imagine Michael thinks ill of Uriel Septim or that he would abandon an opportunity to assist him.

- Do not even think about lying to Caius or screwing around with him.
Aside from simple ethics, he'll know if we're lying.  By telling the truth we establish a basis of trust.
Remember that Caius is Grand Spymaster.  80 Intelligence, 70 Personality. He's likely a good judge of character.

- Tell Caius that Dagoth Ur is building a second Numidium deep within Red Mountain, bound to the Heart of Lorkhan.
The Blades once quested for the fragments of the first Numidium.  Caius will understand the danger that Akulakhan presents.

- Discretely make known our awareness of the Nerevarine Prophecy. 
We are well acquainted with this entire situation, we just need to convince the Grand Spymaster that we know what we're talking about.

-Tell him EVERYTHING, but perhaps leave the "we come from another world" thing till later

-No excuses about Vivec or dreams or books

-Yes, don't be too demanding. This is our chance, we musn't ruin it.


Agreed.  Dagoth Ur is a menace to all of Nirn.  Tell Caius everything that could help undermine him. 
Spoiler (click to show/hide)

- Ask Caius if there is anything we can do to assist in working against the Sixth House.
Maybe he can pull some strings and get us out of garrison duty.


Pages: [1] 2 3 ... 69